Skip to content

Commit 38e9cd4

Browse files
committed
fix(host): Filter before adding to fileNames
1 parent e84d9fc commit 38e9cd4

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

__tests__/host.spec.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ setTypescriptModule(ts);
1515
};
1616

1717
const defaultConfig = { fileNames: [], errors: [], options: {} };
18+
const defaultFilter = () => true;
1819

1920
const unaryFunc = "const unary = (x: string): string => x.reverse()";
2021
const unaryFuncSnap = { text: unaryFunc };
2122

23+
const binaryFunc = "const binary = (a: number, b: number): number => a - b";
24+
const binaryFuncSnap = { text: binaryFunc };
25+
2226
// host.ts uses `/` normalized path, as does TS itself (https://github.com/microsoft/TypeScript/blob/7f022c58fb8b7253f23c49f0d9eee6fde82b477b/src/compiler/path.ts#L4)
2327
const local = (x: string) => normalize(path.resolve(__dirname, x));
2428
const testDir = local("__temp/host");
@@ -37,14 +41,18 @@ test("LanguageServiceHost", async () => {
3741
const testOpts = { test: "this is a test" };
3842
const config = { ...defaultConfig, options: testOpts };
3943
const transformers = [() => ({})];
40-
const host = new LanguageServiceHost(config, transformers, testDir);
44+
const host = new LanguageServiceHost(config, transformers, testDir, defaultFilter);
4145

4246
// test core snapshot functionality
4347
expect(host.getScriptSnapshot(testFile)).toEqual(unaryFuncSnap);
4448
expect(host.getScriptVersion(testFile)).toEqual("1");
4549

46-
expect(host.setSnapshot(testFile, unaryFunc)).toEqual(unaryFuncSnap); // version 2
50+
expect(host.setSnapshot(testFile, unaryFunc)).toEqual(unaryFuncSnap); // unchanged
4751
expect(host.getScriptSnapshot(testFile)).toEqual(unaryFuncSnap); // get from dict
52+
expect(host.getScriptVersion(testFile)).toEqual("1");
53+
54+
expect(host.setSnapshot(testFile, binaryFunc)).toEqual(binaryFuncSnap); // version 2
55+
expect(host.getScriptSnapshot(testFile)).toEqual(binaryFuncSnap);
4856
expect(host.getScriptVersion(testFile)).toEqual("2");
4957

5058
expect(host.getScriptSnapshot(nonExistent)).toBeFalsy();
@@ -89,7 +97,7 @@ test("LanguageServiceHost - getCustomTransformers", () => {
8997
after: () => "testAfter",
9098
afterDeclarations: () => "testAfterDeclarations",
9199
})];
92-
const host = new LanguageServiceHost(config, transformers as any, testDir);
100+
const host = new LanguageServiceHost(config, transformers as any, testDir, defaultFilter);
93101

94102
host.setLanguageService(true as any);
95103
const customTransformers = host.getCustomTransformers();
@@ -107,13 +115,13 @@ test("LanguageServiceHost - getCustomTransformers -- undefined cases", () => {
107115
const config = { ...defaultConfig };
108116

109117
// no LS and no transformers cases
110-
let host = new LanguageServiceHost(config, undefined as any, testDir);
118+
let host = new LanguageServiceHost(config, undefined as any, testDir, defaultFilter);
111119
expect(host.getCustomTransformers()).toBeFalsy(); // no LS
112120
host.setLanguageService(true as any);
113121
expect(host.getCustomTransformers()).toBeFalsy(); // no transformers
114122

115123
// empty transformers case
116-
host = new LanguageServiceHost(config, [], testDir);
124+
host = new LanguageServiceHost(config, [], testDir, defaultFilter);
117125
host.setLanguageService(true as any);
118126
expect(host.getCustomTransformers()).toBeFalsy(); // empty transformers
119127
});

src/host.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export class LanguageServiceHost implements tsTypes.LanguageServiceHost
1111
private service?: tsTypes.LanguageService;
1212
private fileNames: Set<string>;
1313

14-
constructor(private parsedConfig: tsTypes.ParsedCommandLine, private transformers: TransformerFactoryCreator[], private cwd: string)
14+
constructor(private parsedConfig: tsTypes.ParsedCommandLine, private transformers: TransformerFactoryCreator[], private cwd: string, private filter: (id: string | unknown) => boolean)
1515
{
1616
this.fileNames = new Set(parsedConfig.fileNames);
1717
}
@@ -40,6 +40,9 @@ export class LanguageServiceHost implements tsTypes.LanguageServiceHost
4040
this.snapshots[fileName] = snapshot;
4141
this.versions[fileName] = (this.versions[fileName] || 0) + 1;
4242

43+
if (this.filter(fileName))
44+
this.fileNames.add(fileName);
45+
4346
return snapshot;
4447
}
4548

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ const typescript: PluginImpl<RPT2Options> = (options) =>
174174

175175
filter = createFilter(context, pluginOptions, parsedConfig);
176176

177-
servicesHost = new LanguageServiceHost(parsedConfig, pluginOptions.transformers, pluginOptions.cwd);
177+
servicesHost = new LanguageServiceHost(parsedConfig, pluginOptions.transformers, pluginOptions.cwd, filter);
178178
service = tsModule.createLanguageService(servicesHost, documentRegistry);
179179
servicesHost.setLanguageService(service);
180180

0 commit comments

Comments
 (0)