Skip to content

Commit 5f1a0de

Browse files
committed
TypescriptAPIUtils.isClassInstanceOf: return true for same classes used in imported file
1 parent fb4c0ca commit 5f1a0de

File tree

4 files changed

+27
-8
lines changed

4 files changed

+27
-8
lines changed

packages/typescript-api-utils/classes/instanceOf.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,16 @@ export function isClassInstanceOf(classDeclaration: ts.ClassDeclaration, parentC
1111
return true;
1212
}
1313

14-
let parentClassSourceFile: ts.SourceFile = undefined;
15-
function getParentClassSourceFile(): ts.SourceFile
16-
{
17-
return exists(parentClassSourceFile) ? parentClassSourceFile : parentClassSourceFile = lookupSourceFile(parentClass);
14+
const classDeclarationSourceFile = lookupSourceFile(classDeclaration);
15+
const parentClassSourceFile = lookupSourceFile(parentClass);
16+
17+
if (
18+
classDeclarationSourceFile.fileName === parentClassSourceFile.fileName &&
19+
exists(classDeclaration.name) &&
20+
exists(parentClass.name) &&
21+
(<ts.Identifier>classDeclaration.name).text === (<ts.Identifier>parentClass.name).text
22+
) {
23+
return true;
1824
}
1925

2026
const parents = lookupDeepParentClasses(classDeclaration, compilerOptions, moduleResolutionHost);
@@ -36,9 +42,7 @@ export function isClassInstanceOf(classDeclaration: ts.ClassDeclaration, parentC
3642
return false;
3743
}
3844

39-
const parentSourceFile = getParentClassSourceFile();
40-
41-
if (parentSourceFile.fileName !== parent.sourceFile.fileName) {
45+
if (parentClassSourceFile.fileName !== parent.sourceFile.fileName) {
4246
return false;
4347
}
4448

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export class A {}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import {A} from './valid_6.classA';
2+
3+
4+
_(A);

packages/typescript-api-utils/tests/tests/classes/instanceOf.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {findNode, isClassInstanceOf as _isClassInstanceOf, fsModuleResolutionHost} from '../../../';
1+
import {findNode, isClassInstanceOf as _isClassInstanceOf, fsModuleResolutionHost, resolveIdentifier} from '../../../';
22
import {expect} from 'chai';
33
import * as ts from 'typescript';
44
import * as path from 'path';
@@ -68,6 +68,16 @@ describe('#classes/instanceOf', () => {
6868
expect(isClassInstanceOf(classA, classA)).to.be.equal(true);
6969
});
7070

71+
it('should return true when test class is same as testing class used from imported file', () => {
72+
const sourceFile = getSourceFile('valid_6');
73+
const sourceFileA = getSourceFile('valid_6.classA');
74+
const nodeA = findNode<ts.Identifier>(ts.SyntaxKind.Identifier, 'A', sourceFile);
75+
const classA = findNode<ts.ClassDeclaration>(ts.SyntaxKind.ClassDeclaration, 'A', sourceFileA);
76+
const resolvedNodeA = resolveIdentifier<ts.ClassDeclaration>(nodeA, {}, fsModuleResolutionHost());
77+
78+
expect(isClassInstanceOf(resolvedNodeA.node, classA)).to.be.equal(true);
79+
});
80+
7181
});
7282

7383
});

0 commit comments

Comments
 (0)