Skip to content

Commit 1cd0736

Browse files
committed
Moved setupSemanticTokensRefresh to the same file as the provider class
1 parent 982ea89 commit 1cd0736

3 files changed

Lines changed: 27 additions & 31 deletions

File tree

src/providers/semanticTokens/SemanticTokensProvider.ts

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SemanticTokens, SemanticTokensParams, TextDocuments, Range } from 'vscode-languageserver'
1+
import { SemanticTokens, SemanticTokensParams, TextDocuments, Range, Connection } from 'vscode-languageserver'
22
import MatlabLifecycleManager from '../../lifecycle/MatlabLifecycleManager'
33
import { TextDocument } from 'vscode-languageserver-textdocument'
44
import FileInfoIndex, { MatlabFunctionScopeInfo, MatlabGlobalScopeInfo } from '../../indexing/FileInfoIndex'
@@ -9,6 +9,9 @@ interface SemanticToken {
99
typeIndex: number
1010
}
1111

12+
/**
13+
* Handles requests for semantic tokens for a document.
14+
*/
1215
class SemanticTokensProvider {
1316
constructor (
1417
protected readonly matlabLifecycleManager: MatlabLifecycleManager,
@@ -28,8 +31,6 @@ class SemanticTokensProvider {
2831
const textDocument = documentManager.get(params.textDocument.uri)
2932
if (textDocument == null) return null
3033

31-
await this.documentIndexer.ensureDocumentIndexIsUpdated(textDocument)
32-
3334
const codeInfo = this.fileInfoIndex.codeInfoCache.get(params.textDocument.uri)
3435
if (codeInfo == null) return null
3536

@@ -112,3 +113,24 @@ class SemanticTokensProvider {
112113
export const SEMANTIC_TOKEN_TYPES = ['function', 'variable']
113114
export const SEMANTIC_TOKEN_MODIFIERS: string[] = []
114115
export default SemanticTokensProvider
116+
117+
/**
118+
* Wires semantic token invalidation to document indexing.
119+
*
120+
* When indexing completes, this schedules a debounced refresh request
121+
* so the client re-requests semantic tokens and updates highlighting.
122+
*/
123+
export function setupSemanticTokensRefresh (
124+
connection: Connection,
125+
documentIndexer: DocumentIndexer
126+
): void {
127+
let refreshTimer: NodeJS.Timeout | undefined
128+
129+
documentIndexer.setOnIndexed(() => {
130+
if (refreshTimer != null) clearTimeout(refreshTimer)
131+
132+
refreshTimer = setTimeout(() => {
133+
void connection.sendRequest('workspace/semanticTokens/refresh')
134+
}, 150)
135+
})
136+
}

src/providers/semanticTokens/setupSemanticTokenRefresh.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/server.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ import PathResolver from './providers/navigation/PathResolver'
2222
import Indexer from './indexing/Indexer'
2323
import RenameSymbolProvider from './providers/rename/RenameSymbolProvider'
2424
import HighlightSymbolProvider from './providers/highlighting/HighlightSymbolProvider'
25-
import SemanticTokensProvider, { SEMANTIC_TOKEN_TYPES, SEMANTIC_TOKEN_MODIFIERS } from './providers/semanticTokens/SemanticTokensProvider'
26-
import setupSemanticTokenRefresh from './providers/semanticTokens/setupSemanticTokenRefresh'
25+
import SemanticTokensProvider, { SEMANTIC_TOKEN_TYPES, SEMANTIC_TOKEN_MODIFIERS, setupSemanticTokensRefresh } from './providers/semanticTokens/SemanticTokensProvider'
2726
import { RequestType } from './indexing/SymbolSearchService'
2827
import { cacheAndClearProxyEnvironmentVariables } from './utils/ProxyUtils'
2928
import MatlabDebugAdaptorServer from './debug/MatlabDebugAdaptorServer'
@@ -376,7 +375,7 @@ export async function startServer (): Promise<void> {
376375
connection.onRequest(SemanticTokensRequest.method, async (params: SemanticTokensParams) => {
377376
return await semanticTokensProvider.handleSemanticTokensRequest(params, documentManager)
378377
})
379-
setupSemanticTokenRefresh(connection, documentIndexer)
378+
setupSemanticTokensRefresh(connection, documentIndexer)
380379
}
381380

382381
/** -------------------- Helper Functions -------------------- **/

0 commit comments

Comments
 (0)