Skip to content

Commit e3deea5

Browse files
committed
wait for incremental compilation before doing completions
1 parent 1e935ad commit e3deea5

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

server/src/incrementalCompilation.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ function removeAnsiCodes(s: string): string {
370370
const ansiEscape = /\x1B[@-_][0-?]*[ -/]*[@-~]/g;
371371
return s.replace(ansiEscape, "");
372372
}
373-
function triggerIncrementalCompilationOfFile(
373+
export function triggerIncrementalCompilationOfFile(
374374
filePath: string,
375375
fileContent: string,
376376
send: send,
@@ -469,6 +469,7 @@ function triggerIncrementalCompilationOfFile(
469469
entry.killCompilationListeners = [];
470470
}
471471
const triggerToken = performance.now();
472+
// TODO: Can we remove this timeout? Don't remember why it was added...
472473
const timeout = setTimeout(() => {
473474
compileContents(entry, fileContent, send, onCompilationFinished);
474475
}, 20);
@@ -727,6 +728,7 @@ async function compileContents(
727728
}
728729
}
729730

731+
// TODO(compilation-revamp) make sure we don't unecessarily trigger incremental compilations
730732
export function handleUpdateOpenedFile(
731733
filePath: string,
732734
fileContent: string,

server/src/server.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -673,13 +673,18 @@ function semanticTokens(msg: p.RequestMessage) {
673673
return response;
674674
}
675675

676-
function completion(msg: p.RequestMessage) {
676+
async function completion(msg: p.RequestMessage) {
677677
// https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_completion
678678
let params = msg.params as p.ReferenceParams;
679679
let filePath = fileURLToPath(params.textDocument.uri);
680680
let code = getOpenedFileContent(params.textDocument.uri);
681681
let tmpname = utils.createFileInTempDir();
682682
fs.writeFileSync(tmpname, code, { encoding: "utf-8" });
683+
await new Promise<void>((resolve) => {
684+
ic.triggerIncrementalCompilationOfFile(filePath, code, send, () => {
685+
resolve();
686+
});
687+
});
683688
let response = utils.runAnalysisCommand(
684689
filePath,
685690
[
@@ -1235,7 +1240,7 @@ function onMessage(msg: p.Message) {
12351240
} else if (msg.method === p.DocumentSymbolRequest.method) {
12361241
send(documentSymbol(msg));
12371242
} else if (msg.method === p.CompletionRequest.method) {
1238-
send(completion(msg));
1243+
completion(msg).then(send);
12391244
} else if (msg.method === p.CompletionResolveRequest.method) {
12401245
send(completionResolve(msg));
12411246
} else if (msg.method === p.SemanticTokensRequest.method) {

0 commit comments

Comments
 (0)