Skip to content

Commit

Permalink
Fix pos for computed props in class members (closes #360)
Browse files Browse the repository at this point in the history
  • Loading branch information
webpro committed Mar 24, 2024
1 parent be1eb08 commit 6ce065e
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 7 deletions.
2 changes: 2 additions & 0 deletions packages/knip/fixtures/class-members/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { MyClass } from './members';
import { AbstractClassGen, ExtendedClassGen } from './iterator-generator';
import { AbstractClass, ExtendedClass } from './iterator';

const instance = new MyClass();

Expand Down
23 changes: 23 additions & 0 deletions packages/knip/fixtures/class-members/iterator-generator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
export abstract class AbstractClassGen {
protected constructor() {}

public abstract implemented(): AbstractClassGen;

public abstract unimplemented(): AbstractClassGen;

public abstract [Symbol.iterator](): Iterator<AbstractClassGen>;
}

export class ExtendedClassGen extends AbstractClassGen {
public constructor() {
super();
}

public implemented(): AbstractClassGen {
return this;
}

public *[Symbol.iterator](): Iterator<AbstractClassGen> {
yield this;
}
}
10 changes: 10 additions & 0 deletions packages/knip/fixtures/class-members/iterator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export abstract class AbstractClass {
public abstract implemented(): AbstractClass;
public abstract [Symbol.toStringTag](): AbstractClass;
}

export class ExtendedClass extends AbstractClass {
public implemented(): AbstractClass {
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ export default visit(
.map(member => ({
node: member,
identifier: member.name.getText(),
pos: member.name.getStart(),
// Naive, but [does.the.job()]
pos: member.name.getStart() + (ts.isComputedPropertyName(member.name) ? 1 : 0),
type: SymbolType.MEMBER,
fix: undefined,
}))
Expand Down
14 changes: 8 additions & 6 deletions packages/knip/test/class-members.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ test('Find unused class members', async () => {
});

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

assert.deepEqual(counters, {
...baseCounters,
classMembers: 6,
processed: 2,
total: 2,
classMembers: 7,
processed: 4,
total: 4,
});
});

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

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

assert.deepEqual(counters, {
...baseCounters,
classMembers: 7,
processed: 2,
total: 2,
classMembers: 8,
processed: 4,
total: 4,
});
});

0 comments on commit 6ce065e

Please sign in to comment.