Skip to content

Commit 3af4435

Browse files
committed
Get tests working
1 parent 131a170 commit 3af4435

File tree

6 files changed

+33
-15
lines changed

6 files changed

+33
-15
lines changed

src/compiler/parser.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,17 +1325,18 @@ export function createSourceFile(fileName: string, sourceText: string, languageV
13251325
const {
13261326
languageVersion,
13271327
setExternalModuleIndicator: overrideSetExternalModuleIndicator,
1328-
impliedNodeFormat: format
1328+
impliedNodeFormat: format,
1329+
skipJSDoc,
13291330
} = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions : ({ languageVersion: languageVersionOrOptions } as CreateSourceFileOptions);
13301331
if (languageVersion === ScriptTarget.JSON) {
1331-
result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, ScriptKind.JSON, noop);
1332+
result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, ScriptKind.JSON, noop, skipJSDoc);
13321333
}
13331334
else {
13341335
const setIndicator = format === undefined ? overrideSetExternalModuleIndicator : (file: SourceFile) => {
13351336
file.impliedNodeFormat = format;
13361337
return (overrideSetExternalModuleIndicator || setExternalModuleIndicator)(file);
13371338
};
1338-
result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, setIndicator);
1339+
result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, setIndicator, skipJSDoc);
13391340
}
13401341
perfLogger.logStopParseSourceFile();
13411342

@@ -1698,7 +1699,7 @@ namespace Parser {
16981699
scanner.setOnError(scanError);
16991700
scanner.setScriptTarget(languageVersion);
17001701
scanner.setLanguageVariant(languageVariant);
1701-
scanner.setSkipJSDoc(_skipJSDoc && !!(contextFlags & NodeFlags.JavaScriptFile));
1702+
scanner.setSkipJSDoc(_skipJSDoc && !(contextFlags & NodeFlags.JavaScriptFile));
17021703
}
17031704

