Add '(approximate)' to the beginning of quick info requests in PartialSemantic mode (#40061)

* Add '(approximate)' to the beginning of quick info requests.

* Use 'approximation' instead of 'approximate'.
This commit is contained in:
Daniel Rosenwasser 2020-08-14 17:54:10 -07:00 committed by GitHub
parent c95cffe111
commit 2426eb4980
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 2 deletions

View File

@ -1587,7 +1587,9 @@ namespace ts {
kind: ScriptElementKind.unknown,
kindModifiers: ScriptElementKindModifier.none,
textSpan: createTextSpanFromNode(nodeForQuickInfo, sourceFile),
displayParts: typeChecker.runWithCancellationToken(cancellationToken, typeChecker => typeToDisplayParts(typeChecker, type, getContainerNode(nodeForQuickInfo))),
displayParts: prefixWithApproximation(
typeChecker.runWithCancellationToken(cancellationToken, typeChecker => typeToDisplayParts(typeChecker, type, getContainerNode(nodeForQuickInfo)))
),
documentation: type.symbol ? type.symbol.getDocumentationComment(typeChecker) : undefined,
tags: type.symbol ? type.symbol.getJsDocTags() : undefined
};
@ -1600,7 +1602,7 @@ namespace ts {
kind: symbolKind,
kindModifiers: SymbolDisplay.getSymbolModifiers(symbol),
textSpan: createTextSpanFromNode(nodeForQuickInfo, sourceFile),
displayParts,
displayParts: prefixWithApproximation(displayParts),
documentation,
tags,
};
@ -1630,6 +1632,13 @@ namespace ts {
}
}
function prefixWithApproximation(displayParts: SymbolDisplayPart[]): SymbolDisplayPart[] {
if (languageServiceMode === LanguageServiceMode.Semantic) {
return displayParts;
}
return [textPart("(approximation)"), spacePart(), ...displayParts];
}
/// Goto definition
function getDefinitionAtPosition(fileName: string, position: number): readonly DefinitionInfo[] | undefined {
synchronizeHostData();

View File

@ -30,6 +30,22 @@ import { something } from "something";
return { host, session, file1, file2, file3, something, configFile };
}
it("adds '(approximation)' to the description of quick info", () => {
const file: File = {
path: `${tscWatch.projectRoot}/foo.ts`,
content: "export const foo = 100;"
};
const host = createServerHost([file]);
const session = createSession(host, { serverMode: LanguageServiceMode.PartialSemantic, useSingleInferredProject: true });
openFilesForSession([file], session);
const response = session.executeCommandSeq<protocol.QuickInfoRequest>({
command: protocol.CommandTypes.Quickinfo,
arguments: protocolFileLocationFromSubstring(file, "foo"),
}).response as protocol.QuickInfoResponseBody;
assert(stringContainsAt(response.displayString, "(approximation)", 0));
});
it("open files are added to inferred project even if config file is present and semantic operations succeed", () => {
const { host, session, file1, file2 } = setup();
const service = session.getProjectService();