Skip to content

Commit

Permalink
Fix traces for default export (resolves #860)
Browse files Browse the repository at this point in the history
  • Loading branch information
webpro committed Nov 30, 2024
1 parent 204ce6d commit 90d1f5c
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 2 deletions.
3 changes: 3 additions & 0 deletions packages/knip/fixtures/trace/default.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default function DefaultComponent() {
return '';
}
1 change: 1 addition & 0 deletions packages/knip/fixtures/trace/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { MyPage } from './my-page';
7 changes: 7 additions & 0 deletions packages/knip/fixtures/trace/my-page.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { NamedComponent } from './named';
import DefaultComponent from './default';

export const MyPage = () => {
NamedComponent();
DefaultComponent();
};
3 changes: 3 additions & 0 deletions packages/knip/fixtures/trace/named.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function NamedComponent() {
return '';
}
3 changes: 3 additions & 0 deletions packages/knip/fixtures/trace/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"name": "@fixtures/trace"
}
10 changes: 8 additions & 2 deletions packages/knip/src/util/is-identifier-referenced.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,11 @@ export const getIsIdentifierReferencedHandler = (graph: DependencyGraph, entryPa
) {
isReferenced = true;
if (!isTrace) return { isReferenced, reExportingEntryFile, traceNode };
addNodes(traceNode, id, graph, file.imported.get(identifier));
if (file.importedAs.has(identifier)) {
for (const aliases of file.importedAs.values()) {
for (const alias of aliases.keys()) addNodes(traceNode, alias, graph, aliases.get(alias));
}
} else addNodes(traceNode, id, graph, file.imported.get(identifier));
}

for (const [exportId, aliases] of file.importedAs.entries()) {
Expand All @@ -47,7 +51,9 @@ export const getIsIdentifierReferencedHandler = (graph: DependencyGraph, entryPa
const aliasedRef = [alias, ...rest].join('.');
if (file.refs.has(aliasedRef)) {
isReferenced = true;
if (!isTrace) return { isReferenced, reExportingEntryFile, traceNode };
if (!isTrace) {
return { isReferenced, reExportingEntryFile, traceNode };
}
addNodes(traceNode, aliasedRef, graph, aliases.get(alias));
}
}
Expand Down
23 changes: 23 additions & 0 deletions packages/knip/test/trace.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { test } from 'bun:test';
import assert from 'node:assert/strict';
import { main } from '../src/index.js';
import { resolve } from '../src/util/path.js';
import baseArguments from './helpers/baseArguments.js';
import baseCounters from './helpers/baseCounters.js';

test('Trace', async () => {
const cwd = resolve('fixtures/trace');

const { counters } = await main({
...baseArguments,
cwd,
});

// TODO Should either get traces from main or assert stdout output through cli

assert.deepEqual(counters, {
...baseCounters,
processed: 4,
total: 4,
});
});

0 comments on commit 90d1f5c

Please sign in to comment.