Skip to content

Commit 6ce065e

Browse files
committedMar 24, 2024
Fix pos for computed props in class members (closes #360)
1 parent be1eb08 commit 6ce065e

File tree

5 files changed

+45
-7
lines changed

5 files changed

+45
-7
lines changed
 

‎packages/knip/fixtures/class-members/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { MyClass } from './members';
2+
import { AbstractClassGen, ExtendedClassGen } from './iterator-generator';
3+
import { AbstractClass, ExtendedClass } from './iterator';
24

35
const instance = new MyClass();
46

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
export abstract class AbstractClassGen {
2+
protected constructor() {}
3+
4+
public abstract implemented(): AbstractClassGen;
5+
6+
public abstract unimplemented(): AbstractClassGen;
7+
8+
public abstract [Symbol.iterator](): Iterator<AbstractClassGen>;
9+
}
10+
11+
export class ExtendedClassGen extends AbstractClassGen {
12+
public constructor() {
13+
super();
14+
}
15+
16+
public implemented(): AbstractClassGen {
17+
return this;
18+
}
19+
20+
public *[Symbol.iterator](): Iterator<AbstractClassGen> {
21+
yield this;
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
export abstract class AbstractClass {
2+
public abstract implemented(): AbstractClass;
3+
public abstract [Symbol.toStringTag](): AbstractClass;
4+
}
5+
6+
export class ExtendedClass extends AbstractClass {
7+
public implemented(): AbstractClass {
8+
return this;
9+
}
10+
}

‎packages/knip/src/typescript/visitors/exports/exportKeyword.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ export default visit(
9797
.map(member => ({
9898
node: member,
9999
identifier: member.name.getText(),
100-
pos: member.name.getStart(),
100+
// Naive, but [does.the.job()]
101+
pos: member.name.getStart() + (ts.isComputedPropertyName(member.name) ? 1 : 0),
101102
type: SymbolType.MEMBER,
102103
fix: undefined,
103104
}))

‎packages/knip/test/class-members.test.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ test('Find unused class members', async () => {
1414
});
1515

1616
assert.equal(Object.keys(issues.classMembers['members.ts']).length, 6);
17+
assert(issues.classMembers['iterator-generator.ts']['unimplemented']);
1718
assert(issues.classMembers['members.ts']['bUnusedPublic']);
1819
assert(issues.classMembers['members.ts']['cUnusedProp']);
1920
assert(issues.classMembers['members.ts']['dUnusedMember']);
@@ -23,9 +24,9 @@ test('Find unused class members', async () => {
2324

2425
assert.deepEqual(counters, {
2526
...baseCounters,
26-
classMembers: 6,
27-
processed: 2,
28-
total: 2,
27+
classMembers: 7,
28+
processed: 4,
29+
total: 4,
2930
});
3031
});
3132

@@ -37,6 +38,7 @@ test('Find unused class members (isIncludeEntryExports)', async () => {
3738
});
3839

3940
assert.equal(Object.keys(issues.classMembers['members.ts']).length, 6);
41+
assert(issues.classMembers['iterator-generator.ts']['unimplemented']);
4042
assert(issues.classMembers['index.ts']['unusedMemberInEntry']);
4143
assert(issues.classMembers['members.ts']['bUnusedPublic']);
4244
assert(issues.classMembers['members.ts']['cUnusedProp']);
@@ -47,8 +49,8 @@ test('Find unused class members (isIncludeEntryExports)', async () => {
4749

4850
assert.deepEqual(counters, {
4951
...baseCounters,
50-
classMembers: 7,
51-
processed: 2,
52-
total: 2,
52+
classMembers: 8,
53+
processed: 4,
54+
total: 4,
5355
});
5456
});

0 commit comments

Comments
 (0)
Please sign in to comment.