17041705
function clearState() {

src/harness/fakesHosts.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ export class CompilerHost implements ts.CompilerHost {
238238
private _sourceFiles: collections.SortedMap<string, ts.SourceFile>;
239239
private _parseConfigHost: ParseConfigHost | undefined;
240240
private _newLine: string;
241+
// private _skipJSDocParsing: boolean | undefined;
241242

242243
constructor(sys: System | vfs.FileSystem, options = ts.getDefaultCompilerOptions(), setParentNodes = false) {
243244
if (sys instanceof vfs.FileSystem) sys = new System(sys);
@@ -247,6 +248,7 @@ export class CompilerHost implements ts.CompilerHost {
247248
this._sourceFiles = new collections.SortedMap<string, ts.SourceFile>({ comparer: sys.vfs.stringComparer, sort: "insertion" });
248249
this._setParentNodes = setParentNodes;
249250
this._outputsMap = new collections.SortedMap(this.vfs.stringComparer);
251+
// this._skipJSDocParsing = options.skipJSDocParsing;
250252
}
251253

252254
public get vfs() {
@@ -335,7 +337,7 @@ export class CompilerHost implements ts.CompilerHost {
335337
return vpath.resolve(this.getDefaultLibLocation(), ts.getDefaultLibFileName(options));
336338
}
337339

338-
public getSourceFile(fileName: string, languageVersion: number): ts.SourceFile | undefined {
340+
public getSourceFile(fileName: string, languageVersionOrOptions: ts.ScriptTarget | ts.CreateSourceFileOptions): ts.SourceFile | undefined {
339341
const canonicalFileName = this.getCanonicalFileName(vpath.resolve(this.getCurrentDirectory(), fileName));
340342
const existing = this._sourceFiles.get(canonicalFileName);
341343
if (existing) return existing;
@@ -349,7 +351,7 @@ export class CompilerHost implements ts.CompilerHost {
349351
// reused across multiple tests. In that case, we cache the SourceFile we parse
350352
// so that it can be reused across multiple tests to avoid the cost of
351353
// repeatedly parsing the same file over and over (such as lib.d.ts).
352-
const cacheKey = this.vfs.shadowRoot && `SourceFile[languageVersion=${languageVersion},setParentNodes=${this._setParentNodes}]`;
354+
const cacheKey = this.vfs.shadowRoot && `SourceFile[languageVersionOrOptions=${languageVersionOrOptions !== undefined ? JSON.stringify(languageVersionOrOptions) : undefined},setParentNodes=${this._setParentNodes}]`;
353355
if (cacheKey) {
354356
const meta = this.vfs.filemeta(canonicalFileName);
355357
const sourceFileFromMetadata = meta.get(cacheKey) as ts.SourceFile | undefined;
@@ -359,7 +361,7 @@ export class CompilerHost implements ts.CompilerHost {
359361
}
360362
}
361363

362-
const parsed = ts.createSourceFile(fileName, content, languageVersion, this._setParentNodes || this.shouldAssertInvariants);
364+
const parsed = ts.createSourceFile(fileName, content, languageVersionOrOptions, this._setParentNodes || this.shouldAssertInvariants);
363365
if (this.shouldAssertInvariants) {
364366
Utils.assertInvariants(parsed, /*parent*/ undefined);
365367
}

src/harness/fourslashImpl.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -331,10 +331,10 @@ export class TestState {
331331
// Check if no-default-lib flag is false and if so add default library
332332
if (!resolvedResult.isLibFile) {
333333
this.languageServiceAdapterHost.addScript(Harness.Compiler.defaultLibFileName,
334-
Harness.Compiler.getDefaultLibrarySourceFile()!.text, /*isRootFile*/ false);
334+
Harness.Compiler.getDefaultLibrarySourceFile(compilationOptions)!.text, /*isRootFile*/ false);
335335

336336
compilationOptions.lib?.forEach(fileName => {
337-
const libFile = Harness.Compiler.getDefaultLibrarySourceFile(fileName);
337+
const libFile = Harness.Compiler.getDefaultLibrarySourceFile(compilationOptions, fileName);
338338
ts.Debug.assertIsDefined(libFile, `Could not find lib file '${fileName}'`);
339339
if (libFile) {
340340
this.languageServiceAdapterHost.addScript(fileName, libFile.text, /*isRootFile*/ false);
@@ -359,7 +359,7 @@ export class TestState {
359359
const addSourceFile = (fileName: string) => {
360360
if (seen.has(fileName)) return;
361361
seen.add(fileName);
362-
const libFile = Harness.Compiler.getDefaultLibrarySourceFile(fileName);
362+
const libFile = Harness.Compiler.getDefaultLibrarySourceFile(compilationOptions, fileName);
363363
ts.Debug.assertIsDefined(libFile, `Could not find lib file '${fileName}'`);
364364
this.languageServiceAdapterHost.addScript(fileName, libFile.text, /*isRootFile*/ false);
365365
if (!ts.some(libFile.libReferenceDirectives)) return;

src/harness/harnessIO.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ export namespace Compiler {
243243
export function createSourceFileAndAssertInvariants(
244244
fileName: string,
245245
sourceText: string,
246-
languageVersion: ts.ScriptTarget) {
246+
languageVersion: ts.CreateSourceFileOptions) {
247247
// We'll only assert invariants outside of light mode.
248248
const shouldAssertInvariants = !lightMode;
249249

@@ -263,20 +263,20 @@ export namespace Compiler {
263263
// Cache of lib files from "built/local"
264264
let libFileNameSourceFileMap: Map<string, ts.SourceFile> | undefined;
265265

266-
export function getDefaultLibrarySourceFile(fileName = defaultLibFileName): ts.SourceFile | undefined {
266+
export function getDefaultLibrarySourceFile(compilerOptions: ts.CompilerOptions, fileName = defaultLibFileName): ts.SourceFile | undefined {
267267
if (!isDefaultLibraryFile(fileName)) {
268268
return undefined;
269269
}
270270

271271
if (!libFileNameSourceFileMap) {
272272
libFileNameSourceFileMap = new Map(Object.entries({
273-
[defaultLibFileName]: createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + "lib.es5.d.ts")!, /*languageVersion*/ ts.ScriptTarget.Latest)
273+
[defaultLibFileName]: createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + "lib.es5.d.ts")!, { languageVersion: ts.ScriptTarget.Latest, skipJSDoc: compilerOptions.skipJSDocParsing })
274274
}));
275275
}
276276

277277
let sourceFile = libFileNameSourceFileMap.get(fileName);
278278
if (!sourceFile) {
279-
libFileNameSourceFileMap.set(fileName, sourceFile = createSourceFileAndAssertInvariants(fileName, IO.readFile(libFolder + fileName)!, ts.ScriptTarget.Latest));
279+
libFileNameSourceFileMap.set(fileName, sourceFile = createSourceFileAndAssertInvariants(fileName, IO.readFile(libFolder + fileName)!, { languageVersion: ts.ScriptTarget.Latest, skipJSDoc: compilerOptions.skipJSDocParsing }));
280280
}
281281
return sourceFile;
282282
}

src/services/documentRegistry.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,8 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole
266266
{
267267
languageVersion: scriptTarget,
268268
impliedNodeFormat: host && getImpliedNodeFormatForFile(path, host.getCompilerHost?.()?.getModuleResolutionCache?.()?.getPackageJsonInfoCache(), host, compilationSettings),
269-
setExternalModuleIndicator: getSetExternalModuleIndicator(compilationSettings)
269+
setExternalModuleIndicator: getSetExternalModuleIndicator(compilationSettings),
270+
skipJSDoc: compilationSettings.skipJSDocParsing,
270271
};
271272
sourceFileOptions.languageVersion = scriptTarget;
272273
const oldBucketCount = buckets.size;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// Although services should never actually have this option set, the harness
4+
// allows us to pass it, enabling tests which can verify that certain info
5+
// is not present in the tree.
6+
7+
// @skipJSDocParsing: true
8+
9+
/////** @deprecated */
10+
////function imDeprecated() {}
11+
////[|imDeprecated|]()
12+
13+
const [range] = test.ranges();
14+
verify.getSuggestionDiagnostics([]);

0 commit comments

Comments
 (0)