Skip to content

Commit 732be89

Browse files
authored
fix: delay file open event until indexing is in progress (#747)
Fixes #511
1 parent 125a4df commit 732be89

File tree

2 files changed

+45
-16
lines changed

2 files changed

+45
-16
lines changed

server/src/indexing-root.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export class IndexingRoot {
3838
"**/test/codegen/**",
3939
"**/test/contracts/**",
4040
"**/test/e2e-emulated/**",
41+
"**/e2e-slow/**",
4142
"**/__testdata/**",
4243
"**/test-failed/**",
4344
"**/types/stmts-failed/**",

server/src/server.ts

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ import {provideTlbDocumentSymbols} from "@server/languages/tlb/symbols"
9797
import {provideTlbCompletion} from "@server/languages/tlb/completion"
9898
import {TLB_CACHE} from "@server/languages/tlb/cache"
9999
import {provideTlbReferences} from "@server/languages/tlb/references"
100+
import {TextDocument} from "vscode-languageserver-textdocument"
100101

101102
/**
102103
* Whenever LS is initialized.
@@ -107,6 +108,7 @@ import {provideTlbReferences} from "@server/languages/tlb/references"
107108
let initialized = false
108109
let initializationFinished = false
109110

111+
let pendingFileEvents: lsp.TextDocumentChangeEvent<TextDocument>[] = []
110112
let clientInfo: {name?: string; version?: string} = {name: "", version: ""}
111113

112114
/**
@@ -115,6 +117,45 @@ let clientInfo: {name?: string; version?: string} = {name: "", version: ""}
115117
*/
116118
let workspaceFolders: lsp.WorkspaceFolder[] | null = null
117119

120+
async function processPendingEvents(): Promise<void> {
121+
console.info(`Processing ${pendingFileEvents.length} pending file events`)
122+
123+
for (const event of pendingFileEvents) {
124+
await handleFileOpen(event, true)
125+
}
126+
127+
pendingFileEvents = []
128+
}
129+
130+
async function handleFileOpen(
131+
event: lsp.TextDocumentChangeEvent<TextDocument>,
132+
skipQueue: boolean,
133+
): Promise<void> {
134+
const uri = event.document.uri
135+
136+
if (!skipQueue && !initializationFinished) {
137+
pendingFileEvents.push(event)
138+
return
139+
}
140+
141+
if (isFiftFile(uri, event)) {
142+
findFiftFile(uri)
143+
}
144+
145+
if (isTlbFile(uri, event)) {
146+
findTlbFile(uri)
147+
}
148+
149+
if (isTactFile(uri, event)) {
150+
const file = findTactFile(uri)
151+
index.addFile(uri, file)
152+
153+
if (initializationFinished) {
154+
await runInspections(uri, file, true)
155+
}
156+
}
157+
}
158+
118159
const showErrorMessage = (msg: string): void => {
119160
void connection.sendNotification(lsp.ShowMessageNotification.type, {
120161
type: lsp.MessageType.Error,
@@ -262,6 +303,8 @@ async function initialize(): Promise<void> {
262303

263304
reporter.done()
264305
initializationFinished = true
306+
307+
await processPendingEvents()
265308
}
266309

267310
// eslint-disable-next-line @typescript-eslint/no-misused-promises
@@ -342,22 +385,7 @@ connection.onInitialize(async (initParams: lsp.InitializeParams): Promise<lsp.In
342385
await initializeFallback(uri)
343386
}
344387

345-
if (isFiftFile(uri, event)) {
346-
findFiftFile(uri)
347-
}
348-
349-
if (isTlbFile(uri, event)) {
350-
findTlbFile(uri)
351-
}
352-
353-
if (isTactFile(uri, event)) {
354-
const file = findTactFile(uri)
355-
index.addFile(uri, file)
356-
357-
if (initializationFinished) {
358-
await runInspections(uri, file, true)
359-
}
360-
}
388+
await handleFileOpen(event, false)
361389
})
362390

363391
documents.onDidChangeContent(async event => {

0 commit comments

Comments
 (0)