From 442b4678fe7340481728e0515e25b31dfa587531 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:00:11 -0700 Subject: [PATCH 01/25] Make JSDoc skipping more configurable --- src/compiler/parser.ts | 48 ++-- src/compiler/program.ts | 9 +- src/compiler/scanner.ts | 31 ++- src/compiler/types.ts | 8 +- src/compiler/watch.ts | 2 +- src/compiler/watchPublic.ts | 16 +- src/executeCommandLine/executeCommandLine.ts | 13 +- src/testRunner/tests.ts | 2 +- src/testRunner/unittests/jsDocParsingKind.ts | 75 +++++ .../unittests/skipNonSemanticJSDocParsing.ts | 60 ---- tests/baselines/reference/api/typescript.d.ts | 13 +- .../deprecated-KeepAll-file.js.diff | 3 + .../deprecated-KeepAll-file.ts.diff | 3 + .../deprecated-KeepSemanticOnly-file.js.diff | 13 + .../deprecated-KeepSemanticOnly-file.ts.diff} | 8 +- .../deprecated-SkipAll-file.js.diff | 124 +++++++++ .../deprecated-SkipAll-file.ts.diff | 123 +++++++++ .../link-KeepAll-file.js.diff | 3 + .../link-KeepAll-file.ts.diff | 3 + .../link-KeepSemanticOnly-file.js.diff | 13 + .../link-KeepSemanticOnly-file.ts.diff} | 8 +- .../link-SkipAll-file.js.diff | 68 +++++ .../link-SkipAll-file.ts.diff | 67 +++++ .../jsDocParsingKind/see-KeepAll-file.js.diff | 3 + .../jsDocParsingKind/see-KeepAll-file.ts.diff | 3 + .../see-KeepSemanticOnly-file.js.diff | 13 + .../see-KeepSemanticOnly-file.ts.diff} | 8 +- .../jsDocParsingKind/see-SkipAll-file.js.diff | 260 ++++++++++++++++++ .../jsDocParsingKind/see-SkipAll-file.ts.diff | 259 +++++++++++++++++ 29 files changed, 1132 insertions(+), 127 deletions(-) create mode 100644 src/testRunner/unittests/jsDocParsingKind.ts delete mode 100644 src/testRunner/unittests/skipNonSemanticJSDocParsing.ts create mode 100644 tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.js.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.ts.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.js.diff rename tests/baselines/reference/{skipNonSemanticJSDocParsing/deprecated.diff => jsDocParsingKind/deprecated-KeepSemanticOnly-file.ts.diff} (94%) create mode 100644 tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.js.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.ts.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.js.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.ts.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.js.diff rename tests/baselines/reference/{skipNonSemanticJSDocParsing/link.diff => jsDocParsingKind/link-KeepSemanticOnly-file.ts.diff} (65%) create mode 100644 tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.js.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.ts.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.js.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.ts.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.js.diff rename tests/baselines/reference/{skipNonSemanticJSDocParsing/see.diff => jsDocParsingKind/see-KeepSemanticOnly-file.ts.diff} (65%) create mode 100644 tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.js.diff create mode 100644 tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.ts.diff diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 43f542270d9d8..0bf2e90c762b3 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -187,6 +187,7 @@ import { JSDocOverloadTag, JSDocOverrideTag, JSDocParameterTag, + JSDocParsingKind, JSDocPrivateTag, JSDocPropertyLikeTag, JSDocPropertyTag, @@ -1324,10 +1325,14 @@ function setExternalModuleIndicator(sourceFile: SourceFile) { sourceFile.externalModuleIndicator = isFileProbablyExternalModule(sourceFile); } -export function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes?: boolean, scriptKind?: ScriptKind): SourceFile; -/** @internal */ -export function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes?: boolean, scriptKind?: ScriptKind, skipNonSemanticJSDoc?: boolean): SourceFile; -export function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes = false, scriptKind?: ScriptKind, skipNonSemanticJSDoc?: boolean): SourceFile { +export function createSourceFile( + fileName: string, + sourceText: string, + languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, + setParentNodes = false, + scriptKind?: ScriptKind, + jsDocParsingKind?: JSDocParsingKind, +): SourceFile { tracing?.push(tracing.Phase.Parse, "createSourceFile", { path: fileName }, /*separateBeginAndEnd*/ true); performance.mark("beforeParse"); let result: SourceFile; @@ -1339,14 +1344,14 @@ export function createSourceFile(fileName: string, sourceText: string, languageV impliedNodeFormat: format, } = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions : ({ languageVersion: languageVersionOrOptions } as CreateSourceFileOptions); if (languageVersion === ScriptTarget.JSON) { - result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, ScriptKind.JSON, noop, skipNonSemanticJSDoc); + result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, ScriptKind.JSON, noop, jsDocParsingKind); } else { const setIndicator = format === undefined ? overrideSetExternalModuleIndicator : (file: SourceFile) => { file.impliedNodeFormat = format; return (overrideSetExternalModuleIndicator || setExternalModuleIndicator)(file); }; - result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, setIndicator, skipNonSemanticJSDoc); + result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, setIndicator, jsDocParsingKind); } perfLogger?.logStopParseSourceFile(); @@ -1586,7 +1591,7 @@ namespace Parser { setParentNodes = false, scriptKind?: ScriptKind, setExternalModuleIndicatorOverride?: (file: SourceFile) => void, - skipNonSemanticJSDoc?: boolean, + jsDocParsingKind = JSDocParsingKind.KeepAll, ): SourceFile { scriptKind = ensureScriptKind(fileName, scriptKind); if (scriptKind === ScriptKind.JSON) { @@ -1601,10 +1606,9 @@ namespace Parser { return result; } - skipNonSemanticJSDoc = !!skipNonSemanticJSDoc && scriptKind !== ScriptKind.JS && scriptKind !== ScriptKind.JSX; - initializeState(fileName, sourceText, languageVersion, syntaxCursor, scriptKind, skipNonSemanticJSDoc); + initializeState(fileName, sourceText, languageVersion, syntaxCursor, scriptKind, jsDocParsingKind); - const result = parseSourceFileWorker(languageVersion, setParentNodes, scriptKind, setExternalModuleIndicatorOverride || setExternalModuleIndicator, skipNonSemanticJSDoc); + const result = parseSourceFileWorker(languageVersion, setParentNodes, scriptKind, setExternalModuleIndicatorOverride || setExternalModuleIndicator, jsDocParsingKind); clearState(); @@ -1613,7 +1617,7 @@ namespace Parser { export function parseIsolatedEntityName(content: string, languageVersion: ScriptTarget): EntityName | undefined { // Choice of `isDeclarationFile` should be arbitrary - initializeState("", content, languageVersion, /*syntaxCursor*/ undefined, ScriptKind.JS, /*skipNonSemanticJSDoc*/ false); + initializeState("", content, languageVersion, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingKind.KeepAll); // Prime the scanner. nextToken(); const entityName = parseEntityName(/*allowReservedWords*/ true); @@ -1623,7 +1627,7 @@ namespace Parser { } export function parseJsonText(fileName: string, sourceText: string, languageVersion: ScriptTarget = ScriptTarget.ES2015, syntaxCursor?: IncrementalParser.SyntaxCursor, setParentNodes = false): JsonSourceFile { - initializeState(fileName, sourceText, languageVersion, syntaxCursor, ScriptKind.JSON, /*skipNonSemanticJSDoc*/ false); + initializeState(fileName, sourceText, languageVersion, syntaxCursor, ScriptKind.JSON, JSDocParsingKind.KeepAll); sourceFlags = contextFlags; // Prime the scanner. @@ -1711,7 +1715,7 @@ namespace Parser { return result; } - function initializeState(_fileName: string, _sourceText: string, _languageVersion: ScriptTarget, _syntaxCursor: IncrementalParser.SyntaxCursor | undefined, _scriptKind: ScriptKind, _skipNonSemanticJSDoc: boolean) { + function initializeState(_fileName: string, _sourceText: string, _languageVersion: ScriptTarget, _syntaxCursor: IncrementalParser.SyntaxCursor | undefined, _scriptKind: ScriptKind, _jsDocParsingKind: JSDocParsingKind) { NodeConstructor = objectAllocator.getNodeConstructor(); TokenConstructor = objectAllocator.getTokenConstructor(); IdentifierConstructor = objectAllocator.getIdentifierConstructor(); @@ -1752,7 +1756,8 @@ namespace Parser { scanner.setOnError(scanError); scanner.setScriptTarget(languageVersion); scanner.setLanguageVariant(languageVariant); - scanner.setSkipNonSemanticJSDoc(_skipNonSemanticJSDoc); + scanner.setScriptKind(scriptKind); + scanner.setJSDocParsingKind(_jsDocParsingKind); } function clearState() { @@ -1760,7 +1765,8 @@ namespace Parser { scanner.clearCommentDirectives(); scanner.setText(""); scanner.setOnError(undefined); - scanner.setSkipNonSemanticJSDoc(false); + scanner.setScriptKind(ScriptKind.Unknown); + scanner.setJSDocParsingKind(JSDocParsingKind.KeepAll); // Clear any data. We don't want to accidentally hold onto it for too long. sourceText = undefined!; @@ -1777,7 +1783,7 @@ namespace Parser { topLevel = true; } - function parseSourceFileWorker(languageVersion: ScriptTarget, setParentNodes: boolean, scriptKind: ScriptKind, setExternalModuleIndicator: (file: SourceFile) => void, skipNonSemanticJSDoc: boolean): SourceFile { + function parseSourceFileWorker(languageVersion: ScriptTarget, setParentNodes: boolean, scriptKind: ScriptKind, setExternalModuleIndicator: (file: SourceFile) => void, jsDocParsingKind: JSDocParsingKind): SourceFile { const isDeclarationFile = isDeclarationFileName(fileName); if (isDeclarationFile) { contextFlags |= NodeFlags.Ambient; @@ -1804,7 +1810,7 @@ namespace Parser { sourceFile.identifierCount = identifierCount; sourceFile.identifiers = identifiers; sourceFile.parseDiagnostics = attachFileToDiagnostics(parseDiagnostics, sourceFile); - sourceFile.skipNonSemanticJSDoc = skipNonSemanticJSDoc; + sourceFile.jsDocParsingKind = jsDocParsingKind; if (jsDocDiagnostics) { sourceFile.jsDocDiagnostics = attachFileToDiagnostics(jsDocDiagnostics, sourceFile); } @@ -8686,7 +8692,7 @@ namespace Parser { export namespace JSDocParser { export function parseJSDocTypeExpressionForTests(content: string, start: number | undefined, length: number | undefined): { jsDocTypeExpression: JSDocTypeExpression; diagnostics: Diagnostic[]; } | undefined { - initializeState("file.js", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, /*skipNonSemanticJSDoc*/ false); + initializeState("file.js", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingKind.KeepAll); scanner.setText(content, start, length); currentToken = scanner.scan(); const jsDocTypeExpression = parseJSDocTypeExpression(); @@ -8736,7 +8742,7 @@ namespace Parser { } export function parseIsolatedJSDocComment(content: string, start: number | undefined, length: number | undefined): { jsDoc: JSDoc; diagnostics: Diagnostic[]; } | undefined { - initializeState("", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, /*skipNonSemanticJSDoc*/ false); + initializeState("", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingKind.KeepAll); const jsDoc = doInsideOfContext(NodeFlags.JSDoc, () => parseJSDocCommentWorker(start, length)); const sourceFile = { languageVariant: LanguageVariant.Standard, text: content } as SourceFile; @@ -9804,7 +9810,7 @@ namespace IncrementalParser { if (sourceFile.statements.length === 0) { // If we don't have any statements in the current source file, then there's no real // way to incrementally parse. So just do a full parse instead. - return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, /*syntaxCursor*/ undefined, /*setParentNodes*/ true, sourceFile.scriptKind, sourceFile.setExternalModuleIndicator, sourceFile.skipNonSemanticJSDoc); + return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, /*syntaxCursor*/ undefined, /*setParentNodes*/ true, sourceFile.scriptKind, sourceFile.setExternalModuleIndicator, sourceFile.jsDocParsingKind); } // Make sure we're not trying to incrementally update a source file more than once. Once @@ -9867,7 +9873,7 @@ namespace IncrementalParser { // inconsistent tree. Setting the parents on the new tree should be very fast. We // will immediately bail out of walking any subtrees when we can see that their parents // are already correct. - const result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, /*setParentNodes*/ true, sourceFile.scriptKind, sourceFile.setExternalModuleIndicator, sourceFile.skipNonSemanticJSDoc); + const result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, /*setParentNodes*/ true, sourceFile.scriptKind, sourceFile.setExternalModuleIndicator, sourceFile.jsDocParsingKind); result.commentDirectives = getNewCommentDirectives( sourceFile.commentDirectives, result.commentDirectives, diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 113c956179188..3a066aa701bcd 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -209,6 +209,7 @@ import { isStringLiteral, isStringLiteralLike, isTraceEnabled, + JSDocParsingKind, JsonSourceFile, JsxEmit, length, @@ -402,7 +403,7 @@ export function createGetSourceFile( readFile: ProgramHost["readFile"], getCompilerOptions: () => CompilerOptions, setParentNodes: boolean | undefined, - skipNonSemanticJSDocParsing: boolean | undefined, + jsDocParsingKind: JSDocParsingKind | undefined, ): CompilerHost["getSourceFile"] { return (fileName, languageVersionOrOptions, onError) => { let text: string | undefined; @@ -418,7 +419,7 @@ export function createGetSourceFile( } text = ""; } - return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, skipNonSemanticJSDocParsing) : undefined; + return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, jsDocParsingKind) : undefined; }; } @@ -459,7 +460,7 @@ export function createWriteFileMeasuringIO( export function createCompilerHostWorker( options: CompilerOptions, setParentNodes?: boolean, - skipNonSemanticJSDocParsing?: boolean, + jsDocParsingKind?: JSDocParsingKind, system: System = sys, ): CompilerHost { const existingDirectories = new Map(); @@ -482,7 +483,7 @@ export function createCompilerHostWorker( const newLine = getNewLineCharacter(options); const realpath = system.realpath && ((path: string) => system.realpath!(path)); const compilerHost: CompilerHost = { - getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, skipNonSemanticJSDocParsing), + getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, jsDocParsingKind), getDefaultLibLocation, getDefaultLibFileName: options => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options)), writeFile: createWriteFileMeasuringIO( diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index e5cd8e6e5a5a2..1427d74276b29 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -12,6 +12,7 @@ import { DiagnosticMessage, Diagnostics, identity, + JSDocParsingKind, JSDocSyntaxKind, JsxTokenSyntaxKind, KeywordSyntaxKind, @@ -21,6 +22,7 @@ import { parsePseudoBigInt, positionIsSynthesized, PunctuationOrKeywordSyntaxKind, + ScriptKind, ScriptTarget, SourceFileLike, SyntaxKind, @@ -95,6 +97,8 @@ export interface Scanner { setOnError(onError: ErrorCallback | undefined): void; setScriptTarget(scriptTarget: ScriptTarget): void; setLanguageVariant(variant: LanguageVariant): void; + setScriptKind(scriptKind: ScriptKind): void; + setJSDocParsingKind(kind: JSDocParsingKind): void; /** @deprecated use {@link resetTokenState} */ setTextPos(textPos: number): void; resetTokenState(pos: number): void; @@ -114,8 +118,6 @@ export interface Scanner { // callback returns something truthy, then the scanner state is not rolled back. The result // of invoking the callback is returned from this function. tryScan(callback: () => T): T; - /** @internal */ - setSkipNonSemanticJSDoc(skip: boolean): void; } /** @internal */ @@ -1008,7 +1010,8 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean var commentDirectives: CommentDirective[] | undefined; var inJSDocType = 0; - var skipNonSemanticJSDoc = false; + var scriptKind = ScriptKind.Unknown; + var jsDocParsingKind = JSDocParsingKind.KeepAll; setText(text, start, length); @@ -1054,6 +1057,8 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean setText, setScriptTarget, setLanguageVariant, + setScriptKind, + setJSDocParsingKind, setOnError, resetTokenState, setTextPos: resetTokenState, @@ -1061,7 +1066,6 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean tryScan, lookAhead, scanRange, - setSkipNonSemanticJSDoc, }; /* eslint-enable no-var */ @@ -2002,8 +2006,15 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean } } - if (isJSDoc && (!skipNonSemanticJSDoc || semanticJSDocTagRegEx.test(text.slice(fullStartPos, pos)))) { - tokenFlags |= TokenFlags.PrecedingJSDocComment; + if (isJSDoc) { + const shouldParseJSDoc = jsDocParsingKind === JSDocParsingKind.SkipAll ? false + : jsDocParsingKind === JSDocParsingKind.KeepSemanticOnly ? + scriptKind === ScriptKind.TS || scriptKind === ScriptKind.TSX ? semanticJSDocTagRegEx.test(text.slice(fullStartPos, pos)) + : true + : true; + if (shouldParseJSDoc) { + tokenFlags |= TokenFlags.PrecedingJSDocComment; + } } commentDirectives = appendIfCommentDirective(commentDirectives, text.slice(lastLineStart, pos), commentDirectiveRegExMultiLine, lastLineStart); @@ -2787,8 +2798,12 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean languageVariant = variant; } - function setSkipNonSemanticJSDoc(skip: boolean) { - skipNonSemanticJSDoc = skip; + function setScriptKind(kind: ScriptKind) { + scriptKind = kind; + } + + function setJSDocParsingKind(kind: JSDocParsingKind) { + jsDocParsingKind = kind; } function resetTokenState(position: number) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 56b0009e53a9f..af78d0ab65b03 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -4298,7 +4298,7 @@ export interface SourceFile extends Declaration, LocalsContainer { /** @internal */ exportedModulesFromDeclarationEmit?: ExportedModulesFromDeclarationEmit; /** @internal */ endFlowNode?: FlowNode; - /** @internal */ skipNonSemanticJSDoc?: boolean; + /** @internal */ jsDocParsingKind?: JSDocParsingKind; } /** @internal */ @@ -9850,6 +9850,12 @@ export const commentPragmas = { }, } as const; +export const enum JSDocParsingKind { + KeepAll = 0, + KeepSemanticOnly = 1, + SkipAll = 2, +} + /** @internal */ export type PragmaArgTypeMaybeCapture = TDesc extends { captureSpan: true; } ? { value: string; pos: number; end: number; } : string; diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index 9d7991a2984fb..934dd0d30fe06 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -746,7 +746,7 @@ export function createCompilerHostFromProgramHost(host: ProgramHost, getCom (fileName, encoding) => !encoding ? compilerHost.readFile(fileName) : host.readFile(fileName, encoding), getCompilerOptions, /*setParentNodes*/ undefined, - host.skipNonSemanticJSDocParsing, + host.jsDocParsingKind, ), getDefaultLibLocation: maybeBind(host, host.getDefaultLibLocation), getDefaultLibFileName: options => host.getDefaultLibFileName(options), diff --git a/src/compiler/watchPublic.ts b/src/compiler/watchPublic.ts index 6f432177ac8d5..dd0289699b3ad 100644 --- a/src/compiler/watchPublic.ts +++ b/src/compiler/watchPublic.ts @@ -53,6 +53,7 @@ import { isArray, isIgnoredFileFromWildCardWatching, isProgramUptoDate, + JSDocParsingKind, MapLike, maybeBind, ModuleResolutionCache, @@ -118,11 +119,8 @@ export function readBuilderProgram(compilerOptions: CompilerOptions, host: ReadB return createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host); } -export function createIncrementalCompilerHost(options: CompilerOptions, system?: System): CompilerHost; -/** @internal */ -export function createIncrementalCompilerHost(options: CompilerOptions, system?: System, skipNonSemanticJSDocParsing?: boolean): CompilerHost; -export function createIncrementalCompilerHost(options: CompilerOptions, system = sys, skipNonSemanticJSDocParsing?: boolean): CompilerHost { - const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, skipNonSemanticJSDocParsing, system); +export function createIncrementalCompilerHost(options: CompilerOptions, system = sys, jsDocParsingKind?: JSDocParsingKind): CompilerHost { + const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, jsDocParsingKind, system); host.createHash = maybeBind(system, system.createHash); host.storeFilesChangingSignatureDuringEmit = system.storeFilesChangingSignatureDuringEmit; setGetSourceFileAsHashVersioned(host); @@ -258,12 +256,8 @@ export interface ProgramHost { */ getModuleResolutionCache?(): ModuleResolutionCache | undefined; - /** - * True if it's safe for the parser to skip parsing non-semantic JSDoc tags. - * - * @internal - */ - skipNonSemanticJSDocParsing?: boolean; + /** Kind of JSDoc parsing to use. */ + jsDocParsingKind?: JSDocParsingKind; } /** * Internal interface used to wire emit through same host diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 99aa3b345ba45..e2e01daae6888 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -57,6 +57,7 @@ import { getNormalizedAbsolutePath, isIncrementalCompilation, isWatchSet, + JSDocParsingKind, normalizePath, optionDeclarations, optionsForBuild, @@ -790,7 +791,7 @@ function reportWatchModeWithoutSysSupport(sys: System, reportDiagnostic: Diagnos } // This could be inlined everywhere, but this is convenient for debugging and patching. -const skipNonSemanticJSDocParsing = true; +const jsDocParsingKind = JSDocParsingKind.KeepSemanticOnly; function performBuild( sys: System, @@ -842,7 +843,7 @@ function performBuild( createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createWatchStatusReporter(sys, buildOptions), ); - buildHost.skipNonSemanticJSDocParsing = skipNonSemanticJSDocParsing; + buildHost.jsDocParsingKind = jsDocParsingKind; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const onWatchStatusChange = buildHost.onWatchStatusChange; @@ -872,7 +873,7 @@ function performBuild( createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createReportErrorSummary(sys, buildOptions), ); - buildHost.skipNonSemanticJSDocParsing = skipNonSemanticJSDocParsing; + buildHost.jsDocParsingKind = jsDocParsingKind; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const builder = createSolutionBuilder(buildHost, projects, buildOptions); @@ -895,7 +896,7 @@ function performCompilation( config: ParsedCommandLine, ) { const { fileNames, options, projectReferences } = config; - const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, skipNonSemanticJSDocParsing, sys); + const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, jsDocParsingKind, sys); const currentDirectory = host.getCurrentDirectory(); const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); changeCompilerHostLikeToUseCache(host, fileName => toPath(fileName, currentDirectory, getCanonicalFileName)); @@ -928,7 +929,7 @@ function performIncrementalCompilation( ) { const { options, fileNames, projectReferences } = config; enableStatisticsAndTracing(sys, options, /*isBuildMode*/ false); - const host = createIncrementalCompilerHost(options, sys, skipNonSemanticJSDocParsing); + const host = createIncrementalCompilerHost(options, sys, jsDocParsingKind); const exitStatus = ts_performIncrementalCompilation({ host, system: sys, @@ -980,7 +981,7 @@ function updateWatchCompilationHost( cb: ExecuteCommandLineCallbacks, watchCompilerHost: WatchCompilerHost, ) { - watchCompilerHost.skipNonSemanticJSDocParsing = skipNonSemanticJSDocParsing; + watchCompilerHost.jsDocParsingKind = jsDocParsingKind; updateCreateProgram(sys, watchCompilerHost, /*isBuildMode*/ false); const emitFilesUsingBuilder = watchCompilerHost.afterProgramCreate!; // TODO: GH#18217 watchCompilerHost.afterProgramCreate = builderProgram => { diff --git a/src/testRunner/tests.ts b/src/testRunner/tests.ts index 0d646f714d750..b374bd0fb47ab 100644 --- a/src/testRunner/tests.ts +++ b/src/testRunner/tests.ts @@ -211,4 +211,4 @@ import "./unittests/tsserver/watchEnvironment"; import "./unittests/debugDeprecation"; import "./unittests/tsserver/inconsistentErrorInEditor"; import "./unittests/tsserver/getMoveToRefactoringFileSuggestions"; -import "./unittests/skipNonSemanticJSDocParsing"; +import "./unittests/jsDocParsingKind"; diff --git a/src/testRunner/unittests/jsDocParsingKind.ts b/src/testRunner/unittests/jsDocParsingKind.ts new file mode 100644 index 0000000000000..d9d951299ad58 --- /dev/null +++ b/src/testRunner/unittests/jsDocParsingKind.ts @@ -0,0 +1,75 @@ +import * as Harness from "../_namespaces/Harness"; +import * as ts from "../_namespaces/ts"; +import * as Utils from "../_namespaces/Utils"; + +describe("unittests:: jsDocParsingKind", () => { + const Diff = require("diff"); + + const kinds = [ + ts.JSDocParsingKind.KeepAll, + ts.JSDocParsingKind.KeepSemanticOnly, + ts.JSDocParsingKind.SkipAll, + ]; + const filenames = [ + "file.ts", + "file.js", + ]; + function diffSourceFiles(name: string, content: string) { + for (const jsDocParsingKind of kinds) { + const kindName = ts.Debug.formatEnum(jsDocParsingKind, (ts as any).JSDocParsingKind); + for (const filename of filenames) { + const testName = `${name}-${kindName}-${filename}`; + it(testName, () => { + const sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); + assert.isTrue(sourceFile && sourceFile.parseDiagnostics.length === 0, "no errors issued"); + const sourceFileSkipped = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, jsDocParsingKind); + assert.isTrue(sourceFileSkipped && sourceFileSkipped.parseDiagnostics.length === 0, "no errors issued"); + + const patch = Diff.createTwoFilesPatch("default", kindName, Utils.sourceFileToJSON(sourceFile), Utils.sourceFileToJSON(sourceFileSkipped)); + Harness.Baseline.runBaseline("jsDocParsingKind/" + testName + ".diff", patch); + }); + } + } + } + + diffSourceFiles( + "deprecated", + ` +/** @deprecated */ +function imDeprecated() {} +imDeprecated() +/** + * {@see imDeprecated} + * @deprecated + */ +function imDeprecated2() {} +imDeprecated2() + `, + ); + + diffSourceFiles( + "see", + ` +/** + * @typedef {any} A + */ + +/** + * @see {@link A} + * @see {@linkcode A} + * @see {@linkplain A} + */ +let foo; + `, + ); + + diffSourceFiles( + "link", + ` +import type { A } from "./a"; + +/** {@link A} */ +export interface B {} + `, + ); +}); diff --git a/src/testRunner/unittests/skipNonSemanticJSDocParsing.ts b/src/testRunner/unittests/skipNonSemanticJSDocParsing.ts deleted file mode 100644 index 94948e36e5855..0000000000000 --- a/src/testRunner/unittests/skipNonSemanticJSDocParsing.ts +++ /dev/null @@ -1,60 +0,0 @@ -import * as Harness from "../_namespaces/Harness"; -import * as ts from "../_namespaces/ts"; -import * as Utils from "../_namespaces/Utils"; - -describe("unittests:: skipNonSemanticJSDocParsing", () => { - const Diff = require("diff"); - - function diffSourceFiles(name: string, content: string) { - it(name, () => { - const sourceFile = ts.createSourceFile("file.ts", content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); - assert.isTrue(sourceFile && sourceFile.parseDiagnostics.length === 0, "no errors issued"); - const sourceFileSkipped = ts.createSourceFile("file.ts", content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, /*skipNonSemanticJSDoc*/ true); - assert.isTrue(sourceFileSkipped && sourceFileSkipped.parseDiagnostics.length === 0, "no errors issued"); - - const patch = Diff.createTwoFilesPatch("withJSDoc", "withoutJSDoc", Utils.sourceFileToJSON(sourceFile), Utils.sourceFileToJSON(sourceFileSkipped), "With JSDoc", "Without JSDoc"); - Harness.Baseline.runBaseline("skipNonSemanticJSDocParsing/" + name + ".diff", patch); - }); - } - - diffSourceFiles( - "deprecated", - ` -/** @deprecated */ -function imDeprecated() {} -imDeprecated() -/** - * {@see imDeprecated} - * @deprecated - */ -function imDeprecated2() {} -imDeprecated2() - `, - ); - - diffSourceFiles( - "see", - ` -/** - * @typedef {any} A - */ - -/** - * @see {@link A} - * @see {@linkcode A} - * @see {@linkplain A} - */ -let foo; - `, - ); - - diffSourceFiles( - "link", - ` -import type { A } from "./a"; - -/** {@link A} */ -export interface B {} - `, - ); -}); diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index bd20795fc6894..7bf0a17a59c08 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -8607,6 +8607,11 @@ declare namespace ts { IndexSignatureParameters = 8848, JSDocComment = 33, } + enum JSDocParsingKind { + KeepAll = 0, + KeepSemanticOnly = 1, + SkipAll = 2, + } interface UserPreferences { readonly disableSuggestions?: boolean; readonly quotePreference?: "auto" | "double" | "single"; @@ -8768,6 +8773,8 @@ declare namespace ts { setOnError(onError: ErrorCallback | undefined): void; setScriptTarget(scriptTarget: ScriptTarget): void; setLanguageVariant(variant: LanguageVariant): void; + setScriptKind(scriptKind: ScriptKind): void; + setJSDocParsingKind(kind: JSDocParsingKind): void; /** @deprecated use {@link resetTokenState} */ setTextPos(textPos: number): void; resetTokenState(pos: number): void; @@ -9413,7 +9420,7 @@ declare namespace ts { * that they appear in the source code. The language service depends on this property to locate nodes by position. */ function forEachChild(node: Node, cbNode: (node: Node) => T | undefined, cbNodes?: (nodes: NodeArray) => T | undefined): T | undefined; - function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes?: boolean, scriptKind?: ScriptKind): SourceFile; + function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes?: boolean, scriptKind?: ScriptKind, jsDocParsingKind?: JSDocParsingKind): SourceFile; function parseIsolatedEntityName(text: string, languageVersion: ScriptTarget): EntityName | undefined; /** * Parse json text into SyntaxTree and return node and parse errors if any @@ -9930,7 +9937,7 @@ declare namespace ts { emitNextAffectedFile(writeFile?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: CustomTransformers): AffectedFileResult; } function readBuilderProgram(compilerOptions: CompilerOptions, host: ReadBuildProgramHost): EmitAndSemanticDiagnosticsBuilderProgram | undefined; - function createIncrementalCompilerHost(options: CompilerOptions, system?: System): CompilerHost; + function createIncrementalCompilerHost(options: CompilerOptions, system?: System, jsDocParsingKind?: JSDocParsingKind): CompilerHost; function createIncrementalProgram({ rootNames, options, configFileParsingDiagnostics, projectReferences, host, createProgram }: IncrementalProgramOptions): T; /** * Create the watch compiler host for either configFile or fileNames and its options @@ -10027,6 +10034,8 @@ declare namespace ts { * Returns the module resolution cache used by a provided `resolveModuleNames` implementation so that any non-name module resolution operations (eg, package.json lookup) can reuse it */ getModuleResolutionCache?(): ModuleResolutionCache | undefined; + /** Kind of JSDoc parsing to use. */ + jsDocParsingKind?: JSDocParsingKind; } interface WatchCompilerHost extends ProgramHost, WatchHost { /** Instead of using output d.ts file from project reference, use its source file */ diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.js.diff b/tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.js.diff new file mode 100644 index 0000000000000..0303d9ba366af --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.js.diff @@ -0,0 +1,3 @@ +=================================================================== +--- default ++++ KeepAll diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.ts.diff b/tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.ts.diff new file mode 100644 index 0000000000000..0303d9ba366af --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.ts.diff @@ -0,0 +1,3 @@ +=================================================================== +--- default ++++ KeepAll diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.js.diff new file mode 100644 index 0000000000000..ba8cf6efde1e5 --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.js.diff @@ -0,0 +1,13 @@ +=================================================================== +--- default ++++ KeepSemanticOnly +@@ -237,7 +237,7 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0, ++ "jsDocParsingKind": 1, + "jsDocDiagnostics": [] + } +\ No newline at end of file diff --git a/tests/baselines/reference/skipNonSemanticJSDocParsing/deprecated.diff b/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.ts.diff similarity index 94% rename from tests/baselines/reference/skipNonSemanticJSDocParsing/deprecated.diff rename to tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.ts.diff index 12a169292e64b..07fceac9c1565 100644 --- a/tests/baselines/reference/skipNonSemanticJSDocParsing/deprecated.diff +++ b/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.ts.diff @@ -1,6 +1,6 @@ =================================================================== ---- withJSDoc With JSDoc -+++ withoutJSDoc Without JSDoc +--- default ++++ KeepSemanticOnly @@ -8,9 +8,8 @@ "0": { "kind": "FunctionDeclaration", @@ -61,7 +61,7 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "skipNonSemanticJSDoc": false -+ "skipNonSemanticJSDoc": true +- "jsDocParsingKind": 0 ++ "jsDocParsingKind": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.js.diff b/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.js.diff new file mode 100644 index 0000000000000..0d70e7056ca96 --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.js.diff @@ -0,0 +1,124 @@ +=================================================================== +--- default ++++ SkipAll +@@ -8,9 +8,8 @@ + "0": { + "kind": "FunctionDeclaration", + "pos": 0, + "end": 46, +- "flags": "Deprecated", + "modifierFlagsCache": 0, + "transformFlags": 4194304, + "name": { + "kind": "Identifier", +@@ -40,43 +39,9 @@ + "hasTrailingComma": false, + "transformFlags": 0 + }, + "multiLine": false +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 1, +- "end": 19, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocDeprecatedTag", +- "pos": 5, +- "end": 17, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 6, +- "end": 16, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "deprecated" +- } +- }, +- "length": 1, +- "pos": 5, +- "end": 17, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "1": { + "kind": "ExpressionStatement", + "pos": 46, +@@ -109,9 +74,8 @@ + "2": { + "kind": "FunctionDeclaration", + "pos": 61, + "end": 135, +- "flags": "Deprecated", + "modifierFlagsCache": 0, + "transformFlags": 4194304, + "name": { + "kind": "Identifier", +@@ -141,44 +105,9 @@ + "hasTrailingComma": false, + "transformFlags": 0 + }, + "multiLine": false +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 62, +- "end": 107, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "comment": "{@see imDeprecated}", +- "tags": { +- "0": { +- "kind": "JSDocDeprecatedTag", +- "pos": 92, +- "end": 105, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 93, +- "end": 103, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "deprecated" +- } +- }, +- "length": 1, +- "pos": 92, +- "end": 105, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "3": { + "kind": "ExpressionStatement", + "pos": 135, +@@ -237,7 +166,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0, +- "jsDocDiagnostics": [] ++ "jsDocParsingKind": 2 + } +\ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.ts.diff b/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.ts.diff new file mode 100644 index 0000000000000..7fecad7dac630 --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.ts.diff @@ -0,0 +1,123 @@ +=================================================================== +--- default ++++ SkipAll +@@ -8,9 +8,8 @@ + "0": { + "kind": "FunctionDeclaration", + "pos": 0, + "end": 46, +- "flags": "Deprecated", + "modifierFlagsCache": 0, + "transformFlags": 4194304, + "name": { + "kind": "Identifier", +@@ -40,43 +39,9 @@ + "hasTrailingComma": false, + "transformFlags": 0 + }, + "multiLine": false +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 1, +- "end": 19, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocDeprecatedTag", +- "pos": 5, +- "end": 17, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 6, +- "end": 16, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "deprecated" +- } +- }, +- "length": 1, +- "pos": 5, +- "end": 17, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "1": { + "kind": "ExpressionStatement", + "pos": 46, +@@ -109,9 +74,8 @@ + "2": { + "kind": "FunctionDeclaration", + "pos": 61, + "end": 135, +- "flags": "Deprecated", + "modifierFlagsCache": 0, + "transformFlags": 4194304, + "name": { + "kind": "Identifier", +@@ -141,44 +105,9 @@ + "hasTrailingComma": false, + "transformFlags": 0 + }, + "multiLine": false +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 62, +- "end": 107, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "comment": "{@see imDeprecated}", +- "tags": { +- "0": { +- "kind": "JSDocDeprecatedTag", +- "pos": 92, +- "end": 105, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 93, +- "end": 103, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "deprecated" +- } +- }, +- "length": 1, +- "pos": 92, +- "end": 105, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "3": { + "kind": "ExpressionStatement", + "pos": 135, +@@ -237,6 +166,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0 ++ "jsDocParsingKind": 2 + } +\ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.js.diff b/tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.js.diff new file mode 100644 index 0000000000000..0303d9ba366af --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.js.diff @@ -0,0 +1,3 @@ +=================================================================== +--- default ++++ KeepAll diff --git a/tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.ts.diff b/tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.ts.diff new file mode 100644 index 0000000000000..0303d9ba366af --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.ts.diff @@ -0,0 +1,3 @@ +=================================================================== +--- default ++++ KeepAll diff --git a/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.js.diff new file mode 100644 index 0000000000000..83573fa6aff52 --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.js.diff @@ -0,0 +1,13 @@ +=================================================================== +--- default ++++ KeepSemanticOnly +@@ -220,7 +220,7 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0, ++ "jsDocParsingKind": 1, + "jsDocDiagnostics": [] + } +\ No newline at end of file diff --git a/tests/baselines/reference/skipNonSemanticJSDocParsing/link.diff b/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.ts.diff similarity index 65% rename from tests/baselines/reference/skipNonSemanticJSDocParsing/link.diff rename to tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.ts.diff index e7b3e2a532791..b5f6efd1c27e7 100644 --- a/tests/baselines/reference/skipNonSemanticJSDocParsing/link.diff +++ b/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.ts.diff @@ -1,12 +1,12 @@ =================================================================== ---- withJSDoc With JSDoc -+++ withoutJSDoc Without JSDoc +--- default ++++ KeepSemanticOnly @@ -220,6 +220,6 @@ "typeReferenceDirectives": [], "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "skipNonSemanticJSDoc": false -+ "skipNonSemanticJSDoc": true +- "jsDocParsingKind": 0 ++ "jsDocParsingKind": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.js.diff b/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.js.diff new file mode 100644 index 0000000000000..201ad49edb497 --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.js.diff @@ -0,0 +1,68 @@ +=================================================================== +--- default ++++ SkipAll +@@ -91,53 +91,9 @@ + "pos": 69, + "end": 69, + "hasTrailingComma": false, + "transformFlags": 0 +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 32, +- "end": 48, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 32, +- "end": 36, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLink", +- "pos": 36, +- "end": 45, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 43, +- "end": 44, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 32, +- "end": 46, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "length": 2, + "pos": 0, + "end": 70, +@@ -220,7 +176,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0, +- "jsDocDiagnostics": [] ++ "jsDocParsingKind": 2 + } +\ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.ts.diff b/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.ts.diff new file mode 100644 index 0000000000000..5e837612c688c --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.ts.diff @@ -0,0 +1,67 @@ +=================================================================== +--- default ++++ SkipAll +@@ -91,53 +91,9 @@ + "pos": 69, + "end": 69, + "hasTrailingComma": false, + "transformFlags": 0 +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 32, +- "end": 48, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 32, +- "end": 36, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLink", +- "pos": 36, +- "end": 45, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 43, +- "end": 44, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 32, +- "end": 46, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "length": 2, + "pos": 0, + "end": 70, +@@ -220,6 +176,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0 ++ "jsDocParsingKind": 2 + } +\ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.js.diff b/tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.js.diff new file mode 100644 index 0000000000000..0303d9ba366af --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.js.diff @@ -0,0 +1,3 @@ +=================================================================== +--- default ++++ KeepAll diff --git a/tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.ts.diff b/tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.ts.diff new file mode 100644 index 0000000000000..0303d9ba366af --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.ts.diff @@ -0,0 +1,3 @@ +=================================================================== +--- default ++++ KeepAll diff --git a/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.js.diff new file mode 100644 index 0000000000000..d01ccf0d76cf2 --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.js.diff @@ -0,0 +1,13 @@ +=================================================================== +--- default ++++ KeepSemanticOnly +@@ -307,7 +307,7 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0, ++ "jsDocParsingKind": 1, + "jsDocDiagnostics": [] + } +\ No newline at end of file diff --git a/tests/baselines/reference/skipNonSemanticJSDocParsing/see.diff b/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.ts.diff similarity index 65% rename from tests/baselines/reference/skipNonSemanticJSDocParsing/see.diff rename to tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.ts.diff index cbad93fc6bd33..f072a530ddf63 100644 --- a/tests/baselines/reference/skipNonSemanticJSDocParsing/see.diff +++ b/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.ts.diff @@ -1,12 +1,12 @@ =================================================================== ---- withJSDoc With JSDoc -+++ withoutJSDoc Without JSDoc +--- default ++++ KeepSemanticOnly @@ -307,6 +307,6 @@ "typeReferenceDirectives": [], "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "skipNonSemanticJSDoc": false -+ "skipNonSemanticJSDoc": true +- "jsDocParsingKind": 0 ++ "jsDocParsingKind": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.js.diff b/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.js.diff new file mode 100644 index 0000000000000..02dc673dd19a7 --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.js.diff @@ -0,0 +1,260 @@ +=================================================================== +--- default ++++ SkipAll +@@ -39,245 +39,9 @@ + "end": 108, + "hasTrailingComma": false, + "transformFlags": 0 + } +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 1, +- "end": 28, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocTypedefTag", +- "pos": 8, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 9, +- "end": 16, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "typedef" +- }, +- "typeExpression": { +- "kind": "JSDocTypeExpression", +- "pos": 17, +- "end": 22, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "type": { +- "kind": "AnyKeyword", +- "pos": 18, +- "end": 21, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 1 +- } +- }, +- "fullName": { +- "kind": "Identifier", +- "pos": 23, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "name": { +- "kind": "Identifier", +- "pos": 23, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- } +- }, +- "length": 1, +- "pos": 8, +- "end": 24, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- { +- "kind": "JSDoc", +- "pos": 30, +- "end": 100, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocSeeTag", +- "pos": 37, +- "end": 55, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 38, +- "end": 41, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 42, +- "end": 42, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLink", +- "pos": 42, +- "end": 51, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 49, +- "end": 50, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 42, +- "end": 55, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "1": { +- "kind": "JSDocSeeTag", +- "pos": 55, +- "end": 77, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 56, +- "end": 59, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 60, +- "end": 60, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLinkCode", +- "pos": 60, +- "end": 73, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 71, +- "end": 72, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 60, +- "end": 77, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "2": { +- "kind": "JSDocSeeTag", +- "pos": 77, +- "end": 98, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 78, +- "end": 81, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 82, +- "end": 82, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLinkPlain", +- "pos": 82, +- "end": 96, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 94, +- "end": 95, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 82, +- "end": 98, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "length": 3, +- "pos": 37, +- "end": 98, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "length": 1, + "pos": 0, + "end": 109, +@@ -307,7 +71,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0, +- "jsDocDiagnostics": [] ++ "jsDocParsingKind": 2 + } +\ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.ts.diff b/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.ts.diff new file mode 100644 index 0000000000000..9d41ded0c3fab --- /dev/null +++ b/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.ts.diff @@ -0,0 +1,259 @@ +=================================================================== +--- default ++++ SkipAll +@@ -39,245 +39,9 @@ + "end": 108, + "hasTrailingComma": false, + "transformFlags": 0 + } +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 1, +- "end": 28, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocTypedefTag", +- "pos": 8, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 9, +- "end": 16, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "typedef" +- }, +- "typeExpression": { +- "kind": "JSDocTypeExpression", +- "pos": 17, +- "end": 22, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "type": { +- "kind": "AnyKeyword", +- "pos": 18, +- "end": 21, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 1 +- } +- }, +- "fullName": { +- "kind": "Identifier", +- "pos": 23, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "name": { +- "kind": "Identifier", +- "pos": 23, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- } +- }, +- "length": 1, +- "pos": 8, +- "end": 24, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- { +- "kind": "JSDoc", +- "pos": 30, +- "end": 100, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocSeeTag", +- "pos": 37, +- "end": 55, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 38, +- "end": 41, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 42, +- "end": 42, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLink", +- "pos": 42, +- "end": 51, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 49, +- "end": 50, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 42, +- "end": 55, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "1": { +- "kind": "JSDocSeeTag", +- "pos": 55, +- "end": 77, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 56, +- "end": 59, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 60, +- "end": 60, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLinkCode", +- "pos": 60, +- "end": 73, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 71, +- "end": 72, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 60, +- "end": 77, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "2": { +- "kind": "JSDocSeeTag", +- "pos": 77, +- "end": 98, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 78, +- "end": 81, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 82, +- "end": 82, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLinkPlain", +- "pos": 82, +- "end": 96, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 94, +- "end": 95, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 82, +- "end": 98, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "length": 3, +- "pos": 37, +- "end": 98, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "length": 1, + "pos": 0, + "end": 109, +@@ -307,6 +71,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingKind": 0 ++ "jsDocParsingKind": 2 + } +\ No newline at end of file From 9119d2f7e57fa1a54af26d408d1f0ceb83e7e4b2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:33:52 -0700 Subject: [PATCH 02/25] I guess it's a big binary expression now --- src/compiler/scanner.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 1427d74276b29..f6527c387f65f 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -2008,9 +2008,7 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean if (isJSDoc) { const shouldParseJSDoc = jsDocParsingKind === JSDocParsingKind.SkipAll ? false - : jsDocParsingKind === JSDocParsingKind.KeepSemanticOnly ? - scriptKind === ScriptKind.TS || scriptKind === ScriptKind.TSX ? semanticJSDocTagRegEx.test(text.slice(fullStartPos, pos)) - : true + : jsDocParsingKind === JSDocParsingKind.KeepSemanticOnly ? (scriptKind !== ScriptKind.TS && scriptKind !== ScriptKind.TSX) || semanticJSDocTagRegEx.test(text.slice(fullStartPos, pos)) : true; if (shouldParseJSDoc) { tokenFlags |= TokenFlags.PrecedingJSDocComment; From ba9dcabb8efbca16c56993c5f08c3da0533f07c3 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 13 Sep 2023 20:45:36 -0700 Subject: [PATCH 03/25] An attempt at ProjectService plumbing, not sure what should be public here --- src/compiler/program.ts | 6 +++--- src/compiler/watch.ts | 2 +- src/compiler/watchPublic.ts | 2 +- src/executeCommandLine/executeCommandLine.ts | 6 +++--- src/server/editorServices.ts | 10 ++++++++++ src/server/project.ts | 13 ++++++++++++- src/services/services.ts | 17 +++++++++++++---- src/services/types.ts | 3 +++ tests/baselines/reference/api/typescript.d.ts | 7 +++++-- 9 files changed, 51 insertions(+), 15 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 3a066aa701bcd..86687c2a82f4f 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -403,7 +403,7 @@ export function createGetSourceFile( readFile: ProgramHost["readFile"], getCompilerOptions: () => CompilerOptions, setParentNodes: boolean | undefined, - jsDocParsingKind: JSDocParsingKind | undefined, + getJSDocParsingKind: (() => JSDocParsingKind | undefined) | undefined, ): CompilerHost["getSourceFile"] { return (fileName, languageVersionOrOptions, onError) => { let text: string | undefined; @@ -419,7 +419,7 @@ export function createGetSourceFile( } text = ""; } - return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, jsDocParsingKind) : undefined; + return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, getJSDocParsingKind?.()) : undefined; }; } @@ -483,7 +483,7 @@ export function createCompilerHostWorker( const newLine = getNewLineCharacter(options); const realpath = system.realpath && ((path: string) => system.realpath!(path)); const compilerHost: CompilerHost = { - getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, jsDocParsingKind), + getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, () => jsDocParsingKind), getDefaultLibLocation, getDefaultLibFileName: options => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options)), writeFile: createWriteFileMeasuringIO( diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index 934dd0d30fe06..850d14fffe857 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -746,7 +746,7 @@ export function createCompilerHostFromProgramHost(host: ProgramHost, getCom (fileName, encoding) => !encoding ? compilerHost.readFile(fileName) : host.readFile(fileName, encoding), getCompilerOptions, /*setParentNodes*/ undefined, - host.jsDocParsingKind, + host.getJSDocParsingKind, ), getDefaultLibLocation: maybeBind(host, host.getDefaultLibLocation), getDefaultLibFileName: options => host.getDefaultLibFileName(options), diff --git a/src/compiler/watchPublic.ts b/src/compiler/watchPublic.ts index dd0289699b3ad..3501ac034e6b8 100644 --- a/src/compiler/watchPublic.ts +++ b/src/compiler/watchPublic.ts @@ -257,7 +257,7 @@ export interface ProgramHost { getModuleResolutionCache?(): ModuleResolutionCache | undefined; /** Kind of JSDoc parsing to use. */ - jsDocParsingKind?: JSDocParsingKind; + getJSDocParsingKind?(): JSDocParsingKind | undefined; } /** * Internal interface used to wire emit through same host diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index e2e01daae6888..9082ad939b652 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -843,7 +843,7 @@ function performBuild( createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createWatchStatusReporter(sys, buildOptions), ); - buildHost.jsDocParsingKind = jsDocParsingKind; + buildHost.getJSDocParsingKind = () => jsDocParsingKind; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const onWatchStatusChange = buildHost.onWatchStatusChange; @@ -873,7 +873,7 @@ function performBuild( createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createReportErrorSummary(sys, buildOptions), ); - buildHost.jsDocParsingKind = jsDocParsingKind; + buildHost.getJSDocParsingKind = () => jsDocParsingKind; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const builder = createSolutionBuilder(buildHost, projects, buildOptions); @@ -981,7 +981,7 @@ function updateWatchCompilationHost( cb: ExecuteCommandLineCallbacks, watchCompilerHost: WatchCompilerHost, ) { - watchCompilerHost.jsDocParsingKind = jsDocParsingKind; + watchCompilerHost.getJSDocParsingKind = () => jsDocParsingKind; updateCreateProgram(sys, watchCompilerHost, /*isBuildMode*/ false); const emitFilesUsingBuilder = watchCompilerHost.afterProgramCreate!; // TODO: GH#18217 watchCompilerHost.afterProgramCreate = builderProgram => { diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index b9779f3d7006d..456729ba79b82 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -71,6 +71,7 @@ import { isNodeModulesDirectory, isRootedDiskPath, isString, + JSDocParsingKind, LanguageServiceMode, length, map, @@ -591,6 +592,7 @@ export interface ProjectServiceOptions { serverMode?: LanguageServiceMode; session: Session | undefined; /** @internal */ incrementalVerifier?: (service: ProjectService) => void; + jsDocParsingKind?: JSDocParsingKind; } interface OriginalFileInfo { @@ -998,6 +1000,9 @@ export class ProjectService { /** @internal */ verifyDocumentRegistry = noop; + /** @internal */ + private readonly jsDocParsingKind: JSDocParsingKind | undefined; + constructor(opts: ProjectServiceOptions) { this.host = opts.host; this.logger = opts.logger; @@ -1013,6 +1018,7 @@ export class ProjectService { this.allowLocalPluginLoads = !!opts.allowLocalPluginLoads; this.typesMapLocation = (opts.typesMapLocation === undefined) ? combinePaths(getDirectoryPath(this.getExecutingFilePath()), "typesMap.json") : opts.typesMapLocation; this.session = opts.session; + this.jsDocParsingKind = opts.jsDocParsingKind; if (opts.serverMode !== undefined) { this.serverMode = opts.serverMode; @@ -4573,6 +4579,10 @@ export class ProjectService { getIncompleteCompletionsCache() { return this.incompleteCompletionsCache ||= createIncompleteCompletionsCache(); } + + getJSDocParsingKind() { + return this.jsDocParsingKind; + } } function createIncompleteCompletionsCache(): IncompleteCompletionsCache { diff --git a/src/server/project.ts b/src/server/project.ts index 489154dd0b434..9474a7e9f36c3 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -71,6 +71,7 @@ import { isDeclarationFileName, isExternalModuleNameRelative, isInsideNodeModules, + JSDocParsingKind, JsTyping, LanguageService, LanguageServiceHost, @@ -506,6 +507,9 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo /** @internal */ createHash = maybeBind(this.projectService.host, this.projectService.host.createHash); + /** @internal */ + readonly getJSDocParsingKind?: () => JSDocParsingKind | undefined; + /** @internal */ constructor( projectName: string, @@ -524,6 +528,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo this.directoryStructureHost = directoryStructureHost; this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory); this.getCanonicalFileName = this.projectService.toCanonicalFileName; + this.getJSDocParsingKind = maybeBind(this.projectService, this.projectService.getJSDocParsingKind); this.cancellationToken = new ThrottledCancellationToken(this.projectService.cancellationToken, this.projectService.throttleWaitMilliseconds); if (!this.compilerOptions) { @@ -2697,7 +2702,13 @@ export class ConfiguredProject extends Project { private compilerHost?: CompilerHost; /** @internal */ - constructor(configFileName: NormalizedPath, readonly canonicalConfigFilePath: NormalizedPath, projectService: ProjectService, documentRegistry: DocumentRegistry, cachedDirectoryStructureHost: CachedDirectoryStructureHost) { + constructor( + configFileName: NormalizedPath, + readonly canonicalConfigFilePath: NormalizedPath, + projectService: ProjectService, + documentRegistry: DocumentRegistry, + cachedDirectoryStructureHost: CachedDirectoryStructureHost, + ) { super(configFileName, ProjectKind.Configured, projectService, documentRegistry, /*hasExplicitListOfFiles*/ false, /*lastFileExceededProgramSize*/ undefined, /*compilerOptions*/ {}, /*compileOnSaveEnabled*/ false, /*watchOptions*/ undefined, cachedDirectoryStructureHost, getDirectoryPath(configFileName)); } diff --git a/src/services/services.ts b/src/services/services.ts index 7da1e0bff9143..2cd17384b6ef9 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -189,6 +189,7 @@ import { JSDoc, JsDoc, JSDocContainer, + JSDocParsingKind, JSDocTagInfo, JsonSourceFile, JsxAttributes, @@ -1362,7 +1363,7 @@ class SyntaxTreeCache { ), setExternalModuleIndicator: getSetExternalModuleIndicator(this.host.getCompilationSettings()), }; - sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind); + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, this.host.getJSDocParsingKind?.()); } else if (this.currentFileVersion !== version) { // This is the same file, just a newer version. Incrementally parse the file. @@ -1387,8 +1388,16 @@ function setSourceFileFields(sourceFile: SourceFile, scriptSnapshot: IScriptSnap sourceFile.scriptSnapshot = scriptSnapshot; } -export function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, scriptKind?: ScriptKind): SourceFile { - const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind); +export function createLanguageServiceSourceFile( + fileName: string, + scriptSnapshot: IScriptSnapshot, + scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, + version: string, + setNodeParents: boolean, + scriptKind?: ScriptKind, + jsDocParsingKind?: JSDocParsingKind, +): SourceFile { + const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind, jsDocParsingKind); setSourceFileFields(sourceFile, scriptSnapshot, version); return sourceFile; } @@ -1450,7 +1459,7 @@ export function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSn setExternalModuleIndicator: sourceFile.setExternalModuleIndicator, }; // Otherwise, just create a new source file. - return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.scriptKind); + return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.scriptKind, sourceFile.jsDocParsingKind); } const NoopCancellationToken: CancellationToken = { diff --git a/src/services/types.ts b/src/services/types.ts index 18a52a5e6fcc8..ef645a63035f2 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -14,6 +14,7 @@ import { GetEffectiveTypeRootsHost, HasChangedAutomaticTypeDirectiveNames, HasInvalidatedResolutions, + JSDocParsingKind, LineAndCharacter, MinimalResolutionCacheHost, ModuleResolutionCache, @@ -427,6 +428,8 @@ export interface LanguageServiceHost extends GetEffectiveTypeRootsHost, MinimalR getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; /** @internal */ onReleaseParsedCommandLine?(configFileName: string, oldResolvedRef: ResolvedProjectReference | undefined, optionOptions: CompilerOptions): void; /** @internal */ getIncompleteCompletionsCache?(): IncompleteCompletionsCache; + + getJSDocParsingKind?(): JSDocParsingKind | undefined; } /** @internal */ diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 7bf0a17a59c08..f73c5f7243e7c 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3616,6 +3616,7 @@ declare namespace ts { typesMapLocation?: string; serverMode?: LanguageServiceMode; session: Session | undefined; + jsDocParsingKind?: JSDocParsingKind; } interface WatchOptionsAndErrors { watchOptions: WatchOptions; @@ -3853,6 +3854,7 @@ declare namespace ts { private enableRequestedPluginsWorker; private enableRequestedPluginsForProjectAsync; configurePlugin(args: protocol.ConfigurePluginRequestArguments): void; + getJSDocParsingKind(): JSDocParsingKind | undefined; } function formatMessage(msg: T, logger: Logger, byteLength: (s: string, encoding: BufferEncoding) => number, newLine: string): string; interface ServerCancellationToken extends HostCancellationToken { @@ -10035,7 +10037,7 @@ declare namespace ts { */ getModuleResolutionCache?(): ModuleResolutionCache | undefined; /** Kind of JSDoc parsing to use. */ - jsDocParsingKind?: JSDocParsingKind; + getJSDocParsingKind?(): JSDocParsingKind | undefined; } interface WatchCompilerHost extends ProgramHost, WatchHost { /** Instead of using output d.ts file from project reference, use its source file */ @@ -10286,6 +10288,7 @@ declare namespace ts { installPackage?(options: InstallPackageOptions): Promise; writeFile?(fileName: string, content: string): void; getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; + getJSDocParsingKind?(): JSDocParsingKind | undefined; } type WithMetadata = T & { metadata?: unknown; @@ -11491,7 +11494,7 @@ declare namespace ts { function displayPartsToString(displayParts: SymbolDisplayPart[] | undefined): string; function getDefaultCompilerOptions(): CompilerOptions; function getSupportedCodeFixes(): readonly string[]; - function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, scriptKind?: ScriptKind): SourceFile; + function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, scriptKind?: ScriptKind, jsDocParsingKind?: JSDocParsingKind): SourceFile; function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange | undefined, aggressiveChecks?: boolean): SourceFile; function createLanguageService(host: LanguageServiceHost, documentRegistry?: DocumentRegistry, syntaxOnlyOrLanguageServiceMode?: boolean | LanguageServiceMode): LanguageService; /** From 66a0b09c795ec58d84b528d17b0bcd4fb7af106d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 15 Sep 2023 11:42:12 -0700 Subject: [PATCH 04/25] Preemptive bikeshedding --- src/compiler/parser.ts | 36 +++++++++---------- src/compiler/program.ts | 10 +++--- src/compiler/scanner.ts | 16 ++++----- src/compiler/types.ts | 4 +-- src/compiler/watch.ts | 2 +- src/compiler/watchPublic.ts | 8 ++--- src/executeCommandLine/executeCommandLine.ts | 14 ++++---- src/server/editorServices.ts | 12 +++---- src/server/project.ts | 6 ++-- src/services/services.ts | 10 +++--- src/services/types.ts | 4 +-- src/testRunner/tests.ts | 2 +- ...sDocParsingKind.ts => skipJSDocParsing.ts} | 16 ++++----- tests/baselines/reference/api/typescript.d.ts | 18 +++++----- .../deprecated-KeepAll-file.js.diff | 0 .../deprecated-KeepAll-file.ts.diff | 0 .../deprecated-KeepSemanticOnly-file.js.diff | 4 +-- .../deprecated-KeepSemanticOnly-file.ts.diff | 4 +-- .../deprecated-SkipAll-file.js.diff | 4 +-- .../deprecated-SkipAll-file.ts.diff | 4 +-- .../link-KeepAll-file.js.diff | 0 .../link-KeepAll-file.ts.diff | 0 .../link-KeepSemanticOnly-file.js.diff | 4 +-- .../link-KeepSemanticOnly-file.ts.diff | 4 +-- .../link-SkipAll-file.js.diff | 4 +-- .../link-SkipAll-file.ts.diff | 4 +-- .../see-KeepAll-file.js.diff | 0 .../see-KeepAll-file.ts.diff | 0 .../see-KeepSemanticOnly-file.js.diff | 4 +-- .../see-KeepSemanticOnly-file.ts.diff | 4 +-- .../see-SkipAll-file.js.diff | 4 +-- .../see-SkipAll-file.ts.diff | 4 +-- 32 files changed, 103 insertions(+), 103 deletions(-) rename src/testRunner/unittests/{jsDocParsingKind.ts => skipJSDocParsing.ts} (76%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/deprecated-KeepAll-file.js.diff (100%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/deprecated-KeepAll-file.ts.diff (100%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/deprecated-KeepSemanticOnly-file.js.diff (84%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/deprecated-KeepSemanticOnly-file.ts.diff (97%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/deprecated-SkipAll-file.js.diff (98%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/deprecated-SkipAll-file.ts.diff (98%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/link-KeepAll-file.js.diff (100%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/link-KeepAll-file.ts.diff (100%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/link-KeepSemanticOnly-file.js.diff (84%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/link-KeepSemanticOnly-file.ts.diff (83%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/link-SkipAll-file.js.diff (97%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/link-SkipAll-file.ts.diff (97%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/see-KeepAll-file.js.diff (100%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/see-KeepAll-file.ts.diff (100%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/see-KeepSemanticOnly-file.js.diff (84%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/see-KeepSemanticOnly-file.ts.diff (83%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/see-SkipAll-file.js.diff (99%) rename tests/baselines/reference/{jsDocParsingKind => skipJSDocParsing}/see-SkipAll-file.ts.diff (99%) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 0bf2e90c762b3..63f464ffe55e0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -187,7 +187,7 @@ import { JSDocOverloadTag, JSDocOverrideTag, JSDocParameterTag, - JSDocParsingKind, + JSDocParsingMode, JSDocPrivateTag, JSDocPropertyLikeTag, JSDocPropertyTag, @@ -1331,7 +1331,7 @@ export function createSourceFile( languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes = false, scriptKind?: ScriptKind, - jsDocParsingKind?: JSDocParsingKind, + jsDocParsingMode?: JSDocParsingMode, ): SourceFile { tracing?.push(tracing.Phase.Parse, "createSourceFile", { path: fileName }, /*separateBeginAndEnd*/ true); performance.mark("beforeParse"); @@ -1344,14 +1344,14 @@ export function createSourceFile( impliedNodeFormat: format, } = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions : ({ languageVersion: languageVersionOrOptions } as CreateSourceFileOptions); if (languageVersion === ScriptTarget.JSON) { - result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, ScriptKind.JSON, noop, jsDocParsingKind); + result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, ScriptKind.JSON, noop, jsDocParsingMode); } else { const setIndicator = format === undefined ? overrideSetExternalModuleIndicator : (file: SourceFile) => { file.impliedNodeFormat = format; return (overrideSetExternalModuleIndicator || setExternalModuleIndicator)(file); }; - result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, setIndicator, jsDocParsingKind); + result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, setIndicator, jsDocParsingMode); } perfLogger?.logStopParseSourceFile(); @@ -1591,7 +1591,7 @@ namespace Parser { setParentNodes = false, scriptKind?: ScriptKind, setExternalModuleIndicatorOverride?: (file: SourceFile) => void, - jsDocParsingKind = JSDocParsingKind.KeepAll, + jsDocParsingMode = JSDocParsingMode.KeepAll, ): SourceFile { scriptKind = ensureScriptKind(fileName, scriptKind); if (scriptKind === ScriptKind.JSON) { @@ -1606,9 +1606,9 @@ namespace Parser { return result; } - initializeState(fileName, sourceText, languageVersion, syntaxCursor, scriptKind, jsDocParsingKind); + initializeState(fileName, sourceText, languageVersion, syntaxCursor, scriptKind, jsDocParsingMode); - const result = parseSourceFileWorker(languageVersion, setParentNodes, scriptKind, setExternalModuleIndicatorOverride || setExternalModuleIndicator, jsDocParsingKind); + const result = parseSourceFileWorker(languageVersion, setParentNodes, scriptKind, setExternalModuleIndicatorOverride || setExternalModuleIndicator, jsDocParsingMode); clearState(); @@ -1617,7 +1617,7 @@ namespace Parser { export function parseIsolatedEntityName(content: string, languageVersion: ScriptTarget): EntityName | undefined { // Choice of `isDeclarationFile` should be arbitrary - initializeState("", content, languageVersion, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingKind.KeepAll); + initializeState("", content, languageVersion, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.KeepAll); // Prime the scanner. nextToken(); const entityName = parseEntityName(/*allowReservedWords*/ true); @@ -1627,7 +1627,7 @@ namespace Parser { } export function parseJsonText(fileName: string, sourceText: string, languageVersion: ScriptTarget = ScriptTarget.ES2015, syntaxCursor?: IncrementalParser.SyntaxCursor, setParentNodes = false): JsonSourceFile { - initializeState(fileName, sourceText, languageVersion, syntaxCursor, ScriptKind.JSON, JSDocParsingKind.KeepAll); + initializeState(fileName, sourceText, languageVersion, syntaxCursor, ScriptKind.JSON, JSDocParsingMode.KeepAll); sourceFlags = contextFlags; // Prime the scanner. @@ -1715,7 +1715,7 @@ namespace Parser { return result; } - function initializeState(_fileName: string, _sourceText: string, _languageVersion: ScriptTarget, _syntaxCursor: IncrementalParser.SyntaxCursor | undefined, _scriptKind: ScriptKind, _jsDocParsingKind: JSDocParsingKind) { + function initializeState(_fileName: string, _sourceText: string, _languageVersion: ScriptTarget, _syntaxCursor: IncrementalParser.SyntaxCursor | undefined, _scriptKind: ScriptKind, _jsDocParsingMode: JSDocParsingMode) { NodeConstructor = objectAllocator.getNodeConstructor(); TokenConstructor = objectAllocator.getTokenConstructor(); IdentifierConstructor = objectAllocator.getIdentifierConstructor(); @@ -1757,7 +1757,7 @@ namespace Parser { scanner.setScriptTarget(languageVersion); scanner.setLanguageVariant(languageVariant); scanner.setScriptKind(scriptKind); - scanner.setJSDocParsingKind(_jsDocParsingKind); + scanner.setJSDocParsingMode(_jsDocParsingMode); } function clearState() { @@ -1766,7 +1766,7 @@ namespace Parser { scanner.setText(""); scanner.setOnError(undefined); scanner.setScriptKind(ScriptKind.Unknown); - scanner.setJSDocParsingKind(JSDocParsingKind.KeepAll); + scanner.setJSDocParsingMode(JSDocParsingMode.KeepAll); // Clear any data. We don't want to accidentally hold onto it for too long. sourceText = undefined!; @@ -1783,7 +1783,7 @@ namespace Parser { topLevel = true; } - function parseSourceFileWorker(languageVersion: ScriptTarget, setParentNodes: boolean, scriptKind: ScriptKind, setExternalModuleIndicator: (file: SourceFile) => void, jsDocParsingKind: JSDocParsingKind): SourceFile { + function parseSourceFileWorker(languageVersion: ScriptTarget, setParentNodes: boolean, scriptKind: ScriptKind, setExternalModuleIndicator: (file: SourceFile) => void, jsDocParsingMode: JSDocParsingMode): SourceFile { const isDeclarationFile = isDeclarationFileName(fileName); if (isDeclarationFile) { contextFlags |= NodeFlags.Ambient; @@ -1810,7 +1810,7 @@ namespace Parser { sourceFile.identifierCount = identifierCount; sourceFile.identifiers = identifiers; sourceFile.parseDiagnostics = attachFileToDiagnostics(parseDiagnostics, sourceFile); - sourceFile.jsDocParsingKind = jsDocParsingKind; + sourceFile.jsDocParsingMode = jsDocParsingMode; if (jsDocDiagnostics) { sourceFile.jsDocDiagnostics = attachFileToDiagnostics(jsDocDiagnostics, sourceFile); } @@ -8692,7 +8692,7 @@ namespace Parser { export namespace JSDocParser { export function parseJSDocTypeExpressionForTests(content: string, start: number | undefined, length: number | undefined): { jsDocTypeExpression: JSDocTypeExpression; diagnostics: Diagnostic[]; } | undefined { - initializeState("file.js", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingKind.KeepAll); + initializeState("file.js", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.KeepAll); scanner.setText(content, start, length); currentToken = scanner.scan(); const jsDocTypeExpression = parseJSDocTypeExpression(); @@ -8742,7 +8742,7 @@ namespace Parser { } export function parseIsolatedJSDocComment(content: string, start: number | undefined, length: number | undefined): { jsDoc: JSDoc; diagnostics: Diagnostic[]; } | undefined { - initializeState("", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingKind.KeepAll); + initializeState("", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.KeepAll); const jsDoc = doInsideOfContext(NodeFlags.JSDoc, () => parseJSDocCommentWorker(start, length)); const sourceFile = { languageVariant: LanguageVariant.Standard, text: content } as SourceFile; @@ -9810,7 +9810,7 @@ namespace IncrementalParser { if (sourceFile.statements.length === 0) { // If we don't have any statements in the current source file, then there's no real // way to incrementally parse. So just do a full parse instead. - return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, /*syntaxCursor*/ undefined, /*setParentNodes*/ true, sourceFile.scriptKind, sourceFile.setExternalModuleIndicator, sourceFile.jsDocParsingKind); + return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, /*syntaxCursor*/ undefined, /*setParentNodes*/ true, sourceFile.scriptKind, sourceFile.setExternalModuleIndicator, sourceFile.jsDocParsingMode); } // Make sure we're not trying to incrementally update a source file more than once. Once @@ -9873,7 +9873,7 @@ namespace IncrementalParser { // inconsistent tree. Setting the parents on the new tree should be very fast. We // will immediately bail out of walking any subtrees when we can see that their parents // are already correct. - const result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, /*setParentNodes*/ true, sourceFile.scriptKind, sourceFile.setExternalModuleIndicator, sourceFile.jsDocParsingKind); + const result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, /*setParentNodes*/ true, sourceFile.scriptKind, sourceFile.setExternalModuleIndicator, sourceFile.jsDocParsingMode); result.commentDirectives = getNewCommentDirectives( sourceFile.commentDirectives, result.commentDirectives, diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 86687c2a82f4f..5f5478dc71b2b 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -209,7 +209,7 @@ import { isStringLiteral, isStringLiteralLike, isTraceEnabled, - JSDocParsingKind, + JSDocParsingMode, JsonSourceFile, JsxEmit, length, @@ -403,7 +403,7 @@ export function createGetSourceFile( readFile: ProgramHost["readFile"], getCompilerOptions: () => CompilerOptions, setParentNodes: boolean | undefined, - getJSDocParsingKind: (() => JSDocParsingKind | undefined) | undefined, + getJSDocParsingMode: (() => JSDocParsingMode | undefined) | undefined, ): CompilerHost["getSourceFile"] { return (fileName, languageVersionOrOptions, onError) => { let text: string | undefined; @@ -419,7 +419,7 @@ export function createGetSourceFile( } text = ""; } - return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, getJSDocParsingKind?.()) : undefined; + return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, getJSDocParsingMode?.()) : undefined; }; } @@ -460,7 +460,7 @@ export function createWriteFileMeasuringIO( export function createCompilerHostWorker( options: CompilerOptions, setParentNodes?: boolean, - jsDocParsingKind?: JSDocParsingKind, + jsDocParsingMode?: JSDocParsingMode, system: System = sys, ): CompilerHost { const existingDirectories = new Map(); @@ -483,7 +483,7 @@ export function createCompilerHostWorker( const newLine = getNewLineCharacter(options); const realpath = system.realpath && ((path: string) => system.realpath!(path)); const compilerHost: CompilerHost = { - getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, () => jsDocParsingKind), + getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, () => jsDocParsingMode), getDefaultLibLocation, getDefaultLibFileName: options => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options)), writeFile: createWriteFileMeasuringIO( diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 1a8bbc6029c80..72446ec702c75 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -12,7 +12,7 @@ import { DiagnosticMessage, Diagnostics, identity, - JSDocParsingKind, + JSDocParsingMode, JSDocSyntaxKind, JsxTokenSyntaxKind, KeywordSyntaxKind, @@ -98,7 +98,7 @@ export interface Scanner { setScriptTarget(scriptTarget: ScriptTarget): void; setLanguageVariant(variant: LanguageVariant): void; setScriptKind(scriptKind: ScriptKind): void; - setJSDocParsingKind(kind: JSDocParsingKind): void; + setJSDocParsingMode(kind: JSDocParsingMode): void; /** @deprecated use {@link resetTokenState} */ setTextPos(textPos: number): void; resetTokenState(pos: number): void; @@ -1011,7 +1011,7 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean var inJSDocType = 0; var scriptKind = ScriptKind.Unknown; - var jsDocParsingKind = JSDocParsingKind.KeepAll; + var jsDocParsingMode = JSDocParsingMode.KeepAll; setText(text, start, length); @@ -1058,7 +1058,7 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean setScriptTarget, setLanguageVariant, setScriptKind, - setJSDocParsingKind, + setJSDocParsingMode, setOnError, resetTokenState, setTextPos: resetTokenState, @@ -2008,8 +2008,8 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean } if (isJSDoc) { - const shouldParseJSDoc = jsDocParsingKind === JSDocParsingKind.SkipAll ? false - : jsDocParsingKind === JSDocParsingKind.KeepSemanticOnly ? (scriptKind !== ScriptKind.TS && scriptKind !== ScriptKind.TSX) || semanticJSDocTagRegEx.test(text.slice(fullStartPos, pos)) + const shouldParseJSDoc = jsDocParsingMode === JSDocParsingMode.SkipAll ? false + : jsDocParsingMode === JSDocParsingMode.KeepSemanticOnly ? (scriptKind !== ScriptKind.TS && scriptKind !== ScriptKind.TSX) || semanticJSDocTagRegEx.test(text.slice(fullStartPos, pos)) : true; if (shouldParseJSDoc) { tokenFlags |= TokenFlags.PrecedingJSDocComment; @@ -2801,8 +2801,8 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean scriptKind = kind; } - function setJSDocParsingKind(kind: JSDocParsingKind) { - jsDocParsingKind = kind; + function setJSDocParsingMode(kind: JSDocParsingMode) { + jsDocParsingMode = kind; } function resetTokenState(position: number) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index af78d0ab65b03..4d1540026fb87 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -4298,7 +4298,7 @@ export interface SourceFile extends Declaration, LocalsContainer { /** @internal */ exportedModulesFromDeclarationEmit?: ExportedModulesFromDeclarationEmit; /** @internal */ endFlowNode?: FlowNode; - /** @internal */ jsDocParsingKind?: JSDocParsingKind; + /** @internal */ jsDocParsingMode?: JSDocParsingMode; } /** @internal */ @@ -9850,7 +9850,7 @@ export const commentPragmas = { }, } as const; -export const enum JSDocParsingKind { +export const enum JSDocParsingMode { KeepAll = 0, KeepSemanticOnly = 1, SkipAll = 2, diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index 850d14fffe857..09b4ec30f70f1 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -746,7 +746,7 @@ export function createCompilerHostFromProgramHost(host: ProgramHost, getCom (fileName, encoding) => !encoding ? compilerHost.readFile(fileName) : host.readFile(fileName, encoding), getCompilerOptions, /*setParentNodes*/ undefined, - host.getJSDocParsingKind, + host.getJSDocParsingMode, ), getDefaultLibLocation: maybeBind(host, host.getDefaultLibLocation), getDefaultLibFileName: options => host.getDefaultLibFileName(options), diff --git a/src/compiler/watchPublic.ts b/src/compiler/watchPublic.ts index 3501ac034e6b8..1df139889f30d 100644 --- a/src/compiler/watchPublic.ts +++ b/src/compiler/watchPublic.ts @@ -53,7 +53,7 @@ import { isArray, isIgnoredFileFromWildCardWatching, isProgramUptoDate, - JSDocParsingKind, + JSDocParsingMode, MapLike, maybeBind, ModuleResolutionCache, @@ -119,8 +119,8 @@ export function readBuilderProgram(compilerOptions: CompilerOptions, host: ReadB return createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host); } -export function createIncrementalCompilerHost(options: CompilerOptions, system = sys, jsDocParsingKind?: JSDocParsingKind): CompilerHost { - const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, jsDocParsingKind, system); +export function createIncrementalCompilerHost(options: CompilerOptions, system = sys, jsDocParsingMode?: JSDocParsingMode): CompilerHost { + const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, jsDocParsingMode, system); host.createHash = maybeBind(system, system.createHash); host.storeFilesChangingSignatureDuringEmit = system.storeFilesChangingSignatureDuringEmit; setGetSourceFileAsHashVersioned(host); @@ -257,7 +257,7 @@ export interface ProgramHost { getModuleResolutionCache?(): ModuleResolutionCache | undefined; /** Kind of JSDoc parsing to use. */ - getJSDocParsingKind?(): JSDocParsingKind | undefined; + getJSDocParsingMode?(): JSDocParsingMode | undefined; } /** * Internal interface used to wire emit through same host diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 9082ad939b652..9b34e224f1f88 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -57,7 +57,7 @@ import { getNormalizedAbsolutePath, isIncrementalCompilation, isWatchSet, - JSDocParsingKind, + JSDocParsingMode, normalizePath, optionDeclarations, optionsForBuild, @@ -791,7 +791,7 @@ function reportWatchModeWithoutSysSupport(sys: System, reportDiagnostic: Diagnos } // This could be inlined everywhere, but this is convenient for debugging and patching. -const jsDocParsingKind = JSDocParsingKind.KeepSemanticOnly; +const jsDocParsingMode = JSDocParsingMode.KeepSemanticOnly; function performBuild( sys: System, @@ -843,7 +843,7 @@ function performBuild( createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createWatchStatusReporter(sys, buildOptions), ); - buildHost.getJSDocParsingKind = () => jsDocParsingKind; + buildHost.getJSDocParsingMode = () => jsDocParsingMode; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const onWatchStatusChange = buildHost.onWatchStatusChange; @@ -873,7 +873,7 @@ function performBuild( createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createReportErrorSummary(sys, buildOptions), ); - buildHost.getJSDocParsingKind = () => jsDocParsingKind; + buildHost.getJSDocParsingMode = () => jsDocParsingMode; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const builder = createSolutionBuilder(buildHost, projects, buildOptions); @@ -896,7 +896,7 @@ function performCompilation( config: ParsedCommandLine, ) { const { fileNames, options, projectReferences } = config; - const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, jsDocParsingKind, sys); + const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, jsDocParsingMode, sys); const currentDirectory = host.getCurrentDirectory(); const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); changeCompilerHostLikeToUseCache(host, fileName => toPath(fileName, currentDirectory, getCanonicalFileName)); @@ -929,7 +929,7 @@ function performIncrementalCompilation( ) { const { options, fileNames, projectReferences } = config; enableStatisticsAndTracing(sys, options, /*isBuildMode*/ false); - const host = createIncrementalCompilerHost(options, sys, jsDocParsingKind); + const host = createIncrementalCompilerHost(options, sys, jsDocParsingMode); const exitStatus = ts_performIncrementalCompilation({ host, system: sys, @@ -981,7 +981,7 @@ function updateWatchCompilationHost( cb: ExecuteCommandLineCallbacks, watchCompilerHost: WatchCompilerHost, ) { - watchCompilerHost.getJSDocParsingKind = () => jsDocParsingKind; + watchCompilerHost.getJSDocParsingMode = () => jsDocParsingMode; updateCreateProgram(sys, watchCompilerHost, /*isBuildMode*/ false); const emitFilesUsingBuilder = watchCompilerHost.afterProgramCreate!; // TODO: GH#18217 watchCompilerHost.afterProgramCreate = builderProgram => { diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 456729ba79b82..01d8a2a30a1b4 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -71,7 +71,7 @@ import { isNodeModulesDirectory, isRootedDiskPath, isString, - JSDocParsingKind, + JSDocParsingMode, LanguageServiceMode, length, map, @@ -592,7 +592,7 @@ export interface ProjectServiceOptions { serverMode?: LanguageServiceMode; session: Session | undefined; /** @internal */ incrementalVerifier?: (service: ProjectService) => void; - jsDocParsingKind?: JSDocParsingKind; + jsDocParsingMode?: JSDocParsingMode; } interface OriginalFileInfo { @@ -1001,7 +1001,7 @@ export class ProjectService { /** @internal */ verifyDocumentRegistry = noop; /** @internal */ - private readonly jsDocParsingKind: JSDocParsingKind | undefined; + private readonly jsDocParsingMode: JSDocParsingMode | undefined; constructor(opts: ProjectServiceOptions) { this.host = opts.host; @@ -1018,7 +1018,7 @@ export class ProjectService { this.allowLocalPluginLoads = !!opts.allowLocalPluginLoads; this.typesMapLocation = (opts.typesMapLocation === undefined) ? combinePaths(getDirectoryPath(this.getExecutingFilePath()), "typesMap.json") : opts.typesMapLocation; this.session = opts.session; - this.jsDocParsingKind = opts.jsDocParsingKind; + this.jsDocParsingMode = opts.jsDocParsingMode; if (opts.serverMode !== undefined) { this.serverMode = opts.serverMode; @@ -4580,8 +4580,8 @@ export class ProjectService { return this.incompleteCompletionsCache ||= createIncompleteCompletionsCache(); } - getJSDocParsingKind() { - return this.jsDocParsingKind; + getJSDocParsingMode() { + return this.jsDocParsingMode; } } diff --git a/src/server/project.ts b/src/server/project.ts index 9474a7e9f36c3..5b10ca7fb26df 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -71,7 +71,7 @@ import { isDeclarationFileName, isExternalModuleNameRelative, isInsideNodeModules, - JSDocParsingKind, + JSDocParsingMode, JsTyping, LanguageService, LanguageServiceHost, @@ -508,7 +508,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo createHash = maybeBind(this.projectService.host, this.projectService.host.createHash); /** @internal */ - readonly getJSDocParsingKind?: () => JSDocParsingKind | undefined; + readonly getJSDocParsingMode?: () => JSDocParsingMode | undefined; /** @internal */ constructor( @@ -528,7 +528,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo this.directoryStructureHost = directoryStructureHost; this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory); this.getCanonicalFileName = this.projectService.toCanonicalFileName; - this.getJSDocParsingKind = maybeBind(this.projectService, this.projectService.getJSDocParsingKind); + this.getJSDocParsingMode = maybeBind(this.projectService, this.projectService.getJSDocParsingMode); this.cancellationToken = new ThrottledCancellationToken(this.projectService.cancellationToken, this.projectService.throttleWaitMilliseconds); if (!this.compilerOptions) { diff --git a/src/services/services.ts b/src/services/services.ts index 2cd17384b6ef9..ff727185cf540 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -189,7 +189,7 @@ import { JSDoc, JsDoc, JSDocContainer, - JSDocParsingKind, + JSDocParsingMode, JSDocTagInfo, JsonSourceFile, JsxAttributes, @@ -1363,7 +1363,7 @@ class SyntaxTreeCache { ), setExternalModuleIndicator: getSetExternalModuleIndicator(this.host.getCompilationSettings()), }; - sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, this.host.getJSDocParsingKind?.()); + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, this.host.getJSDocParsingMode?.()); } else if (this.currentFileVersion !== version) { // This is the same file, just a newer version. Incrementally parse the file. @@ -1395,9 +1395,9 @@ export function createLanguageServiceSourceFile( version: string, setNodeParents: boolean, scriptKind?: ScriptKind, - jsDocParsingKind?: JSDocParsingKind, + jsDocParsingMode?: JSDocParsingMode, ): SourceFile { - const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind, jsDocParsingKind); + const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind, jsDocParsingMode); setSourceFileFields(sourceFile, scriptSnapshot, version); return sourceFile; } @@ -1459,7 +1459,7 @@ export function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSn setExternalModuleIndicator: sourceFile.setExternalModuleIndicator, }; // Otherwise, just create a new source file. - return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.scriptKind, sourceFile.jsDocParsingKind); + return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.scriptKind, sourceFile.jsDocParsingMode); } const NoopCancellationToken: CancellationToken = { diff --git a/src/services/types.ts b/src/services/types.ts index ef645a63035f2..5623e40b87264 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -14,7 +14,7 @@ import { GetEffectiveTypeRootsHost, HasChangedAutomaticTypeDirectiveNames, HasInvalidatedResolutions, - JSDocParsingKind, + JSDocParsingMode, LineAndCharacter, MinimalResolutionCacheHost, ModuleResolutionCache, @@ -429,7 +429,7 @@ export interface LanguageServiceHost extends GetEffectiveTypeRootsHost, MinimalR /** @internal */ onReleaseParsedCommandLine?(configFileName: string, oldResolvedRef: ResolvedProjectReference | undefined, optionOptions: CompilerOptions): void; /** @internal */ getIncompleteCompletionsCache?(): IncompleteCompletionsCache; - getJSDocParsingKind?(): JSDocParsingKind | undefined; + getJSDocParsingMode?(): JSDocParsingMode | undefined; } /** @internal */ diff --git a/src/testRunner/tests.ts b/src/testRunner/tests.ts index b374bd0fb47ab..6c28643511d1f 100644 --- a/src/testRunner/tests.ts +++ b/src/testRunner/tests.ts @@ -211,4 +211,4 @@ import "./unittests/tsserver/watchEnvironment"; import "./unittests/debugDeprecation"; import "./unittests/tsserver/inconsistentErrorInEditor"; import "./unittests/tsserver/getMoveToRefactoringFileSuggestions"; -import "./unittests/jsDocParsingKind"; +import "./unittests/skipJSDocParsing"; diff --git a/src/testRunner/unittests/jsDocParsingKind.ts b/src/testRunner/unittests/skipJSDocParsing.ts similarity index 76% rename from src/testRunner/unittests/jsDocParsingKind.ts rename to src/testRunner/unittests/skipJSDocParsing.ts index d9d951299ad58..fbea8e8a400b9 100644 --- a/src/testRunner/unittests/jsDocParsingKind.ts +++ b/src/testRunner/unittests/skipJSDocParsing.ts @@ -2,31 +2,31 @@ import * as Harness from "../_namespaces/Harness"; import * as ts from "../_namespaces/ts"; import * as Utils from "../_namespaces/Utils"; -describe("unittests:: jsDocParsingKind", () => { +describe("unittests:: skipJSDocParsing", () => { const Diff = require("diff"); const kinds = [ - ts.JSDocParsingKind.KeepAll, - ts.JSDocParsingKind.KeepSemanticOnly, - ts.JSDocParsingKind.SkipAll, + ts.JSDocParsingMode.KeepAll, + ts.JSDocParsingMode.KeepSemanticOnly, + ts.JSDocParsingMode.SkipAll, ]; const filenames = [ "file.ts", "file.js", ]; function diffSourceFiles(name: string, content: string) { - for (const jsDocParsingKind of kinds) { - const kindName = ts.Debug.formatEnum(jsDocParsingKind, (ts as any).JSDocParsingKind); + for (const jsDocParsingMode of kinds) { + const kindName = ts.Debug.formatEnum(jsDocParsingMode, (ts as any).JSDocParsingMode); for (const filename of filenames) { const testName = `${name}-${kindName}-${filename}`; it(testName, () => { const sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); assert.isTrue(sourceFile && sourceFile.parseDiagnostics.length === 0, "no errors issued"); - const sourceFileSkipped = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, jsDocParsingKind); + const sourceFileSkipped = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, jsDocParsingMode); assert.isTrue(sourceFileSkipped && sourceFileSkipped.parseDiagnostics.length === 0, "no errors issued"); const patch = Diff.createTwoFilesPatch("default", kindName, Utils.sourceFileToJSON(sourceFile), Utils.sourceFileToJSON(sourceFileSkipped)); - Harness.Baseline.runBaseline("jsDocParsingKind/" + testName + ".diff", patch); + Harness.Baseline.runBaseline("skipJSDocParsing/" + testName + ".diff", patch); }); } } diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index f73c5f7243e7c..d35eb7c98058d 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3616,7 +3616,7 @@ declare namespace ts { typesMapLocation?: string; serverMode?: LanguageServiceMode; session: Session | undefined; - jsDocParsingKind?: JSDocParsingKind; + jsDocParsingMode?: JSDocParsingMode; } interface WatchOptionsAndErrors { watchOptions: WatchOptions; @@ -3854,7 +3854,7 @@ declare namespace ts { private enableRequestedPluginsWorker; private enableRequestedPluginsForProjectAsync; configurePlugin(args: protocol.ConfigurePluginRequestArguments): void; - getJSDocParsingKind(): JSDocParsingKind | undefined; + getJSDocParsingMode(): JSDocParsingMode | undefined; } function formatMessage(msg: T, logger: Logger, byteLength: (s: string, encoding: BufferEncoding) => number, newLine: string): string; interface ServerCancellationToken extends HostCancellationToken { @@ -8609,7 +8609,7 @@ declare namespace ts { IndexSignatureParameters = 8848, JSDocComment = 33, } - enum JSDocParsingKind { + enum JSDocParsingMode { KeepAll = 0, KeepSemanticOnly = 1, SkipAll = 2, @@ -8776,7 +8776,7 @@ declare namespace ts { setScriptTarget(scriptTarget: ScriptTarget): void; setLanguageVariant(variant: LanguageVariant): void; setScriptKind(scriptKind: ScriptKind): void; - setJSDocParsingKind(kind: JSDocParsingKind): void; + setJSDocParsingMode(kind: JSDocParsingMode): void; /** @deprecated use {@link resetTokenState} */ setTextPos(textPos: number): void; resetTokenState(pos: number): void; @@ -9422,7 +9422,7 @@ declare namespace ts { * that they appear in the source code. The language service depends on this property to locate nodes by position. */ function forEachChild(node: Node, cbNode: (node: Node) => T | undefined, cbNodes?: (nodes: NodeArray) => T | undefined): T | undefined; - function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes?: boolean, scriptKind?: ScriptKind, jsDocParsingKind?: JSDocParsingKind): SourceFile; + function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes?: boolean, scriptKind?: ScriptKind, jsDocParsingMode?: JSDocParsingMode): SourceFile; function parseIsolatedEntityName(text: string, languageVersion: ScriptTarget): EntityName | undefined; /** * Parse json text into SyntaxTree and return node and parse errors if any @@ -9939,7 +9939,7 @@ declare namespace ts { emitNextAffectedFile(writeFile?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: CustomTransformers): AffectedFileResult; } function readBuilderProgram(compilerOptions: CompilerOptions, host: ReadBuildProgramHost): EmitAndSemanticDiagnosticsBuilderProgram | undefined; - function createIncrementalCompilerHost(options: CompilerOptions, system?: System, jsDocParsingKind?: JSDocParsingKind): CompilerHost; + function createIncrementalCompilerHost(options: CompilerOptions, system?: System, jsDocParsingMode?: JSDocParsingMode): CompilerHost; function createIncrementalProgram({ rootNames, options, configFileParsingDiagnostics, projectReferences, host, createProgram }: IncrementalProgramOptions): T; /** * Create the watch compiler host for either configFile or fileNames and its options @@ -10037,7 +10037,7 @@ declare namespace ts { */ getModuleResolutionCache?(): ModuleResolutionCache | undefined; /** Kind of JSDoc parsing to use. */ - getJSDocParsingKind?(): JSDocParsingKind | undefined; + getJSDocParsingMode?(): JSDocParsingMode | undefined; } interface WatchCompilerHost extends ProgramHost, WatchHost { /** Instead of using output d.ts file from project reference, use its source file */ @@ -10288,7 +10288,7 @@ declare namespace ts { installPackage?(options: InstallPackageOptions): Promise; writeFile?(fileName: string, content: string): void; getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; - getJSDocParsingKind?(): JSDocParsingKind | undefined; + getJSDocParsingMode?(): JSDocParsingMode | undefined; } type WithMetadata = T & { metadata?: unknown; @@ -11494,7 +11494,7 @@ declare namespace ts { function displayPartsToString(displayParts: SymbolDisplayPart[] | undefined): string; function getDefaultCompilerOptions(): CompilerOptions; function getSupportedCodeFixes(): readonly string[]; - function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, scriptKind?: ScriptKind, jsDocParsingKind?: JSDocParsingKind): SourceFile; + function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, scriptKind?: ScriptKind, jsDocParsingMode?: JSDocParsingMode): SourceFile; function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange | undefined, aggressiveChecks?: boolean): SourceFile; function createLanguageService(host: LanguageServiceHost, documentRegistry?: DocumentRegistry, syntaxOnlyOrLanguageServiceMode?: boolean | LanguageServiceMode): LanguageService; /** diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.js.diff similarity index 100% rename from tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.js.diff diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.ts.diff similarity index 100% rename from tests/baselines/reference/jsDocParsingKind/deprecated-KeepAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.ts.diff diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.js.diff similarity index 84% rename from tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.js.diff index ba8cf6efde1e5..ca4b708f42863 100644 --- a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.js.diff @@ -6,8 +6,8 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0, -+ "jsDocParsingKind": 1, +- "jsDocParsingMode": 0, ++ "jsDocParsingMode": 1, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.ts.diff similarity index 97% rename from tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.ts.diff index 07fceac9c1565..4393dab7b7285 100644 --- a/tests/baselines/reference/jsDocParsingKind/deprecated-KeepSemanticOnly-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.ts.diff @@ -61,7 +61,7 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0 -+ "jsDocParsingKind": 1 +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.js.diff similarity index 98% rename from tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.js.diff index 0d70e7056ca96..9374bc040ab72 100644 --- a/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.js.diff @@ -117,8 +117,8 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0, +- "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingKind": 2 ++ "jsDocParsingMode": 2 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.ts.diff similarity index 98% rename from tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.ts.diff index 7fecad7dac630..55a93ba39de11 100644 --- a/tests/baselines/reference/jsDocParsingKind/deprecated-SkipAll-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.ts.diff @@ -117,7 +117,7 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0 -+ "jsDocParsingKind": 2 +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 2 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.js.diff similarity index 100% rename from tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.js.diff diff --git a/tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.ts.diff similarity index 100% rename from tests/baselines/reference/jsDocParsingKind/link-KeepAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.ts.diff diff --git a/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.js.diff similarity index 84% rename from tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.js.diff index 83573fa6aff52..9437adb4eae02 100644 --- a/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.js.diff @@ -6,8 +6,8 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0, -+ "jsDocParsingKind": 1, +- "jsDocParsingMode": 0, ++ "jsDocParsingMode": 1, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.ts.diff similarity index 83% rename from tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.ts.diff index b5f6efd1c27e7..39d8bc22ccb0b 100644 --- a/tests/baselines/reference/jsDocParsingKind/link-KeepSemanticOnly-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.ts.diff @@ -6,7 +6,7 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0 -+ "jsDocParsingKind": 1 +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.js.diff similarity index 97% rename from tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.js.diff index 201ad49edb497..b2cef93fdf0f8 100644 --- a/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.js.diff @@ -61,8 +61,8 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0, +- "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingKind": 2 ++ "jsDocParsingMode": 2 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.ts.diff similarity index 97% rename from tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.ts.diff index 5e837612c688c..dc82c8e7a2f02 100644 --- a/tests/baselines/reference/jsDocParsingKind/link-SkipAll-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.ts.diff @@ -61,7 +61,7 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0 -+ "jsDocParsingKind": 2 +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 2 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.js.diff similarity index 100% rename from tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.js.diff diff --git a/tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.ts.diff similarity index 100% rename from tests/baselines/reference/jsDocParsingKind/see-KeepAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.ts.diff diff --git a/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.js.diff similarity index 84% rename from tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.js.diff index d01ccf0d76cf2..d300b3740f400 100644 --- a/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.js.diff @@ -6,8 +6,8 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0, -+ "jsDocParsingKind": 1, +- "jsDocParsingMode": 0, ++ "jsDocParsingMode": 1, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.ts.diff similarity index 83% rename from tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.ts.diff index f072a530ddf63..6e027581a5933 100644 --- a/tests/baselines/reference/jsDocParsingKind/see-KeepSemanticOnly-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.ts.diff @@ -6,7 +6,7 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0 -+ "jsDocParsingKind": 1 +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.js.diff similarity index 99% rename from tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.js.diff index 02dc673dd19a7..f267a8293890f 100644 --- a/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.js.diff @@ -253,8 +253,8 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0, +- "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingKind": 2 ++ "jsDocParsingMode": 2 } \ No newline at end of file diff --git a/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.ts.diff similarity index 99% rename from tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.ts.diff index 9d41ded0c3fab..53b447622ae6a 100644 --- a/tests/baselines/reference/jsDocParsingKind/see-SkipAll-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.ts.diff @@ -253,7 +253,7 @@ "libReferenceDirectives": [], "amdDependencies": [], "identifiers": {}, -- "jsDocParsingKind": 0 -+ "jsDocParsingKind": 2 +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 2 } \ No newline at end of file From 46bbf0e0426b3d60682287e0ea01b0fe2df42c2e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 15 Sep 2023 12:29:21 -0700 Subject: [PATCH 05/25] Temporarily make stuff required to try and get plumbing correct --- src/compiler/parser.ts | 2 +- src/compiler/program.ts | 12 ++++---- src/compiler/tsbuildPublic.ts | 13 +++++---- src/compiler/watch.ts | 20 ++++++++----- src/compiler/watchPublic.ts | 16 ++++++----- src/executeCommandLine/executeCommandLine.ts | 12 ++++---- src/harness/fakesHosts.ts | 14 ++++++---- src/harness/fourslashImpl.ts | 1 + src/harness/harnessIO.ts | 4 +-- src/server/editorServices.ts | 9 ++---- src/server/project.ts | 4 +-- src/services/documentRegistry.ts | 9 +++--- src/services/services.ts | 8 +++--- src/services/textChanges.ts | 3 +- src/services/transpile.ts | 2 ++ src/services/types.ts | 2 +- src/testRunner/unittests/customTransforms.ts | 2 +- src/testRunner/unittests/helpers.ts | 2 +- .../unittests/helpers/solutionBuilder.ts | 2 +- src/testRunner/unittests/helpers/tscWatch.ts | 2 +- src/testRunner/unittests/incrementalParser.ts | 2 +- src/testRunner/unittests/jsDocParsing.ts | 6 ++-- src/testRunner/unittests/moduleResolution.ts | 12 ++++---- src/testRunner/unittests/printer.ts | 28 +++++++++++-------- src/testRunner/unittests/programApi.ts | 2 +- src/testRunner/unittests/publicApi.ts | 6 ++-- .../unittests/reuseProgramStructure.ts | 5 ++++ .../unittests/services/extract/ranges.ts | 4 +-- .../unittests/services/organizeImports.ts | 4 +-- .../unittests/services/textChanges.ts | 4 +-- .../unittests/services/utilities.ts | 1 + src/testRunner/unittests/skipJSDocParsing.ts | 4 +-- src/testRunner/unittests/transform.ts | 4 +-- src/testRunner/unittests/tsbuild/publicApi.ts | 1 + .../unittests/tsc/cancellationToken.ts | 2 +- .../unittests/tscWatch/consoleClearing.ts | 1 + .../unittests/tscWatch/incremental.ts | 2 +- .../unittests/tscWatch/programUpdates.ts | 3 ++ .../unittests/tscWatch/resolutionCache.ts | 3 ++ .../sourceOfProjectReferenceRedirect.ts | 1 + src/testRunner/unittests/tscWatch/watchApi.ts | 11 ++++++++ 41 files changed, 145 insertions(+), 100 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 63f464ffe55e0..a824916c6d194 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1329,9 +1329,9 @@ export function createSourceFile( fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, + jsDocParsingMode: JSDocParsingMode | undefined, setParentNodes = false, scriptKind?: ScriptKind, - jsDocParsingMode?: JSDocParsingMode, ): SourceFile { tracing?.push(tracing.Phase.Parse, "createSourceFile", { path: fileName }, /*separateBeginAndEnd*/ true); performance.mark("beforeParse"); diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 5f5478dc71b2b..fe0f6235e6199 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -394,8 +394,8 @@ export function computeCommonSourceDirectoryOfFilenames(fileNames: readonly stri return getPathFromPathComponents(commonPathComponents); } -export function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean): CompilerHost { - return createCompilerHostWorker(options, setParentNodes); +export function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean, jsDocParsingMode?: JSDocParsingMode): CompilerHost { + return createCompilerHostWorker(options, jsDocParsingMode, setParentNodes); } /** @internal */ @@ -403,7 +403,7 @@ export function createGetSourceFile( readFile: ProgramHost["readFile"], getCompilerOptions: () => CompilerOptions, setParentNodes: boolean | undefined, - getJSDocParsingMode: (() => JSDocParsingMode | undefined) | undefined, + jsDocParsingMode: JSDocParsingMode | undefined, ): CompilerHost["getSourceFile"] { return (fileName, languageVersionOrOptions, onError) => { let text: string | undefined; @@ -419,7 +419,7 @@ export function createGetSourceFile( } text = ""; } - return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, getJSDocParsingMode?.()) : undefined; + return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, jsDocParsingMode, setParentNodes, /*scriptKind*/ undefined) : undefined; }; } @@ -459,8 +459,8 @@ export function createWriteFileMeasuringIO( /** @internal */ export function createCompilerHostWorker( options: CompilerOptions, + jsDocParsingMode: JSDocParsingMode | undefined, setParentNodes?: boolean, - jsDocParsingMode?: JSDocParsingMode, system: System = sys, ): CompilerHost { const existingDirectories = new Map(); @@ -483,7 +483,7 @@ export function createCompilerHostWorker( const newLine = getNewLineCharacter(options); const realpath = system.realpath && ((path: string) => system.realpath!(path)); const compilerHost: CompilerHost = { - getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, () => jsDocParsingMode), + getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, jsDocParsingMode), getDefaultLibLocation, getDefaultLibFileName: options => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options)), writeFile: createWriteFileMeasuringIO( diff --git a/src/compiler/tsbuildPublic.ts b/src/compiler/tsbuildPublic.ts index 8512e52f07f86..d4be51e0182e7 100644 --- a/src/compiler/tsbuildPublic.ts +++ b/src/compiler/tsbuildPublic.ts @@ -74,6 +74,7 @@ import { isIgnoredFileFromWildCardWatching, isIncrementalCompilation, isString, + JSDocParsingMode, listFiles, loadWithModeAwareCache, map, @@ -302,8 +303,8 @@ export function createBuilderStatusReporter(system: System, pretty?: boolean): D }; } -function createSolutionBuilderHostBase(system: System, createProgram: CreateProgram | undefined, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter) { - const host = createProgramHost(system, createProgram) as SolutionBuilderHostBase; +function createSolutionBuilderHostBase(system: System, createProgram: CreateProgram | undefined, jsDocParsingMode: JSDocParsingMode | undefined, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter) { + const host = createProgramHost(system, createProgram, jsDocParsingMode) as SolutionBuilderHostBase; host.getModifiedTime = system.getModifiedTime ? path => system.getModifiedTime!(path) : returnUndefined; host.setModifiedTime = system.setModifiedTime ? (path, date) => system.setModifiedTime!(path, date) : noop; host.deleteFile = system.deleteFile ? path => system.deleteFile!(path) : noop; @@ -313,14 +314,14 @@ function createSolutionBuilderHostBase(system: System, return host; } -export function createSolutionBuilderHost(system = sys, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary) { - const host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus) as SolutionBuilderHost; +export function createSolutionBuilderHost(system = sys, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary) { + const host = createSolutionBuilderHostBase(system, createProgram, jsDocParsingMode, reportDiagnostic, reportSolutionBuilderStatus) as SolutionBuilderHost; host.reportErrorSummary = reportErrorSummary; return host; } -export function createSolutionBuilderWithWatchHost(system = sys, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter) { - const host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus) as SolutionBuilderWithWatchHost; +export function createSolutionBuilderWithWatchHost(system = sys, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter) { + const host = createSolutionBuilderHostBase(system, createProgram, jsDocParsingMode, reportDiagnostic, reportSolutionBuilderStatus) as SolutionBuilderWithWatchHost; const watchHost = createWatchHost(system, reportWatchStatus); copyProperties(host, watchHost); return host; diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index 09b4ec30f70f1..192a3691998e1 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -71,6 +71,7 @@ import { isReferencedFile, isReferenceFileLocation, isString, + JSDocParsingMode, last, maybeBind, memoize, @@ -746,7 +747,7 @@ export function createCompilerHostFromProgramHost(host: ProgramHost, getCom (fileName, encoding) => !encoding ? compilerHost.readFile(fileName) : host.readFile(fileName, encoding), getCompilerOptions, /*setParentNodes*/ undefined, - host.getJSDocParsingMode, + host.jsDocParsingMode, ), getDefaultLibLocation: maybeBind(host, host.getDefaultLibLocation), getDefaultLibFileName: options => host.getDefaultLibFileName(options), @@ -829,7 +830,7 @@ export function setGetSourceFileAsHashVersioned(compilerHost: CompilerHost) { * * @internal */ -export function createProgramHost(system: System, createProgram: CreateProgram | undefined): ProgramHost { +export function createProgramHost(system: System, createProgram: CreateProgram | undefined, jsDocParsingMode: JSDocParsingMode | undefined): ProgramHost { const getDefaultLibLocation = memoize(() => getDirectoryPath(normalizePath(system.getExecutingFilePath()))); return { useCaseSensitiveFileNames: () => system.useCaseSensitiveFileNames, @@ -851,15 +852,16 @@ export function createProgramHost, storeFilesChangingSignatureDuringEmit: system.storeFilesChangingSignatureDuringEmit, now: maybeBind(system, system.now), + jsDocParsingMode, }; } /** * Creates the watch compiler host that can be extended with config file or root file names and options host */ -function createWatchCompilerHost(system = sys, createProgram: CreateProgram | undefined, reportDiagnostic: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter): WatchCompilerHost { +function createWatchCompilerHost(system = sys, createProgram: CreateProgram | undefined, jsDocParsingMode: JSDocParsingMode | undefined, reportDiagnostic: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter): WatchCompilerHost { const write = (s: string) => system.write(s + system.newLine); - const result = createProgramHost(system, createProgram) as WatchCompilerHost; + const result = createProgramHost(system, createProgram, jsDocParsingMode) as WatchCompilerHost; copyProperties(result, createWatchHost(system, reportWatchStatus)); result.afterProgramCreate = builderProgram => { const compilerOptions = builderProgram.getCompilerOptions(); @@ -893,6 +895,7 @@ function reportUnrecoverableDiagnostic(system: System, reportDiagnostic: Diagnos export interface CreateWatchCompilerHostInput { system: System; createProgram?: CreateProgram; + jsDocParsingMode: JSDocParsingMode | undefined; reportDiagnostic?: DiagnosticReporter; reportWatchStatus?: WatchStatusReporter; } @@ -916,11 +919,12 @@ export function createWatchCompilerHostOfConfigFile): WatchCompilerHostOfConfigFile { const diagnosticReporter = reportDiagnostic || createDiagnosticReporter(system); - const host = createWatchCompilerHost(system, createProgram, diagnosticReporter, reportWatchStatus) as WatchCompilerHostOfConfigFile; + const host = createWatchCompilerHost(system, createProgram, jsDocParsingMode, diagnosticReporter, reportWatchStatus) as WatchCompilerHostOfConfigFile; host.onUnRecoverableConfigFileDiagnostic = diagnostic => reportUnrecoverableDiagnostic(system, diagnosticReporter, diagnostic); host.configFileName = configFileName; host.optionsToExtend = optionsToExtend; @@ -948,10 +952,11 @@ export function createWatchCompilerHostOfFilesAndCompilerOptions): WatchCompilerHostOfFilesAndCompilerOptions { - const host = createWatchCompilerHost(system, createProgram, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus) as WatchCompilerHostOfFilesAndCompilerOptions; + const host = createWatchCompilerHost(system, createProgram, jsDocParsingMode, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus) as WatchCompilerHostOfFilesAndCompilerOptions; host.rootFiles = rootFiles; host.options = options; host.watchOptions = watchOptions; @@ -970,11 +975,12 @@ export interface IncrementalCompilationOptions { reportErrorSummary?: ReportEmitErrorSummary; afterProgramEmitAndDiagnostics?(program: EmitAndSemanticDiagnosticsBuilderProgram): void; system?: System; + jsDocParsingMode?: JSDocParsingMode; } /** @internal */ export function performIncrementalCompilation(input: IncrementalCompilationOptions) { const system = input.system || sys; - const host = input.host || (input.host = createIncrementalCompilerHost(input.options, system)); + const host = input.host || (input.host = createIncrementalCompilerHost(input.options, input.jsDocParsingMode, system)); const builderProgram = createIncrementalProgram(input); const exitStatus = emitFilesAndReportErrorsAndGetExitStatus( builderProgram, diff --git a/src/compiler/watchPublic.ts b/src/compiler/watchPublic.ts index 1df139889f30d..926fd7b51b951 100644 --- a/src/compiler/watchPublic.ts +++ b/src/compiler/watchPublic.ts @@ -119,8 +119,8 @@ export function readBuilderProgram(compilerOptions: CompilerOptions, host: ReadB return createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host); } -export function createIncrementalCompilerHost(options: CompilerOptions, system = sys, jsDocParsingMode?: JSDocParsingMode): CompilerHost { - const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, jsDocParsingMode, system); +export function createIncrementalCompilerHost(options: CompilerOptions, jsDocParsingMode: JSDocParsingMode | undefined, system = sys): CompilerHost { + const host = createCompilerHostWorker(options, jsDocParsingMode, /*setParentNodes*/ undefined, system); host.createHash = maybeBind(system, system.createHash); host.storeFilesChangingSignatureDuringEmit = system.storeFilesChangingSignatureDuringEmit; setGetSourceFileAsHashVersioned(host); @@ -145,7 +145,7 @@ export function createIncrementalProgram): T { - host = host || createIncrementalCompilerHost(options); + host = host || createIncrementalCompilerHost(options, /*jsDocParsingMode*/ undefined); createProgram = createProgram || createEmitAndSemanticDiagnosticsBuilderProgram as any as CreateProgram; const oldProgram = readBuilderProgram(options, host) as any as T; return createProgram(rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences); @@ -257,7 +257,7 @@ export interface ProgramHost { getModuleResolutionCache?(): ModuleResolutionCache | undefined; /** Kind of JSDoc parsing to use. */ - getJSDocParsingMode?(): JSDocParsingMode | undefined; + jsDocParsingMode: JSDocParsingMode | undefined; } /** * Internal interface used to wire emit through same host @@ -361,9 +361,9 @@ export interface WatchOfFilesAndCompilerOptions extends Watch { /** * Create the watch compiler host for either configFile or fileNames and its options */ -export function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[]): WatchCompilerHostOfConfigFile; -export function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions): WatchCompilerHostOfFilesAndCompilerOptions; -export function createWatchCompilerHost(rootFilesOrConfigFileName: string | string[], options: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferencesOrWatchOptionsToExtend?: readonly ProjectReference[] | WatchOptions, watchOptionsOrExtraFileExtensions?: WatchOptions | readonly FileExtensionInfo[]): WatchCompilerHostOfFilesAndCompilerOptions | WatchCompilerHostOfConfigFile { +export function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[]): WatchCompilerHostOfConfigFile; +export function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions): WatchCompilerHostOfFilesAndCompilerOptions; +export function createWatchCompilerHost(rootFilesOrConfigFileName: string | string[], options: CompilerOptions | undefined, system: System, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferencesOrWatchOptionsToExtend?: readonly ProjectReference[] | WatchOptions, watchOptionsOrExtraFileExtensions?: WatchOptions | readonly FileExtensionInfo[]): WatchCompilerHostOfFilesAndCompilerOptions | WatchCompilerHostOfConfigFile { if (isArray(rootFilesOrConfigFileName)) { return createWatchCompilerHostOfFilesAndCompilerOptions({ rootFiles: rootFilesOrConfigFileName, @@ -372,6 +372,7 @@ export function createWatchCompilerHost(rootFilesOrCon projectReferences: projectReferencesOrWatchOptionsToExtend as readonly ProjectReference[], system, createProgram, + jsDocParsingMode, reportDiagnostic, reportWatchStatus, }); @@ -384,6 +385,7 @@ export function createWatchCompilerHost(rootFilesOrCon extraFileExtensions: watchOptionsOrExtraFileExtensions as readonly FileExtensionInfo[], system, createProgram, + jsDocParsingMode, reportDiagnostic, reportWatchStatus, }); diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 9b34e224f1f88..f74c923fe9280 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -838,12 +838,12 @@ function performBuild( if (reportWatchModeWithoutSysSupport(sys, reportDiagnostic)) return; const buildHost = createSolutionBuilderWithWatchHost( sys, + jsDocParsingMode, /*createProgram*/ undefined, reportDiagnostic, createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createWatchStatusReporter(sys, buildOptions), ); - buildHost.getJSDocParsingMode = () => jsDocParsingMode; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const onWatchStatusChange = buildHost.onWatchStatusChange; @@ -868,12 +868,12 @@ function performBuild( const buildHost = createSolutionBuilderHost( sys, + jsDocParsingMode, /*createProgram*/ undefined, reportDiagnostic, createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createReportErrorSummary(sys, buildOptions), ); - buildHost.getJSDocParsingMode = () => jsDocParsingMode; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const builder = createSolutionBuilder(buildHost, projects, buildOptions); @@ -896,7 +896,7 @@ function performCompilation( config: ParsedCommandLine, ) { const { fileNames, options, projectReferences } = config; - const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, jsDocParsingMode, sys); + const host = createCompilerHostWorker(options, jsDocParsingMode, /*setParentNodes*/ undefined, sys); const currentDirectory = host.getCurrentDirectory(); const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); changeCompilerHostLikeToUseCache(host, fileName => toPath(fileName, currentDirectory, getCanonicalFileName)); @@ -929,7 +929,7 @@ function performIncrementalCompilation( ) { const { options, fileNames, projectReferences } = config; enableStatisticsAndTracing(sys, options, /*isBuildMode*/ false); - const host = createIncrementalCompilerHost(options, sys, jsDocParsingMode); + const host = createIncrementalCompilerHost(options, jsDocParsingMode, sys); const exitStatus = ts_performIncrementalCompilation({ host, system: sys, @@ -981,7 +981,7 @@ function updateWatchCompilationHost( cb: ExecuteCommandLineCallbacks, watchCompilerHost: WatchCompilerHost, ) { - watchCompilerHost.getJSDocParsingMode = () => jsDocParsingMode; + watchCompilerHost.jsDocParsingMode = jsDocParsingMode; updateCreateProgram(sys, watchCompilerHost, /*isBuildMode*/ false); const emitFilesUsingBuilder = watchCompilerHost.afterProgramCreate!; // TODO: GH#18217 watchCompilerHost.afterProgramCreate = builderProgram => { @@ -1009,6 +1009,7 @@ function createWatchOfConfigFile( optionsToExtend, watchOptionsToExtend, system, + jsDocParsingMode, reportDiagnostic, reportWatchStatus: createWatchStatusReporter(system, configParseResult.options), }); @@ -1031,6 +1032,7 @@ function createWatchOfFilesAndCompilerOptions( options, watchOptions, system, + jsDocParsingMode, reportDiagnostic, reportWatchStatus: createWatchStatusReporter(system, options), }); diff --git a/src/harness/fakesHosts.ts b/src/harness/fakesHosts.ts index 9d30f00218980..4ddb528940f51 100644 --- a/src/harness/fakesHosts.ts +++ b/src/harness/fakesHosts.ts @@ -248,13 +248,14 @@ export class CompilerHost implements ts.CompilerHost { private readonly _outputsMap: collections.SortedMap; public readonly traces: string[] = []; public readonly shouldAssertInvariants = !Harness.lightMode; + public readonly jsDocParsingMode: ts.JSDocParsingMode | undefined; private _setParentNodes: boolean; private _sourceFiles: collections.SortedMap; private _parseConfigHost: ParseConfigHost | undefined; private _newLine: string; - constructor(sys: System | vfs.FileSystem, options = ts.getDefaultCompilerOptions(), setParentNodes = false) { + constructor(sys: System | vfs.FileSystem, options = ts.getDefaultCompilerOptions(), setParentNodes = false, jsDocParsingMode?: ts.JSDocParsingMode) { if (sys instanceof vfs.FileSystem) sys = new System(sys); this.sys = sys; this.defaultLibLocation = sys.vfs.meta.get("defaultLibLocation") || ""; @@ -262,6 +263,7 @@ export class CompilerHost implements ts.CompilerHost { this._sourceFiles = new collections.SortedMap({ comparer: sys.vfs.stringComparer, sort: "insertion" }); this._setParentNodes = setParentNodes; this._outputsMap = new collections.SortedMap(this.vfs.stringComparer); + this.jsDocParsingMode = jsDocParsingMode; } public get vfs() { @@ -374,7 +376,7 @@ export class CompilerHost implements ts.CompilerHost { } } - const parsed = ts.createSourceFile(fileName, content, languageVersionOrOptions, this._setParentNodes || this.shouldAssertInvariants); + const parsed = ts.createSourceFile(fileName, content, languageVersionOrOptions, this.jsDocParsingMode, this._setParentNodes || this.shouldAssertInvariants); if (this.shouldAssertInvariants) { Utils.assertInvariants(parsed, /*parent*/ undefined); } @@ -561,13 +563,13 @@ export function patchHostForBuildInfoWrite(sys: T, version: export class SolutionBuilderHost extends CompilerHost implements ts.SolutionBuilderHost { createProgram: ts.CreateProgram; - private constructor(sys: System | vfs.FileSystem, options?: ts.CompilerOptions, setParentNodes?: boolean, createProgram?: ts.CreateProgram) { - super(sys, options, setParentNodes); + private constructor(sys: System | vfs.FileSystem, options?: ts.CompilerOptions, setParentNodes?: boolean, createProgram?: ts.CreateProgram, jsDocParsingMode?: ts.JSDocParsingMode) { + super(sys, options, setParentNodes, jsDocParsingMode); this.createProgram = createProgram || ts.createEmitAndSemanticDiagnosticsBuilderProgram as unknown as ts.CreateProgram; } - static create(sys: System | vfs.FileSystem, options?: ts.CompilerOptions, setParentNodes?: boolean, createProgram?: ts.CreateProgram) { - const host = new SolutionBuilderHost(sys, options, setParentNodes, createProgram); + static create(sys: System | vfs.FileSystem, options?: ts.CompilerOptions, setParentNodes?: boolean, createProgram?: ts.CreateProgram, jsDocParsingMode?: ts.JSDocParsingMode) { + const host = new SolutionBuilderHost(sys, options, setParentNodes, createProgram, jsDocParsingMode); patchHostForBuildInfoReadWrite(host.sys); return host; } diff --git a/src/harness/fourslashImpl.ts b/src/harness/fourslashImpl.ts index 8979ff61dad21..99915f897484e 100644 --- a/src/harness/fourslashImpl.ts +++ b/src/harness/fourslashImpl.ts @@ -2770,6 +2770,7 @@ export class TestState { options, /*version:*/ "0", /*setNodeParents*/ false, + /*jsDocParsingMode*/ undefined, ); const referenceSyntaxDiagnostics = referenceSourceFile.parseDiagnostics; diff --git a/src/harness/harnessIO.ts b/src/harness/harnessIO.ts index 3ef0e2d0beaf6..fee63c263cf27 100644 --- a/src/harness/harnessIO.ts +++ b/src/harness/harnessIO.ts @@ -249,7 +249,7 @@ export namespace Compiler { const shouldAssertInvariants = !lightMode; // Only set the parent nodes if we're asserting invariants. We don't need them otherwise. - const result = ts.createSourceFile(fileName, sourceText, languageVersionOrOptions, /*setParentNodes:*/ shouldAssertInvariants); + const result = ts.createSourceFile(fileName, sourceText, languageVersionOrOptions, /*jsDocParsingMode*/ undefined, /*setParentNodes:*/ shouldAssertInvariants); if (shouldAssertInvariants) { Utils.assertInvariants(result, /*parent:*/ undefined); @@ -923,7 +923,7 @@ export namespace Compiler { jsCode += "\r\n"; } if (!result.diagnostics.length && !ts.endsWith(file.file, ts.Extension.Json)) { - const fileParseResult = ts.createSourceFile(file.file, file.text, ts.getEmitScriptTarget(options), /*setParentNodes*/ false, ts.endsWith(file.file, "x") ? ts.ScriptKind.JSX : ts.ScriptKind.JS); + const fileParseResult = ts.createSourceFile(file.file, file.text, ts.getEmitScriptTarget(options), /*jsDocParsingMode*/ undefined, /*setParentNodes*/ false, ts.endsWith(file.file, "x") ? ts.ScriptKind.JSX : ts.ScriptKind.JS); if (ts.length(fileParseResult.parseDiagnostics)) { jsCode += getErrorBaseline([file.asTestFile()], fileParseResult.parseDiagnostics); return; diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 01d8a2a30a1b4..9aaaac8bf56d0 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -1000,8 +1000,7 @@ export class ProjectService { /** @internal */ verifyDocumentRegistry = noop; - /** @internal */ - private readonly jsDocParsingMode: JSDocParsingMode | undefined; + readonly jsDocParsingMode: JSDocParsingMode | undefined; constructor(opts: ProjectServiceOptions) { this.host = opts.host; @@ -1055,7 +1054,7 @@ export class ProjectService { extraFileExtensions: [], }; - this.documentRegistry = createDocumentRegistryInternal(this.host.useCaseSensitiveFileNames, this.currentDirectory, this); + this.documentRegistry = createDocumentRegistryInternal(this.host.useCaseSensitiveFileNames, this.currentDirectory, this.jsDocParsingMode, this); const watchLogLevel = this.logger.hasLevel(LogLevel.verbose) ? WatchLogLevel.Verbose : this.logger.loggingEnabled() ? WatchLogLevel.TriggerOnly : WatchLogLevel.None; const log: (s: string) => void = watchLogLevel !== WatchLogLevel.None ? (s => this.logger.info(s)) : noop; @@ -4579,10 +4578,6 @@ export class ProjectService { getIncompleteCompletionsCache() { return this.incompleteCompletionsCache ||= createIncompleteCompletionsCache(); } - - getJSDocParsingMode() { - return this.jsDocParsingMode; - } } function createIncompleteCompletionsCache(): IncompleteCompletionsCache { diff --git a/src/server/project.ts b/src/server/project.ts index 5b10ca7fb26df..4eb1ce0695c27 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -508,7 +508,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo createHash = maybeBind(this.projectService.host, this.projectService.host.createHash); /** @internal */ - readonly getJSDocParsingMode?: () => JSDocParsingMode | undefined; + readonly jsDocParsingMode: JSDocParsingMode | undefined; /** @internal */ constructor( @@ -528,7 +528,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo this.directoryStructureHost = directoryStructureHost; this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory); this.getCanonicalFileName = this.projectService.toCanonicalFileName; - this.getJSDocParsingMode = maybeBind(this.projectService, this.projectService.getJSDocParsingMode); + this.jsDocParsingMode = this.projectService.jsDocParsingMode; this.cancellationToken = new ThrottledCancellationToken(this.projectService.cancellationToken, this.projectService.throttleWaitMilliseconds); if (!this.compilerOptions) { diff --git a/src/services/documentRegistry.ts b/src/services/documentRegistry.ts index 9fc06295100cd..934909aa5d1ec 100644 --- a/src/services/documentRegistry.ts +++ b/src/services/documentRegistry.ts @@ -16,6 +16,7 @@ import { identity, IScriptSnapshot, isDeclarationFileName, + JSDocParsingMode, MinimalResolutionCacheHost, Path, ResolutionMode, @@ -178,14 +179,14 @@ export function isDocumentRegistryEntry(entry: BucketEntry): entry is DocumentRe return !!(entry as DocumentRegistryEntry).sourceFile; } -export function createDocumentRegistry(useCaseSensitiveFileNames?: boolean, currentDirectory?: string): DocumentRegistry { - return createDocumentRegistryInternal(useCaseSensitiveFileNames, currentDirectory); +export function createDocumentRegistry(useCaseSensitiveFileNames?: boolean, currentDirectory?: string, jsDocParsingMode?: JSDocParsingMode): DocumentRegistry { + return createDocumentRegistryInternal(useCaseSensitiveFileNames, currentDirectory, jsDocParsingMode); } /** @internal */ export type DocumentRegistryBucketKeyWithMode = string & { __documentRegistryBucketKeyWithMode: any; }; /** @internal */ -export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boolean, currentDirectory = "", externalCache?: ExternalDocumentCache): DocumentRegistry { +export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boolean, currentDirectory = "", jsDocParsingMode?: JSDocParsingMode, externalCache?: ExternalDocumentCache): DocumentRegistry { // Maps from compiler setting target (ES3, ES5, etc.) to all the cached documents we have // for those settings. const buckets = new Map>(); @@ -309,7 +310,7 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole if (!entry) { // Have never seen this file with these settings. Create a new source file for it. - const sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, sourceFileOptions, version, /*setNodeParents*/ false, scriptKind); + const sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, sourceFileOptions, version, /*setNodeParents*/ false, jsDocParsingMode, scriptKind); if (externalCache) { externalCache.setDocument(keyWithMode, path, sourceFile); } diff --git a/src/services/services.ts b/src/services/services.ts index ff727185cf540..1ced3ac2dcd39 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1363,7 +1363,7 @@ class SyntaxTreeCache { ), setExternalModuleIndicator: getSetExternalModuleIndicator(this.host.getCompilationSettings()), }; - sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, this.host.getJSDocParsingMode?.()); + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, this.host.jsDocParsingMode, scriptKind); } else if (this.currentFileVersion !== version) { // This is the same file, just a newer version. Incrementally parse the file. @@ -1394,10 +1394,10 @@ export function createLanguageServiceSourceFile( scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, + jsDocParsingMode: JSDocParsingMode | undefined, scriptKind?: ScriptKind, - jsDocParsingMode?: JSDocParsingMode, ): SourceFile { - const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind, jsDocParsingMode); + const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, jsDocParsingMode, setNodeParents, scriptKind); setSourceFileFields(sourceFile, scriptSnapshot, version); return sourceFile; } @@ -1459,7 +1459,7 @@ export function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSn setExternalModuleIndicator: sourceFile.setExternalModuleIndicator, }; // Otherwise, just create a new source file. - return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.scriptKind, sourceFile.jsDocParsingMode); + return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.jsDocParsingMode, sourceFile.scriptKind); } const NoopCancellationToken: CancellationToken = { diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 47f5cceabd8a7..bb28cc63d2d1b 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -109,6 +109,7 @@ import { JSDoc, JSDocComment, JSDocParameterTag, + JSDocParsingMode, JSDocReturnTag, JSDocTag, JSDocTypeTag, @@ -1290,7 +1291,7 @@ namespace changesToText { export function newFileChangesWorker(scriptKind: ScriptKind, insertions: readonly NewFileInsertion[], newLineCharacter: string, formatContext: formatting.FormatContext): string { // TODO: this emits the file, parses it back, then formats it that -- may be a less roundabout way to do this const nonFormattedText = flatMap(insertions, insertion => insertion.statements.map(s => s === SyntaxKind.NewLineTrivia ? "" : getNonformattedText(s, insertion.oldFile, newLineCharacter).text)).join(newLineCharacter); - const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, /*setParentNodes*/ true, scriptKind); + const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, JSDocParsingMode.SkipAll, /*setParentNodes*/ true, scriptKind); const changes = formatting.formatDocument(sourceFile, formatContext); return applyChanges(nonFormattedText, changes) + newLineCharacter; } diff --git a/src/services/transpile.ts b/src/services/transpile.ts index d68f49fd4a3ed..cad8264f3e7c8 100644 --- a/src/services/transpile.ts +++ b/src/services/transpile.ts @@ -20,6 +20,7 @@ import { getSetExternalModuleIndicator, hasProperty, isString, + JSDocParsingMode, MapLike, normalizePath, optionDeclarations, @@ -121,6 +122,7 @@ export function transpileModule(input: string, transpileOptions: TranspileOption impliedNodeFormat: getImpliedNodeFormatForFile(toPath(inputFileName, "", compilerHost.getCanonicalFileName), /*packageJsonInfoCache*/ undefined, compilerHost, options), setExternalModuleIndicator: getSetExternalModuleIndicator(options), }, + JSDocParsingMode.SkipAll, ); if (transpileOptions.moduleName) { sourceFile.moduleName = transpileOptions.moduleName; diff --git a/src/services/types.ts b/src/services/types.ts index 5623e40b87264..c1d92f808dccf 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -429,7 +429,7 @@ export interface LanguageServiceHost extends GetEffectiveTypeRootsHost, MinimalR /** @internal */ onReleaseParsedCommandLine?(configFileName: string, oldResolvedRef: ResolvedProjectReference | undefined, optionOptions: CompilerOptions): void; /** @internal */ getIncompleteCompletionsCache?(): IncompleteCompletionsCache; - getJSDocParsingMode?(): JSDocParsingMode | undefined; + jsDocParsingMode?: JSDocParsingMode; } /** @internal */ diff --git a/src/testRunner/unittests/customTransforms.ts b/src/testRunner/unittests/customTransforms.ts index c401275203d63..2cfcbe952fd89 100644 --- a/src/testRunner/unittests/customTransforms.ts +++ b/src/testRunner/unittests/customTransforms.ts @@ -4,7 +4,7 @@ import * as ts from "../_namespaces/ts"; describe("unittests:: customTransforms", () => { function emitsCorrectly(name: string, sources: { file: string; text: string; }[], customTransformers: ts.CustomTransformers, options: ts.CompilerOptions = {}) { it(name, () => { - const roots = sources.map(source => ts.createSourceFile(source.file, source.text, ts.ScriptTarget.ES2015)); + const roots = sources.map(source => ts.createSourceFile(source.file, source.text, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined)); const fileMap = ts.arrayToMap(roots, file => file.fileName); const outputs = new Map(); const host: ts.CompilerHost = { diff --git a/src/testRunner/unittests/helpers.ts b/src/testRunner/unittests/helpers.ts index b01502e93b8f6..a9ae314541ea3 100644 --- a/src/testRunner/unittests/helpers.ts +++ b/src/testRunner/unittests/helpers.ts @@ -96,7 +96,7 @@ export class SourceText implements ts.IScriptSnapshot { } function createSourceFileWithText(fileName: string, sourceText: SourceText, target: ts.ScriptTarget) { - const file = ts.createSourceFile(fileName, sourceText.getFullText(), target) as SourceFileWithText; + const file = ts.createSourceFile(fileName, sourceText.getFullText(), target, /*jsDocParsingMode*/ undefined) as SourceFileWithText; file.sourceText = sourceText; file.version = "" + sourceText.getVersion(); return file; diff --git a/src/testRunner/unittests/helpers/solutionBuilder.ts b/src/testRunner/unittests/helpers/solutionBuilder.ts index da77ca79ed0b3..2b1e513914051 100644 --- a/src/testRunner/unittests/helpers/solutionBuilder.ts +++ b/src/testRunner/unittests/helpers/solutionBuilder.ts @@ -23,7 +23,7 @@ export function createSolutionBuilderHostForBaseline( ) { if (sys instanceof fakes.System) makeSystemReadyForBaseline(sys, versionToWrite); const { cb } = commandLineCallbacks(sys, originalRead); - const host = ts.createSolutionBuilderHost(sys, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true)); + const host = ts.createSolutionBuilderHost(sys, /*jsDocParsingMode*/ undefined, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true)); host.afterProgramEmitAndDiagnostics = cb; host.afterEmitBundle = cb; return host; diff --git a/src/testRunner/unittests/helpers/tscWatch.ts b/src/testRunner/unittests/helpers/tscWatch.ts index e21c7de9f9f36..699f3afcda137 100644 --- a/src/testRunner/unittests/helpers/tscWatch.ts +++ b/src/testRunner/unittests/helpers/tscWatch.ts @@ -152,7 +152,7 @@ export function createBaseline(system: TestServerHost, modifySystem?: (sys: Test } export function createSolutionBuilderWithWatchHostForBaseline(sys: TestServerHost, cb: ts.ExecuteCommandLineCallbacks) { - const host = ts.createSolutionBuilderWithWatchHost(sys, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true), ts.createWatchStatusReporter(sys, /*pretty*/ true)); + const host = ts.createSolutionBuilderWithWatchHost(sys, /*jsDocParsingMode*/ undefined, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true), ts.createWatchStatusReporter(sys, /*pretty*/ true)); host.afterProgramEmitAndDiagnostics = cb; host.afterEmitBundle = cb; return host; diff --git a/src/testRunner/unittests/incrementalParser.ts b/src/testRunner/unittests/incrementalParser.ts index a42044d0a67db..5c2772d79c1fe 100644 --- a/src/testRunner/unittests/incrementalParser.ts +++ b/src/testRunner/unittests/incrementalParser.ts @@ -17,7 +17,7 @@ function withDelete(text: ts.IScriptSnapshot, start: number, length: number): { } function createTree(text: ts.IScriptSnapshot, version: string) { - return ts.createLanguageServiceSourceFile(/*fileName:*/ "", text, ts.ScriptTarget.Latest, version, /*setNodeParents*/ true); + return ts.createLanguageServiceSourceFile(/*fileName:*/ "", text, ts.ScriptTarget.Latest, version, /*setNodeParents*/ true, /*jsDocParsingMode*/ undefined); } function assertSameDiagnostics(file1: ts.SourceFile, file2: ts.SourceFile) { diff --git a/src/testRunner/unittests/jsDocParsing.ts b/src/testRunner/unittests/jsDocParsing.ts index 56ba3a9cc05eb..f2acbb22bf8d0 100644 --- a/src/testRunner/unittests/jsDocParsing.ts +++ b/src/testRunner/unittests/jsDocParsing.ts @@ -486,7 +486,7 @@ oh.no }); describe("getFirstToken", () => { it("gets jsdoc", () => { - const root = ts.createSourceFile("foo.ts", "/** comment */var a = true;", ts.ScriptTarget.ES5, /*setParentNodes*/ true); + const root = ts.createSourceFile("foo.ts", "/** comment */var a = true;", ts.ScriptTarget.ES5, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); assert.isDefined(root); assert.equal(root.kind, ts.SyntaxKind.SourceFile); const first = root.getFirstToken(); @@ -496,7 +496,7 @@ oh.no }); describe("getLastToken", () => { it("gets jsdoc", () => { - const root = ts.createSourceFile("foo.ts", "var a = true;/** comment */", ts.ScriptTarget.ES5, /*setParentNodes*/ true); + const root = ts.createSourceFile("foo.ts", "var a = true;/** comment */", ts.ScriptTarget.ES5, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); assert.isDefined(root); const last = root.getLastToken(); assert.isDefined(last); @@ -505,7 +505,7 @@ oh.no }); describe("getStart", () => { it("runs when node with JSDoc but no parent pointers", () => { - const root = ts.createSourceFile("foo.ts", "/** */var a = true;", ts.ScriptTarget.ES5, /*setParentNodes*/ false); + const root = ts.createSourceFile("foo.ts", "/** */var a = true;", ts.ScriptTarget.ES5, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ false); root.statements[0].getStart(root, /*includeJsDocComment*/ true); }); }); diff --git a/src/testRunner/unittests/moduleResolution.ts b/src/testRunner/unittests/moduleResolution.ts index 1d349555399fb..86253a82609cb 100644 --- a/src/testRunner/unittests/moduleResolution.ts +++ b/src/testRunner/unittests/moduleResolution.ts @@ -390,7 +390,7 @@ describe("unittests:: moduleResolution:: Relative imports", () => { getSourceFile: (fileName: string, languageVersion: ts.ScriptTarget) => { const path = ts.normalizePath(ts.combinePaths(currentDirectory, fileName)); const file = files.get(path); - return file ? ts.createSourceFile(fileName, file, languageVersion) : undefined; + return file ? ts.createSourceFile(fileName, file, languageVersion, /*jsDocParsingMode*/ undefined) : undefined; }, getDefaultLibFileName: () => "lib.d.ts", writeFile: ts.notImplemented, @@ -497,13 +497,13 @@ describe("unittests:: moduleResolution:: Files with different casing with forceC getSourceFile: (fileName: string, languageVersion: ts.ScriptTarget) => { if (fileName === "lib.d.ts") { if (!library) { - library = ts.createSourceFile("lib.d.ts", "", ts.ScriptTarget.ES5); + library = ts.createSourceFile("lib.d.ts", "", ts.ScriptTarget.ES5, /*jsDocParsingMode*/ undefined); } return library; } const path = getCanonicalFileName(ts.normalizePath(ts.combinePaths(currentDirectory, fileName))); const file = files.get(path); - return file ? ts.createSourceFile(fileName, file, languageVersion) : undefined; + return file ? ts.createSourceFile(fileName, file, languageVersion, /*jsDocParsingMode*/ undefined) : undefined; }, getDefaultLibFileName: () => "lib.d.ts", writeFile: ts.notImplemented, @@ -1033,7 +1033,7 @@ describe("unittests:: moduleResolution:: Type reference directive resolution: ", files.forEach(file => baselines.push(`//// [${file.name}]\n${file.content || ""}`, "")); const names = ts.map(files, f => f.name); - const sourceFiles = ts.arrayToMap(ts.map(files, f => ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015)), f => f.fileName); + const sourceFiles = ts.arrayToMap(ts.map(files, f => ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined)), f => f.fileName); const compilerHost: ts.CompilerHost = { fileExists: fileName => sourceFiles.has(fileName), getSourceFile: fileName => sourceFiles.get(fileName), @@ -1072,7 +1072,7 @@ describe("unittests:: moduleResolution:: Type reference directive resolution: ", export function foo(): Stat; }`, }; - const file = ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015); + const file = ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined); const compilerHost: ts.CompilerHost = { fileExists: fileName => fileName === file.fileName, getSourceFile: fileName => fileName === file.fileName ? file : undefined, @@ -1101,7 +1101,7 @@ describe("unittests:: moduleResolution:: Type reference directive resolution: ", export function foo(): Stat; }`, }; - const file = ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015); + const file = ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined); const compilerHost: ts.CompilerHost = { fileExists: fileName => fileName === file.fileName, getSourceFile: fileName => fileName === file.fileName ? file : undefined, diff --git a/src/testRunner/unittests/printer.ts b/src/testRunner/unittests/printer.ts index dd724ed73f855..57ea267296036 100644 --- a/src/testRunner/unittests/printer.ts +++ b/src/testRunner/unittests/printer.ts @@ -56,6 +56,7 @@ describe("unittests:: PrinterAPI", () => { function functionWithDefaultArgValue(argument: string = "defaultValue"): void { } `, ts.ScriptTarget.ES2015, + /*jsDocParsingMode*/ undefined, ); }); printsCorrectly("default", {}, printer => printer.printFile(sourceFile)); @@ -64,18 +65,19 @@ describe("unittests:: PrinterAPI", () => { // https://github.com/microsoft/TypeScript/issues/14948 // eslint-disable-next-line no-template-curly-in-string - printsCorrectly("templateLiteral", {}, printer => printer.printFile(ts.createSourceFile("source.ts", "let greeting = `Hi ${name}, how are you?`;", ts.ScriptTarget.ES2017))); + printsCorrectly("templateLiteral", {}, printer => printer.printFile(ts.createSourceFile("source.ts", "let greeting = `Hi ${name}, how are you?`;", ts.ScriptTarget.ES2017, /*jsDocParsingMode*/ undefined))); // https://github.com/microsoft/TypeScript/issues/18071 - printsCorrectly("regularExpressionLiteral", {}, printer => printer.printFile(ts.createSourceFile("source.ts", "let regex = /abc/;", ts.ScriptTarget.ES2017))); + printsCorrectly("regularExpressionLiteral", {}, printer => printer.printFile(ts.createSourceFile("source.ts", "let regex = /abc/;", ts.ScriptTarget.ES2017, /*jsDocParsingMode*/ undefined))); // https://github.com/microsoft/TypeScript/issues/22239 - printsCorrectly("importStatementRemoveComments", { removeComments: true }, printer => printer.printFile(ts.createSourceFile("source.ts", "import {foo} from 'foo';", ts.ScriptTarget.ESNext))); + printsCorrectly("importStatementRemoveComments", { removeComments: true }, printer => printer.printFile(ts.createSourceFile("source.ts", "import {foo} from 'foo';", ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined))); printsCorrectly("classHeritageClauses", {}, printer => printer.printFile(ts.createSourceFile( "source.ts", `class A extends B implements C implements D {}`, ts.ScriptTarget.ES2017, + /*jsDocParsingMode*/ undefined, ))); // https://github.com/microsoft/TypeScript/issues/35093 @@ -88,6 +90,7 @@ describe("unittests:: PrinterAPI", () => { let x!: string;`, ts.ScriptTarget.ES2017, + /*jsDocParsingMode*/ undefined, ))); // https://github.com/microsoft/TypeScript/issues/35054 @@ -96,6 +99,7 @@ describe("unittests:: PrinterAPI", () => { "source.ts", String.raw``, ts.ScriptTarget.ESNext, + /*jsDocParsingMode*/ undefined, /*setParentNodes*/ undefined, ts.ScriptKind.TSX, )); @@ -147,6 +151,7 @@ describe("unittests:: PrinterAPI", () => { const a = 1; `, ts.ScriptTarget.ES2015, + /*jsDocParsingMode*/ undefined, ), ts.createSourceFile( "b.ts", @@ -157,6 +162,7 @@ describe("unittests:: PrinterAPI", () => { const b = 2; `, ts.ScriptTarget.ES2015, + /*jsDocParsingMode*/ undefined, ), ]); }); @@ -182,14 +188,14 @@ describe("unittests:: PrinterAPI", () => { /*initializer*/ undefined, )], ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), )); printsCorrectly("namespaceExportDeclaration", {}, printer => printer.printNode( ts.EmitHint.Unspecified, ts.factory.createNamespaceExportDeclaration("B"), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), )); printsCorrectly("newExpressionWithPropertyAccessOnCallExpression", {}, printer => @@ -203,7 +209,7 @@ describe("unittests:: PrinterAPI", () => { /*typeArguments*/ undefined, /*argumentsArray*/ undefined, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ESNext), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined), )); printsCorrectly("newExpressionOnConditionalExpression", {}, printer => @@ -220,7 +226,7 @@ describe("unittests:: PrinterAPI", () => { /*typeArguments*/ undefined, /*argumentsArray*/ undefined, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ESNext), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined), )); printsCorrectly("emptyGlobalAugmentation", {}, printer => @@ -232,7 +238,7 @@ describe("unittests:: PrinterAPI", () => { ts.factory.createModuleBlock(ts.emptyArray), ts.NodeFlags.GlobalAugmentation, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), )); printsCorrectly("emptyGlobalAugmentationWithNoDeclareKeyword", {}, printer => @@ -244,7 +250,7 @@ describe("unittests:: PrinterAPI", () => { ts.factory.createModuleBlock(ts.emptyArray), ts.NodeFlags.GlobalAugmentation, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), )); // https://github.com/Microsoft/TypeScript/issues/15971 @@ -276,7 +282,7 @@ describe("unittests:: PrinterAPI", () => { ), ], ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), )); // https://github.com/Microsoft/TypeScript/issues/15651 @@ -345,7 +351,7 @@ describe("unittests:: PrinterAPI", () => { ]), ts.EmitFlags.SingleLine, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), )); }); }); diff --git a/src/testRunner/unittests/programApi.ts b/src/testRunner/unittests/programApi.ts index 1d3d9528db3d4..7b9afec3dabc5 100644 --- a/src/testRunner/unittests/programApi.ts +++ b/src/testRunner/unittests/programApi.ts @@ -113,7 +113,7 @@ describe("unittests:: programApi:: Program.getMissingFilePaths", () => { const host: ts.CompilerHost = { getSourceFile: (fileName: string, languageVersion: ts.ScriptTarget, _onError?: (message: string) => void) => { - return fileName === "test.ts" ? ts.createSourceFile(fileName, testSource, languageVersion) : undefined; + return fileName === "test.ts" ? ts.createSourceFile(fileName, testSource, languageVersion, /*jsDocParsingMode*/ undefined) : undefined; }, getDefaultLibFileName: () => "", writeFile: (_fileName, _content) => { diff --git a/src/testRunner/unittests/publicApi.ts b/src/testRunner/unittests/publicApi.ts index 7fb4fb096c122..be18e8770e630 100644 --- a/src/testRunner/unittests/publicApi.ts +++ b/src/testRunner/unittests/publicApi.ts @@ -60,7 +60,7 @@ describe("unittests:: Public APIs:: JSDoc newlines", () => { */ function test() {}`; - const testSourceFile = ts.createSourceFile(testFilePath, testFileText, ts.ScriptTarget.Latest, /*setParentNodes*/ true); + const testSourceFile = ts.createSourceFile(testFilePath, testFileText, ts.ScriptTarget.Latest, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); const funcDec = testSourceFile.statements.find(ts.isFunctionDeclaration)!; const tags = ts.getJSDocTags(funcDec); assert.isDefined(tags[0].comment); @@ -207,7 +207,7 @@ describe("unittests:: Public APIs :: forEachChild of @param comments in JSDoc", */ var x `; - const sourceFile = ts.createSourceFile("/file.ts", content, ts.ScriptTarget.ESNext, /*setParentNodes*/ true); + const sourceFile = ts.createSourceFile("/file.ts", content, ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); const paramTag = sourceFile.getChildren()[0].getChildren()[0].getChildren()[0].getChildren()[0]; const kids = paramTag.getChildren(); const seen = new Set(); @@ -224,7 +224,7 @@ describe("unittests:: Public APIs:: getChild* methods on EndOfFileToken with JSD const content = ` /** jsdoc comment attached to EndOfFileToken */ `; - const sourceFile = ts.createSourceFile("/file.ts", content, ts.ScriptTarget.ESNext, /*setParentNodes*/ true); + const sourceFile = ts.createSourceFile("/file.ts", content, ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); const endOfFileToken = sourceFile.getChildren()[1]; assert.equal(endOfFileToken.getChildren().length, 1); assert.equal(endOfFileToken.getChildCount(), 1); diff --git a/src/testRunner/unittests/reuseProgramStructure.ts b/src/testRunner/unittests/reuseProgramStructure.ts index e066c5a334536..510dd23194920 100644 --- a/src/testRunner/unittests/reuseProgramStructure.ts +++ b/src/testRunner/unittests/reuseProgramStructure.ts @@ -586,6 +586,7 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { options, watchOptions: undefined, system, + jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); verifyProgramIsUptoDate(program, duplicate(rootFiles), duplicate(options)); } @@ -594,6 +595,7 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { const program = ts.createWatchProgram(ts.createWatchCompilerHostOfConfigFile({ configFileName, system, + jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); const { fileNames, options } = ts.parseConfigFileWithSystem(configFileName, {}, /*extendedConfigCache*/ undefined, /*watchOptionsToExtend*/ undefined, system, ts.notImplemented)!; // TODO: GH#18217 verifyProgramIsUptoDate(program, fileNames, options); @@ -738,6 +740,7 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { options, watchOptions: undefined, system, + jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); verifyProgramIsUptoDate(program, duplicate(rootFiles), duplicate(options)); }); @@ -773,6 +776,7 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { options, watchOptions: undefined, system, + jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); verifyProgramIsNotUptoDate(program, duplicate(newRootFiles), duplicate(options)); }); @@ -798,6 +802,7 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { options, watchOptions: undefined, system, + jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); verifyProgramIsNotUptoDate(program, duplicate(newRootFiles), duplicate(options)); }); diff --git a/src/testRunner/unittests/services/extract/ranges.ts b/src/testRunner/unittests/services/extract/ranges.ts index ce0312d3f1288..d738fa93c4099 100644 --- a/src/testRunner/unittests/services/extract/ranges.ts +++ b/src/testRunner/unittests/services/extract/ranges.ts @@ -6,7 +6,7 @@ import { function testExtractRangeFailed(caption: string, s: string, expectedErrors: string[]) { return it(caption, () => { const t = extractTest(s); - const file = ts.createSourceFile("a.ts", t.source, ts.ScriptTarget.Latest, /*setParentNodes*/ true); + const file = ts.createSourceFile("a.ts", t.source, ts.ScriptTarget.Latest, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); const selectionRange = t.ranges.get("selection"); if (!selectionRange) { throw new Error(`Test ${s} does not specify selection range`); @@ -21,7 +21,7 @@ function testExtractRangeFailed(caption: string, s: string, expectedErrors: stri function testExtractRange(caption: string, s: string) { return it(caption, () => { const t = extractTest(s); - const f = ts.createSourceFile("a.ts", t.source, ts.ScriptTarget.Latest, /*setParentNodes*/ true); + const f = ts.createSourceFile("a.ts", t.source, ts.ScriptTarget.Latest, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); const selectionRange = t.ranges.get("selection"); if (!selectionRange) { throw new Error(`Test ${s} does not specify selection range`); diff --git a/src/testRunner/unittests/services/organizeImports.ts b/src/testRunner/unittests/services/organizeImports.ts index ba87f5acba615..832099409e577 100644 --- a/src/testRunner/unittests/services/organizeImports.ts +++ b/src/testRunner/unittests/services/organizeImports.ts @@ -993,14 +993,14 @@ export * from "lib"; }); function parseImports(...importStrings: string[]): readonly ts.ImportDeclaration[] { - const sourceFile = ts.createSourceFile("a.ts", importStrings.join("\n"), ts.ScriptTarget.ES2015, /*setParentNodes*/ true, ts.ScriptKind.TS); + const sourceFile = ts.createSourceFile("a.ts", importStrings.join("\n"), ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true, ts.ScriptKind.TS); const imports = ts.filter(sourceFile.statements, ts.isImportDeclaration); assert.equal(imports.length, importStrings.length); return imports; } function parseExports(...exportStrings: string[]): readonly ts.ExportDeclaration[] { - const sourceFile = ts.createSourceFile("a.ts", exportStrings.join("\n"), ts.ScriptTarget.ES2015, /*setParentNodes*/ true, ts.ScriptKind.TS); + const sourceFile = ts.createSourceFile("a.ts", exportStrings.join("\n"), ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true, ts.ScriptKind.TS); const exports = ts.filter(sourceFile.statements, ts.isExportDeclaration); assert.equal(exports.length, exportStrings.length); return exports; diff --git a/src/testRunner/unittests/services/textChanges.ts b/src/testRunner/unittests/services/textChanges.ts index 57b3e206ef283..1df4467458a1f 100644 --- a/src/testRunner/unittests/services/textChanges.ts +++ b/src/testRunner/unittests/services/textChanges.ts @@ -30,7 +30,7 @@ describe("unittests:: services:: textChanges", () => { // validate that positions that were recovered from the printed text actually match positions that will be created if the same text is parsed. function verifyPositions(node: ts.Node, text: string): void { const nodeList = flattenNodes(node); - const sourceFile = ts.createSourceFile("f.ts", text, ts.ScriptTarget.ES2015); + const sourceFile = ts.createSourceFile("f.ts", text, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined); const parsedNodeList = flattenNodes(sourceFile.statements[0]); ts.zipWith(nodeList, parsedNodeList, (left, right) => { ts.Debug.assert(left.pos === right.pos); @@ -51,7 +51,7 @@ describe("unittests:: services:: textChanges", () => { function runSingleFileTest(caption: string, placeOpenBraceOnNewLineForFunctions: boolean, text: string, validateNodes: boolean, testBlock: (sourceFile: ts.SourceFile, changeTracker: ts.textChanges.ChangeTracker) => void) { it(caption, () => { - const sourceFile = ts.createSourceFile("source.ts", text, ts.ScriptTarget.ES2015, /*setParentNodes*/ true); + const sourceFile = ts.createSourceFile("source.ts", text, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); const rulesProvider = getRuleProvider(placeOpenBraceOnNewLineForFunctions); const changeTracker = new ts.textChanges.ChangeTracker(newLineCharacter, rulesProvider); testBlock(sourceFile, changeTracker); diff --git a/src/testRunner/unittests/services/utilities.ts b/src/testRunner/unittests/services/utilities.ts index 91b82462b479e..db488d101fdb9 100644 --- a/src/testRunner/unittests/services/utilities.ts +++ b/src/testRunner/unittests/services/utilities.ts @@ -12,6 +12,7 @@ describe("unittests:: services:: utilities", () => { const core = window.Abcd.core; })();`, ts.ScriptTarget.ESNext, + /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true, ); // can't use ts.getTokenAtPosition because it returns back the wrong token diff --git a/src/testRunner/unittests/skipJSDocParsing.ts b/src/testRunner/unittests/skipJSDocParsing.ts index fbea8e8a400b9..c4951e3867015 100644 --- a/src/testRunner/unittests/skipJSDocParsing.ts +++ b/src/testRunner/unittests/skipJSDocParsing.ts @@ -20,9 +20,9 @@ describe("unittests:: skipJSDocParsing", () => { for (const filename of filenames) { const testName = `${name}-${kindName}-${filename}`; it(testName, () => { - const sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); + const sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); assert.isTrue(sourceFile && sourceFile.parseDiagnostics.length === 0, "no errors issued"); - const sourceFileSkipped = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, jsDocParsingMode); + const sourceFileSkipped = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, jsDocParsingMode, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); assert.isTrue(sourceFileSkipped && sourceFileSkipped.parseDiagnostics.length === 0, "no errors issued"); const patch = Diff.createTwoFilesPatch("default", kindName, Utils.sourceFileToJSON(sourceFile), Utils.sourceFileToJSON(sourceFileSkipped)); diff --git a/src/testRunner/unittests/transform.ts b/src/testRunner/unittests/transform.ts index 766a1d9f8ec9a..e5174a81e993f 100644 --- a/src/testRunner/unittests/transform.ts +++ b/src/testRunner/unittests/transform.ts @@ -79,7 +79,7 @@ describe("unittests:: TransformAPI", () => { } function transformSourceFile(sourceText: string, transformers: ts.TransformerFactory[]) { - const transformed = ts.transform(ts.createSourceFile("source.ts", sourceText, ts.ScriptTarget.ES2015), transformers); + const transformed = ts.transform(ts.createSourceFile("source.ts", sourceText, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), transformers); const printer = ts.createPrinter({ newLine: ts.NewLineKind.CarriageReturnLineFeed }, { onEmitNode: transformed.emitNodeWithNotification, substituteNode: transformed.substituteNode, @@ -592,7 +592,7 @@ module MyModule { // https://github.com/Microsoft/TypeScript/issues/24709 testBaseline("issue24709", () => { const fs = vfs.createFromFileSystem(Harness.IO, /*ignoreCase*/ true); - const transformed = ts.transform(ts.createSourceFile("source.ts", "class X { echo(x: string) { return x; } }", ts.ScriptTarget.ES3), [transformSourceFile]); + const transformed = ts.transform(ts.createSourceFile("source.ts", "class X { echo(x: string) { return x; } }", ts.ScriptTarget.ES3, /*jsDocParsingMode*/ undefined), [transformSourceFile]); const transformedSourceFile = transformed.transformed[0]; transformed.dispose(); const host = new fakes.CompilerHost(fs); diff --git a/src/testRunner/unittests/tsbuild/publicApi.ts b/src/testRunner/unittests/tsbuild/publicApi.ts index 5c9f03001d789..2de4a0b5ffb29 100644 --- a/src/testRunner/unittests/tsbuild/publicApi.ts +++ b/src/testRunner/unittests/tsbuild/publicApi.ts @@ -64,6 +64,7 @@ export function f22() { } // trailing`, const { cb, getPrograms } = commandLineCallbacks(sys, /*originalReadCall*/ undefined); const buildHost = ts.createSolutionBuilderHost( sys, + /*jsDocParsingMode*/ undefined, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true), diff --git a/src/testRunner/unittests/tsc/cancellationToken.ts b/src/testRunner/unittests/tsc/cancellationToken.ts index 8deb7cee76083..56185289c91b9 100644 --- a/src/testRunner/unittests/tsc/cancellationToken.ts +++ b/src/testRunner/unittests/tsc/cancellationToken.ts @@ -66,7 +66,7 @@ describe("unittests:: tsc:: builder cancellationToken", () => { sys, reportDiagnostic, )!; - const host = ts.createIncrementalCompilerHost(parsedConfig.options, sys); + const host = ts.createIncrementalCompilerHost(parsedConfig.options, /*jsDocParsingMode*/ undefined, sys); let programs: CommandLineProgram[] = ts.emptyArray; let oldPrograms: CommandLineProgram[] = ts.emptyArray; let builderProgram: ts.EmitAndSemanticDiagnosticsBuilderProgram = undefined!; diff --git a/src/testRunner/unittests/tscWatch/consoleClearing.ts b/src/testRunner/unittests/tscWatch/consoleClearing.ts index 60d1cb0e9690e..6cd154847bd13 100644 --- a/src/testRunner/unittests/tscWatch/consoleClearing.ts +++ b/src/testRunner/unittests/tscWatch/consoleClearing.ts @@ -55,6 +55,7 @@ describe("unittests:: tsc-watch:: console clearing", () => { system: baseline.sys, cb: baseline.cb, configFileName: configFile.path, + jsDocParsingMode: undefined, })); // Initially console is cleared if --preserveOutput is not provided since the config file is yet to be parsed runWatchBaseline({ diff --git a/src/testRunner/unittests/tscWatch/incremental.ts b/src/testRunner/unittests/tscWatch/incremental.ts index c2218d1ae6037..a9e4b8e89fbd5 100644 --- a/src/testRunner/unittests/tscWatch/incremental.ts +++ b/src/testRunner/unittests/tscWatch/incremental.ts @@ -172,7 +172,7 @@ describe("unittests:: tsc-watch:: emit file --incremental", () => { options: command.options, projectReferences: command.projectReferences, configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics(command), - host: ts.createIncrementalCompilerHost(command.options, system), + host: ts.createIncrementalCompilerHost(command.options, /*jsDocParsingMode*/ undefined, system), }); const state = builderProgram.getState(); diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index 5338f3b30dd4f..34ef32bad5871 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -629,6 +629,7 @@ export class A { options: { allowNonTsExtensions: true }, cb, watchOptions: undefined, + jsDocParsingMode: undefined, }); ts.createWatchProgram(host); baseline.push(`${sys.getExecutingFilePath()} --w ${file2.path} ${file3.path}`); @@ -649,6 +650,7 @@ export class A { options: { allowNonTsExtensions: true }, cb: cb2, watchOptions: undefined, + jsDocParsingMode: undefined, })); watchBaseline({ baseline, @@ -1209,6 +1211,7 @@ declare const eval: any`, options: { allowNonTsExtensions: true }, cb, watchOptions: undefined, + jsDocParsingMode: undefined, })); runWatchBaseline({ scenario, diff --git a/src/testRunner/unittests/tscWatch/resolutionCache.ts b/src/testRunner/unittests/tscWatch/resolutionCache.ts index 854f294a758ea..3fb52ed89cfb2 100644 --- a/src/testRunner/unittests/tscWatch/resolutionCache.ts +++ b/src/testRunner/unittests/tscWatch/resolutionCache.ts @@ -35,6 +35,7 @@ describe("unittests:: tsc-watch:: resolutionCache:: tsc-watch module resolution options: { module: ts.ModuleKind.AMD }, cb, watchOptions: undefined, + jsDocParsingMode: undefined, }); const originalFileExists = host.fileExists; const watch = ts.createWatchProgram(host); @@ -121,6 +122,7 @@ describe("unittests:: tsc-watch:: resolutionCache:: tsc-watch module resolution options: { module: ts.ModuleKind.AMD }, cb, watchOptions: undefined, + jsDocParsingMode: undefined, }); const originalFileExists = host.fileExists; let fileExistsCalledForBar = false; @@ -179,6 +181,7 @@ describe("unittests:: tsc-watch:: resolutionCache:: tsc-watch module resolution options: { module: ts.ModuleKind.AMD }, cb, watchOptions: undefined, + jsDocParsingMode: undefined, }); const originalFileExists = host.fileExists; let fileExistsCalledForBar = false; diff --git a/src/testRunner/unittests/tscWatch/sourceOfProjectReferenceRedirect.ts b/src/testRunner/unittests/tscWatch/sourceOfProjectReferenceRedirect.ts index 9977c12c6c604..f6df4e405e744 100644 --- a/src/testRunner/unittests/tscWatch/sourceOfProjectReferenceRedirect.ts +++ b/src/testRunner/unittests/tscWatch/sourceOfProjectReferenceRedirect.ts @@ -38,6 +38,7 @@ describe("unittests:: tsc-watch:: watchAPI:: with sourceOfProjectReferenceRedire configFileName: config, system: sys, cb, + jsDocParsingMode: undefined, }); host.useSourceOfProjectReferenceRedirect = ts.returnTrue; const watch = ts.createWatchProgram(host); diff --git a/src/testRunner/unittests/tscWatch/watchApi.ts b/src/testRunner/unittests/tscWatch/watchApi.ts index 2620266a6028d..615392b9dad3d 100644 --- a/src/testRunner/unittests/tscWatch/watchApi.ts +++ b/src/testRunner/unittests/tscWatch/watchApi.ts @@ -50,6 +50,7 @@ describe("unittests:: tsc-watch:: watchAPI:: tsc-watch with custom module resolu configFileName: config.path, system: sys, cb, + jsDocParsingMode: undefined, }); const parsedCommandResult = ts.parseJsonConfigFileContent(configFileJson, sys, config.path); host.resolveModuleNames = (moduleNames, containingFile) => @@ -91,6 +92,7 @@ describe("unittests:: tsc-watch:: watchAPI:: tsc-watch with custom module resolu configFileName: `/user/username/projects/myproject/tsconfig.json`, system: sys, cb, + jsDocParsingMode: undefined, }); host.resolveModuleNames = (moduleNames, containingFile, _reusedNames, _redirectedReference, options) => moduleNames.map(m => ts.resolveModuleName(m, containingFile, options, host).resolvedModule); // Invalidate resolutions only when ts file is created @@ -154,6 +156,7 @@ describe("unittests:: tsc-watch:: watchAPI:: tsc-watch expose error count to wat configFileName: config.path, system: sys, cb, + jsDocParsingMode: undefined, }); const existing = host.onWatchStatusChange!; let watchedErrorCount; @@ -191,6 +194,7 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost does not implement s configFileName: config.path, system: sys, cb, + jsDocParsingMode: undefined, }); host.setTimeout = undefined; host.clearTimeout = undefined; @@ -239,6 +243,7 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost can add extraFileExt extraFileExtensions: [{ extension: ".vue", isMixedContent: true, scriptKind: ts.ScriptKind.Deferred }], system: sys, cb, + jsDocParsingMode: undefined, }); const watch = ts.createWatchProgram(host); runWatchBaseline({ @@ -297,6 +302,7 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost uses createSemanticD createProgram, system: sys, cb, + jsDocParsingMode: undefined, }); const watch = ts.createWatchProgram(host); watchBaseline({ @@ -358,6 +364,7 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost uses createSemanticD createProgram: ts.createSemanticDiagnosticsBuilderProgram, system: sys, cb, + jsDocParsingMode: undefined, }); const watch = ts.createWatchProgram(host); runWatchBaseline({ @@ -475,6 +482,7 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost uses createSemanticD system: sys, reportDiagnostic, reportWatchStatus, + jsDocParsingMode: undefined, }); host.afterProgramCreate = program => { const diagnostics = ts.sortAndDeduplicateDiagnostics(program.getSemanticDiagnostics()); @@ -544,6 +552,7 @@ describe("unittests:: tsc-watch:: watchAPI:: when getParsedCommandLine is implem system, configFileName: config2.path, optionsToExtend: { extendedDiagnostics: true }, + jsDocParsingMode: undefined, }); compilerHost.useSourceOfProjectReferenceRedirect = useSourceOfProjectReferenceRedirect; const calledGetParsedCommandLine = new Set(); @@ -654,6 +663,7 @@ describe("unittests:: tsc-watch:: watchAPI:: when builder emit occurs with emitO system, configFileName: `/user/username/projects/myproject/tsconfig.json`, optionsToExtend: { extendedDiagnostics: true }, + jsDocParsingMode: undefined, }); const originalEmitProgram = compilerHost.afterProgramCreate; compilerHost.afterProgramCreate = myAfterProgramCreate; @@ -773,6 +783,7 @@ describe("unittests:: tsc-watch:: watchAPI:: when creating program with project options: commandLine.options, projectReferences: commandLine.projectReferences, watchOptions: commandLine.watchOptions, + jsDocParsingMode: undefined, }); const watch = ts.createWatchProgram(compilerHost); return { watch, baseline }; From 88bfd9e99ab1b04ce7a2db8ed0d904cbc54cfc94 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 15 Sep 2023 12:51:29 -0700 Subject: [PATCH 06/25] Revert by moving parameters back to optional --- src/compiler/parser.ts | 2 +- src/compiler/program.ts | 6 ++-- src/compiler/tsbuildPublic.ts | 10 +++---- src/compiler/watch.ts | 10 +++---- src/compiler/watchPublic.ts | 15 +++++----- src/executeCommandLine/executeCommandLine.ts | 8 +++--- src/harness/fakesHosts.ts | 2 +- src/harness/fourslashImpl.ts | 1 - src/harness/harnessIO.ts | 4 +-- src/services/documentRegistry.ts | 2 +- src/services/services.ts | 8 +++--- src/services/textChanges.ts | 2 +- src/services/transpile.ts | 4 ++- src/testRunner/unittests/customTransforms.ts | 2 +- src/testRunner/unittests/helpers.ts | 2 +- .../unittests/helpers/solutionBuilder.ts | 2 +- src/testRunner/unittests/helpers/tscWatch.ts | 2 +- src/testRunner/unittests/incrementalParser.ts | 2 +- src/testRunner/unittests/jsDocParsing.ts | 6 ++-- src/testRunner/unittests/moduleResolution.ts | 12 ++++---- src/testRunner/unittests/printer.ts | 28 ++++++++----------- src/testRunner/unittests/programApi.ts | 2 +- src/testRunner/unittests/publicApi.ts | 6 ++-- .../unittests/reuseProgramStructure.ts | 5 ---- .../unittests/services/extract/ranges.ts | 4 +-- .../unittests/services/organizeImports.ts | 4 +-- .../unittests/services/textChanges.ts | 4 +-- .../unittests/services/utilities.ts | 1 - src/testRunner/unittests/skipJSDocParsing.ts | 4 +-- src/testRunner/unittests/transform.ts | 4 +-- src/testRunner/unittests/tsbuild/publicApi.ts | 1 - .../unittests/tsc/cancellationToken.ts | 2 +- .../unittests/tscWatch/consoleClearing.ts | 1 - .../unittests/tscWatch/incremental.ts | 2 +- .../unittests/tscWatch/programUpdates.ts | 3 -- .../unittests/tscWatch/resolutionCache.ts | 3 -- .../sourceOfProjectReferenceRedirect.ts | 1 - src/testRunner/unittests/tscWatch/watchApi.ts | 11 -------- tests/baselines/reference/api/typescript.d.ts | 19 ++++++------- 39 files changed, 87 insertions(+), 120 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a824916c6d194..63f464ffe55e0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1329,9 +1329,9 @@ export function createSourceFile( fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, - jsDocParsingMode: JSDocParsingMode | undefined, setParentNodes = false, scriptKind?: ScriptKind, + jsDocParsingMode?: JSDocParsingMode, ): SourceFile { tracing?.push(tracing.Phase.Parse, "createSourceFile", { path: fileName }, /*separateBeginAndEnd*/ true); performance.mark("beforeParse"); diff --git a/src/compiler/program.ts b/src/compiler/program.ts index fe0f6235e6199..c1b7b8ec93b1e 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -395,7 +395,7 @@ export function computeCommonSourceDirectoryOfFilenames(fileNames: readonly stri } export function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean, jsDocParsingMode?: JSDocParsingMode): CompilerHost { - return createCompilerHostWorker(options, jsDocParsingMode, setParentNodes); + return createCompilerHostWorker(options, setParentNodes, /*system*/ undefined, jsDocParsingMode); } /** @internal */ @@ -419,7 +419,7 @@ export function createGetSourceFile( } text = ""; } - return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, jsDocParsingMode, setParentNodes, /*scriptKind*/ undefined) : undefined; + return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, jsDocParsingMode) : undefined; }; } @@ -459,9 +459,9 @@ export function createWriteFileMeasuringIO( /** @internal */ export function createCompilerHostWorker( options: CompilerOptions, - jsDocParsingMode: JSDocParsingMode | undefined, setParentNodes?: boolean, system: System = sys, + jsDocParsingMode?: JSDocParsingMode, ): CompilerHost { const existingDirectories = new Map(); const getCanonicalFileName = createGetCanonicalFileName(system.useCaseSensitiveFileNames); diff --git a/src/compiler/tsbuildPublic.ts b/src/compiler/tsbuildPublic.ts index d4be51e0182e7..bb518131792e5 100644 --- a/src/compiler/tsbuildPublic.ts +++ b/src/compiler/tsbuildPublic.ts @@ -303,7 +303,7 @@ export function createBuilderStatusReporter(system: System, pretty?: boolean): D }; } -function createSolutionBuilderHostBase(system: System, createProgram: CreateProgram | undefined, jsDocParsingMode: JSDocParsingMode | undefined, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter) { +function createSolutionBuilderHostBase(system: System, createProgram: CreateProgram | undefined, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, jsDocParsingMode?: JSDocParsingMode) { const host = createProgramHost(system, createProgram, jsDocParsingMode) as SolutionBuilderHostBase; host.getModifiedTime = system.getModifiedTime ? path => system.getModifiedTime!(path) : returnUndefined; host.setModifiedTime = system.setModifiedTime ? (path, date) => system.setModifiedTime!(path, date) : noop; @@ -314,14 +314,14 @@ function createSolutionBuilderHostBase(system: System, return host; } -export function createSolutionBuilderHost(system = sys, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary) { - const host = createSolutionBuilderHostBase(system, createProgram, jsDocParsingMode, reportDiagnostic, reportSolutionBuilderStatus) as SolutionBuilderHost; +export function createSolutionBuilderHost(system = sys, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary, jsDocParsingMode?: JSDocParsingMode) { + const host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus, jsDocParsingMode) as SolutionBuilderHost; host.reportErrorSummary = reportErrorSummary; return host; } -export function createSolutionBuilderWithWatchHost(system = sys, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter) { - const host = createSolutionBuilderHostBase(system, createProgram, jsDocParsingMode, reportDiagnostic, reportSolutionBuilderStatus) as SolutionBuilderWithWatchHost; +export function createSolutionBuilderWithWatchHost(system = sys, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, jsDocParsingMode?: JSDocParsingMode) { + const host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus, jsDocParsingMode) as SolutionBuilderWithWatchHost; const watchHost = createWatchHost(system, reportWatchStatus); copyProperties(host, watchHost); return host; diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index 192a3691998e1..980ebec1facdc 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -859,7 +859,7 @@ export function createProgramHost(system = sys, createProgram: CreateProgram | undefined, jsDocParsingMode: JSDocParsingMode | undefined, reportDiagnostic: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter): WatchCompilerHost { +function createWatchCompilerHost(system = sys, createProgram: CreateProgram | undefined, reportDiagnostic: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, jsDocParsingMode?: JSDocParsingMode): WatchCompilerHost { const write = (s: string) => system.write(s + system.newLine); const result = createProgramHost(system, createProgram, jsDocParsingMode) as WatchCompilerHost; copyProperties(result, createWatchHost(system, reportWatchStatus)); @@ -895,9 +895,9 @@ function reportUnrecoverableDiagnostic(system: System, reportDiagnostic: Diagnos export interface CreateWatchCompilerHostInput { system: System; createProgram?: CreateProgram; - jsDocParsingMode: JSDocParsingMode | undefined; reportDiagnostic?: DiagnosticReporter; reportWatchStatus?: WatchStatusReporter; + jsDocParsingMode?: JSDocParsingMode; } /** @internal */ @@ -924,7 +924,7 @@ export function createWatchCompilerHostOfConfigFile): WatchCompilerHostOfConfigFile { const diagnosticReporter = reportDiagnostic || createDiagnosticReporter(system); - const host = createWatchCompilerHost(system, createProgram, jsDocParsingMode, diagnosticReporter, reportWatchStatus) as WatchCompilerHostOfConfigFile; + const host = createWatchCompilerHost(system, createProgram, diagnosticReporter, reportWatchStatus, jsDocParsingMode) as WatchCompilerHostOfConfigFile; host.onUnRecoverableConfigFileDiagnostic = diagnostic => reportUnrecoverableDiagnostic(system, diagnosticReporter, diagnostic); host.configFileName = configFileName; host.optionsToExtend = optionsToExtend; @@ -956,7 +956,7 @@ export function createWatchCompilerHostOfFilesAndCompilerOptions): WatchCompilerHostOfFilesAndCompilerOptions { - const host = createWatchCompilerHost(system, createProgram, jsDocParsingMode, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus) as WatchCompilerHostOfFilesAndCompilerOptions; + const host = createWatchCompilerHost(system, createProgram, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus, jsDocParsingMode) as WatchCompilerHostOfFilesAndCompilerOptions; host.rootFiles = rootFiles; host.options = options; host.watchOptions = watchOptions; @@ -980,7 +980,7 @@ export interface IncrementalCompilationOptions { /** @internal */ export function performIncrementalCompilation(input: IncrementalCompilationOptions) { const system = input.system || sys; - const host = input.host || (input.host = createIncrementalCompilerHost(input.options, input.jsDocParsingMode, system)); + const host = input.host || (input.host = createIncrementalCompilerHost(input.options, system, input.jsDocParsingMode)); const builderProgram = createIncrementalProgram(input); const exitStatus = emitFilesAndReportErrorsAndGetExitStatus( builderProgram, diff --git a/src/compiler/watchPublic.ts b/src/compiler/watchPublic.ts index 926fd7b51b951..3660f6641e009 100644 --- a/src/compiler/watchPublic.ts +++ b/src/compiler/watchPublic.ts @@ -119,8 +119,8 @@ export function readBuilderProgram(compilerOptions: CompilerOptions, host: ReadB return createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host); } -export function createIncrementalCompilerHost(options: CompilerOptions, jsDocParsingMode: JSDocParsingMode | undefined, system = sys): CompilerHost { - const host = createCompilerHostWorker(options, jsDocParsingMode, /*setParentNodes*/ undefined, system); +export function createIncrementalCompilerHost(options: CompilerOptions, system = sys, jsDocParsingMode?: JSDocParsingMode): CompilerHost { + const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, system, jsDocParsingMode); host.createHash = maybeBind(system, system.createHash); host.storeFilesChangingSignatureDuringEmit = system.storeFilesChangingSignatureDuringEmit; setGetSourceFileAsHashVersioned(host); @@ -145,7 +145,7 @@ export function createIncrementalProgram): T { - host = host || createIncrementalCompilerHost(options, /*jsDocParsingMode*/ undefined); + host = host || createIncrementalCompilerHost(options); createProgram = createProgram || createEmitAndSemanticDiagnosticsBuilderProgram as any as CreateProgram; const oldProgram = readBuilderProgram(options, host) as any as T; return createProgram(rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences); @@ -256,8 +256,7 @@ export interface ProgramHost { */ getModuleResolutionCache?(): ModuleResolutionCache | undefined; - /** Kind of JSDoc parsing to use. */ - jsDocParsingMode: JSDocParsingMode | undefined; + jsDocParsingMode?: JSDocParsingMode; } /** * Internal interface used to wire emit through same host @@ -361,9 +360,9 @@ export interface WatchOfFilesAndCompilerOptions extends Watch { /** * Create the watch compiler host for either configFile or fileNames and its options */ -export function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[]): WatchCompilerHostOfConfigFile; -export function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions): WatchCompilerHostOfFilesAndCompilerOptions; -export function createWatchCompilerHost(rootFilesOrConfigFileName: string | string[], options: CompilerOptions | undefined, system: System, jsDocParsingMode: JSDocParsingMode | undefined, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferencesOrWatchOptionsToExtend?: readonly ProjectReference[] | WatchOptions, watchOptionsOrExtraFileExtensions?: WatchOptions | readonly FileExtensionInfo[]): WatchCompilerHostOfFilesAndCompilerOptions | WatchCompilerHostOfConfigFile { +export function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[], jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfConfigFile; +export function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions, jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfFilesAndCompilerOptions; +export function createWatchCompilerHost(rootFilesOrConfigFileName: string | string[], options: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferencesOrWatchOptionsToExtend?: readonly ProjectReference[] | WatchOptions, watchOptionsOrExtraFileExtensions?: WatchOptions | readonly FileExtensionInfo[], jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfFilesAndCompilerOptions | WatchCompilerHostOfConfigFile { if (isArray(rootFilesOrConfigFileName)) { return createWatchCompilerHostOfFilesAndCompilerOptions({ rootFiles: rootFilesOrConfigFileName, diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index f74c923fe9280..4bc499cc239e9 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -838,11 +838,11 @@ function performBuild( if (reportWatchModeWithoutSysSupport(sys, reportDiagnostic)) return; const buildHost = createSolutionBuilderWithWatchHost( sys, - jsDocParsingMode, /*createProgram*/ undefined, reportDiagnostic, createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createWatchStatusReporter(sys, buildOptions), + jsDocParsingMode, ); const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); @@ -868,11 +868,11 @@ function performBuild( const buildHost = createSolutionBuilderHost( sys, - jsDocParsingMode, /*createProgram*/ undefined, reportDiagnostic, createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createReportErrorSummary(sys, buildOptions), + jsDocParsingMode, ); const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); @@ -896,7 +896,7 @@ function performCompilation( config: ParsedCommandLine, ) { const { fileNames, options, projectReferences } = config; - const host = createCompilerHostWorker(options, jsDocParsingMode, /*setParentNodes*/ undefined, sys); + const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, sys, jsDocParsingMode); const currentDirectory = host.getCurrentDirectory(); const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); changeCompilerHostLikeToUseCache(host, fileName => toPath(fileName, currentDirectory, getCanonicalFileName)); @@ -929,7 +929,7 @@ function performIncrementalCompilation( ) { const { options, fileNames, projectReferences } = config; enableStatisticsAndTracing(sys, options, /*isBuildMode*/ false); - const host = createIncrementalCompilerHost(options, jsDocParsingMode, sys); + const host = createIncrementalCompilerHost(options, sys, jsDocParsingMode); const exitStatus = ts_performIncrementalCompilation({ host, system: sys, diff --git a/src/harness/fakesHosts.ts b/src/harness/fakesHosts.ts index 4ddb528940f51..f8b2ca0619f31 100644 --- a/src/harness/fakesHosts.ts +++ b/src/harness/fakesHosts.ts @@ -376,7 +376,7 @@ export class CompilerHost implements ts.CompilerHost { } } - const parsed = ts.createSourceFile(fileName, content, languageVersionOrOptions, this.jsDocParsingMode, this._setParentNodes || this.shouldAssertInvariants); + const parsed = ts.createSourceFile(fileName, content, languageVersionOrOptions, this._setParentNodes || this.shouldAssertInvariants, /*scriptKind*/ undefined, this.jsDocParsingMode); if (this.shouldAssertInvariants) { Utils.assertInvariants(parsed, /*parent*/ undefined); } diff --git a/src/harness/fourslashImpl.ts b/src/harness/fourslashImpl.ts index 99915f897484e..8979ff61dad21 100644 --- a/src/harness/fourslashImpl.ts +++ b/src/harness/fourslashImpl.ts @@ -2770,7 +2770,6 @@ export class TestState { options, /*version:*/ "0", /*setNodeParents*/ false, - /*jsDocParsingMode*/ undefined, ); const referenceSyntaxDiagnostics = referenceSourceFile.parseDiagnostics; diff --git a/src/harness/harnessIO.ts b/src/harness/harnessIO.ts index fee63c263cf27..3ef0e2d0beaf6 100644 --- a/src/harness/harnessIO.ts +++ b/src/harness/harnessIO.ts @@ -249,7 +249,7 @@ export namespace Compiler { const shouldAssertInvariants = !lightMode; // Only set the parent nodes if we're asserting invariants. We don't need them otherwise. - const result = ts.createSourceFile(fileName, sourceText, languageVersionOrOptions, /*jsDocParsingMode*/ undefined, /*setParentNodes:*/ shouldAssertInvariants); + const result = ts.createSourceFile(fileName, sourceText, languageVersionOrOptions, /*setParentNodes:*/ shouldAssertInvariants); if (shouldAssertInvariants) { Utils.assertInvariants(result, /*parent:*/ undefined); @@ -923,7 +923,7 @@ export namespace Compiler { jsCode += "\r\n"; } if (!result.diagnostics.length && !ts.endsWith(file.file, ts.Extension.Json)) { - const fileParseResult = ts.createSourceFile(file.file, file.text, ts.getEmitScriptTarget(options), /*jsDocParsingMode*/ undefined, /*setParentNodes*/ false, ts.endsWith(file.file, "x") ? ts.ScriptKind.JSX : ts.ScriptKind.JS); + const fileParseResult = ts.createSourceFile(file.file, file.text, ts.getEmitScriptTarget(options), /*setParentNodes*/ false, ts.endsWith(file.file, "x") ? ts.ScriptKind.JSX : ts.ScriptKind.JS); if (ts.length(fileParseResult.parseDiagnostics)) { jsCode += getErrorBaseline([file.asTestFile()], fileParseResult.parseDiagnostics); return; diff --git a/src/services/documentRegistry.ts b/src/services/documentRegistry.ts index 934909aa5d1ec..a2c679888384a 100644 --- a/src/services/documentRegistry.ts +++ b/src/services/documentRegistry.ts @@ -310,7 +310,7 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole if (!entry) { // Have never seen this file with these settings. Create a new source file for it. - const sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, sourceFileOptions, version, /*setNodeParents*/ false, jsDocParsingMode, scriptKind); + const sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, sourceFileOptions, version, /*setNodeParents*/ false, scriptKind, jsDocParsingMode); if (externalCache) { externalCache.setDocument(keyWithMode, path, sourceFile); } diff --git a/src/services/services.ts b/src/services/services.ts index 1ced3ac2dcd39..2048616816733 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1363,7 +1363,7 @@ class SyntaxTreeCache { ), setExternalModuleIndicator: getSetExternalModuleIndicator(this.host.getCompilationSettings()), }; - sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, this.host.jsDocParsingMode, scriptKind); + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, this.host.jsDocParsingMode); } else if (this.currentFileVersion !== version) { // This is the same file, just a newer version. Incrementally parse the file. @@ -1394,10 +1394,10 @@ export function createLanguageServiceSourceFile( scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, - jsDocParsingMode: JSDocParsingMode | undefined, scriptKind?: ScriptKind, + jsDocParsingMode?: JSDocParsingMode, ): SourceFile { - const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, jsDocParsingMode, setNodeParents, scriptKind); + const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind, jsDocParsingMode); setSourceFileFields(sourceFile, scriptSnapshot, version); return sourceFile; } @@ -1459,7 +1459,7 @@ export function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSn setExternalModuleIndicator: sourceFile.setExternalModuleIndicator, }; // Otherwise, just create a new source file. - return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.jsDocParsingMode, sourceFile.scriptKind); + return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.scriptKind, sourceFile.jsDocParsingMode); } const NoopCancellationToken: CancellationToken = { diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index bb28cc63d2d1b..9034e02d641cc 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -1291,7 +1291,7 @@ namespace changesToText { export function newFileChangesWorker(scriptKind: ScriptKind, insertions: readonly NewFileInsertion[], newLineCharacter: string, formatContext: formatting.FormatContext): string { // TODO: this emits the file, parses it back, then formats it that -- may be a less roundabout way to do this const nonFormattedText = flatMap(insertions, insertion => insertion.statements.map(s => s === SyntaxKind.NewLineTrivia ? "" : getNonformattedText(s, insertion.oldFile, newLineCharacter).text)).join(newLineCharacter); - const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, JSDocParsingMode.SkipAll, /*setParentNodes*/ true, scriptKind); + const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, /*setParentNodes*/ true, scriptKind, JSDocParsingMode.SkipAll); // TODO(jakebailey): make sure this is okay const changes = formatting.formatDocument(sourceFile, formatContext); return applyChanges(nonFormattedText, changes) + newLineCharacter; } diff --git a/src/services/transpile.ts b/src/services/transpile.ts index cad8264f3e7c8..9fa55e907b2fc 100644 --- a/src/services/transpile.ts +++ b/src/services/transpile.ts @@ -122,7 +122,9 @@ export function transpileModule(input: string, transpileOptions: TranspileOption impliedNodeFormat: getImpliedNodeFormatForFile(toPath(inputFileName, "", compilerHost.getCanonicalFileName), /*packageJsonInfoCache*/ undefined, compilerHost, options), setExternalModuleIndicator: getSetExternalModuleIndicator(options), }, - JSDocParsingMode.SkipAll, + /*setParentNodes*/ undefined, + /*scriptKind*/ undefined, + JSDocParsingMode.SkipAll, // TODO(jakebailey): make sure this is okay ); if (transpileOptions.moduleName) { sourceFile.moduleName = transpileOptions.moduleName; diff --git a/src/testRunner/unittests/customTransforms.ts b/src/testRunner/unittests/customTransforms.ts index 2cfcbe952fd89..c401275203d63 100644 --- a/src/testRunner/unittests/customTransforms.ts +++ b/src/testRunner/unittests/customTransforms.ts @@ -4,7 +4,7 @@ import * as ts from "../_namespaces/ts"; describe("unittests:: customTransforms", () => { function emitsCorrectly(name: string, sources: { file: string; text: string; }[], customTransformers: ts.CustomTransformers, options: ts.CompilerOptions = {}) { it(name, () => { - const roots = sources.map(source => ts.createSourceFile(source.file, source.text, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined)); + const roots = sources.map(source => ts.createSourceFile(source.file, source.text, ts.ScriptTarget.ES2015)); const fileMap = ts.arrayToMap(roots, file => file.fileName); const outputs = new Map(); const host: ts.CompilerHost = { diff --git a/src/testRunner/unittests/helpers.ts b/src/testRunner/unittests/helpers.ts index a9ae314541ea3..b01502e93b8f6 100644 --- a/src/testRunner/unittests/helpers.ts +++ b/src/testRunner/unittests/helpers.ts @@ -96,7 +96,7 @@ export class SourceText implements ts.IScriptSnapshot { } function createSourceFileWithText(fileName: string, sourceText: SourceText, target: ts.ScriptTarget) { - const file = ts.createSourceFile(fileName, sourceText.getFullText(), target, /*jsDocParsingMode*/ undefined) as SourceFileWithText; + const file = ts.createSourceFile(fileName, sourceText.getFullText(), target) as SourceFileWithText; file.sourceText = sourceText; file.version = "" + sourceText.getVersion(); return file; diff --git a/src/testRunner/unittests/helpers/solutionBuilder.ts b/src/testRunner/unittests/helpers/solutionBuilder.ts index 2b1e513914051..da77ca79ed0b3 100644 --- a/src/testRunner/unittests/helpers/solutionBuilder.ts +++ b/src/testRunner/unittests/helpers/solutionBuilder.ts @@ -23,7 +23,7 @@ export function createSolutionBuilderHostForBaseline( ) { if (sys instanceof fakes.System) makeSystemReadyForBaseline(sys, versionToWrite); const { cb } = commandLineCallbacks(sys, originalRead); - const host = ts.createSolutionBuilderHost(sys, /*jsDocParsingMode*/ undefined, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true)); + const host = ts.createSolutionBuilderHost(sys, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true)); host.afterProgramEmitAndDiagnostics = cb; host.afterEmitBundle = cb; return host; diff --git a/src/testRunner/unittests/helpers/tscWatch.ts b/src/testRunner/unittests/helpers/tscWatch.ts index 699f3afcda137..e21c7de9f9f36 100644 --- a/src/testRunner/unittests/helpers/tscWatch.ts +++ b/src/testRunner/unittests/helpers/tscWatch.ts @@ -152,7 +152,7 @@ export function createBaseline(system: TestServerHost, modifySystem?: (sys: Test } export function createSolutionBuilderWithWatchHostForBaseline(sys: TestServerHost, cb: ts.ExecuteCommandLineCallbacks) { - const host = ts.createSolutionBuilderWithWatchHost(sys, /*jsDocParsingMode*/ undefined, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true), ts.createWatchStatusReporter(sys, /*pretty*/ true)); + const host = ts.createSolutionBuilderWithWatchHost(sys, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true), ts.createWatchStatusReporter(sys, /*pretty*/ true)); host.afterProgramEmitAndDiagnostics = cb; host.afterEmitBundle = cb; return host; diff --git a/src/testRunner/unittests/incrementalParser.ts b/src/testRunner/unittests/incrementalParser.ts index 5c2772d79c1fe..a42044d0a67db 100644 --- a/src/testRunner/unittests/incrementalParser.ts +++ b/src/testRunner/unittests/incrementalParser.ts @@ -17,7 +17,7 @@ function withDelete(text: ts.IScriptSnapshot, start: number, length: number): { } function createTree(text: ts.IScriptSnapshot, version: string) { - return ts.createLanguageServiceSourceFile(/*fileName:*/ "", text, ts.ScriptTarget.Latest, version, /*setNodeParents*/ true, /*jsDocParsingMode*/ undefined); + return ts.createLanguageServiceSourceFile(/*fileName:*/ "", text, ts.ScriptTarget.Latest, version, /*setNodeParents*/ true); } function assertSameDiagnostics(file1: ts.SourceFile, file2: ts.SourceFile) { diff --git a/src/testRunner/unittests/jsDocParsing.ts b/src/testRunner/unittests/jsDocParsing.ts index f2acbb22bf8d0..56ba3a9cc05eb 100644 --- a/src/testRunner/unittests/jsDocParsing.ts +++ b/src/testRunner/unittests/jsDocParsing.ts @@ -486,7 +486,7 @@ oh.no }); describe("getFirstToken", () => { it("gets jsdoc", () => { - const root = ts.createSourceFile("foo.ts", "/** comment */var a = true;", ts.ScriptTarget.ES5, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); + const root = ts.createSourceFile("foo.ts", "/** comment */var a = true;", ts.ScriptTarget.ES5, /*setParentNodes*/ true); assert.isDefined(root); assert.equal(root.kind, ts.SyntaxKind.SourceFile); const first = root.getFirstToken(); @@ -496,7 +496,7 @@ oh.no }); describe("getLastToken", () => { it("gets jsdoc", () => { - const root = ts.createSourceFile("foo.ts", "var a = true;/** comment */", ts.ScriptTarget.ES5, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); + const root = ts.createSourceFile("foo.ts", "var a = true;/** comment */", ts.ScriptTarget.ES5, /*setParentNodes*/ true); assert.isDefined(root); const last = root.getLastToken(); assert.isDefined(last); @@ -505,7 +505,7 @@ oh.no }); describe("getStart", () => { it("runs when node with JSDoc but no parent pointers", () => { - const root = ts.createSourceFile("foo.ts", "/** */var a = true;", ts.ScriptTarget.ES5, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ false); + const root = ts.createSourceFile("foo.ts", "/** */var a = true;", ts.ScriptTarget.ES5, /*setParentNodes*/ false); root.statements[0].getStart(root, /*includeJsDocComment*/ true); }); }); diff --git a/src/testRunner/unittests/moduleResolution.ts b/src/testRunner/unittests/moduleResolution.ts index 86253a82609cb..1d349555399fb 100644 --- a/src/testRunner/unittests/moduleResolution.ts +++ b/src/testRunner/unittests/moduleResolution.ts @@ -390,7 +390,7 @@ describe("unittests:: moduleResolution:: Relative imports", () => { getSourceFile: (fileName: string, languageVersion: ts.ScriptTarget) => { const path = ts.normalizePath(ts.combinePaths(currentDirectory, fileName)); const file = files.get(path); - return file ? ts.createSourceFile(fileName, file, languageVersion, /*jsDocParsingMode*/ undefined) : undefined; + return file ? ts.createSourceFile(fileName, file, languageVersion) : undefined; }, getDefaultLibFileName: () => "lib.d.ts", writeFile: ts.notImplemented, @@ -497,13 +497,13 @@ describe("unittests:: moduleResolution:: Files with different casing with forceC getSourceFile: (fileName: string, languageVersion: ts.ScriptTarget) => { if (fileName === "lib.d.ts") { if (!library) { - library = ts.createSourceFile("lib.d.ts", "", ts.ScriptTarget.ES5, /*jsDocParsingMode*/ undefined); + library = ts.createSourceFile("lib.d.ts", "", ts.ScriptTarget.ES5); } return library; } const path = getCanonicalFileName(ts.normalizePath(ts.combinePaths(currentDirectory, fileName))); const file = files.get(path); - return file ? ts.createSourceFile(fileName, file, languageVersion, /*jsDocParsingMode*/ undefined) : undefined; + return file ? ts.createSourceFile(fileName, file, languageVersion) : undefined; }, getDefaultLibFileName: () => "lib.d.ts", writeFile: ts.notImplemented, @@ -1033,7 +1033,7 @@ describe("unittests:: moduleResolution:: Type reference directive resolution: ", files.forEach(file => baselines.push(`//// [${file.name}]\n${file.content || ""}`, "")); const names = ts.map(files, f => f.name); - const sourceFiles = ts.arrayToMap(ts.map(files, f => ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined)), f => f.fileName); + const sourceFiles = ts.arrayToMap(ts.map(files, f => ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015)), f => f.fileName); const compilerHost: ts.CompilerHost = { fileExists: fileName => sourceFiles.has(fileName), getSourceFile: fileName => sourceFiles.get(fileName), @@ -1072,7 +1072,7 @@ describe("unittests:: moduleResolution:: Type reference directive resolution: ", export function foo(): Stat; }`, }; - const file = ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined); + const file = ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015); const compilerHost: ts.CompilerHost = { fileExists: fileName => fileName === file.fileName, getSourceFile: fileName => fileName === file.fileName ? file : undefined, @@ -1101,7 +1101,7 @@ describe("unittests:: moduleResolution:: Type reference directive resolution: ", export function foo(): Stat; }`, }; - const file = ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined); + const file = ts.createSourceFile(f.name, f.content, ts.ScriptTarget.ES2015); const compilerHost: ts.CompilerHost = { fileExists: fileName => fileName === file.fileName, getSourceFile: fileName => fileName === file.fileName ? file : undefined, diff --git a/src/testRunner/unittests/printer.ts b/src/testRunner/unittests/printer.ts index 57ea267296036..dd724ed73f855 100644 --- a/src/testRunner/unittests/printer.ts +++ b/src/testRunner/unittests/printer.ts @@ -56,7 +56,6 @@ describe("unittests:: PrinterAPI", () => { function functionWithDefaultArgValue(argument: string = "defaultValue"): void { } `, ts.ScriptTarget.ES2015, - /*jsDocParsingMode*/ undefined, ); }); printsCorrectly("default", {}, printer => printer.printFile(sourceFile)); @@ -65,19 +64,18 @@ describe("unittests:: PrinterAPI", () => { // https://github.com/microsoft/TypeScript/issues/14948 // eslint-disable-next-line no-template-curly-in-string - printsCorrectly("templateLiteral", {}, printer => printer.printFile(ts.createSourceFile("source.ts", "let greeting = `Hi ${name}, how are you?`;", ts.ScriptTarget.ES2017, /*jsDocParsingMode*/ undefined))); + printsCorrectly("templateLiteral", {}, printer => printer.printFile(ts.createSourceFile("source.ts", "let greeting = `Hi ${name}, how are you?`;", ts.ScriptTarget.ES2017))); // https://github.com/microsoft/TypeScript/issues/18071 - printsCorrectly("regularExpressionLiteral", {}, printer => printer.printFile(ts.createSourceFile("source.ts", "let regex = /abc/;", ts.ScriptTarget.ES2017, /*jsDocParsingMode*/ undefined))); + printsCorrectly("regularExpressionLiteral", {}, printer => printer.printFile(ts.createSourceFile("source.ts", "let regex = /abc/;", ts.ScriptTarget.ES2017))); // https://github.com/microsoft/TypeScript/issues/22239 - printsCorrectly("importStatementRemoveComments", { removeComments: true }, printer => printer.printFile(ts.createSourceFile("source.ts", "import {foo} from 'foo';", ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined))); + printsCorrectly("importStatementRemoveComments", { removeComments: true }, printer => printer.printFile(ts.createSourceFile("source.ts", "import {foo} from 'foo';", ts.ScriptTarget.ESNext))); printsCorrectly("classHeritageClauses", {}, printer => printer.printFile(ts.createSourceFile( "source.ts", `class A extends B implements C implements D {}`, ts.ScriptTarget.ES2017, - /*jsDocParsingMode*/ undefined, ))); // https://github.com/microsoft/TypeScript/issues/35093 @@ -90,7 +88,6 @@ describe("unittests:: PrinterAPI", () => { let x!: string;`, ts.ScriptTarget.ES2017, - /*jsDocParsingMode*/ undefined, ))); // https://github.com/microsoft/TypeScript/issues/35054 @@ -99,7 +96,6 @@ describe("unittests:: PrinterAPI", () => { "source.ts", String.raw``, ts.ScriptTarget.ESNext, - /*jsDocParsingMode*/ undefined, /*setParentNodes*/ undefined, ts.ScriptKind.TSX, )); @@ -151,7 +147,6 @@ describe("unittests:: PrinterAPI", () => { const a = 1; `, ts.ScriptTarget.ES2015, - /*jsDocParsingMode*/ undefined, ), ts.createSourceFile( "b.ts", @@ -162,7 +157,6 @@ describe("unittests:: PrinterAPI", () => { const b = 2; `, ts.ScriptTarget.ES2015, - /*jsDocParsingMode*/ undefined, ), ]); }); @@ -188,14 +182,14 @@ describe("unittests:: PrinterAPI", () => { /*initializer*/ undefined, )], ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), )); printsCorrectly("namespaceExportDeclaration", {}, printer => printer.printNode( ts.EmitHint.Unspecified, ts.factory.createNamespaceExportDeclaration("B"), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), )); printsCorrectly("newExpressionWithPropertyAccessOnCallExpression", {}, printer => @@ -209,7 +203,7 @@ describe("unittests:: PrinterAPI", () => { /*typeArguments*/ undefined, /*argumentsArray*/ undefined, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ESNext), )); printsCorrectly("newExpressionOnConditionalExpression", {}, printer => @@ -226,7 +220,7 @@ describe("unittests:: PrinterAPI", () => { /*typeArguments*/ undefined, /*argumentsArray*/ undefined, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ESNext), )); printsCorrectly("emptyGlobalAugmentation", {}, printer => @@ -238,7 +232,7 @@ describe("unittests:: PrinterAPI", () => { ts.factory.createModuleBlock(ts.emptyArray), ts.NodeFlags.GlobalAugmentation, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), )); printsCorrectly("emptyGlobalAugmentationWithNoDeclareKeyword", {}, printer => @@ -250,7 +244,7 @@ describe("unittests:: PrinterAPI", () => { ts.factory.createModuleBlock(ts.emptyArray), ts.NodeFlags.GlobalAugmentation, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), )); // https://github.com/Microsoft/TypeScript/issues/15971 @@ -282,7 +276,7 @@ describe("unittests:: PrinterAPI", () => { ), ], ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), )); // https://github.com/Microsoft/TypeScript/issues/15651 @@ -351,7 +345,7 @@ describe("unittests:: PrinterAPI", () => { ]), ts.EmitFlags.SingleLine, ), - ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), + ts.createSourceFile("source.ts", "", ts.ScriptTarget.ES2015), )); }); }); diff --git a/src/testRunner/unittests/programApi.ts b/src/testRunner/unittests/programApi.ts index 7b9afec3dabc5..1d3d9528db3d4 100644 --- a/src/testRunner/unittests/programApi.ts +++ b/src/testRunner/unittests/programApi.ts @@ -113,7 +113,7 @@ describe("unittests:: programApi:: Program.getMissingFilePaths", () => { const host: ts.CompilerHost = { getSourceFile: (fileName: string, languageVersion: ts.ScriptTarget, _onError?: (message: string) => void) => { - return fileName === "test.ts" ? ts.createSourceFile(fileName, testSource, languageVersion, /*jsDocParsingMode*/ undefined) : undefined; + return fileName === "test.ts" ? ts.createSourceFile(fileName, testSource, languageVersion) : undefined; }, getDefaultLibFileName: () => "", writeFile: (_fileName, _content) => { diff --git a/src/testRunner/unittests/publicApi.ts b/src/testRunner/unittests/publicApi.ts index be18e8770e630..7fb4fb096c122 100644 --- a/src/testRunner/unittests/publicApi.ts +++ b/src/testRunner/unittests/publicApi.ts @@ -60,7 +60,7 @@ describe("unittests:: Public APIs:: JSDoc newlines", () => { */ function test() {}`; - const testSourceFile = ts.createSourceFile(testFilePath, testFileText, ts.ScriptTarget.Latest, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); + const testSourceFile = ts.createSourceFile(testFilePath, testFileText, ts.ScriptTarget.Latest, /*setParentNodes*/ true); const funcDec = testSourceFile.statements.find(ts.isFunctionDeclaration)!; const tags = ts.getJSDocTags(funcDec); assert.isDefined(tags[0].comment); @@ -207,7 +207,7 @@ describe("unittests:: Public APIs :: forEachChild of @param comments in JSDoc", */ var x `; - const sourceFile = ts.createSourceFile("/file.ts", content, ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); + const sourceFile = ts.createSourceFile("/file.ts", content, ts.ScriptTarget.ESNext, /*setParentNodes*/ true); const paramTag = sourceFile.getChildren()[0].getChildren()[0].getChildren()[0].getChildren()[0]; const kids = paramTag.getChildren(); const seen = new Set(); @@ -224,7 +224,7 @@ describe("unittests:: Public APIs:: getChild* methods on EndOfFileToken with JSD const content = ` /** jsdoc comment attached to EndOfFileToken */ `; - const sourceFile = ts.createSourceFile("/file.ts", content, ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); + const sourceFile = ts.createSourceFile("/file.ts", content, ts.ScriptTarget.ESNext, /*setParentNodes*/ true); const endOfFileToken = sourceFile.getChildren()[1]; assert.equal(endOfFileToken.getChildren().length, 1); assert.equal(endOfFileToken.getChildCount(), 1); diff --git a/src/testRunner/unittests/reuseProgramStructure.ts b/src/testRunner/unittests/reuseProgramStructure.ts index 510dd23194920..e066c5a334536 100644 --- a/src/testRunner/unittests/reuseProgramStructure.ts +++ b/src/testRunner/unittests/reuseProgramStructure.ts @@ -586,7 +586,6 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { options, watchOptions: undefined, system, - jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); verifyProgramIsUptoDate(program, duplicate(rootFiles), duplicate(options)); } @@ -595,7 +594,6 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { const program = ts.createWatchProgram(ts.createWatchCompilerHostOfConfigFile({ configFileName, system, - jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); const { fileNames, options } = ts.parseConfigFileWithSystem(configFileName, {}, /*extendedConfigCache*/ undefined, /*watchOptionsToExtend*/ undefined, system, ts.notImplemented)!; // TODO: GH#18217 verifyProgramIsUptoDate(program, fileNames, options); @@ -740,7 +738,6 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { options, watchOptions: undefined, system, - jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); verifyProgramIsUptoDate(program, duplicate(rootFiles), duplicate(options)); }); @@ -776,7 +773,6 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { options, watchOptions: undefined, system, - jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); verifyProgramIsNotUptoDate(program, duplicate(newRootFiles), duplicate(options)); }); @@ -802,7 +798,6 @@ describe("unittests:: Reuse program structure:: isProgramUptoDate", () => { options, watchOptions: undefined, system, - jsDocParsingMode: undefined, })).getCurrentProgram().getProgram(); verifyProgramIsNotUptoDate(program, duplicate(newRootFiles), duplicate(options)); }); diff --git a/src/testRunner/unittests/services/extract/ranges.ts b/src/testRunner/unittests/services/extract/ranges.ts index d738fa93c4099..ce0312d3f1288 100644 --- a/src/testRunner/unittests/services/extract/ranges.ts +++ b/src/testRunner/unittests/services/extract/ranges.ts @@ -6,7 +6,7 @@ import { function testExtractRangeFailed(caption: string, s: string, expectedErrors: string[]) { return it(caption, () => { const t = extractTest(s); - const file = ts.createSourceFile("a.ts", t.source, ts.ScriptTarget.Latest, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); + const file = ts.createSourceFile("a.ts", t.source, ts.ScriptTarget.Latest, /*setParentNodes*/ true); const selectionRange = t.ranges.get("selection"); if (!selectionRange) { throw new Error(`Test ${s} does not specify selection range`); @@ -21,7 +21,7 @@ function testExtractRangeFailed(caption: string, s: string, expectedErrors: stri function testExtractRange(caption: string, s: string) { return it(caption, () => { const t = extractTest(s); - const f = ts.createSourceFile("a.ts", t.source, ts.ScriptTarget.Latest, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); + const f = ts.createSourceFile("a.ts", t.source, ts.ScriptTarget.Latest, /*setParentNodes*/ true); const selectionRange = t.ranges.get("selection"); if (!selectionRange) { throw new Error(`Test ${s} does not specify selection range`); diff --git a/src/testRunner/unittests/services/organizeImports.ts b/src/testRunner/unittests/services/organizeImports.ts index 832099409e577..ba87f5acba615 100644 --- a/src/testRunner/unittests/services/organizeImports.ts +++ b/src/testRunner/unittests/services/organizeImports.ts @@ -993,14 +993,14 @@ export * from "lib"; }); function parseImports(...importStrings: string[]): readonly ts.ImportDeclaration[] { - const sourceFile = ts.createSourceFile("a.ts", importStrings.join("\n"), ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true, ts.ScriptKind.TS); + const sourceFile = ts.createSourceFile("a.ts", importStrings.join("\n"), ts.ScriptTarget.ES2015, /*setParentNodes*/ true, ts.ScriptKind.TS); const imports = ts.filter(sourceFile.statements, ts.isImportDeclaration); assert.equal(imports.length, importStrings.length); return imports; } function parseExports(...exportStrings: string[]): readonly ts.ExportDeclaration[] { - const sourceFile = ts.createSourceFile("a.ts", exportStrings.join("\n"), ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true, ts.ScriptKind.TS); + const sourceFile = ts.createSourceFile("a.ts", exportStrings.join("\n"), ts.ScriptTarget.ES2015, /*setParentNodes*/ true, ts.ScriptKind.TS); const exports = ts.filter(sourceFile.statements, ts.isExportDeclaration); assert.equal(exports.length, exportStrings.length); return exports; diff --git a/src/testRunner/unittests/services/textChanges.ts b/src/testRunner/unittests/services/textChanges.ts index 1df4467458a1f..57b3e206ef283 100644 --- a/src/testRunner/unittests/services/textChanges.ts +++ b/src/testRunner/unittests/services/textChanges.ts @@ -30,7 +30,7 @@ describe("unittests:: services:: textChanges", () => { // validate that positions that were recovered from the printed text actually match positions that will be created if the same text is parsed. function verifyPositions(node: ts.Node, text: string): void { const nodeList = flattenNodes(node); - const sourceFile = ts.createSourceFile("f.ts", text, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined); + const sourceFile = ts.createSourceFile("f.ts", text, ts.ScriptTarget.ES2015); const parsedNodeList = flattenNodes(sourceFile.statements[0]); ts.zipWith(nodeList, parsedNodeList, (left, right) => { ts.Debug.assert(left.pos === right.pos); @@ -51,7 +51,7 @@ describe("unittests:: services:: textChanges", () => { function runSingleFileTest(caption: string, placeOpenBraceOnNewLineForFunctions: boolean, text: string, validateNodes: boolean, testBlock: (sourceFile: ts.SourceFile, changeTracker: ts.textChanges.ChangeTracker) => void) { it(caption, () => { - const sourceFile = ts.createSourceFile("source.ts", text, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true); + const sourceFile = ts.createSourceFile("source.ts", text, ts.ScriptTarget.ES2015, /*setParentNodes*/ true); const rulesProvider = getRuleProvider(placeOpenBraceOnNewLineForFunctions); const changeTracker = new ts.textChanges.ChangeTracker(newLineCharacter, rulesProvider); testBlock(sourceFile, changeTracker); diff --git a/src/testRunner/unittests/services/utilities.ts b/src/testRunner/unittests/services/utilities.ts index db488d101fdb9..91b82462b479e 100644 --- a/src/testRunner/unittests/services/utilities.ts +++ b/src/testRunner/unittests/services/utilities.ts @@ -12,7 +12,6 @@ describe("unittests:: services:: utilities", () => { const core = window.Abcd.core; })();`, ts.ScriptTarget.ESNext, - /*jsDocParsingMode*/ undefined, /*setParentNodes*/ true, ); // can't use ts.getTokenAtPosition because it returns back the wrong token diff --git a/src/testRunner/unittests/skipJSDocParsing.ts b/src/testRunner/unittests/skipJSDocParsing.ts index c4951e3867015..fbea8e8a400b9 100644 --- a/src/testRunner/unittests/skipJSDocParsing.ts +++ b/src/testRunner/unittests/skipJSDocParsing.ts @@ -20,9 +20,9 @@ describe("unittests:: skipJSDocParsing", () => { for (const filename of filenames) { const testName = `${name}-${kindName}-${filename}`; it(testName, () => { - const sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*jsDocParsingMode*/ undefined, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); + const sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); assert.isTrue(sourceFile && sourceFile.parseDiagnostics.length === 0, "no errors issued"); - const sourceFileSkipped = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, jsDocParsingMode, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); + const sourceFileSkipped = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, jsDocParsingMode); assert.isTrue(sourceFileSkipped && sourceFileSkipped.parseDiagnostics.length === 0, "no errors issued"); const patch = Diff.createTwoFilesPatch("default", kindName, Utils.sourceFileToJSON(sourceFile), Utils.sourceFileToJSON(sourceFileSkipped)); diff --git a/src/testRunner/unittests/transform.ts b/src/testRunner/unittests/transform.ts index e5174a81e993f..766a1d9f8ec9a 100644 --- a/src/testRunner/unittests/transform.ts +++ b/src/testRunner/unittests/transform.ts @@ -79,7 +79,7 @@ describe("unittests:: TransformAPI", () => { } function transformSourceFile(sourceText: string, transformers: ts.TransformerFactory[]) { - const transformed = ts.transform(ts.createSourceFile("source.ts", sourceText, ts.ScriptTarget.ES2015, /*jsDocParsingMode*/ undefined), transformers); + const transformed = ts.transform(ts.createSourceFile("source.ts", sourceText, ts.ScriptTarget.ES2015), transformers); const printer = ts.createPrinter({ newLine: ts.NewLineKind.CarriageReturnLineFeed }, { onEmitNode: transformed.emitNodeWithNotification, substituteNode: transformed.substituteNode, @@ -592,7 +592,7 @@ module MyModule { // https://github.com/Microsoft/TypeScript/issues/24709 testBaseline("issue24709", () => { const fs = vfs.createFromFileSystem(Harness.IO, /*ignoreCase*/ true); - const transformed = ts.transform(ts.createSourceFile("source.ts", "class X { echo(x: string) { return x; } }", ts.ScriptTarget.ES3, /*jsDocParsingMode*/ undefined), [transformSourceFile]); + const transformed = ts.transform(ts.createSourceFile("source.ts", "class X { echo(x: string) { return x; } }", ts.ScriptTarget.ES3), [transformSourceFile]); const transformedSourceFile = transformed.transformed[0]; transformed.dispose(); const host = new fakes.CompilerHost(fs); diff --git a/src/testRunner/unittests/tsbuild/publicApi.ts b/src/testRunner/unittests/tsbuild/publicApi.ts index 2de4a0b5ffb29..5c9f03001d789 100644 --- a/src/testRunner/unittests/tsbuild/publicApi.ts +++ b/src/testRunner/unittests/tsbuild/publicApi.ts @@ -64,7 +64,6 @@ export function f22() { } // trailing`, const { cb, getPrograms } = commandLineCallbacks(sys, /*originalReadCall*/ undefined); const buildHost = ts.createSolutionBuilderHost( sys, - /*jsDocParsingMode*/ undefined, /*createProgram*/ undefined, ts.createDiagnosticReporter(sys, /*pretty*/ true), ts.createBuilderStatusReporter(sys, /*pretty*/ true), diff --git a/src/testRunner/unittests/tsc/cancellationToken.ts b/src/testRunner/unittests/tsc/cancellationToken.ts index 56185289c91b9..8deb7cee76083 100644 --- a/src/testRunner/unittests/tsc/cancellationToken.ts +++ b/src/testRunner/unittests/tsc/cancellationToken.ts @@ -66,7 +66,7 @@ describe("unittests:: tsc:: builder cancellationToken", () => { sys, reportDiagnostic, )!; - const host = ts.createIncrementalCompilerHost(parsedConfig.options, /*jsDocParsingMode*/ undefined, sys); + const host = ts.createIncrementalCompilerHost(parsedConfig.options, sys); let programs: CommandLineProgram[] = ts.emptyArray; let oldPrograms: CommandLineProgram[] = ts.emptyArray; let builderProgram: ts.EmitAndSemanticDiagnosticsBuilderProgram = undefined!; diff --git a/src/testRunner/unittests/tscWatch/consoleClearing.ts b/src/testRunner/unittests/tscWatch/consoleClearing.ts index 6cd154847bd13..60d1cb0e9690e 100644 --- a/src/testRunner/unittests/tscWatch/consoleClearing.ts +++ b/src/testRunner/unittests/tscWatch/consoleClearing.ts @@ -55,7 +55,6 @@ describe("unittests:: tsc-watch:: console clearing", () => { system: baseline.sys, cb: baseline.cb, configFileName: configFile.path, - jsDocParsingMode: undefined, })); // Initially console is cleared if --preserveOutput is not provided since the config file is yet to be parsed runWatchBaseline({ diff --git a/src/testRunner/unittests/tscWatch/incremental.ts b/src/testRunner/unittests/tscWatch/incremental.ts index a9e4b8e89fbd5..c2218d1ae6037 100644 --- a/src/testRunner/unittests/tscWatch/incremental.ts +++ b/src/testRunner/unittests/tscWatch/incremental.ts @@ -172,7 +172,7 @@ describe("unittests:: tsc-watch:: emit file --incremental", () => { options: command.options, projectReferences: command.projectReferences, configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics(command), - host: ts.createIncrementalCompilerHost(command.options, /*jsDocParsingMode*/ undefined, system), + host: ts.createIncrementalCompilerHost(command.options, system), }); const state = builderProgram.getState(); diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index 34ef32bad5871..5338f3b30dd4f 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -629,7 +629,6 @@ export class A { options: { allowNonTsExtensions: true }, cb, watchOptions: undefined, - jsDocParsingMode: undefined, }); ts.createWatchProgram(host); baseline.push(`${sys.getExecutingFilePath()} --w ${file2.path} ${file3.path}`); @@ -650,7 +649,6 @@ export class A { options: { allowNonTsExtensions: true }, cb: cb2, watchOptions: undefined, - jsDocParsingMode: undefined, })); watchBaseline({ baseline, @@ -1211,7 +1209,6 @@ declare const eval: any`, options: { allowNonTsExtensions: true }, cb, watchOptions: undefined, - jsDocParsingMode: undefined, })); runWatchBaseline({ scenario, diff --git a/src/testRunner/unittests/tscWatch/resolutionCache.ts b/src/testRunner/unittests/tscWatch/resolutionCache.ts index 3fb52ed89cfb2..854f294a758ea 100644 --- a/src/testRunner/unittests/tscWatch/resolutionCache.ts +++ b/src/testRunner/unittests/tscWatch/resolutionCache.ts @@ -35,7 +35,6 @@ describe("unittests:: tsc-watch:: resolutionCache:: tsc-watch module resolution options: { module: ts.ModuleKind.AMD }, cb, watchOptions: undefined, - jsDocParsingMode: undefined, }); const originalFileExists = host.fileExists; const watch = ts.createWatchProgram(host); @@ -122,7 +121,6 @@ describe("unittests:: tsc-watch:: resolutionCache:: tsc-watch module resolution options: { module: ts.ModuleKind.AMD }, cb, watchOptions: undefined, - jsDocParsingMode: undefined, }); const originalFileExists = host.fileExists; let fileExistsCalledForBar = false; @@ -181,7 +179,6 @@ describe("unittests:: tsc-watch:: resolutionCache:: tsc-watch module resolution options: { module: ts.ModuleKind.AMD }, cb, watchOptions: undefined, - jsDocParsingMode: undefined, }); const originalFileExists = host.fileExists; let fileExistsCalledForBar = false; diff --git a/src/testRunner/unittests/tscWatch/sourceOfProjectReferenceRedirect.ts b/src/testRunner/unittests/tscWatch/sourceOfProjectReferenceRedirect.ts index f6df4e405e744..9977c12c6c604 100644 --- a/src/testRunner/unittests/tscWatch/sourceOfProjectReferenceRedirect.ts +++ b/src/testRunner/unittests/tscWatch/sourceOfProjectReferenceRedirect.ts @@ -38,7 +38,6 @@ describe("unittests:: tsc-watch:: watchAPI:: with sourceOfProjectReferenceRedire configFileName: config, system: sys, cb, - jsDocParsingMode: undefined, }); host.useSourceOfProjectReferenceRedirect = ts.returnTrue; const watch = ts.createWatchProgram(host); diff --git a/src/testRunner/unittests/tscWatch/watchApi.ts b/src/testRunner/unittests/tscWatch/watchApi.ts index 615392b9dad3d..2620266a6028d 100644 --- a/src/testRunner/unittests/tscWatch/watchApi.ts +++ b/src/testRunner/unittests/tscWatch/watchApi.ts @@ -50,7 +50,6 @@ describe("unittests:: tsc-watch:: watchAPI:: tsc-watch with custom module resolu configFileName: config.path, system: sys, cb, - jsDocParsingMode: undefined, }); const parsedCommandResult = ts.parseJsonConfigFileContent(configFileJson, sys, config.path); host.resolveModuleNames = (moduleNames, containingFile) => @@ -92,7 +91,6 @@ describe("unittests:: tsc-watch:: watchAPI:: tsc-watch with custom module resolu configFileName: `/user/username/projects/myproject/tsconfig.json`, system: sys, cb, - jsDocParsingMode: undefined, }); host.resolveModuleNames = (moduleNames, containingFile, _reusedNames, _redirectedReference, options) => moduleNames.map(m => ts.resolveModuleName(m, containingFile, options, host).resolvedModule); // Invalidate resolutions only when ts file is created @@ -156,7 +154,6 @@ describe("unittests:: tsc-watch:: watchAPI:: tsc-watch expose error count to wat configFileName: config.path, system: sys, cb, - jsDocParsingMode: undefined, }); const existing = host.onWatchStatusChange!; let watchedErrorCount; @@ -194,7 +191,6 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost does not implement s configFileName: config.path, system: sys, cb, - jsDocParsingMode: undefined, }); host.setTimeout = undefined; host.clearTimeout = undefined; @@ -243,7 +239,6 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost can add extraFileExt extraFileExtensions: [{ extension: ".vue", isMixedContent: true, scriptKind: ts.ScriptKind.Deferred }], system: sys, cb, - jsDocParsingMode: undefined, }); const watch = ts.createWatchProgram(host); runWatchBaseline({ @@ -302,7 +297,6 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost uses createSemanticD createProgram, system: sys, cb, - jsDocParsingMode: undefined, }); const watch = ts.createWatchProgram(host); watchBaseline({ @@ -364,7 +358,6 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost uses createSemanticD createProgram: ts.createSemanticDiagnosticsBuilderProgram, system: sys, cb, - jsDocParsingMode: undefined, }); const watch = ts.createWatchProgram(host); runWatchBaseline({ @@ -482,7 +475,6 @@ describe("unittests:: tsc-watch:: watchAPI:: when watchHost uses createSemanticD system: sys, reportDiagnostic, reportWatchStatus, - jsDocParsingMode: undefined, }); host.afterProgramCreate = program => { const diagnostics = ts.sortAndDeduplicateDiagnostics(program.getSemanticDiagnostics()); @@ -552,7 +544,6 @@ describe("unittests:: tsc-watch:: watchAPI:: when getParsedCommandLine is implem system, configFileName: config2.path, optionsToExtend: { extendedDiagnostics: true }, - jsDocParsingMode: undefined, }); compilerHost.useSourceOfProjectReferenceRedirect = useSourceOfProjectReferenceRedirect; const calledGetParsedCommandLine = new Set(); @@ -663,7 +654,6 @@ describe("unittests:: tsc-watch:: watchAPI:: when builder emit occurs with emitO system, configFileName: `/user/username/projects/myproject/tsconfig.json`, optionsToExtend: { extendedDiagnostics: true }, - jsDocParsingMode: undefined, }); const originalEmitProgram = compilerHost.afterProgramCreate; compilerHost.afterProgramCreate = myAfterProgramCreate; @@ -783,7 +773,6 @@ describe("unittests:: tsc-watch:: watchAPI:: when creating program with project options: commandLine.options, projectReferences: commandLine.projectReferences, watchOptions: commandLine.watchOptions, - jsDocParsingMode: undefined, }); const watch = ts.createWatchProgram(compilerHost); return { watch, baseline }; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index d35eb7c98058d..9fd78f7f22f7f 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3691,6 +3691,7 @@ declare namespace ts { private performanceEventHandler?; private pendingPluginEnablements?; private currentPluginEnablementPromise?; + readonly jsDocParsingMode: JSDocParsingMode | undefined; constructor(opts: ProjectServiceOptions); toPath(fileName: string): Path; private loadTypesMap; @@ -3854,7 +3855,6 @@ declare namespace ts { private enableRequestedPluginsWorker; private enableRequestedPluginsForProjectAsync; configurePlugin(args: protocol.ConfigurePluginRequestArguments): void; - getJSDocParsingMode(): JSDocParsingMode | undefined; } function formatMessage(msg: T, logger: Logger, byteLength: (s: string, encoding: BufferEncoding) => number, newLine: string): string; interface ServerCancellationToken extends HostCancellationToken { @@ -9727,7 +9727,7 @@ declare namespace ts { function createPrinter(printerOptions?: PrinterOptions, handlers?: PrintHandlers): Printer; function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; - function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean): CompilerHost; + function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean, jsDocParsingMode?: JSDocParsingMode): CompilerHost; function getPreEmitDiagnostics(program: Program, sourceFile?: SourceFile, cancellationToken?: CancellationToken): readonly Diagnostic[]; function formatDiagnostics(diagnostics: readonly Diagnostic[], host: FormatDiagnosticsHost): string; function formatDiagnostic(diagnostic: Diagnostic, host: FormatDiagnosticsHost): string; @@ -9944,8 +9944,8 @@ declare namespace ts { /** * Create the watch compiler host for either configFile or fileNames and its options */ - function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[]): WatchCompilerHostOfConfigFile; - function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions): WatchCompilerHostOfFilesAndCompilerOptions; + function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[], jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfConfigFile; + function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions, jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfFilesAndCompilerOptions; /** * Creates the watch from the host for root files and compiler options */ @@ -10036,8 +10036,7 @@ declare namespace ts { * Returns the module resolution cache used by a provided `resolveModuleNames` implementation so that any non-name module resolution operations (eg, package.json lookup) can reuse it */ getModuleResolutionCache?(): ModuleResolutionCache | undefined; - /** Kind of JSDoc parsing to use. */ - getJSDocParsingMode?(): JSDocParsingMode | undefined; + jsDocParsingMode?: JSDocParsingMode; } interface WatchCompilerHost extends ProgramHost, WatchHost { /** Instead of using output d.ts file from project reference, use its source file */ @@ -10097,8 +10096,8 @@ declare namespace ts { * Create a function that reports watch status by writing to the system and handles the formating of the diagnostic */ function createBuilderStatusReporter(system: System, pretty?: boolean): DiagnosticReporter; - function createSolutionBuilderHost(system?: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary): SolutionBuilderHost; - function createSolutionBuilderWithWatchHost(system?: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter): SolutionBuilderWithWatchHost; + function createSolutionBuilderHost(system?: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary, jsDocParsingMode?: JSDocParsingMode): SolutionBuilderHost; + function createSolutionBuilderWithWatchHost(system?: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, jsDocParsingMode?: JSDocParsingMode): SolutionBuilderWithWatchHost; function createSolutionBuilder(host: SolutionBuilderHost, rootNames: readonly string[], defaultOptions: BuildOptions): SolutionBuilder; function createSolutionBuilderWithWatch(host: SolutionBuilderWithWatchHost, rootNames: readonly string[], defaultOptions: BuildOptions, baseWatchOptions?: WatchOptions): SolutionBuilder; interface BuildOptions { @@ -10288,7 +10287,7 @@ declare namespace ts { installPackage?(options: InstallPackageOptions): Promise; writeFile?(fileName: string, content: string): void; getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; - getJSDocParsingMode?(): JSDocParsingMode | undefined; + jsDocParsingMode?: JSDocParsingMode; } type WithMetadata = T & { metadata?: unknown; @@ -11386,7 +11385,7 @@ declare namespace ts { fileName: string; highlightSpans: HighlightSpan[]; } - function createDocumentRegistry(useCaseSensitiveFileNames?: boolean, currentDirectory?: string): DocumentRegistry; + function createDocumentRegistry(useCaseSensitiveFileNames?: boolean, currentDirectory?: string, jsDocParsingMode?: JSDocParsingMode): DocumentRegistry; /** * The document registry represents a store of SourceFile objects that can be shared between * multiple LanguageService instances. A LanguageService instance holds on the SourceFile (AST) From 2abd21bf331dff66364837b30e7169a16b6b165a Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 15 Sep 2023 12:52:26 -0700 Subject: [PATCH 07/25] revert a formatting change --- src/compiler/parser.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 63f464ffe55e0..c9e3dad4bc0ed 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1325,14 +1325,7 @@ function setExternalModuleIndicator(sourceFile: SourceFile) { sourceFile.externalModuleIndicator = isFileProbablyExternalModule(sourceFile); } -export function createSourceFile( - fileName: string, - sourceText: string, - languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, - setParentNodes = false, - scriptKind?: ScriptKind, - jsDocParsingMode?: JSDocParsingMode, -): SourceFile { +export function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes = false, scriptKind?: ScriptKind, jsDocParsingMode?: JSDocParsingMode): SourceFile { tracing?.push(tracing.Phase.Parse, "createSourceFile", { path: fileName }, /*separateBeginAndEnd*/ true); performance.mark("beforeParse"); let result: SourceFile; From b691830dd7908bc862ccd839be98596ba2c054f8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 15 Sep 2023 13:02:35 -0700 Subject: [PATCH 08/25] Remove TODOs, tests pass --- src/services/textChanges.ts | 2 +- src/services/transpile.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 9034e02d641cc..eaef5cc2fbdbf 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -1291,7 +1291,7 @@ namespace changesToText { export function newFileChangesWorker(scriptKind: ScriptKind, insertions: readonly NewFileInsertion[], newLineCharacter: string, formatContext: formatting.FormatContext): string { // TODO: this emits the file, parses it back, then formats it that -- may be a less roundabout way to do this const nonFormattedText = flatMap(insertions, insertion => insertion.statements.map(s => s === SyntaxKind.NewLineTrivia ? "" : getNonformattedText(s, insertion.oldFile, newLineCharacter).text)).join(newLineCharacter); - const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, /*setParentNodes*/ true, scriptKind, JSDocParsingMode.SkipAll); // TODO(jakebailey): make sure this is okay + const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, /*setParentNodes*/ true, scriptKind, JSDocParsingMode.SkipAll); const changes = formatting.formatDocument(sourceFile, formatContext); return applyChanges(nonFormattedText, changes) + newLineCharacter; } diff --git a/src/services/transpile.ts b/src/services/transpile.ts index 9fa55e907b2fc..cb757635002e8 100644 --- a/src/services/transpile.ts +++ b/src/services/transpile.ts @@ -124,7 +124,7 @@ export function transpileModule(input: string, transpileOptions: TranspileOption }, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, - JSDocParsingMode.SkipAll, // TODO(jakebailey): make sure this is okay + JSDocParsingMode.SkipAll, ); if (transpileOptions.moduleName) { sourceFile.moduleName = transpileOptions.moduleName; From 9e2f8c1d802e43c6a6833ca9024e09fc0987bbf1 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:07:28 -0700 Subject: [PATCH 09/25] Some PR feedback --- src/compiler/tsbuildPublic.ts | 13 ++++++------- src/compiler/watch.ts | 14 +++++--------- src/compiler/watchPublic.ts | 8 +++----- src/executeCommandLine/executeCommandLine.ts | 8 ++++---- tests/baselines/reference/api/typescript.d.ts | 8 ++++---- 5 files changed, 22 insertions(+), 29 deletions(-) diff --git a/src/compiler/tsbuildPublic.ts b/src/compiler/tsbuildPublic.ts index bb518131792e5..8512e52f07f86 100644 --- a/src/compiler/tsbuildPublic.ts +++ b/src/compiler/tsbuildPublic.ts @@ -74,7 +74,6 @@ import { isIgnoredFileFromWildCardWatching, isIncrementalCompilation, isString, - JSDocParsingMode, listFiles, loadWithModeAwareCache, map, @@ -303,8 +302,8 @@ export function createBuilderStatusReporter(system: System, pretty?: boolean): D }; } -function createSolutionBuilderHostBase(system: System, createProgram: CreateProgram | undefined, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, jsDocParsingMode?: JSDocParsingMode) { - const host = createProgramHost(system, createProgram, jsDocParsingMode) as SolutionBuilderHostBase; +function createSolutionBuilderHostBase(system: System, createProgram: CreateProgram | undefined, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter) { + const host = createProgramHost(system, createProgram) as SolutionBuilderHostBase; host.getModifiedTime = system.getModifiedTime ? path => system.getModifiedTime!(path) : returnUndefined; host.setModifiedTime = system.setModifiedTime ? (path, date) => system.setModifiedTime!(path, date) : noop; host.deleteFile = system.deleteFile ? path => system.deleteFile!(path) : noop; @@ -314,14 +313,14 @@ function createSolutionBuilderHostBase(system: System, return host; } -export function createSolutionBuilderHost(system = sys, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary, jsDocParsingMode?: JSDocParsingMode) { - const host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus, jsDocParsingMode) as SolutionBuilderHost; +export function createSolutionBuilderHost(system = sys, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary) { + const host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus) as SolutionBuilderHost; host.reportErrorSummary = reportErrorSummary; return host; } -export function createSolutionBuilderWithWatchHost(system = sys, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, jsDocParsingMode?: JSDocParsingMode) { - const host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus, jsDocParsingMode) as SolutionBuilderWithWatchHost; +export function createSolutionBuilderWithWatchHost(system = sys, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter) { + const host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus) as SolutionBuilderWithWatchHost; const watchHost = createWatchHost(system, reportWatchStatus); copyProperties(host, watchHost); return host; diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index 980ebec1facdc..e95358abfb6e0 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -830,7 +830,7 @@ export function setGetSourceFileAsHashVersioned(compilerHost: CompilerHost) { * * @internal */ -export function createProgramHost(system: System, createProgram: CreateProgram | undefined, jsDocParsingMode: JSDocParsingMode | undefined): ProgramHost { +export function createProgramHost(system: System, createProgram: CreateProgram | undefined): ProgramHost { const getDefaultLibLocation = memoize(() => getDirectoryPath(normalizePath(system.getExecutingFilePath()))); return { useCaseSensitiveFileNames: () => system.useCaseSensitiveFileNames, @@ -852,16 +852,15 @@ export function createProgramHost, storeFilesChangingSignatureDuringEmit: system.storeFilesChangingSignatureDuringEmit, now: maybeBind(system, system.now), - jsDocParsingMode, }; } /** * Creates the watch compiler host that can be extended with config file or root file names and options host */ -function createWatchCompilerHost(system = sys, createProgram: CreateProgram | undefined, reportDiagnostic: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, jsDocParsingMode?: JSDocParsingMode): WatchCompilerHost { +function createWatchCompilerHost(system = sys, createProgram: CreateProgram | undefined, reportDiagnostic: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter): WatchCompilerHost { const write = (s: string) => system.write(s + system.newLine); - const result = createProgramHost(system, createProgram, jsDocParsingMode) as WatchCompilerHost; + const result = createProgramHost(system, createProgram) as WatchCompilerHost; copyProperties(result, createWatchHost(system, reportWatchStatus)); result.afterProgramCreate = builderProgram => { const compilerOptions = builderProgram.getCompilerOptions(); @@ -897,7 +896,6 @@ export interface CreateWatchCompilerHostInput { createProgram?: CreateProgram; reportDiagnostic?: DiagnosticReporter; reportWatchStatus?: WatchStatusReporter; - jsDocParsingMode?: JSDocParsingMode; } /** @internal */ @@ -919,12 +917,11 @@ export function createWatchCompilerHostOfConfigFile): WatchCompilerHostOfConfigFile { const diagnosticReporter = reportDiagnostic || createDiagnosticReporter(system); - const host = createWatchCompilerHost(system, createProgram, diagnosticReporter, reportWatchStatus, jsDocParsingMode) as WatchCompilerHostOfConfigFile; + const host = createWatchCompilerHost(system, createProgram, diagnosticReporter, reportWatchStatus) as WatchCompilerHostOfConfigFile; host.onUnRecoverableConfigFileDiagnostic = diagnostic => reportUnrecoverableDiagnostic(system, diagnosticReporter, diagnostic); host.configFileName = configFileName; host.optionsToExtend = optionsToExtend; @@ -952,11 +949,10 @@ export function createWatchCompilerHostOfFilesAndCompilerOptions): WatchCompilerHostOfFilesAndCompilerOptions { - const host = createWatchCompilerHost(system, createProgram, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus, jsDocParsingMode) as WatchCompilerHostOfFilesAndCompilerOptions; + const host = createWatchCompilerHost(system, createProgram, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus) as WatchCompilerHostOfFilesAndCompilerOptions; host.rootFiles = rootFiles; host.options = options; host.watchOptions = watchOptions; diff --git a/src/compiler/watchPublic.ts b/src/compiler/watchPublic.ts index 3660f6641e009..782f9dd3b38ee 100644 --- a/src/compiler/watchPublic.ts +++ b/src/compiler/watchPublic.ts @@ -360,9 +360,9 @@ export interface WatchOfFilesAndCompilerOptions extends Watch { /** * Create the watch compiler host for either configFile or fileNames and its options */ -export function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[], jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfConfigFile; -export function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions, jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfFilesAndCompilerOptions; -export function createWatchCompilerHost(rootFilesOrConfigFileName: string | string[], options: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferencesOrWatchOptionsToExtend?: readonly ProjectReference[] | WatchOptions, watchOptionsOrExtraFileExtensions?: WatchOptions | readonly FileExtensionInfo[], jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfFilesAndCompilerOptions | WatchCompilerHostOfConfigFile { +export function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[]): WatchCompilerHostOfConfigFile; +export function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions): WatchCompilerHostOfFilesAndCompilerOptions; +export function createWatchCompilerHost(rootFilesOrConfigFileName: string | string[], options: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferencesOrWatchOptionsToExtend?: readonly ProjectReference[] | WatchOptions, watchOptionsOrExtraFileExtensions?: WatchOptions | readonly FileExtensionInfo[]): WatchCompilerHostOfFilesAndCompilerOptions | WatchCompilerHostOfConfigFile { if (isArray(rootFilesOrConfigFileName)) { return createWatchCompilerHostOfFilesAndCompilerOptions({ rootFiles: rootFilesOrConfigFileName, @@ -371,7 +371,6 @@ export function createWatchCompilerHost(rootFilesOrCon projectReferences: projectReferencesOrWatchOptionsToExtend as readonly ProjectReference[], system, createProgram, - jsDocParsingMode, reportDiagnostic, reportWatchStatus, }); @@ -384,7 +383,6 @@ export function createWatchCompilerHost(rootFilesOrCon extraFileExtensions: watchOptionsOrExtraFileExtensions as readonly FileExtensionInfo[], system, createProgram, - jsDocParsingMode, reportDiagnostic, reportWatchStatus, }); diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 4bc499cc239e9..4c7a6c4239630 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -842,8 +842,8 @@ function performBuild( reportDiagnostic, createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createWatchStatusReporter(sys, buildOptions), - jsDocParsingMode, ); + buildHost.jsDocParsingMode = jsDocParsingMode; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const onWatchStatusChange = buildHost.onWatchStatusChange; @@ -872,8 +872,8 @@ function performBuild( reportDiagnostic, createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createReportErrorSummary(sys, buildOptions), - jsDocParsingMode, ); + buildHost.jsDocParsingMode = jsDocParsingMode; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const builder = createSolutionBuilder(buildHost, projects, buildOptions); @@ -1009,13 +1009,13 @@ function createWatchOfConfigFile( optionsToExtend, watchOptionsToExtend, system, - jsDocParsingMode, reportDiagnostic, reportWatchStatus: createWatchStatusReporter(system, configParseResult.options), }); updateWatchCompilationHost(system, cb, watchCompilerHost); watchCompilerHost.configFileParsingResult = configParseResult; watchCompilerHost.extendedConfigCache = extendedConfigCache; + watchCompilerHost.jsDocParsingMode = jsDocParsingMode; return createWatchProgram(watchCompilerHost); } @@ -1032,11 +1032,11 @@ function createWatchOfFilesAndCompilerOptions( options, watchOptions, system, - jsDocParsingMode, reportDiagnostic, reportWatchStatus: createWatchStatusReporter(system, options), }); updateWatchCompilationHost(system, cb, watchCompilerHost); + watchCompilerHost.jsDocParsingMode = jsDocParsingMode; return createWatchProgram(watchCompilerHost); } diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 9fd78f7f22f7f..5653f69366b6c 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -9944,8 +9944,8 @@ declare namespace ts { /** * Create the watch compiler host for either configFile or fileNames and its options */ - function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[], jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfConfigFile; - function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions, jsDocParsingMode?: JSDocParsingMode): WatchCompilerHostOfFilesAndCompilerOptions; + function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, watchOptionsToExtend?: WatchOptions, extraFileExtensions?: readonly FileExtensionInfo[]): WatchCompilerHostOfConfigFile; + function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, projectReferences?: readonly ProjectReference[], watchOptions?: WatchOptions): WatchCompilerHostOfFilesAndCompilerOptions; /** * Creates the watch from the host for root files and compiler options */ @@ -10096,8 +10096,8 @@ declare namespace ts { * Create a function that reports watch status by writing to the system and handles the formating of the diagnostic */ function createBuilderStatusReporter(system: System, pretty?: boolean): DiagnosticReporter; - function createSolutionBuilderHost(system?: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary, jsDocParsingMode?: JSDocParsingMode): SolutionBuilderHost; - function createSolutionBuilderWithWatchHost(system?: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter, jsDocParsingMode?: JSDocParsingMode): SolutionBuilderWithWatchHost; + function createSolutionBuilderHost(system?: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportErrorSummary?: ReportEmitErrorSummary): SolutionBuilderHost; + function createSolutionBuilderWithWatchHost(system?: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportSolutionBuilderStatus?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter): SolutionBuilderWithWatchHost; function createSolutionBuilder(host: SolutionBuilderHost, rootNames: readonly string[], defaultOptions: BuildOptions): SolutionBuilder; function createSolutionBuilderWithWatch(host: SolutionBuilderWithWatchHost, rootNames: readonly string[], defaultOptions: BuildOptions, baseWatchOptions?: WatchOptions): SolutionBuilder; interface BuildOptions { From 3d60c925e47be0c59ab8f9f880b9f23aad1e85b7 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:26:23 -0700 Subject: [PATCH 10/25] One more revert --- src/compiler/watch.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index e95358abfb6e0..f0b02ed35c3e4 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -71,7 +71,6 @@ import { isReferencedFile, isReferenceFileLocation, isString, - JSDocParsingMode, last, maybeBind, memoize, @@ -971,12 +970,11 @@ export interface IncrementalCompilationOptions { reportErrorSummary?: ReportEmitErrorSummary; afterProgramEmitAndDiagnostics?(program: EmitAndSemanticDiagnosticsBuilderProgram): void; system?: System; - jsDocParsingMode?: JSDocParsingMode; } /** @internal */ export function performIncrementalCompilation(input: IncrementalCompilationOptions) { const system = input.system || sys; - const host = input.host || (input.host = createIncrementalCompilerHost(input.options, system, input.jsDocParsingMode)); + const host = input.host || (input.host = createIncrementalCompilerHost(input.options, system)); const builderProgram = createIncrementalProgram(input); const exitStatus = emitFilesAndReportErrorsAndGetExitStatus( builderProgram, From fb22a3e3f4895746ca2bdbb63351915f3399ecba Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:42:31 -0700 Subject: [PATCH 11/25] remove redundant assignments --- src/executeCommandLine/executeCommandLine.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 4c7a6c4239630..28d0694d4ede2 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -1015,7 +1015,6 @@ function createWatchOfConfigFile( updateWatchCompilationHost(system, cb, watchCompilerHost); watchCompilerHost.configFileParsingResult = configParseResult; watchCompilerHost.extendedConfigCache = extendedConfigCache; - watchCompilerHost.jsDocParsingMode = jsDocParsingMode; return createWatchProgram(watchCompilerHost); } @@ -1036,7 +1035,6 @@ function createWatchOfFilesAndCompilerOptions( reportWatchStatus: createWatchStatusReporter(system, options), }); updateWatchCompilationHost(system, cb, watchCompilerHost); - watchCompilerHost.jsDocParsingMode = jsDocParsingMode; return createWatchProgram(watchCompilerHost); } From 626ae3e98e8303965a787971a85fa6c53dbb0c8d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Sun, 17 Sep 2023 18:29:50 -0700 Subject: [PATCH 12/25] Make option slighttly more granular --- src/compiler/parser.ts | 12 +- src/compiler/scanner.ts | 38 ++- src/compiler/types.ts | 7 +- src/executeCommandLine/executeCommandLine.ts | 2 +- src/services/textChanges.ts | 2 +- src/services/transpile.ts | 2 +- src/testRunner/unittests/skipJSDocParsing.ts | 7 +- tests/baselines/reference/api/typescript.d.ts | 7 +- ....diff => deprecated-ParseAll-file.js.diff} | 2 +- ....diff => deprecated-ParseAll-file.ts.diff} | 2 +- ...eprecated-ParseForTypeErrors-file.js.diff} | 2 +- ...eprecated-ParseForTypeErrors-file.ts.diff} | 2 +- .../deprecated-ParseForTypeInfo-file.js.diff | 13 + ... deprecated-ParseForTypeInfo-file.ts.diff} | 2 +- ...diff => deprecated-ParseNone-file.js.diff} | 4 +- .../deprecated-ParseNone-file.ts.diff | 123 +++++++++ ...ile.js.diff => link-ParseAll-file.js.diff} | 2 +- ...ile.ts.diff => link-ParseAll-file.ts.diff} | 2 +- ...f => link-ParseForTypeErrors-file.js.diff} | 2 +- ...f => link-ParseForTypeErrors-file.ts.diff} | 2 +- .../link-ParseForTypeInfo-file.js.diff | 13 + ...iff => link-ParseForTypeInfo-file.ts.diff} | 2 +- ...le.js.diff => link-ParseNone-file.js.diff} | 4 +- .../link-ParseNone-file.ts.diff | 67 +++++ .../skipJSDocParsing/see-KeepAll-file.js.diff | 3 - .../skipJSDocParsing/see-KeepAll-file.ts.diff | 3 - .../see-ParseAll-file.js.diff | 3 + .../see-ParseAll-file.ts.diff | 3 + ...ff => see-ParseForTypeErrors-file.js.diff} | 2 +- ...ff => see-ParseForTypeErrors-file.ts.diff} | 2 +- .../see-ParseForTypeInfo-file.js.diff | 13 + ...diff => see-ParseForTypeInfo-file.ts.diff} | 2 +- ...ile.js.diff => see-ParseNone-file.js.diff} | 4 +- .../see-ParseNone-file.ts.diff | 259 ++++++++++++++++++ 34 files changed, 560 insertions(+), 55 deletions(-) rename tests/baselines/reference/skipJSDocParsing/{deprecated-KeepAll-file.js.diff => deprecated-ParseAll-file.js.diff} (86%) rename tests/baselines/reference/skipJSDocParsing/{deprecated-KeepAll-file.ts.diff => deprecated-ParseAll-file.ts.diff} (86%) rename tests/baselines/reference/skipJSDocParsing/{deprecated-KeepSemanticOnly-file.js.diff => deprecated-ParseForTypeErrors-file.js.diff} (93%) rename tests/baselines/reference/skipJSDocParsing/{deprecated-KeepSemanticOnly-file.ts.diff => deprecated-ParseForTypeErrors-file.ts.diff} (98%) create mode 100644 tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.js.diff rename tests/baselines/reference/skipJSDocParsing/{deprecated-SkipAll-file.ts.diff => deprecated-ParseForTypeInfo-file.ts.diff} (99%) rename tests/baselines/reference/skipJSDocParsing/{deprecated-SkipAll-file.js.diff => deprecated-ParseNone-file.js.diff} (99%) create mode 100644 tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.ts.diff rename tests/baselines/reference/skipJSDocParsing/{link-KeepAll-file.js.diff => link-ParseAll-file.js.diff} (86%) rename tests/baselines/reference/skipJSDocParsing/{link-KeepAll-file.ts.diff => link-ParseAll-file.ts.diff} (86%) rename tests/baselines/reference/skipJSDocParsing/{link-KeepSemanticOnly-file.js.diff => link-ParseForTypeErrors-file.js.diff} (93%) rename tests/baselines/reference/skipJSDocParsing/{link-KeepSemanticOnly-file.ts.diff => link-ParseForTypeErrors-file.ts.diff} (93%) create mode 100644 tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.js.diff rename tests/baselines/reference/skipJSDocParsing/{link-SkipAll-file.ts.diff => link-ParseForTypeInfo-file.ts.diff} (99%) rename tests/baselines/reference/skipJSDocParsing/{link-SkipAll-file.js.diff => link-ParseNone-file.js.diff} (98%) create mode 100644 tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.ts.diff delete mode 100644 tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.js.diff delete mode 100644 tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.ts.diff create mode 100644 tests/baselines/reference/skipJSDocParsing/see-ParseAll-file.js.diff create mode 100644 tests/baselines/reference/skipJSDocParsing/see-ParseAll-file.ts.diff rename tests/baselines/reference/skipJSDocParsing/{see-KeepSemanticOnly-file.js.diff => see-ParseForTypeErrors-file.js.diff} (93%) rename tests/baselines/reference/skipJSDocParsing/{see-KeepSemanticOnly-file.ts.diff => see-ParseForTypeErrors-file.ts.diff} (93%) create mode 100644 tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.js.diff rename tests/baselines/reference/skipJSDocParsing/{see-SkipAll-file.ts.diff => see-ParseForTypeInfo-file.ts.diff} (99%) rename tests/baselines/reference/skipJSDocParsing/{see-SkipAll-file.js.diff => see-ParseNone-file.js.diff} (99%) create mode 100644 tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.ts.diff diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index c9e3dad4bc0ed..db24852674a6d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1584,7 +1584,7 @@ namespace Parser { setParentNodes = false, scriptKind?: ScriptKind, setExternalModuleIndicatorOverride?: (file: SourceFile) => void, - jsDocParsingMode = JSDocParsingMode.KeepAll, + jsDocParsingMode = JSDocParsingMode.ParseAll, ): SourceFile { scriptKind = ensureScriptKind(fileName, scriptKind); if (scriptKind === ScriptKind.JSON) { @@ -1610,7 +1610,7 @@ namespace Parser { export function parseIsolatedEntityName(content: string, languageVersion: ScriptTarget): EntityName | undefined { // Choice of `isDeclarationFile` should be arbitrary - initializeState("", content, languageVersion, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.KeepAll); + initializeState("", content, languageVersion, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.ParseAll); // Prime the scanner. nextToken(); const entityName = parseEntityName(/*allowReservedWords*/ true); @@ -1620,7 +1620,7 @@ namespace Parser { } export function parseJsonText(fileName: string, sourceText: string, languageVersion: ScriptTarget = ScriptTarget.ES2015, syntaxCursor?: IncrementalParser.SyntaxCursor, setParentNodes = false): JsonSourceFile { - initializeState(fileName, sourceText, languageVersion, syntaxCursor, ScriptKind.JSON, JSDocParsingMode.KeepAll); + initializeState(fileName, sourceText, languageVersion, syntaxCursor, ScriptKind.JSON, JSDocParsingMode.ParseAll); sourceFlags = contextFlags; // Prime the scanner. @@ -1759,7 +1759,7 @@ namespace Parser { scanner.setText(""); scanner.setOnError(undefined); scanner.setScriptKind(ScriptKind.Unknown); - scanner.setJSDocParsingMode(JSDocParsingMode.KeepAll); + scanner.setJSDocParsingMode(JSDocParsingMode.ParseAll); // Clear any data. We don't want to accidentally hold onto it for too long. sourceText = undefined!; @@ -8685,7 +8685,7 @@ namespace Parser { export namespace JSDocParser { export function parseJSDocTypeExpressionForTests(content: string, start: number | undefined, length: number | undefined): { jsDocTypeExpression: JSDocTypeExpression; diagnostics: Diagnostic[]; } | undefined { - initializeState("file.js", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.KeepAll); + initializeState("file.js", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.ParseAll); scanner.setText(content, start, length); currentToken = scanner.scan(); const jsDocTypeExpression = parseJSDocTypeExpression(); @@ -8735,7 +8735,7 @@ namespace Parser { } export function parseIsolatedJSDocComment(content: string, start: number | undefined, length: number | undefined): { jsDoc: JSDoc; diagnostics: Diagnostic[]; } | undefined { - initializeState("", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.KeepAll); + initializeState("", content, ScriptTarget.Latest, /*syntaxCursor*/ undefined, ScriptKind.JS, JSDocParsingMode.ParseAll); const jsDoc = doInsideOfContext(NodeFlags.JSDoc, () => parseJSDocCommentWorker(start, length)); const sourceFile = { languageVariant: LanguageVariant.Standard, text: content } as SourceFile; diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 72446ec702c75..8a2c896140838 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -347,10 +347,7 @@ const commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore) */ const commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/; -/** - * Test for whether a comment contains a JSDoc tag needed by the checker when run in tsc. - */ -const semanticJSDocTagRegEx = /@(?:see|link)/i; +const jsDocSeeOrLink = /@(?:see|link)/i; function lookupInUnicodeMap(code: number, map: readonly number[]): boolean { // Bail out quickly if it couldn't possibly be in the map. @@ -1011,7 +1008,7 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean var inJSDocType = 0; var scriptKind = ScriptKind.Unknown; - var jsDocParsingMode = JSDocParsingMode.KeepAll; + var jsDocParsingMode = JSDocParsingMode.ParseAll; setText(text, start, length); @@ -2007,13 +2004,8 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean } } - if (isJSDoc) { - const shouldParseJSDoc = jsDocParsingMode === JSDocParsingMode.SkipAll ? false - : jsDocParsingMode === JSDocParsingMode.KeepSemanticOnly ? (scriptKind !== ScriptKind.TS && scriptKind !== ScriptKind.TSX) || semanticJSDocTagRegEx.test(text.slice(fullStartPos, pos)) - : true; - if (shouldParseJSDoc) { - tokenFlags |= TokenFlags.PrecedingJSDocComment; - } + if (isJSDoc && shouldParseJSDoc()) { + tokenFlags |= TokenFlags.PrecedingJSDocComment; } commentDirectives = appendIfCommentDirective(commentDirectives, text.slice(lastLineStart, pos), commentDirectiveRegExMultiLine, lastLineStart); @@ -2297,6 +2289,28 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean } } + function shouldParseJSDoc() { + switch (jsDocParsingMode) { + case JSDocParsingMode.ParseAll: + return true; + case JSDocParsingMode.ParseNone: + return false; + } + + if (scriptKind !== ScriptKind.TS && scriptKind !== ScriptKind.TSX) { + // If outside of TS, we need JSDoc to get any type info. + return true; + } + + if (jsDocParsingMode === JSDocParsingMode.ParseForTypeInfo) { + // If we're in TS, but we don't need to produce reliable errors, + // we don't need to parse to find @see or @link. + return false; + } + + return jsDocSeeOrLink.test(text.slice(fullStartPos, pos)); + } + function reScanInvalidIdentifier(): SyntaxKind { Debug.assert(token === SyntaxKind.Unknown, "'reScanInvalidIdentifier' should only be called when the current token is 'SyntaxKind.Unknown'."); pos = tokenStart = fullStartPos; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 4d1540026fb87..21259dabb12a6 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -9851,9 +9851,10 @@ export const commentPragmas = { } as const; export const enum JSDocParsingMode { - KeepAll = 0, - KeepSemanticOnly = 1, - SkipAll = 2, + ParseAll, + ParseForTypeErrors, + ParseForTypeInfo, + ParseNone, } /** @internal */ diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 28d0694d4ede2..6ec35922abbaf 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -791,7 +791,7 @@ function reportWatchModeWithoutSysSupport(sys: System, reportDiagnostic: Diagnos } // This could be inlined everywhere, but this is convenient for debugging and patching. -const jsDocParsingMode = JSDocParsingMode.KeepSemanticOnly; +const jsDocParsingMode = JSDocParsingMode.ParseForTypeErrors; function performBuild( sys: System, diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index eaef5cc2fbdbf..cf282da6bb314 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -1291,7 +1291,7 @@ namespace changesToText { export function newFileChangesWorker(scriptKind: ScriptKind, insertions: readonly NewFileInsertion[], newLineCharacter: string, formatContext: formatting.FormatContext): string { // TODO: this emits the file, parses it back, then formats it that -- may be a less roundabout way to do this const nonFormattedText = flatMap(insertions, insertion => insertion.statements.map(s => s === SyntaxKind.NewLineTrivia ? "" : getNonformattedText(s, insertion.oldFile, newLineCharacter).text)).join(newLineCharacter); - const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, /*setParentNodes*/ true, scriptKind, JSDocParsingMode.SkipAll); + const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, /*setParentNodes*/ true, scriptKind, JSDocParsingMode.ParseNone); const changes = formatting.formatDocument(sourceFile, formatContext); return applyChanges(nonFormattedText, changes) + newLineCharacter; } diff --git a/src/services/transpile.ts b/src/services/transpile.ts index cb757635002e8..b31bd3d0c853d 100644 --- a/src/services/transpile.ts +++ b/src/services/transpile.ts @@ -124,7 +124,7 @@ export function transpileModule(input: string, transpileOptions: TranspileOption }, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, - JSDocParsingMode.SkipAll, + JSDocParsingMode.ParseNone, ); if (transpileOptions.moduleName) { sourceFile.moduleName = transpileOptions.moduleName; diff --git a/src/testRunner/unittests/skipJSDocParsing.ts b/src/testRunner/unittests/skipJSDocParsing.ts index fbea8e8a400b9..df054b1a4d764 100644 --- a/src/testRunner/unittests/skipJSDocParsing.ts +++ b/src/testRunner/unittests/skipJSDocParsing.ts @@ -6,9 +6,10 @@ describe("unittests:: skipJSDocParsing", () => { const Diff = require("diff"); const kinds = [ - ts.JSDocParsingMode.KeepAll, - ts.JSDocParsingMode.KeepSemanticOnly, - ts.JSDocParsingMode.SkipAll, + ts.JSDocParsingMode.ParseAll, + ts.JSDocParsingMode.ParseForTypeErrors, + ts.JSDocParsingMode.ParseForTypeInfo, + ts.JSDocParsingMode.ParseNone, ]; const filenames = [ "file.ts", diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 5653f69366b6c..e818f69b7bd89 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -8610,9 +8610,10 @@ declare namespace ts { JSDocComment = 33, } enum JSDocParsingMode { - KeepAll = 0, - KeepSemanticOnly = 1, - SkipAll = 2, + ParseAll = 0, + ParseForTypeErrors = 1, + ParseForTypeInfo = 2, + ParseNone = 3, } interface UserPreferences { readonly disableSuggestions?: boolean; diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseAll-file.js.diff similarity index 86% rename from tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-ParseAll-file.js.diff index 0303d9ba366af..760be52719d14 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseAll-file.js.diff @@ -1,3 +1,3 @@ =================================================================== --- default -+++ KeepAll ++++ ParseAll diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseAll-file.ts.diff similarity index 86% rename from tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-ParseAll-file.ts.diff index 0303d9ba366af..760be52719d14 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-KeepAll-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseAll-file.ts.diff @@ -1,3 +1,3 @@ =================================================================== --- default -+++ KeepAll ++++ ParseAll diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.js.diff similarity index 93% rename from tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.js.diff index ca4b708f42863..9f332c7425be7 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.js.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ KeepSemanticOnly ++++ ParseForTypeErrors @@ -237,7 +237,7 @@ "typeReferenceDirectives": [], "libReferenceDirectives": [], diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.ts.diff similarity index 98% rename from tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.ts.diff index 4393dab7b7285..4359d4deb24bf 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-KeepSemanticOnly-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.ts.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ KeepSemanticOnly ++++ ParseForTypeErrors @@ -8,9 +8,8 @@ "0": { "kind": "FunctionDeclaration", diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.js.diff new file mode 100644 index 0000000000000..9517292aa5501 --- /dev/null +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.js.diff @@ -0,0 +1,13 @@ +=================================================================== +--- default ++++ ParseForTypeInfo +@@ -237,7 +237,7 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingMode": 0, ++ "jsDocParsingMode": 2, + "jsDocDiagnostics": [] + } +\ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.ts.diff similarity index 99% rename from tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.ts.diff index 55a93ba39de11..638378b6238de 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.ts.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ SkipAll ++++ ParseForTypeInfo @@ -8,9 +8,8 @@ "0": { "kind": "FunctionDeclaration", diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.js.diff similarity index 99% rename from tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.js.diff index 9374bc040ab72..d21ec019fe0d1 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-SkipAll-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.js.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ SkipAll ++++ ParseNone @@ -8,9 +8,8 @@ "0": { "kind": "FunctionDeclaration", @@ -119,6 +119,6 @@ "identifiers": {}, - "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingMode": 2 ++ "jsDocParsingMode": 3 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.ts.diff new file mode 100644 index 0000000000000..7b7d22b205a61 --- /dev/null +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.ts.diff @@ -0,0 +1,123 @@ +=================================================================== +--- default ++++ ParseNone +@@ -8,9 +8,8 @@ + "0": { + "kind": "FunctionDeclaration", + "pos": 0, + "end": 46, +- "flags": "Deprecated", + "modifierFlagsCache": 0, + "transformFlags": 4194304, + "name": { + "kind": "Identifier", +@@ -40,43 +39,9 @@ + "hasTrailingComma": false, + "transformFlags": 0 + }, + "multiLine": false +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 1, +- "end": 19, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocDeprecatedTag", +- "pos": 5, +- "end": 17, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 6, +- "end": 16, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "deprecated" +- } +- }, +- "length": 1, +- "pos": 5, +- "end": 17, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "1": { + "kind": "ExpressionStatement", + "pos": 46, +@@ -109,9 +74,8 @@ + "2": { + "kind": "FunctionDeclaration", + "pos": 61, + "end": 135, +- "flags": "Deprecated", + "modifierFlagsCache": 0, + "transformFlags": 4194304, + "name": { + "kind": "Identifier", +@@ -141,44 +105,9 @@ + "hasTrailingComma": false, + "transformFlags": 0 + }, + "multiLine": false +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 62, +- "end": 107, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "comment": "{@see imDeprecated}", +- "tags": { +- "0": { +- "kind": "JSDocDeprecatedTag", +- "pos": 92, +- "end": 105, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 93, +- "end": 103, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "deprecated" +- } +- }, +- "length": 1, +- "pos": 92, +- "end": 105, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "3": { + "kind": "ExpressionStatement", + "pos": 135, +@@ -237,6 +166,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 3 + } +\ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseAll-file.js.diff similarity index 86% rename from tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/link-ParseAll-file.js.diff index 0303d9ba366af..760be52719d14 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseAll-file.js.diff @@ -1,3 +1,3 @@ =================================================================== --- default -+++ KeepAll ++++ ParseAll diff --git a/tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseAll-file.ts.diff similarity index 86% rename from tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/link-ParseAll-file.ts.diff index 0303d9ba366af..760be52719d14 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-KeepAll-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseAll-file.ts.diff @@ -1,3 +1,3 @@ =================================================================== --- default -+++ KeepAll ++++ ParseAll diff --git a/tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.js.diff similarity index 93% rename from tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.js.diff index 9437adb4eae02..b88abe81eea7e 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.js.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ KeepSemanticOnly ++++ ParseForTypeErrors @@ -220,7 +220,7 @@ "typeReferenceDirectives": [], "libReferenceDirectives": [], diff --git a/tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.ts.diff similarity index 93% rename from tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.ts.diff index 39d8bc22ccb0b..c59dc26ee309f 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-KeepSemanticOnly-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.ts.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ KeepSemanticOnly ++++ ParseForTypeErrors @@ -220,6 +220,6 @@ "typeReferenceDirectives": [], "libReferenceDirectives": [], diff --git a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.js.diff new file mode 100644 index 0000000000000..3eeb86d0f3647 --- /dev/null +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.js.diff @@ -0,0 +1,13 @@ +=================================================================== +--- default ++++ ParseForTypeInfo +@@ -220,7 +220,7 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingMode": 0, ++ "jsDocParsingMode": 2, + "jsDocDiagnostics": [] + } +\ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.ts.diff similarity index 99% rename from tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.ts.diff index dc82c8e7a2f02..f4b02014d4bb0 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.ts.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ SkipAll ++++ ParseForTypeInfo @@ -91,53 +91,9 @@ "pos": 69, "end": 69, diff --git a/tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.js.diff similarity index 98% rename from tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.js.diff index b2cef93fdf0f8..06c43dab8e5a4 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-SkipAll-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.js.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ SkipAll ++++ ParseNone @@ -91,53 +91,9 @@ "pos": 69, "end": 69, @@ -63,6 +63,6 @@ "identifiers": {}, - "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingMode": 2 ++ "jsDocParsingMode": 3 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.ts.diff new file mode 100644 index 0000000000000..7aee615f93a3d --- /dev/null +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.ts.diff @@ -0,0 +1,67 @@ +=================================================================== +--- default ++++ ParseNone +@@ -91,53 +91,9 @@ + "pos": 69, + "end": 69, + "hasTrailingComma": false, + "transformFlags": 0 +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 32, +- "end": 48, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 32, +- "end": 36, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLink", +- "pos": 36, +- "end": 45, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 43, +- "end": 44, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 32, +- "end": 46, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "length": 2, + "pos": 0, + "end": 70, +@@ -220,6 +176,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 3 + } +\ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.js.diff deleted file mode 100644 index 0303d9ba366af..0000000000000 --- a/tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.js.diff +++ /dev/null @@ -1,3 +0,0 @@ -=================================================================== ---- default -+++ KeepAll diff --git a/tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.ts.diff deleted file mode 100644 index 0303d9ba366af..0000000000000 --- a/tests/baselines/reference/skipJSDocParsing/see-KeepAll-file.ts.diff +++ /dev/null @@ -1,3 +0,0 @@ -=================================================================== ---- default -+++ KeepAll diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseAll-file.js.diff new file mode 100644 index 0000000000000..760be52719d14 --- /dev/null +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseAll-file.js.diff @@ -0,0 +1,3 @@ +=================================================================== +--- default ++++ ParseAll diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseAll-file.ts.diff new file mode 100644 index 0000000000000..760be52719d14 --- /dev/null +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseAll-file.ts.diff @@ -0,0 +1,3 @@ +=================================================================== +--- default ++++ ParseAll diff --git a/tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.js.diff similarity index 93% rename from tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.js.diff index d300b3740f400..42f7d34158d0e 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.js.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ KeepSemanticOnly ++++ ParseForTypeErrors @@ -307,7 +307,7 @@ "typeReferenceDirectives": [], "libReferenceDirectives": [], diff --git a/tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.ts.diff similarity index 93% rename from tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.ts.diff index 6e027581a5933..81d894db972e6 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-KeepSemanticOnly-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.ts.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ KeepSemanticOnly ++++ ParseForTypeErrors @@ -307,6 +307,6 @@ "typeReferenceDirectives": [], "libReferenceDirectives": [], diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.js.diff new file mode 100644 index 0000000000000..851b10be4bb13 --- /dev/null +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.js.diff @@ -0,0 +1,13 @@ +=================================================================== +--- default ++++ ParseForTypeInfo +@@ -307,7 +307,7 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingMode": 0, ++ "jsDocParsingMode": 2, + "jsDocDiagnostics": [] + } +\ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.ts.diff similarity index 99% rename from tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.ts.diff rename to tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.ts.diff index 53b447622ae6a..1c2f5b58706b8 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.ts.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ SkipAll ++++ ParseForTypeInfo @@ -39,245 +39,9 @@ "end": 108, "hasTrailingComma": false, diff --git a/tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.js.diff similarity index 99% rename from tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.js.diff rename to tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.js.diff index f267a8293890f..72fbd841d29e3 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-SkipAll-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.js.diff @@ -1,6 +1,6 @@ =================================================================== --- default -+++ SkipAll ++++ ParseNone @@ -39,245 +39,9 @@ "end": 108, "hasTrailingComma": false, @@ -255,6 +255,6 @@ "identifiers": {}, - "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingMode": 2 ++ "jsDocParsingMode": 3 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.ts.diff new file mode 100644 index 0000000000000..a7b98471cd507 --- /dev/null +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.ts.diff @@ -0,0 +1,259 @@ +=================================================================== +--- default ++++ ParseNone +@@ -39,245 +39,9 @@ + "end": 108, + "hasTrailingComma": false, + "transformFlags": 0 + } +- }, +- "jsDoc": [ +- { +- "kind": "JSDoc", +- "pos": 1, +- "end": 28, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocTypedefTag", +- "pos": 8, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 9, +- "end": 16, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "typedef" +- }, +- "typeExpression": { +- "kind": "JSDocTypeExpression", +- "pos": 17, +- "end": 22, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "type": { +- "kind": "AnyKeyword", +- "pos": 18, +- "end": 21, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 1 +- } +- }, +- "fullName": { +- "kind": "Identifier", +- "pos": 23, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "name": { +- "kind": "Identifier", +- "pos": 23, +- "end": 24, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- } +- }, +- "length": 1, +- "pos": 8, +- "end": 24, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- { +- "kind": "JSDoc", +- "pos": 30, +- "end": 100, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tags": { +- "0": { +- "kind": "JSDocSeeTag", +- "pos": 37, +- "end": 55, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 38, +- "end": 41, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 42, +- "end": 42, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLink", +- "pos": 42, +- "end": 51, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 49, +- "end": 50, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 42, +- "end": 55, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "1": { +- "kind": "JSDocSeeTag", +- "pos": 55, +- "end": 77, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 56, +- "end": 59, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 60, +- "end": 60, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLinkCode", +- "pos": 60, +- "end": 73, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 71, +- "end": 72, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 60, +- "end": 77, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "2": { +- "kind": "JSDocSeeTag", +- "pos": 77, +- "end": 98, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "tagName": { +- "kind": "Identifier", +- "pos": 78, +- "end": 81, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "see" +- }, +- "comment": { +- "0": { +- "kind": "JSDocText", +- "pos": 82, +- "end": 82, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "text": "" +- }, +- "1": { +- "kind": "JSDocLinkPlain", +- "pos": 82, +- "end": 96, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "name": { +- "kind": "Identifier", +- "pos": 94, +- "end": 95, +- "flags": "JSDoc", +- "modifierFlagsCache": 0, +- "transformFlags": 0, +- "escapedText": "A" +- }, +- "text": "" +- }, +- "length": 2, +- "pos": 82, +- "end": 98, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- }, +- "length": 3, +- "pos": 37, +- "end": 98, +- "hasTrailingComma": false, +- "transformFlags": 0 +- } +- } +- ] ++ } + }, + "length": 1, + "pos": 0, + "end": 109, +@@ -307,6 +71,6 @@ + "typeReferenceDirectives": [], + "libReferenceDirectives": [], + "amdDependencies": [], + "identifiers": {}, +- "jsDocParsingMode": 0 ++ "jsDocParsingMode": 3 + } +\ No newline at end of file From b6379cba4931d2201ea5bf540dcc26dfcb9e7430 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 18 Sep 2023 11:48:45 -0700 Subject: [PATCH 13/25] Reorder so that the surefire enum members are first --- src/compiler/types.ts | 2 +- tests/baselines/reference/api/typescript.d.ts | 6 +++--- .../deprecated-ParseForTypeErrors-file.js.diff | 2 +- .../deprecated-ParseForTypeErrors-file.ts.diff | 2 +- .../deprecated-ParseForTypeInfo-file.js.diff | 2 +- .../deprecated-ParseForTypeInfo-file.ts.diff | 2 +- .../skipJSDocParsing/deprecated-ParseNone-file.js.diff | 2 +- .../skipJSDocParsing/deprecated-ParseNone-file.ts.diff | 2 +- .../skipJSDocParsing/link-ParseForTypeErrors-file.js.diff | 2 +- .../skipJSDocParsing/link-ParseForTypeErrors-file.ts.diff | 2 +- .../skipJSDocParsing/link-ParseForTypeInfo-file.js.diff | 2 +- .../skipJSDocParsing/link-ParseForTypeInfo-file.ts.diff | 2 +- .../reference/skipJSDocParsing/link-ParseNone-file.js.diff | 2 +- .../reference/skipJSDocParsing/link-ParseNone-file.ts.diff | 2 +- .../skipJSDocParsing/see-ParseForTypeErrors-file.js.diff | 2 +- .../skipJSDocParsing/see-ParseForTypeErrors-file.ts.diff | 2 +- .../skipJSDocParsing/see-ParseForTypeInfo-file.js.diff | 2 +- .../skipJSDocParsing/see-ParseForTypeInfo-file.ts.diff | 2 +- .../reference/skipJSDocParsing/see-ParseNone-file.js.diff | 2 +- .../reference/skipJSDocParsing/see-ParseNone-file.ts.diff | 2 +- 20 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 21259dabb12a6..18dca0e2d7e8e 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -9852,9 +9852,9 @@ export const commentPragmas = { export const enum JSDocParsingMode { ParseAll, + ParseNone, ParseForTypeErrors, ParseForTypeInfo, - ParseNone, } /** @internal */ diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index e818f69b7bd89..e2282ee9a679c 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -8611,9 +8611,9 @@ declare namespace ts { } enum JSDocParsingMode { ParseAll = 0, - ParseForTypeErrors = 1, - ParseForTypeInfo = 2, - ParseNone = 3, + ParseNone = 1, + ParseForTypeErrors = 2, + ParseForTypeInfo = 3, } interface UserPreferences { readonly disableSuggestions?: boolean; diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.js.diff index 9f332c7425be7..e93086418a396 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.js.diff @@ -7,7 +7,7 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0, -+ "jsDocParsingMode": 1, ++ "jsDocParsingMode": 2, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.ts.diff index 4359d4deb24bf..87668c103ba48 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeErrors-file.ts.diff @@ -62,6 +62,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 1 ++ "jsDocParsingMode": 2 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.js.diff index 9517292aa5501..2cbcaf823cbbb 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.js.diff @@ -7,7 +7,7 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0, -+ "jsDocParsingMode": 2, ++ "jsDocParsingMode": 3, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.ts.diff index 638378b6238de..71a17bf4c9b28 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseForTypeInfo-file.ts.diff @@ -118,6 +118,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 2 ++ "jsDocParsingMode": 3 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.js.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.js.diff index d21ec019fe0d1..34123c540957d 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.js.diff @@ -119,6 +119,6 @@ "identifiers": {}, - "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingMode": 3 ++ "jsDocParsingMode": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.ts.diff index 7b7d22b205a61..a6b7b2826bb37 100644 --- a/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/deprecated-ParseNone-file.ts.diff @@ -118,6 +118,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 3 ++ "jsDocParsingMode": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.js.diff index b88abe81eea7e..e9d1e506a0dbe 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.js.diff @@ -7,7 +7,7 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0, -+ "jsDocParsingMode": 1, ++ "jsDocParsingMode": 2, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.ts.diff index c59dc26ee309f..6c5ccc242997c 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeErrors-file.ts.diff @@ -7,6 +7,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 1 ++ "jsDocParsingMode": 2 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.js.diff index 3eeb86d0f3647..bb812c46fb7e3 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.js.diff @@ -7,7 +7,7 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0, -+ "jsDocParsingMode": 2, ++ "jsDocParsingMode": 3, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.ts.diff index f4b02014d4bb0..3dc7ed06e5b59 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseForTypeInfo-file.ts.diff @@ -62,6 +62,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 2 ++ "jsDocParsingMode": 3 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.js.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.js.diff index 06c43dab8e5a4..62602086aa08d 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.js.diff @@ -63,6 +63,6 @@ "identifiers": {}, - "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingMode": 3 ++ "jsDocParsingMode": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.ts.diff index 7aee615f93a3d..f9f9ff442701b 100644 --- a/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/link-ParseNone-file.ts.diff @@ -62,6 +62,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 3 ++ "jsDocParsingMode": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.js.diff index 42f7d34158d0e..ba69c9d229b52 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.js.diff @@ -7,7 +7,7 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0, -+ "jsDocParsingMode": 1, ++ "jsDocParsingMode": 2, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.ts.diff index 81d894db972e6..87f0d97e8188e 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeErrors-file.ts.diff @@ -7,6 +7,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 1 ++ "jsDocParsingMode": 2 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.js.diff index 851b10be4bb13..12d08d1593c44 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.js.diff @@ -7,7 +7,7 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0, -+ "jsDocParsingMode": 2, ++ "jsDocParsingMode": 3, "jsDocDiagnostics": [] } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.ts.diff index 1c2f5b58706b8..d02071fc7ed65 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseForTypeInfo-file.ts.diff @@ -254,6 +254,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 2 ++ "jsDocParsingMode": 3 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.js.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.js.diff index 72fbd841d29e3..6765fd6681d39 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.js.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.js.diff @@ -255,6 +255,6 @@ "identifiers": {}, - "jsDocParsingMode": 0, - "jsDocDiagnostics": [] -+ "jsDocParsingMode": 3 ++ "jsDocParsingMode": 1 } \ No newline at end of file diff --git a/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.ts.diff b/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.ts.diff index a7b98471cd507..58af82cd07529 100644 --- a/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.ts.diff +++ b/tests/baselines/reference/skipJSDocParsing/see-ParseNone-file.ts.diff @@ -254,6 +254,6 @@ "amdDependencies": [], "identifiers": {}, - "jsDocParsingMode": 0 -+ "jsDocParsingMode": 3 ++ "jsDocParsingMode": 1 } \ No newline at end of file From a273a91da353e4dbeeabccb114c7189b1f57362f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 18 Sep 2023 14:46:18 -0700 Subject: [PATCH 14/25] Drop option from LS Host --- src/server/project.ts | 5 ----- src/services/services.ts | 3 ++- src/services/types.ts | 3 --- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/server/project.ts b/src/server/project.ts index 4eb1ce0695c27..3b1c7adad14e5 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -71,7 +71,6 @@ import { isDeclarationFileName, isExternalModuleNameRelative, isInsideNodeModules, - JSDocParsingMode, JsTyping, LanguageService, LanguageServiceHost, @@ -507,9 +506,6 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo /** @internal */ createHash = maybeBind(this.projectService.host, this.projectService.host.createHash); - /** @internal */ - readonly jsDocParsingMode: JSDocParsingMode | undefined; - /** @internal */ constructor( projectName: string, @@ -528,7 +524,6 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo this.directoryStructureHost = directoryStructureHost; this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory); this.getCanonicalFileName = this.projectService.toCanonicalFileName; - this.jsDocParsingMode = this.projectService.jsDocParsingMode; this.cancellationToken = new ThrottledCancellationToken(this.projectService.cancellationToken, this.projectService.throttleWaitMilliseconds); if (!this.compilerOptions) { diff --git a/src/services/services.ts b/src/services/services.ts index 2048616816733..73b9a59dc811b 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1363,7 +1363,8 @@ class SyntaxTreeCache { ), setExternalModuleIndicator: getSetExternalModuleIndicator(this.host.getCompilationSettings()), }; - sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, this.host.jsDocParsingMode); + // These files are used to produce syntax-based highlighting, which reads JSDoc, so we must use ParseAll. + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, JSDocParsingMode.ParseAll); } else if (this.currentFileVersion !== version) { // This is the same file, just a newer version. Incrementally parse the file. diff --git a/src/services/types.ts b/src/services/types.ts index c1d92f808dccf..18a52a5e6fcc8 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -14,7 +14,6 @@ import { GetEffectiveTypeRootsHost, HasChangedAutomaticTypeDirectiveNames, HasInvalidatedResolutions, - JSDocParsingMode, LineAndCharacter, MinimalResolutionCacheHost, ModuleResolutionCache, @@ -428,8 +427,6 @@ export interface LanguageServiceHost extends GetEffectiveTypeRootsHost, MinimalR getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; /** @internal */ onReleaseParsedCommandLine?(configFileName: string, oldResolvedRef: ResolvedProjectReference | undefined, optionOptions: CompilerOptions): void; /** @internal */ getIncompleteCompletionsCache?(): IncompleteCompletionsCache; - - jsDocParsingMode?: JSDocParsingMode; } /** @internal */ From a430b30c1d85074e89b15fafca2fe408e6ceff9e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 18 Sep 2023 15:01:46 -0700 Subject: [PATCH 15/25] Add docs to new enum --- src/compiler/types.ts | 21 ++++++++++++++++++ tests/baselines/reference/api/typescript.d.ts | 22 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 18dca0e2d7e8e..b2a2c853e1062 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -9851,9 +9851,30 @@ export const commentPragmas = { } as const; export const enum JSDocParsingMode { + /** + * Always parse JSDoc comments and include them in the AST. + * + * This is the default if no mode is provided. + */ ParseAll, + /** + * Never parse JSDoc comments, mo matter the file type. + */ ParseNone, + /** + * Parse only JSDoc comments which are needed to provide correct type errors. + * + * This will always parse JSDoc in non-TS files, but only parse JSDoc comments + * containing `@see` and `@link` in TS files. + */ ParseForTypeErrors, + /** + * Parse only JSDoc comments which are needed to provide correct type info. + * + * This will always parse JSDoc in non-TS files, but never in TS files. + * + * Note: Do not use this mode if you require accurate type errors; use {@link ParseForTypeErrors} instead. + */ ParseForTypeInfo, } diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index e2282ee9a679c..763fb5fb7dcf3 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -8610,9 +8610,30 @@ declare namespace ts { JSDocComment = 33, } enum JSDocParsingMode { + /** + * Always parse JSDoc comments and include them in the AST. + * + * This is the default if no mode is provided. + */ ParseAll = 0, + /** + * Never parse JSDoc comments, mo matter the file type. + */ ParseNone = 1, + /** + * Parse only JSDoc comments which are needed to provide correct type errors. + * + * This will always parse JSDoc in non-TS files, but only parse JSDoc comments + * containing `@see` and `@link` in TS files. + */ ParseForTypeErrors = 2, + /** + * Parse only JSDoc comments which are needed to provide correct type info. + * + * This will always parse JSDoc in non-TS files, but never in TS files. + * + * Note: Do not use this mode if you require accurate type errors; use {@link ParseForTypeErrors} instead. + */ ParseForTypeInfo = 3, } interface UserPreferences { @@ -10288,7 +10309,6 @@ declare namespace ts { installPackage?(options: InstallPackageOptions): Promise; writeFile?(fileName: string, content: string): void; getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; - jsDocParsingMode?: JSDocParsingMode; } type WithMetadata = T & { metadata?: unknown; From 3ebdfb6dfa4075348bae6b11af07bb63457ac748 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 18 Sep 2023 15:58:20 -0700 Subject: [PATCH 16/25] Fix registry key --- src/harness/incrementalUtils.ts | 2 +- src/services/documentRegistry.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/harness/incrementalUtils.ts b/src/harness/incrementalUtils.ts index 5aa4c16b927aa..d70a9a85c37c5 100644 --- a/src/harness/incrementalUtils.ts +++ b/src/harness/incrementalUtils.ts @@ -85,7 +85,7 @@ function verifyDocumentRegistry(service: ts.server.ProjectService) { if (!program) return; const key = service.documentRegistry.getKeyForCompilationSettings(program.getCompilerOptions()); program.getSourceFiles().forEach(f => { - const keyWithMode = service.documentRegistry.getDocumentRegistryBucketKeyWithMode(key, f.impliedNodeFormat); + const keyWithMode = service.documentRegistry.getDocumentRegistryBucketKeyWithMode(key, f.impliedNodeFormat, service.jsDocParsingMode); let mapForKeyWithMode = stats.get(keyWithMode); let result: Map | undefined; if (mapForKeyWithMode === undefined) { diff --git a/src/services/documentRegistry.ts b/src/services/documentRegistry.ts index a2c679888384a..0260035bb7740 100644 --- a/src/services/documentRegistry.ts +++ b/src/services/documentRegistry.ts @@ -119,7 +119,7 @@ export interface DocumentRegistry { getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegistryBucketKey; /** @internal */ - getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode): DocumentRegistryBucketKeyWithMode; + getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode, jsDocParsingMode: JSDocParsingMode | undefined): DocumentRegistryBucketKeyWithMode; /** * Informs the DocumentRegistry that a file is not needed any longer. * @@ -274,7 +274,7 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole }; sourceFileOptions.languageVersion = scriptTarget; const oldBucketCount = buckets.size; - const keyWithMode = getDocumentRegistryBucketKeyWithMode(key, sourceFileOptions.impliedNodeFormat); + const keyWithMode = getDocumentRegistryBucketKeyWithMode(key, sourceFileOptions.impliedNodeFormat, jsDocParsingMode); const bucket = getOrUpdate(buckets, keyWithMode, () => new Map()); if (tracing) { if (buckets.size > oldBucketCount) { @@ -367,7 +367,7 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole } function releaseDocumentWithKey(path: Path, key: DocumentRegistryBucketKey, scriptKind?: ScriptKind, impliedNodeFormat?: ResolutionMode): void { - const bucket = Debug.checkDefined(buckets.get(getDocumentRegistryBucketKeyWithMode(key, impliedNodeFormat))); + const bucket = Debug.checkDefined(buckets.get(getDocumentRegistryBucketKeyWithMode(key, impliedNodeFormat, jsDocParsingMode))); const bucketEntry = bucket.get(path)!; const entry = getDocumentRegistryEntry(bucketEntry, scriptKind)!; entry.languageServiceRefCount--; @@ -404,6 +404,6 @@ function getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegist return getKeyForCompilerOptions(settings, sourceFileAffectingCompilerOptions) as DocumentRegistryBucketKey; } -function getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode) { - return (mode ? `${key}|${mode}` : key) as DocumentRegistryBucketKeyWithMode; +function getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode, jsDocParsingMode: JSDocParsingMode | undefined) { + return `${key}|${mode ?? ""}|${jsDocParsingMode ?? ""}` as DocumentRegistryBucketKeyWithMode; } From 3673f9e6c976e25f7fad61f4d07e2f3a42722e66 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 18 Sep 2023 16:06:10 -0700 Subject: [PATCH 17/25] Forgot baselines --- ...script-info-is-orphan,-and-orphan-script-info-changes.js | 6 +++--- .../Caches-the-source-file-if-script-info-is-orphan.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js b/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js index 0ac82cd1f3984..28bfca97d14c7 100644 --- a/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js +++ b/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js @@ -69,7 +69,7 @@ Info seq [hh:mm:ss:mss] Open files: Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/index.ts ProjectRootPath: undefined Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| /user/username/projects/myproject/index.ts: TS 1 /user/username/projects/myproject/module1.d.ts: TS 1 /a/lib/lib.d.ts: TS 1 @@ -88,7 +88,7 @@ Info seq [hh:mm:ss:mss] Files (2) Info seq [hh:mm:ss:mss] ----------------------------------------------- DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| /user/username/projects/myproject/index.ts: TS 1 /a/lib/lib.d.ts: TS 1 Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/module1.d.ts 1:: WatchInfo: /user/username/projects/myproject/module1.d.ts 500 undefined WatchType: Closed Script info @@ -111,7 +111,7 @@ Info seq [hh:mm:ss:mss] Files (3) Info seq [hh:mm:ss:mss] ----------------------------------------------- DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| /user/username/projects/myproject/index.ts: TS 1 /a/lib/lib.d.ts: TS 1 /user/username/projects/myproject/module1.d.ts: TS 1 \ No newline at end of file diff --git a/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js b/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js index ce09ea9b1b5d1..d724c9a1b5bdb 100644 --- a/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js +++ b/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js @@ -69,7 +69,7 @@ Info seq [hh:mm:ss:mss] Open files: Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/index.ts ProjectRootPath: undefined Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| /user/username/projects/myproject/index.ts: TS 1 /user/username/projects/myproject/module1.d.ts: TS 1 /a/lib/lib.d.ts: TS 1 @@ -88,7 +88,7 @@ Info seq [hh:mm:ss:mss] Files (2) Info seq [hh:mm:ss:mss] ----------------------------------------------- DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| /user/username/projects/myproject/index.ts: TS 1 /a/lib/lib.d.ts: TS 1 Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json @@ -109,7 +109,7 @@ Info seq [hh:mm:ss:mss] Files (3) Info seq [hh:mm:ss:mss] ----------------------------------------------- DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| /user/username/projects/myproject/index.ts: TS 1 /a/lib/lib.d.ts: TS 1 /user/username/projects/myproject/module1.d.ts: TS 1 \ No newline at end of file From f393631d56d8a7b3e03d1cb4c0c5d4fe86d31e03 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 19 Sep 2023 14:27:43 -0700 Subject: [PATCH 18/25] Revert "Fix registry key" This reverts commit 3ebdfb6dfa4075348bae6b11af07bb63457ac748. --- src/harness/incrementalUtils.ts | 2 +- src/services/documentRegistry.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/harness/incrementalUtils.ts b/src/harness/incrementalUtils.ts index d70a9a85c37c5..5aa4c16b927aa 100644 --- a/src/harness/incrementalUtils.ts +++ b/src/harness/incrementalUtils.ts @@ -85,7 +85,7 @@ function verifyDocumentRegistry(service: ts.server.ProjectService) { if (!program) return; const key = service.documentRegistry.getKeyForCompilationSettings(program.getCompilerOptions()); program.getSourceFiles().forEach(f => { - const keyWithMode = service.documentRegistry.getDocumentRegistryBucketKeyWithMode(key, f.impliedNodeFormat, service.jsDocParsingMode); + const keyWithMode = service.documentRegistry.getDocumentRegistryBucketKeyWithMode(key, f.impliedNodeFormat); let mapForKeyWithMode = stats.get(keyWithMode); let result: Map | undefined; if (mapForKeyWithMode === undefined) { diff --git a/src/services/documentRegistry.ts b/src/services/documentRegistry.ts index 0260035bb7740..a2c679888384a 100644 --- a/src/services/documentRegistry.ts +++ b/src/services/documentRegistry.ts @@ -119,7 +119,7 @@ export interface DocumentRegistry { getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegistryBucketKey; /** @internal */ - getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode, jsDocParsingMode: JSDocParsingMode | undefined): DocumentRegistryBucketKeyWithMode; + getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode): DocumentRegistryBucketKeyWithMode; /** * Informs the DocumentRegistry that a file is not needed any longer. * @@ -274,7 +274,7 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole }; sourceFileOptions.languageVersion = scriptTarget; const oldBucketCount = buckets.size; - const keyWithMode = getDocumentRegistryBucketKeyWithMode(key, sourceFileOptions.impliedNodeFormat, jsDocParsingMode); + const keyWithMode = getDocumentRegistryBucketKeyWithMode(key, sourceFileOptions.impliedNodeFormat); const bucket = getOrUpdate(buckets, keyWithMode, () => new Map()); if (tracing) { if (buckets.size > oldBucketCount) { @@ -367,7 +367,7 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole } function releaseDocumentWithKey(path: Path, key: DocumentRegistryBucketKey, scriptKind?: ScriptKind, impliedNodeFormat?: ResolutionMode): void { - const bucket = Debug.checkDefined(buckets.get(getDocumentRegistryBucketKeyWithMode(key, impliedNodeFormat, jsDocParsingMode))); + const bucket = Debug.checkDefined(buckets.get(getDocumentRegistryBucketKeyWithMode(key, impliedNodeFormat))); const bucketEntry = bucket.get(path)!; const entry = getDocumentRegistryEntry(bucketEntry, scriptKind)!; entry.languageServiceRefCount--; @@ -404,6 +404,6 @@ function getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegist return getKeyForCompilerOptions(settings, sourceFileAffectingCompilerOptions) as DocumentRegistryBucketKey; } -function getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode, jsDocParsingMode: JSDocParsingMode | undefined) { - return `${key}|${mode ?? ""}|${jsDocParsingMode ?? ""}` as DocumentRegistryBucketKeyWithMode; +function getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode) { + return (mode ? `${key}|${mode}` : key) as DocumentRegistryBucketKeyWithMode; } From 40b0cc47687555fa958ef19d833f3a9f53325b6e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 19 Sep 2023 14:36:54 -0700 Subject: [PATCH 19/25] update baselines --- ...script-info-is-orphan,-and-orphan-script-info-changes.js | 6 +++--- .../Caches-the-source-file-if-script-info-is-orphan.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js b/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js index 28bfca97d14c7..0ac82cd1f3984 100644 --- a/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js +++ b/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js @@ -69,7 +69,7 @@ Info seq [hh:mm:ss:mss] Open files: Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/index.ts ProjectRootPath: undefined Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined /user/username/projects/myproject/index.ts: TS 1 /user/username/projects/myproject/module1.d.ts: TS 1 /a/lib/lib.d.ts: TS 1 @@ -88,7 +88,7 @@ Info seq [hh:mm:ss:mss] Files (2) Info seq [hh:mm:ss:mss] ----------------------------------------------- DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined /user/username/projects/myproject/index.ts: TS 1 /a/lib/lib.d.ts: TS 1 Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/module1.d.ts 1:: WatchInfo: /user/username/projects/myproject/module1.d.ts 500 undefined WatchType: Closed Script info @@ -111,7 +111,7 @@ Info seq [hh:mm:ss:mss] Files (3) Info seq [hh:mm:ss:mss] ----------------------------------------------- DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined /user/username/projects/myproject/index.ts: TS 1 /a/lib/lib.d.ts: TS 1 /user/username/projects/myproject/module1.d.ts: TS 1 \ No newline at end of file diff --git a/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js b/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js index d724c9a1b5bdb..ce09ea9b1b5d1 100644 --- a/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js +++ b/tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js @@ -69,7 +69,7 @@ Info seq [hh:mm:ss:mss] Open files: Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/index.ts ProjectRootPath: undefined Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined /user/username/projects/myproject/index.ts: TS 1 /user/username/projects/myproject/module1.d.ts: TS 1 /a/lib/lib.d.ts: TS 1 @@ -88,7 +88,7 @@ Info seq [hh:mm:ss:mss] Files (2) Info seq [hh:mm:ss:mss] ----------------------------------------------- DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined /user/username/projects/myproject/index.ts: TS 1 /a/lib/lib.d.ts: TS 1 Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json @@ -109,7 +109,7 @@ Info seq [hh:mm:ss:mss] Files (3) Info seq [hh:mm:ss:mss] ----------------------------------------------- DocumentRegistry:: - Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|| + Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined /user/username/projects/myproject/index.ts: TS 1 /a/lib/lib.d.ts: TS 1 /user/username/projects/myproject/module1.d.ts: TS 1 \ No newline at end of file From 12f59036b948188126e117ca7510703452462f4d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 19 Sep 2023 16:16:57 -0700 Subject: [PATCH 20/25] Move jsDocParsingMode to options bag --- src/compiler/parser.ts | 4 +++- src/compiler/program.ts | 3 ++- src/harness/fakesHosts.ts | 3 ++- src/services/services.ts | 3 ++- src/services/textChanges.ts | 2 +- src/services/transpile.ts | 4 +--- src/testRunner/unittests/skipJSDocParsing.ts | 4 ++-- tests/baselines/reference/api/typescript.d.ts | 3 ++- 8 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index db24852674a6d..2a8f9f5165cc2 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1319,13 +1319,14 @@ export interface CreateSourceFileOptions { setExternalModuleIndicator?: (file: SourceFile) => void; /** @internal */ packageJsonLocations?: readonly string[]; /** @internal */ packageJsonScope?: PackageJsonInfo; + jsDocParsingMode?: JSDocParsingMode; } function setExternalModuleIndicator(sourceFile: SourceFile) { sourceFile.externalModuleIndicator = isFileProbablyExternalModule(sourceFile); } -export function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes = false, scriptKind?: ScriptKind, jsDocParsingMode?: JSDocParsingMode): SourceFile { +export function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes = false, scriptKind?: ScriptKind): SourceFile { tracing?.push(tracing.Phase.Parse, "createSourceFile", { path: fileName }, /*separateBeginAndEnd*/ true); performance.mark("beforeParse"); let result: SourceFile; @@ -1335,6 +1336,7 @@ export function createSourceFile(fileName: string, sourceText: string, languageV languageVersion, setExternalModuleIndicator: overrideSetExternalModuleIndicator, impliedNodeFormat: format, + jsDocParsingMode, } = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions : ({ languageVersion: languageVersionOrOptions } as CreateSourceFileOptions); if (languageVersion === ScriptTarget.JSON) { result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, ScriptKind.JSON, noop, jsDocParsingMode); diff --git a/src/compiler/program.ts b/src/compiler/program.ts index c1b7b8ec93b1e..044e18b3540f0 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -419,7 +419,8 @@ export function createGetSourceFile( } text = ""; } - return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined, jsDocParsingMode) : undefined; + languageVersionOrOptions = typeof languageVersionOrOptions === "object" ? { jsDocParsingMode, ...languageVersionOrOptions } : { jsDocParsingMode, languageVersion: languageVersionOrOptions }; + return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined) : undefined; }; } diff --git a/src/harness/fakesHosts.ts b/src/harness/fakesHosts.ts index f8b2ca0619f31..a85d9e0a5e6e6 100644 --- a/src/harness/fakesHosts.ts +++ b/src/harness/fakesHosts.ts @@ -376,7 +376,8 @@ export class CompilerHost implements ts.CompilerHost { } } - const parsed = ts.createSourceFile(fileName, content, languageVersionOrOptions, this._setParentNodes || this.shouldAssertInvariants, /*scriptKind*/ undefined, this.jsDocParsingMode); + languageVersionOrOptions = typeof languageVersionOrOptions === "object" ? { jsDocParsingMode: this.jsDocParsingMode, ...languageVersionOrOptions } : { jsDocParsingMode: this.jsDocParsingMode, languageVersion: languageVersionOrOptions }; + const parsed = ts.createSourceFile(fileName, content, languageVersionOrOptions, this._setParentNodes || this.shouldAssertInvariants); if (this.shouldAssertInvariants) { Utils.assertInvariants(parsed, /*parent*/ undefined); } diff --git a/src/services/services.ts b/src/services/services.ts index 73b9a59dc811b..80cd1535205d0 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1398,7 +1398,8 @@ export function createLanguageServiceSourceFile( scriptKind?: ScriptKind, jsDocParsingMode?: JSDocParsingMode, ): SourceFile { - const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind, jsDocParsingMode); + scriptTargetOrOptions = typeof scriptTargetOrOptions === "object" ? { jsDocParsingMode, ...scriptTargetOrOptions } : { jsDocParsingMode, languageVersion: scriptTargetOrOptions }; + const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind); setSourceFileFields(sourceFile, scriptSnapshot, version); return sourceFile; } diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index cf282da6bb314..177e25b18d0e5 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -1291,7 +1291,7 @@ namespace changesToText { export function newFileChangesWorker(scriptKind: ScriptKind, insertions: readonly NewFileInsertion[], newLineCharacter: string, formatContext: formatting.FormatContext): string { // TODO: this emits the file, parses it back, then formats it that -- may be a less roundabout way to do this const nonFormattedText = flatMap(insertions, insertion => insertion.statements.map(s => s === SyntaxKind.NewLineTrivia ? "" : getNonformattedText(s, insertion.oldFile, newLineCharacter).text)).join(newLineCharacter); - const sourceFile = createSourceFile("any file name", nonFormattedText, ScriptTarget.ESNext, /*setParentNodes*/ true, scriptKind, JSDocParsingMode.ParseNone); + const sourceFile = createSourceFile("any file name", nonFormattedText, { languageVersion: ScriptTarget.ESNext, jsDocParsingMode: JSDocParsingMode.ParseNone }, /*setParentNodes*/ true, scriptKind); const changes = formatting.formatDocument(sourceFile, formatContext); return applyChanges(nonFormattedText, changes) + newLineCharacter; } diff --git a/src/services/transpile.ts b/src/services/transpile.ts index b31bd3d0c853d..9637387afa093 100644 --- a/src/services/transpile.ts +++ b/src/services/transpile.ts @@ -121,10 +121,8 @@ export function transpileModule(input: string, transpileOptions: TranspileOption languageVersion: getEmitScriptTarget(options), impliedNodeFormat: getImpliedNodeFormatForFile(toPath(inputFileName, "", compilerHost.getCanonicalFileName), /*packageJsonInfoCache*/ undefined, compilerHost, options), setExternalModuleIndicator: getSetExternalModuleIndicator(options), + jsDocParsingMode: JSDocParsingMode.ParseNone, }, - /*setParentNodes*/ undefined, - /*scriptKind*/ undefined, - JSDocParsingMode.ParseNone, ); if (transpileOptions.moduleName) { sourceFile.moduleName = transpileOptions.moduleName; diff --git a/src/testRunner/unittests/skipJSDocParsing.ts b/src/testRunner/unittests/skipJSDocParsing.ts index df054b1a4d764..e7a3185ade8c1 100644 --- a/src/testRunner/unittests/skipJSDocParsing.ts +++ b/src/testRunner/unittests/skipJSDocParsing.ts @@ -21,9 +21,9 @@ describe("unittests:: skipJSDocParsing", () => { for (const filename of filenames) { const testName = `${name}-${kindName}-${filename}`; it(testName, () => { - const sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); + const sourceFile = ts.createSourceFile(filename, content, { languageVersion: ts.ScriptTarget.ESNext }, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); assert.isTrue(sourceFile && sourceFile.parseDiagnostics.length === 0, "no errors issued"); - const sourceFileSkipped = ts.createSourceFile(filename, content, ts.ScriptTarget.ESNext, /*setParentNodes*/ undefined, /*scriptKind*/ undefined, jsDocParsingMode); + const sourceFileSkipped = ts.createSourceFile(filename, content, { languageVersion: ts.ScriptTarget.ESNext, jsDocParsingMode }, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); assert.isTrue(sourceFileSkipped && sourceFileSkipped.parseDiagnostics.length === 0, "no errors issued"); const patch = Diff.createTwoFilesPatch("default", kindName, Utils.sourceFileToJSON(sourceFile), Utils.sourceFileToJSON(sourceFileSkipped)); diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 763fb5fb7dcf3..0ae1d19a96315 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -9444,7 +9444,7 @@ declare namespace ts { * that they appear in the source code. The language service depends on this property to locate nodes by position. */ function forEachChild(node: Node, cbNode: (node: Node) => T | undefined, cbNodes?: (nodes: NodeArray) => T | undefined): T | undefined; - function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes?: boolean, scriptKind?: ScriptKind, jsDocParsingMode?: JSDocParsingMode): SourceFile; + function createSourceFile(fileName: string, sourceText: string, languageVersionOrOptions: ScriptTarget | CreateSourceFileOptions, setParentNodes?: boolean, scriptKind?: ScriptKind): SourceFile; function parseIsolatedEntityName(text: string, languageVersion: ScriptTarget): EntityName | undefined; /** * Parse json text into SyntaxTree and return node and parse errors if any @@ -9468,6 +9468,7 @@ declare namespace ts { * check specified by `isFileProbablyExternalModule` will be used to set the field. */ setExternalModuleIndicator?: (file: SourceFile) => void; + jsDocParsingMode?: JSDocParsingMode; } function parseCommandLine(commandLine: readonly string[], readFile?: (path: string) => string | undefined): ParsedCommandLine; /** From 735c17c2028388a28e17c62c483ccf0ac0286cd6 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:00:30 -0700 Subject: [PATCH 21/25] Revert "Drop option from LS Host" This reverts commit a273a91da353e4dbeeabccb114c7189b1f57362f. --- src/server/project.ts | 5 +++++ src/services/services.ts | 3 +-- src/services/types.ts | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/project.ts b/src/server/project.ts index 3b1c7adad14e5..4eb1ce0695c27 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -71,6 +71,7 @@ import { isDeclarationFileName, isExternalModuleNameRelative, isInsideNodeModules, + JSDocParsingMode, JsTyping, LanguageService, LanguageServiceHost, @@ -506,6 +507,9 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo /** @internal */ createHash = maybeBind(this.projectService.host, this.projectService.host.createHash); + /** @internal */ + readonly jsDocParsingMode: JSDocParsingMode | undefined; + /** @internal */ constructor( projectName: string, @@ -524,6 +528,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo this.directoryStructureHost = directoryStructureHost; this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory); this.getCanonicalFileName = this.projectService.toCanonicalFileName; + this.jsDocParsingMode = this.projectService.jsDocParsingMode; this.cancellationToken = new ThrottledCancellationToken(this.projectService.cancellationToken, this.projectService.throttleWaitMilliseconds); if (!this.compilerOptions) { diff --git a/src/services/services.ts b/src/services/services.ts index 80cd1535205d0..d25530cb9b6a0 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1363,8 +1363,7 @@ class SyntaxTreeCache { ), setExternalModuleIndicator: getSetExternalModuleIndicator(this.host.getCompilationSettings()), }; - // These files are used to produce syntax-based highlighting, which reads JSDoc, so we must use ParseAll. - sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, JSDocParsingMode.ParseAll); + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, this.host.jsDocParsingMode); } else if (this.currentFileVersion !== version) { // This is the same file, just a newer version. Incrementally parse the file. diff --git a/src/services/types.ts b/src/services/types.ts index 18a52a5e6fcc8..c1d92f808dccf 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -14,6 +14,7 @@ import { GetEffectiveTypeRootsHost, HasChangedAutomaticTypeDirectiveNames, HasInvalidatedResolutions, + JSDocParsingMode, LineAndCharacter, MinimalResolutionCacheHost, ModuleResolutionCache, @@ -427,6 +428,8 @@ export interface LanguageServiceHost extends GetEffectiveTypeRootsHost, MinimalR getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; /** @internal */ onReleaseParsedCommandLine?(configFileName: string, oldResolvedRef: ResolvedProjectReference | undefined, optionOptions: CompilerOptions): void; /** @internal */ getIncompleteCompletionsCache?(): IncompleteCompletionsCache; + + jsDocParsingMode?: JSDocParsingMode; } /** @internal */ From b3e23a9160b6cf24deb904aab7c1269f5dbb8832 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:41:11 -0700 Subject: [PATCH 22/25] Move onto host --- src/compiler/program.ts | 9 ++++----- src/compiler/types.ts | 2 ++ src/compiler/watch.ts | 2 +- src/harness/fakesHosts.ts | 1 - src/harness/fourslashImpl.ts | 1 + src/harness/harnessLanguageService.ts | 1 + src/server/project.ts | 1 - src/services/documentRegistry.ts | 4 +++- src/services/services.ts | 10 ++++++---- src/services/shims.ts | 8 ++++++++ src/testRunner/unittests/skipJSDocParsing.ts | 4 ++-- tests/baselines/reference/api/typescript.d.ts | 5 ++++- 12 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 044e18b3540f0..895ee0889ee4d 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -403,7 +403,6 @@ export function createGetSourceFile( readFile: ProgramHost["readFile"], getCompilerOptions: () => CompilerOptions, setParentNodes: boolean | undefined, - jsDocParsingMode: JSDocParsingMode | undefined, ): CompilerHost["getSourceFile"] { return (fileName, languageVersionOrOptions, onError) => { let text: string | undefined; @@ -419,7 +418,6 @@ export function createGetSourceFile( } text = ""; } - languageVersionOrOptions = typeof languageVersionOrOptions === "object" ? { jsDocParsingMode, ...languageVersionOrOptions } : { jsDocParsingMode, languageVersion: languageVersionOrOptions }; return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined) : undefined; }; } @@ -484,7 +482,7 @@ export function createCompilerHostWorker( const newLine = getNewLineCharacter(options); const realpath = system.realpath && ((path: string) => system.realpath!(path)); const compilerHost: CompilerHost = { - getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes, jsDocParsingMode), + getSourceFile: createGetSourceFile(fileName => compilerHost.readFile(fileName), () => options, setParentNodes), getDefaultLibLocation, getDefaultLibFileName: options => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options)), writeFile: createWriteFileMeasuringIO( @@ -506,6 +504,7 @@ export function createCompilerHostWorker( readDirectory: (path, extensions, include, exclude, depth) => system.readDirectory(path, extensions, include, exclude, depth), createDirectory: d => system.createDirectory(d), createHash: maybeBind(system, system.createHash), + jsDocParsingMode, }; return compilerHost; } @@ -3553,8 +3552,8 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg const languageVersion = getEmitScriptTarget(options); const setExternalModuleIndicator = getSetExternalModuleIndicator(options); return typeof result === "object" ? - { ...result, languageVersion, setExternalModuleIndicator } : - { languageVersion, impliedNodeFormat: result, setExternalModuleIndicator }; + { ...result, languageVersion, setExternalModuleIndicator, jsDocParsingMode: host.jsDocParsingMode } : + { languageVersion, impliedNodeFormat: result, setExternalModuleIndicator, jsDocParsingMode: host.jsDocParsingMode }; } function findSourceFileWorker(fileName: string, isDefaultLib: boolean, ignoreNoDefaultLib: boolean, reason: FileIncludeReason, packageId: PackageId | undefined): SourceFile | undefined { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index b2a2c853e1062..d5ae3198ca02b 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -7783,6 +7783,8 @@ export interface CompilerHost extends ModuleResolutionHost { // For testing: /** @internal */ storeFilesChangingSignatureDuringEmit?: boolean; /** @internal */ getBuildInfo?(fileName: string, configFilePath: string | undefined): BuildInfo | undefined; + + jsDocParsingMode?: JSDocParsingMode; } /** true if --out otherwise source file name * diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index f0b02ed35c3e4..0605861dce53c 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -746,7 +746,6 @@ export function createCompilerHostFromProgramHost(host: ProgramHost, getCom (fileName, encoding) => !encoding ? compilerHost.readFile(fileName) : host.readFile(fileName, encoding), getCompilerOptions, /*setParentNodes*/ undefined, - host.jsDocParsingMode, ), getDefaultLibLocation: maybeBind(host, host.getDefaultLibLocation), getDefaultLibFileName: options => host.getDefaultLibFileName(options), @@ -769,6 +768,7 @@ export function createCompilerHostFromProgramHost(host: ProgramHost, getCom createHash: maybeBind(host, host.createHash), readDirectory: maybeBind(host, host.readDirectory), storeFilesChangingSignatureDuringEmit: host.storeFilesChangingSignatureDuringEmit, + jsDocParsingMode: host.jsDocParsingMode, }; return compilerHost; } diff --git a/src/harness/fakesHosts.ts b/src/harness/fakesHosts.ts index a85d9e0a5e6e6..c44dd5b7c5d6a 100644 --- a/src/harness/fakesHosts.ts +++ b/src/harness/fakesHosts.ts @@ -376,7 +376,6 @@ export class CompilerHost implements ts.CompilerHost { } } - languageVersionOrOptions = typeof languageVersionOrOptions === "object" ? { jsDocParsingMode: this.jsDocParsingMode, ...languageVersionOrOptions } : { jsDocParsingMode: this.jsDocParsingMode, languageVersion: languageVersionOrOptions }; const parsed = ts.createSourceFile(fileName, content, languageVersionOrOptions, this._setParentNodes || this.shouldAssertInvariants); if (this.shouldAssertInvariants) { Utils.assertInvariants(parsed, /*parent*/ undefined); diff --git a/src/harness/fourslashImpl.ts b/src/harness/fourslashImpl.ts index 8979ff61dad21..0cf7285364388 100644 --- a/src/harness/fourslashImpl.ts +++ b/src/harness/fourslashImpl.ts @@ -2763,6 +2763,7 @@ export class TestState { this.languageService.getProgram()?.getCompilerOptions() || {}, ), setExternalModuleIndicator: ts.getSetExternalModuleIndicator(this.languageService.getProgram()?.getCompilerOptions() || {}), + jsDocParsingMode: this.languageServiceAdapterHost.jsDocParsingMode, }; const referenceSourceFile = ts.createLanguageServiceSourceFile( this.activeFile.fileName, diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index 1fed0e38ef4ca..996b7a39a3050 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -146,6 +146,7 @@ export abstract class LanguageServiceAdapterHost { public readonly sys = new fakes.System(new vfs.FileSystem(/*ignoreCase*/ true, { cwd: virtualFileSystemRoot })); public typesRegistry: Map | undefined; private scriptInfos: collections.SortedMap; + public jsDocParsingMode: ts.JSDocParsingMode | undefined; constructor(protected cancellationToken = DefaultHostCancellationToken.instance, protected settings = ts.getDefaultCompilerOptions()) { this.scriptInfos = new collections.SortedMap({ comparer: this.vfs.stringComparer, sort: "insertion" }); diff --git a/src/server/project.ts b/src/server/project.ts index 4eb1ce0695c27..9e0fb09bedc75 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -507,7 +507,6 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo /** @internal */ createHash = maybeBind(this.projectService.host, this.projectService.host.createHash); - /** @internal */ readonly jsDocParsingMode: JSDocParsingMode | undefined; /** @internal */ diff --git a/src/services/documentRegistry.ts b/src/services/documentRegistry.ts index a2c679888384a..b6e2433085560 100644 --- a/src/services/documentRegistry.ts +++ b/src/services/documentRegistry.ts @@ -271,8 +271,10 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole languageVersion: scriptTarget, impliedNodeFormat: host && getImpliedNodeFormatForFile(path, host.getCompilerHost?.()?.getModuleResolutionCache?.()?.getPackageJsonInfoCache(), host, compilationSettings), setExternalModuleIndicator: getSetExternalModuleIndicator(compilationSettings), + jsDocParsingMode, }; sourceFileOptions.languageVersion = scriptTarget; + Debug.assertEqual(jsDocParsingMode, sourceFileOptions.jsDocParsingMode); const oldBucketCount = buckets.size; const keyWithMode = getDocumentRegistryBucketKeyWithMode(key, sourceFileOptions.impliedNodeFormat); const bucket = getOrUpdate(buckets, keyWithMode, () => new Map()); @@ -310,7 +312,7 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole if (!entry) { // Have never seen this file with these settings. Create a new source file for it. - const sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, sourceFileOptions, version, /*setNodeParents*/ false, scriptKind, jsDocParsingMode); + const sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, sourceFileOptions, version, /*setNodeParents*/ false, scriptKind); if (externalCache) { externalCache.setDocument(keyWithMode, path, sourceFile); } diff --git a/src/services/services.ts b/src/services/services.ts index d25530cb9b6a0..733842e26b2e1 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1362,8 +1362,10 @@ class SyntaxTreeCache { this.host.getCompilationSettings(), ), setExternalModuleIndicator: getSetExternalModuleIndicator(this.host.getCompilationSettings()), + // These files are used to produce syntax-based highlighting, which reads JSDoc, so we must use ParseAll. + jsDocParsingMode: JSDocParsingMode.ParseAll, }; - sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind, this.host.jsDocParsingMode); + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, scriptKind); } else if (this.currentFileVersion !== version) { // This is the same file, just a newer version. Incrementally parse the file. @@ -1395,9 +1397,7 @@ export function createLanguageServiceSourceFile( version: string, setNodeParents: boolean, scriptKind?: ScriptKind, - jsDocParsingMode?: JSDocParsingMode, ): SourceFile { - scriptTargetOrOptions = typeof scriptTargetOrOptions === "object" ? { jsDocParsingMode, ...scriptTargetOrOptions } : { jsDocParsingMode, languageVersion: scriptTargetOrOptions }; const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind); setSourceFileFields(sourceFile, scriptSnapshot, version); return sourceFile; @@ -1458,9 +1458,10 @@ export function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSn languageVersion: sourceFile.languageVersion, impliedNodeFormat: sourceFile.impliedNodeFormat, setExternalModuleIndicator: sourceFile.setExternalModuleIndicator, + jsDocParsingMode: sourceFile.jsDocParsingMode, }; // Otherwise, just create a new source file. - return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.scriptKind, sourceFile.jsDocParsingMode); + return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, options, version, /*setNodeParents*/ true, sourceFile.scriptKind); } const NoopCancellationToken: CancellationToken = { @@ -1697,6 +1698,7 @@ export function createLanguageService( resolveLibrary: maybeBind(host, host.resolveLibrary), useSourceOfProjectReferenceRedirect: maybeBind(host, host.useSourceOfProjectReferenceRedirect), getParsedCommandLine, + jsDocParsingMode: host.jsDocParsingMode, }; const originalGetSourceFile = compilerHost.getSourceFile; diff --git a/src/services/shims.ts b/src/services/shims.ts index 1fe06d9e1fbf5..4c2fa0cbce057 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -36,6 +36,7 @@ import { HostCancellationToken, IScriptSnapshot, isString, + JSDocParsingMode, JsTyping, LanguageService, LanguageServiceHost, @@ -159,6 +160,8 @@ export interface LanguageServiceShimHost extends Logger { getModuleResolutionsForFile?(fileName: string): string; getTypeReferenceDirectiveResolutionsForFile?(fileName: string): string; directoryExists(directoryName: string): boolean; + + jsDocParsingMode?: JSDocParsingMode; } /** @@ -437,6 +440,8 @@ export class LanguageServiceShimHostAdapter implements LanguageServiceHost { public resolveTypeReferenceDirectives: ((typeDirectiveNames: string[] | readonly FileReference[], containingFile: string) => (ResolvedTypeReferenceDirective | undefined)[]) | undefined; public directoryExists: ((directoryName: string) => boolean) | undefined; + public jsDocParsingMode: JSDocParsingMode | undefined; + constructor(private shimHost: LanguageServiceShimHost) { // if shimHost is a COM object then property check will become method call with no arguments. // 'in' does not have this effect. @@ -458,6 +463,9 @@ export class LanguageServiceShimHostAdapter implements LanguageServiceHost { return map(typeDirectiveNames as (string | FileReference)[], name => getProperty(typeDirectivesForFile, isString(name) ? name : toFileNameLowerCase(name.fileName))); }; } + if ("jsDocParsingMode" in this.shimHost) { + this.jsDocParsingMode = this.shimHost.jsDocParsingMode; + } } public log(s: string): void { diff --git a/src/testRunner/unittests/skipJSDocParsing.ts b/src/testRunner/unittests/skipJSDocParsing.ts index e7a3185ade8c1..6498e6f214c44 100644 --- a/src/testRunner/unittests/skipJSDocParsing.ts +++ b/src/testRunner/unittests/skipJSDocParsing.ts @@ -21,9 +21,9 @@ describe("unittests:: skipJSDocParsing", () => { for (const filename of filenames) { const testName = `${name}-${kindName}-${filename}`; it(testName, () => { - const sourceFile = ts.createSourceFile(filename, content, { languageVersion: ts.ScriptTarget.ESNext }, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); + const sourceFile = ts.createSourceFile(filename, content, { languageVersion: ts.ScriptTarget.ESNext, jsDocParsingMode: undefined }); assert.isTrue(sourceFile && sourceFile.parseDiagnostics.length === 0, "no errors issued"); - const sourceFileSkipped = ts.createSourceFile(filename, content, { languageVersion: ts.ScriptTarget.ESNext, jsDocParsingMode }, /*setParentNodes*/ undefined, /*scriptKind*/ undefined); + const sourceFileSkipped = ts.createSourceFile(filename, content, { languageVersion: ts.ScriptTarget.ESNext, jsDocParsingMode }); assert.isTrue(sourceFileSkipped && sourceFileSkipped.parseDiagnostics.length === 0, "no errors issued"); const patch = Diff.createTwoFilesPatch("default", kindName, Utils.sourceFileToJSON(sourceFile), Utils.sourceFileToJSON(sourceFileSkipped)); diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 0ae1d19a96315..1b6d70dafe425 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3295,6 +3295,7 @@ declare namespace ts { isNonTsProject(): boolean; isJsOnlyProject(): boolean; static resolveModule(moduleName: string, initialDir: string, host: ServerHost, log: (message: string) => void): {} | undefined; + readonly jsDocParsingMode: JSDocParsingMode | undefined; isKnownTypesPackageName(name: string): boolean; installPackage(options: InstallPackageOptions): Promise; private get typingsCache(); @@ -7752,6 +7753,7 @@ declare namespace ts { hasInvalidatedResolutions?(filePath: Path): boolean; createHash?(data: string): string; getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; + jsDocParsingMode?: JSDocParsingMode; } interface SourceMapRange extends TextRange { source?: SourceMapSource; @@ -10310,6 +10312,7 @@ declare namespace ts { installPackage?(options: InstallPackageOptions): Promise; writeFile?(fileName: string, content: string): void; getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined; + jsDocParsingMode?: JSDocParsingMode; } type WithMetadata = T & { metadata?: unknown; @@ -11515,7 +11518,7 @@ declare namespace ts { function displayPartsToString(displayParts: SymbolDisplayPart[] | undefined): string; function getDefaultCompilerOptions(): CompilerOptions; function getSupportedCodeFixes(): readonly string[]; - function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, scriptKind?: ScriptKind, jsDocParsingMode?: JSDocParsingMode): SourceFile; + function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTargetOrOptions: ScriptTarget | CreateSourceFileOptions, version: string, setNodeParents: boolean, scriptKind?: ScriptKind): SourceFile; function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange | undefined, aggressiveChecks?: boolean): SourceFile; function createLanguageService(host: LanguageServiceHost, documentRegistry?: DocumentRegistry, syntaxOnlyOrLanguageServiceMode?: boolean | LanguageServiceMode): LanguageService; /** From db14c33adbf3c8da4d22af7b4ac332de1a92b92f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:53:13 -0700 Subject: [PATCH 23/25] Drop out of create functions in favor of prop setting --- src/compiler/program.ts | 7 ++----- src/compiler/watchPublic.ts | 4 ++-- src/executeCommandLine/executeCommandLine.ts | 6 ++++-- tests/baselines/reference/api/typescript.d.ts | 4 ++-- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 895ee0889ee4d..eb9526751ab57 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -209,7 +209,6 @@ import { isStringLiteral, isStringLiteralLike, isTraceEnabled, - JSDocParsingMode, JsonSourceFile, JsxEmit, length, @@ -394,8 +393,8 @@ export function computeCommonSourceDirectoryOfFilenames(fileNames: readonly stri return getPathFromPathComponents(commonPathComponents); } -export function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean, jsDocParsingMode?: JSDocParsingMode): CompilerHost { - return createCompilerHostWorker(options, setParentNodes, /*system*/ undefined, jsDocParsingMode); +export function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean): CompilerHost { + return createCompilerHostWorker(options, setParentNodes, /*system*/ undefined); } /** @internal */ @@ -460,7 +459,6 @@ export function createCompilerHostWorker( options: CompilerOptions, setParentNodes?: boolean, system: System = sys, - jsDocParsingMode?: JSDocParsingMode, ): CompilerHost { const existingDirectories = new Map(); const getCanonicalFileName = createGetCanonicalFileName(system.useCaseSensitiveFileNames); @@ -504,7 +502,6 @@ export function createCompilerHostWorker( readDirectory: (path, extensions, include, exclude, depth) => system.readDirectory(path, extensions, include, exclude, depth), createDirectory: d => system.createDirectory(d), createHash: maybeBind(system, system.createHash), - jsDocParsingMode, }; return compilerHost; } diff --git a/src/compiler/watchPublic.ts b/src/compiler/watchPublic.ts index 782f9dd3b38ee..266be7e16fc31 100644 --- a/src/compiler/watchPublic.ts +++ b/src/compiler/watchPublic.ts @@ -119,8 +119,8 @@ export function readBuilderProgram(compilerOptions: CompilerOptions, host: ReadB return createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host); } -export function createIncrementalCompilerHost(options: CompilerOptions, system = sys, jsDocParsingMode?: JSDocParsingMode): CompilerHost { - const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, system, jsDocParsingMode); +export function createIncrementalCompilerHost(options: CompilerOptions, system = sys): CompilerHost { + const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, system); host.createHash = maybeBind(system, system.createHash); host.storeFilesChangingSignatureDuringEmit = system.storeFilesChangingSignatureDuringEmit; setGetSourceFileAsHashVersioned(host); diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 6ec35922abbaf..400e2a11a3c37 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -896,7 +896,8 @@ function performCompilation( config: ParsedCommandLine, ) { const { fileNames, options, projectReferences } = config; - const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, sys, jsDocParsingMode); + const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, sys); + host.jsDocParsingMode = jsDocParsingMode; const currentDirectory = host.getCurrentDirectory(); const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); changeCompilerHostLikeToUseCache(host, fileName => toPath(fileName, currentDirectory, getCanonicalFileName)); @@ -929,7 +930,8 @@ function performIncrementalCompilation( ) { const { options, fileNames, projectReferences } = config; enableStatisticsAndTracing(sys, options, /*isBuildMode*/ false); - const host = createIncrementalCompilerHost(options, sys, jsDocParsingMode); + const host = createIncrementalCompilerHost(options, sys); + host.jsDocParsingMode = jsDocParsingMode; const exitStatus = ts_performIncrementalCompilation({ host, system: sys, diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 1b6d70dafe425..88ce1a5067df1 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -9752,7 +9752,7 @@ declare namespace ts { function createPrinter(printerOptions?: PrinterOptions, handlers?: PrintHandlers): Printer; function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; - function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean, jsDocParsingMode?: JSDocParsingMode): CompilerHost; + function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean): CompilerHost; function getPreEmitDiagnostics(program: Program, sourceFile?: SourceFile, cancellationToken?: CancellationToken): readonly Diagnostic[]; function formatDiagnostics(diagnostics: readonly Diagnostic[], host: FormatDiagnosticsHost): string; function formatDiagnostic(diagnostic: Diagnostic, host: FormatDiagnosticsHost): string; @@ -9964,7 +9964,7 @@ declare namespace ts { emitNextAffectedFile(writeFile?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: CustomTransformers): AffectedFileResult; } function readBuilderProgram(compilerOptions: CompilerOptions, host: ReadBuildProgramHost): EmitAndSemanticDiagnosticsBuilderProgram | undefined; - function createIncrementalCompilerHost(options: CompilerOptions, system?: System, jsDocParsingMode?: JSDocParsingMode): CompilerHost; + function createIncrementalCompilerHost(options: CompilerOptions, system?: System): CompilerHost; function createIncrementalProgram({ rootNames, options, configFileParsingDiagnostics, projectReferences, host, createProgram }: IncrementalProgramOptions): T; /** * Create the watch compiler host for either configFile or fileNames and its options From 517f2891034f31766f17f373395188585db96b76 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:06:13 -0700 Subject: [PATCH 24/25] Remove one more change --- src/compiler/program.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index eb9526751ab57..28641b091e845 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -394,7 +394,7 @@ export function computeCommonSourceDirectoryOfFilenames(fileNames: readonly stri } export function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean): CompilerHost { - return createCompilerHostWorker(options, setParentNodes, /*system*/ undefined); + return createCompilerHostWorker(options, setParentNodes); } /** @internal */ @@ -417,7 +417,7 @@ export function createGetSourceFile( } text = ""; } - return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes, /*scriptKind*/ undefined) : undefined; + return text !== undefined ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes) : undefined; }; } From 9392280faeca0272d600b09e217c51662c0d410c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:49:43 -0700 Subject: [PATCH 25/25] Rename global tsc JSDocParsingMode for better tsc.js emit --- src/executeCommandLine/executeCommandLine.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 400e2a11a3c37..19f16d0ef6e77 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -791,7 +791,7 @@ function reportWatchModeWithoutSysSupport(sys: System, reportDiagnostic: Diagnos } // This could be inlined everywhere, but this is convenient for debugging and patching. -const jsDocParsingMode = JSDocParsingMode.ParseForTypeErrors; +const defaultJSDocParsingMode = JSDocParsingMode.ParseForTypeErrors; function performBuild( sys: System, @@ -843,7 +843,7 @@ function performBuild( createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createWatchStatusReporter(sys, buildOptions), ); - buildHost.jsDocParsingMode = jsDocParsingMode; + buildHost.jsDocParsingMode = defaultJSDocParsingMode; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const onWatchStatusChange = buildHost.onWatchStatusChange; @@ -873,7 +873,7 @@ function performBuild( createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createReportErrorSummary(sys, buildOptions), ); - buildHost.jsDocParsingMode = jsDocParsingMode; + buildHost.jsDocParsingMode = defaultJSDocParsingMode; const solutionPerformance = enableSolutionPerformance(sys, buildOptions); updateSolutionBuilderHost(sys, cb, buildHost, solutionPerformance); const builder = createSolutionBuilder(buildHost, projects, buildOptions); @@ -897,7 +897,7 @@ function performCompilation( ) { const { fileNames, options, projectReferences } = config; const host = createCompilerHostWorker(options, /*setParentNodes*/ undefined, sys); - host.jsDocParsingMode = jsDocParsingMode; + host.jsDocParsingMode = defaultJSDocParsingMode; const currentDirectory = host.getCurrentDirectory(); const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); changeCompilerHostLikeToUseCache(host, fileName => toPath(fileName, currentDirectory, getCanonicalFileName)); @@ -931,7 +931,7 @@ function performIncrementalCompilation( const { options, fileNames, projectReferences } = config; enableStatisticsAndTracing(sys, options, /*isBuildMode*/ false); const host = createIncrementalCompilerHost(options, sys); - host.jsDocParsingMode = jsDocParsingMode; + host.jsDocParsingMode = defaultJSDocParsingMode; const exitStatus = ts_performIncrementalCompilation({ host, system: sys, @@ -983,7 +983,7 @@ function updateWatchCompilationHost( cb: ExecuteCommandLineCallbacks, watchCompilerHost: WatchCompilerHost, ) { - watchCompilerHost.jsDocParsingMode = jsDocParsingMode; + watchCompilerHost.jsDocParsingMode = defaultJSDocParsingMode; updateCreateProgram(sys, watchCompilerHost, /*isBuildMode*/ false); const emitFilesUsingBuilder = watchCompilerHost.afterProgramCreate!; // TODO: GH#18217 watchCompilerHost.afterProgramCreate = builderProgram => {