Skip to content

Commit

Permalink
Cherry-pick PR #45394 into release-4.4 (#45396)
Browse files Browse the repository at this point in the history
Component commits:
61dd78f Use getFileAndProject in session provideInlayHints to ensure language service updates are applied

Co-authored-by: Wesley Wigham <t-weswig@microsoft.com>
  • Loading branch information
typescript-bot and weswigham committed Aug 10, 2021
1 parent e7fd303 commit c8b1e45
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/server/session.ts
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions src/testRunner/tsconfig.json
Expand Up @@ -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",
Expand Down
63 changes: 63 additions & 0 deletions src/testRunner/unittests/tsserver/inlayHints.ts
@@ -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);
}
});
});
}

0 comments on commit c8b1e45

Please sign in to comment.