Skip to content

Commit 3109506

Browse files
authored
fix: detect namespace imports used as default values in destructuring (#1386)
1 parent 542e2ad commit 3109506

File tree

4 files changed

+11
-2
lines changed

4 files changed

+11
-2
lines changed

packages/knip/fixtures/imports-namespace/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import * as NS6_OPAQUE from './namespace6-opaque';
1111
import * as NS7 from './namespace7';
1212
import * as NS8 from './namespace8';
1313
import * as NS9 from './namespace9';
14+
import * as NS10 from './namespace10';
1415
import fn from 'external';
1516

1617
NS.identifier15;
@@ -47,3 +48,7 @@ const func = () => {
4748
const cond = fn() ? NS9 : { identifier43: 43 };
4849
cond.identifier43;
4950
};
51+
52+
const props: { values?: { identifier45: number; identifier46: number } } = {};
53+
const { values = NS10 } = props;
54+
values.identifier45
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export const identifier45 = 45;
2+
export const identifier46 = 46;

packages/knip/src/typescript/ast-helpers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ export const isConsiderReferencedNS = (node: ts.Identifier) =>
243243
ts.isSpreadAssignment(node.parent) ||
244244
ts.isArrayLiteralExpression(node.parent) ||
245245
ts.isExportAssignment(node.parent) ||
246+
(ts.isBindingElement(node.parent) && node.parent.initializer === node) ||
246247
ts.isTypeQueryNode(node.parent.parent);
247248

248249
export const isInOpaqueExpression = (node: ts.Node): boolean =>

packages/knip/test/imports-namespace.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ test('Ignore namespace re-export by entry file', async () => {
1515
assert(issues.exports['namespace5.ts']['NS5.identifier36']);
1616
assert(issues.exports['namespace6.ts']['NS6.identifier38']);
1717
assert(issues.exports['namespace9.ts']['NS9.identifier44']);
18+
assert(!issues.exports['namespace10.ts'], 'NS10');
1819

1920
assert.deepEqual(counters, {
2021
...baseCounters,
2122
unlisted: 1,
2223
exports: 4,
23-
processed: 14,
24-
total: 14,
24+
processed: 15,
25+
total: 15,
2526
});
2627
});

0 commit comments

Comments
 (0)