diff --git a/src/server/session.ts b/src/server/session.ts index d076d5deb6d..edb79e3a0ef 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -1109,7 +1109,7 @@ namespace ts.server { private getNavigationBarItems(args: protocol.FileRequestArgs, simplifiedResult: boolean): protocol.NavigationBarItem[] | NavigationBarItem[] { const { file, project } = this.getFileAndProject(args); - const items = project.getLanguageService().getNavigationBarItems(file); + const items = project.getLanguageService(/*ensureSynchronized*/ false).getNavigationBarItems(file); if (!items) { return undefined; } diff --git a/src/services/services.ts b/src/services/services.ts index b50e1d3313d..e98e63f926e 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1512,12 +1512,25 @@ namespace ts { return NavigationBar.getNavigationBarItems(sourceFile); } + function isTsOrTsxFile(fileName: string): boolean { + const kind = getScriptKind(fileName, host); + return kind === ScriptKind.TS || kind === ScriptKind.TSX; + } + function getSemanticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[] { + if (!isTsOrTsxFile(fileName)) { + // do not run semantic classification on non-ts-or-tsx files + return []; + } synchronizeHostData(); return ts.getSemanticClassifications(program.getTypeChecker(), cancellationToken, getValidSourceFile(fileName), program.getClassifiableNames(), span); } function getEncodedSemanticClassifications(fileName: string, span: TextSpan): Classifications { + if (!isTsOrTsxFile(fileName)) { + // do not run semantic classification on non-ts-or-tsx files + return { spans: [], endOfLineState: EndOfLineState.None }; + } synchronizeHostData(); return ts.getEncodedSemanticClassifications(program.getTypeChecker(), cancellationToken, getValidSourceFile(fileName), program.getClassifiableNames(), span); } diff --git a/tests/cases/fourslash/semanticClassificationJs.ts b/tests/cases/fourslash/semanticClassificationJs.ts new file mode 100644 index 00000000000..8105202a23f --- /dev/null +++ b/tests/cases/fourslash/semanticClassificationJs.ts @@ -0,0 +1,9 @@ +/// + +// @Filename: app.js +//// function foo() { +//// } +//// let x = 1; + +// no semantic classification in js file +verify.semanticClassificationsAre(); \ No newline at end of file