1- import { CompletionItem , CompletionParams , DidChangeConfigurationNotification , DidChangeConfigurationParams , DidChangeWatchedFilesParams , DocumentSymbolParams , FoldingRange , FoldingRangeParams , Hover , HoverParams , SemanticTokensParams , SemanticTokensRangeParams , SymbolInformation , TextDocuments , WorkspaceFoldersChangeEvent , _Connection } from 'vscode-languageserver' ;
2- import { BaseProjectDocument , ProjectDocument } from './document' ;
1+ import { CancellationToken , CancellationTokenSource , CompletionItem , CompletionParams , DidChangeConfigurationNotification , DidChangeConfigurationParams , DidChangeWatchedFilesParams , DocumentSymbolParams , FoldingRange , FoldingRangeParams , Hover , HoverParams , SemanticTokensParams , SemanticTokensRangeParams , SymbolInformation , TextDocuments , WorkspaceFoldersChangeEvent , _Connection } from 'vscode-languageserver' ;
2+ import { BaseProjectDocument } from './document' ;
33import { LanguageServerConfiguration } from '../server' ;
44import { hasConfigurationCapability } from '../capabilities/workspaceFolder' ;
55import { TextDocument } from 'vscode-languageserver-textdocument' ;
@@ -11,13 +11,13 @@ import { TextDocument } from 'vscode-languageserver-textdocument';
1111 */
1212export class Workspace {
1313 private _events : WorkspaceEvents ;
14- private _documents : ProjectDocument [ ] = [ ] ;
15- private _activeDocument ?: ProjectDocument ;
14+ private _documents : BaseProjectDocument [ ] = [ ] ;
15+ private _activeDocument ?: BaseProjectDocument ;
1616 private _publicScopeDeclarations : Map < string , any > = new Map ( ) ;
1717
1818 readonly connection : _Connection ;
1919
20- activateDocument ( document : ProjectDocument ) {
20+ activateDocument ( document : BaseProjectDocument ) {
2121 this . _activeDocument = document ;
2222 }
2323
@@ -59,8 +59,9 @@ class WorkspaceEvents {
5959 private readonly _workspace : Workspace ;
6060 private readonly _documents : TextDocuments < TextDocument > ;
6161 private readonly _configuration : LanguageServerConfiguration ;
62+ private _parseCancellationToken ?: CancellationTokenSource ;
6263
63- activeDocument ?: ProjectDocument ;
64+ activeDocument ?: BaseProjectDocument ;
6465
6566 constructor ( params : { connection : _Connection , workspace : Workspace , configuration : LanguageServerConfiguration } ) {
6667 this . _workspace = params . workspace ;
@@ -72,17 +73,16 @@ class WorkspaceEvents {
7273 }
7374
7475 private initialiseConnectionEvents ( connection : _Connection ) {
75- console . log ( 'Initialising connection events...' ) ;
7676 connection . onInitialized ( ( ) => this . onInitialized ( ) ) ;
7777 connection . onCompletion ( params => this . onCompletion ( params ) ) ;
7878 connection . onCompletionResolve ( item => this . onCompletionResolve ( item ) ) ;
7979 connection . onDidChangeConfiguration ( params => this . onDidChangeConfiguration ( params ) ) ;
8080 connection . onDidChangeWatchedFiles ( params => this . onDidChangeWatchedFiles ( params ) ) ;
81- connection . onDocumentSymbol ( ( params ) => this . onDocumentSymbolAsync ( params ) ) ;
81+ connection . onDocumentSymbol ( async ( params , token ) => await this . onDocumentSymbolAsync ( params , token ) ) ;
8282 connection . onHover ( params => this . onHover ( params ) ) ;
8383
8484 if ( hasConfigurationCapability ( this . _configuration ) ) {
85- connection . onFoldingRanges ( ( params ) => this . onFoldingRanges ( params ) ) ;
85+ connection . onFoldingRanges ( async ( params , token ) => this . onFoldingRanges ( params , token ) ) ;
8686 }
8787
8888 connection . onRequest ( ( method : string , params : object | object [ ] | any ) => {
@@ -101,19 +101,16 @@ class WorkspaceEvents {
101101 }
102102
103103 private initialiseDocumentsEvents ( ) {
104- console . log ( 'Initialising documents events...' ) ;
105- this . _documents . onDidChangeContent ( e => this . onDidChangeContent ( e . document ) ) ;
104+ this . _documents . onDidChangeContent ( async ( e ) => await this . onDidChangeContentAsync ( e . document ) ) ;
106105 }
107106
108107 /** Connection event handlers */
109108
110109 private onCompletion ( params : CompletionParams ) : never [ ] {
111- console . log ( `onCompletion: ${ params } ` ) ;
112110 return [ ] ;
113111 }
114112
115113 private onCompletionResolve ( item : CompletionItem ) : CompletionItem {
116- console . log ( `onCompletionResolve: ${ item . label } ` ) ;
117114 return item ;
118115 }
119116
@@ -127,28 +124,22 @@ class WorkspaceEvents {
127124
128125 // TODO: Should trigger a full workspace refresh.
129126 private onDidChangeWorkspaceFolders ( e : WorkspaceFoldersChangeEvent ) {
130- console . log ( `onDidChangeWorkspaceFolders: ${ e } ` ) ;
131127 this . _workspace . connection . console . log ( `Workspace folder change event received.\n${ e } ` ) ;
132128 }
133129
134- private async onDocumentSymbolAsync ( params : DocumentSymbolParams ) : Promise < SymbolInformation [ ] > {
135- console . log ( `onDocumentSymbolAsync: ${ params . textDocument . uri } ` ) ;
136- return await this . activeDocument ?. languageServerSymbolInformationAsync ( ) ?? [ ] ;
130+ private async onDocumentSymbolAsync ( params : DocumentSymbolParams , token : CancellationToken ) : Promise < SymbolInformation [ ] > {
131+ return await this . activeDocument ?. languageServerSymbolInformationAsync ( token ) ?? [ ] ;
137132 }
138133
139- private onFoldingRanges ( params : FoldingRangeParams ) : FoldingRange [ ] {
140- const foldingRanges = this . _workspace . activeDocument ?. foldableElements ?? [ ] ;
141- console . log ( `onFoldingRanges: ${ params . textDocument . uri } (${ foldingRanges . length } ranges)` ) ;
142- return foldingRanges ;
134+ private async onFoldingRanges ( params : FoldingRangeParams , token : CancellationToken ) : Promise < FoldingRange [ ] > {
135+ return await this . _workspace . activeDocument ?. getFoldingRanges ( token ) ?? [ ] ;
143136 }
144137
145138 private onHover ( params : HoverParams ) : Hover {
146- console . log ( `onHover: ${ params . position . line } ,${ params . position . character } ` ) ;
147139 return { contents : '' } ;
148140 }
149141
150142 private onInitialized ( ) : void {
151- console . log ( 'onInitialized:---' ) ;
152143 const connection = this . _workspace . connection ;
153144 // Register for client configuration notification changes.
154145 connection . client . register ( DidChangeConfigurationNotification . type , undefined ) ;
@@ -167,11 +158,14 @@ class WorkspaceEvents {
167158 * This event handler is called whenever a `TextDocuments<TextDocument>` is changed.
168159 * @param doc The document that changed.
169160 */
170- onDidChangeContent ( doc : TextDocument ) {
171- console . log ( 'onDidChangeContent:--- ' + doc . uri ) ;
161+ async onDidChangeContentAsync ( doc : TextDocument ) {
162+ // this._parseCancellationToken?.cancel();
163+ // this._parseCancellationToken?.dispose();
164+
172165 this . activeDocument = BaseProjectDocument . create ( this . _workspace , doc ) ;
173- this . activeDocument . parse ( ) ;
166+ this . _parseCancellationToken = new CancellationTokenSource ( ) ;
167+ await this . activeDocument . parseAsync ( this . _parseCancellationToken . token ) ;
168+ this . _parseCancellationToken = undefined ;
174169 this . _workspace . activateDocument ( this . activeDocument ) ;
175170 }
176-
177- }
171+ }
0 commit comments