mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
Use getFileAndProject in session provideInlayHints to ensure language service updates are applied (#45394)
This commit is contained in:
parent
d8e830d132
commit
68eb1a551f
@ -1453,9 +1453,9 @@ namespace ts.server {
|
||||
}
|
||||
|
||||
private provideInlayHints(args: protocol.InlayHintsRequestArgs) {
|
||||
const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args);
|
||||
const { file, project } = this.getFileAndProject(args);
|
||||
const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file)!;
|
||||
const hints = languageService.provideInlayHints(file, args, this.getPreferences(file));
|
||||
const hints = project.getLanguageService().provideInlayHints(file, args, this.getPreferences(file));
|
||||
|
||||
return hints.map(hint => ({
|
||||
...hint,
|
||||
|
||||
@ -191,6 +191,7 @@
|
||||
"unittests/tsserver/getExportReferences.ts",
|
||||
"unittests/tsserver/getFileReferences.ts",
|
||||
"unittests/tsserver/importHelpers.ts",
|
||||
"unittests/tsserver/inlayHints.ts",
|
||||
"unittests/tsserver/inferredProjects.ts",
|
||||
"unittests/tsserver/jsdocTag.ts",
|
||||
"unittests/tsserver/languageService.ts",
|
||||
|
||||
63
src/testRunner/unittests/tsserver/inlayHints.ts
Normal file
63
src/testRunner/unittests/tsserver/inlayHints.ts
Normal file
@ -0,0 +1,63 @@
|
||||
namespace ts.projectSystem {
|
||||
describe("unittests:: tsserver:: inlayHints", () => {
|
||||
const configFile: File = {
|
||||
path: "/a/b/tsconfig.json",
|
||||
content: "{}"
|
||||
};
|
||||
const app: File = {
|
||||
path: "/a/b/app.ts",
|
||||
content: "declare function foo(param: any): void;\nfoo(12);"
|
||||
};
|
||||
|
||||
it("with updateOpen request does not corrupt documents", () => {
|
||||
const host = createServerHost([app, commonFile1, commonFile2, libFile, configFile]);
|
||||
const session = createSession(host);
|
||||
session.executeCommandSeq<protocol.OpenRequest>({
|
||||
command: protocol.CommandTypes.Open,
|
||||
arguments: { file: app.path }
|
||||
});
|
||||
session.executeCommandSeq<protocol.ConfigureRequest>({
|
||||
command: protocol.CommandTypes.Configure,
|
||||
arguments: {
|
||||
preferences: {
|
||||
includeInlayParameterNameHints: "all"
|
||||
} as UserPreferences
|
||||
}
|
||||
});
|
||||
verifyInlayHintResponse(session);
|
||||
session.executeCommandSeq<protocol.UpdateOpenRequest>({
|
||||
command: protocol.CommandTypes.UpdateOpen,
|
||||
arguments: {
|
||||
changedFiles: [{ fileName: app.path, textChanges: [{ start: { line: 1, offset: 39 }, end: { line: 1, offset: 39 }, newText: "//" }] }]
|
||||
}
|
||||
});
|
||||
verifyInlayHintResponse(session);
|
||||
session.executeCommandSeq<protocol.UpdateOpenRequest>({
|
||||
command: protocol.CommandTypes.UpdateOpen,
|
||||
arguments: {
|
||||
changedFiles: [{ fileName: app.path, textChanges: [{ start: { line: 1, offset: 41 }, end: { line: 1, offset: 41 }, newText: "c" }] }]
|
||||
}
|
||||
});
|
||||
verifyInlayHintResponse(session);
|
||||
|
||||
function verifyInlayHintResponse(session: TestSession) {
|
||||
verifyParamInlayHint(session.executeCommandSeq<protocol.InlayHintsRequest>({
|
||||
command: protocol.CommandTypes.ProvideInlayHints,
|
||||
arguments: {
|
||||
file: app.path,
|
||||
start: 0,
|
||||
length: app.content.length,
|
||||
}
|
||||
}).response as protocol.InlayHintItem[] | undefined);
|
||||
}
|
||||
|
||||
function verifyParamInlayHint(response: protocol.InlayHintItem[] | undefined) {
|
||||
Debug.assert(response);
|
||||
Debug.assert(response[0]);
|
||||
Debug.assertEqual(response[0].text, "param:");
|
||||
Debug.assertEqual(response[0].position.line, 2);
|
||||
Debug.assertEqual(response[0].position.offset, 5);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user