@@ -97,6 +97,7 @@ import {provideTlbDocumentSymbols} from "@server/languages/tlb/symbols"
9797import { provideTlbCompletion } from "@server/languages/tlb/completion"
9898import { TLB_CACHE } from "@server/languages/tlb/cache"
9999import { 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"
107108let initialized = false
108109let initializationFinished = false
109110
111+ let pendingFileEvents : lsp . TextDocumentChangeEvent < TextDocument > [ ] = [ ]
110112let clientInfo : { name ?: string ; version ?: string } = { name : "" , version : "" }
111113
112114/**
@@ -115,6 +117,45 @@ let clientInfo: {name?: string; version?: string} = {name: "", version: ""}
115117 */
116118let 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+
118159const 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