Skip to content

Commit 6e09504

Browse files
authored
Merge pull request #3696 from 1c-syntax/copilot/support-semantic-tokens-delta
Support textDocument/semanticTokens/full/delta
2 parents 655b637 + 2c48c95 commit 6e09504

File tree

14 files changed

+668
-69
lines changed

14 files changed

+668
-69
lines changed

docs/en/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ Perfomance measurement - [SSL 3.1](../bench/index.html)
111111
| [callHierarchy/incomingCalls](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_incomingCalls) | <img src="./assets/images/checkmark.svg" alt="yes" width="20"> | | |
112112
| [callHierarchy/outgoingCalls](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_outgoingCalls) | <img src="./assets/images/checkmark.svg" alt="yes" width="20"> | | |
113113
| [semanticTokens/full](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | <img src="./assets/images/checkmark.svg" alt="yes" width="20"> | multilineTokenSupport = true | |
114-
| [semanticTokens/full/delta](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | <img src="./assets/images/cross.svg" alt="no" width="20"> | | |
114+
| [semanticTokens/full/delta](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | <img src="./assets/images/checkmark.svg" alt="yes" width="20"> | | |
115115
| [semanticTokens/range](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | <img src="./assets/images/cross.svg" alt="no" width="20"> | | |
116116
| [linkedEditingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_linkedEditingRange) | <img src="./assets/images/cross.svg" alt="no" width="20"> | | |
117117
| [moniker](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_moniker) | <img src="./assets/images/cross.svg" alt="no" width="20"> | | |

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
| [callHierarchy/incomingCalls](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_incomingCalls) | <img src="./assets/images/checkmark.svg" alt="yes" width="20"> | | |
112112
| [callHierarchy/outgoingCalls](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_outgoingCalls) | <img src="./assets/images/checkmark.svg" alt="yes" width="20"> | | |
113113
| [semanticTokens/full](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | <img src="./assets/images/checkmark.svg" alt="yes" width="20"> | multilineTokenSupport = true | |
114-
| [semanticTokens/full/delta](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | <img src="./assets/images/cross.svg" alt="no" width="20"> | | |
114+
| [semanticTokens/full/delta](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | <img src="./assets/images/checkmark.svg" alt="yes" width="20"> | | |
115115
| [semanticTokens/range](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | <img src="./assets/images/cross.svg" alt="no" width="20"> | | |
116116
| [linkedEditingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_linkedEditingRange) | <img src="./assets/images/cross.svg" alt="no" width="20"> | | |
117117
| [moniker](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_moniker) | <img src="./assets/images/cross.svg" alt="no" width="20"> | | |

src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.eclipse.lsp4j.SaveOptions;
5757
import org.eclipse.lsp4j.SelectionRangeRegistrationOptions;
5858
import org.eclipse.lsp4j.SemanticTokensLegend;
59+
import org.eclipse.lsp4j.SemanticTokensServerFull;
5960
import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions;
6061
import org.eclipse.lsp4j.ServerCapabilities;
6162
import org.eclipse.lsp4j.ServerInfo;
@@ -379,7 +380,11 @@ private ExecuteCommandOptions getExecuteCommandProvider() {
379380

380381
private SemanticTokensWithRegistrationOptions getSemanticTokensProvider() {
381382
var semanticTokensProvider = new SemanticTokensWithRegistrationOptions(legend);
382-
semanticTokensProvider.setFull(Boolean.TRUE);
383+
384+
var fullOptions = new SemanticTokensServerFull();
385+
fullOptions.setDelta(Boolean.TRUE);
386+
semanticTokensProvider.setFull(fullOptions);
387+
383388
semanticTokensProvider.setRange(Boolean.FALSE);
384389
return semanticTokensProvider;
385390
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@
9898
import org.eclipse.lsp4j.SelectionRange;
9999
import org.eclipse.lsp4j.SelectionRangeParams;
100100
import org.eclipse.lsp4j.SemanticTokens;
101+
import org.eclipse.lsp4j.SemanticTokensDelta;
102+
import org.eclipse.lsp4j.SemanticTokensDeltaParams;
101103
import org.eclipse.lsp4j.SemanticTokensParams;
102104
import org.eclipse.lsp4j.SymbolInformation;
103105
import org.eclipse.lsp4j.TextDocumentClientCapabilities;
@@ -176,7 +178,7 @@ private void onDestroy() {
176178

177179
@Override
178180
public CompletableFuture<@Nullable Hover> hover(HoverParams params) {
179-
var documentContext = context.getDocument(params.getTextDocument().getUri());
181+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
180182
if (documentContext == null) {
181183
return CompletableFuture.completedFuture(null);
182184
}
@@ -191,7 +193,7 @@ private void onDestroy() {
191193
public CompletableFuture<Either<List<? extends Location>, List<? extends LocationLink>>> definition(
192194
DefinitionParams params
193195
) {
194-
var documentContext = context.getDocument(params.getTextDocument().getUri());
196+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
195197
if (documentContext == null) {
196198
return CompletableFuture.completedFuture(Either.forRight(Collections.emptyList()));
197199
}
@@ -211,7 +213,7 @@ public CompletableFuture<Either<List<? extends Location>, List<? extends Locatio
211213

212214
@Override
213215
public CompletableFuture<List<? extends Location>> references(ReferenceParams params) {
214-
var documentContext = context.getDocument(params.getTextDocument().getUri());
216+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
215217
if (documentContext == null) {
216218
return CompletableFuture.completedFuture(Collections.emptyList());
217219
}
@@ -226,7 +228,7 @@ public CompletableFuture<List<? extends Location>> references(ReferenceParams pa
226228
public CompletableFuture<List<Either<SymbolInformation, DocumentSymbol>>> documentSymbol(
227229
DocumentSymbolParams params
228230
) {
229-
var documentContext = context.getDocument(params.getTextDocument().getUri());
231+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
230232
if (documentContext == null) {
231233
return CompletableFuture.completedFuture(null);
232234
}
@@ -241,7 +243,7 @@ public CompletableFuture<List<Either<SymbolInformation, DocumentSymbol>>> docume
241243

242244
@Override
243245
public CompletableFuture<List<Either<Command, CodeAction>>> codeAction(CodeActionParams params) {
244-
var documentContext = context.getDocument(params.getTextDocument().getUri());
246+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
245247
if (documentContext == null) {
246248
return CompletableFuture.completedFuture(null);
247249
}
@@ -254,7 +256,7 @@ public CompletableFuture<List<Either<Command, CodeAction>>> codeAction(CodeActio
254256

255257
@Override
256258
public CompletableFuture<List<? extends CodeLens>> codeLens(CodeLensParams params) {
257-
var documentContext = context.getDocument(params.getTextDocument().getUri());
259+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
258260
if (documentContext == null) {
259261
return CompletableFuture.completedFuture(Collections.emptyList());
260262
}
@@ -268,7 +270,7 @@ public CompletableFuture<List<? extends CodeLens>> codeLens(CodeLensParams param
268270
@Override
269271
public CompletableFuture<CodeLens> resolveCodeLens(CodeLens unresolved) {
270272
var data = codeLensProvider.extractData(unresolved);
271-
var documentContext = context.getDocument(data.getUri());
273+
var documentContext = context.getDocumentUnsafe(data.getUri());
272274
if (documentContext == null) {
273275
return CompletableFuture.completedFuture(unresolved);
274276
}
@@ -280,7 +282,7 @@ public CompletableFuture<CodeLens> resolveCodeLens(CodeLens unresolved) {
280282

281283
@Override
282284
public CompletableFuture<List<? extends TextEdit>> formatting(DocumentFormattingParams params) {
283-
var documentContext = context.getDocument(params.getTextDocument().getUri());
285+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
284286
if (documentContext == null) {
285287
return CompletableFuture.completedFuture(null);
286288
}
@@ -293,7 +295,7 @@ public CompletableFuture<List<? extends TextEdit>> formatting(DocumentFormatting
293295

294296
@Override
295297
public CompletableFuture<List<? extends TextEdit>> rangeFormatting(DocumentRangeFormattingParams params) {
296-
var documentContext = context.getDocument(params.getTextDocument().getUri());
298+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
297299
if (documentContext == null) {
298300
return CompletableFuture.completedFuture(null);
299301
}
@@ -306,7 +308,7 @@ public CompletableFuture<List<? extends TextEdit>> rangeFormatting(DocumentRange
306308

307309
@Override
308310
public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestParams params) {
309-
var documentContext = context.getDocument(params.getTextDocument().getUri());
311+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
310312
if (documentContext == null) {
311313
return CompletableFuture.completedFuture(null);
312314
}
@@ -320,7 +322,7 @@ public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestPar
320322
@Override
321323
public CompletableFuture<@Nullable List<CallHierarchyItem>> prepareCallHierarchy(CallHierarchyPrepareParams params) {
322324
// При возврате пустого списка VSCode падает. По протоколу разрешен возврат null.
323-
var documentContext = context.getDocument(params.getTextDocument().getUri());
325+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
324326
if (documentContext == null) {
325327
return CompletableFuture.completedFuture(null);
326328
}
@@ -339,7 +341,7 @@ public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestPar
339341

340342
@Override
341343
public CompletableFuture<SemanticTokens> semanticTokensFull(SemanticTokensParams params) {
342-
var documentContext = context.getDocument(params.getTextDocument().getUri());
344+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
343345
if (documentContext == null) {
344346
return CompletableFuture.completedFuture(null);
345347
}
@@ -350,13 +352,26 @@ public CompletableFuture<SemanticTokens> semanticTokensFull(SemanticTokensParams
350352
);
351353
}
352354

355+
@Override
356+
public CompletableFuture<Either<SemanticTokens, SemanticTokensDelta>> semanticTokensFullDelta(
357+
SemanticTokensDeltaParams params
358+
) {
359+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
360+
if (documentContext == null) {
361+
return CompletableFuture.completedFuture(null);
362+
}
353363

364+
return withFreshDocumentContext(
365+
documentContext,
366+
() -> semanticTokensProvider.getSemanticTokensFullDelta(documentContext, params)
367+
);
368+
}
354369

355370
@Override
356371
public CompletableFuture<List<CallHierarchyIncomingCall>> callHierarchyIncomingCalls(
357372
CallHierarchyIncomingCallsParams params
358373
) {
359-
var documentContext = context.getDocument(params.getItem().getUri());
374+
var documentContext = context.getDocumentUnsafe(params.getItem().getUri());
360375
if (documentContext == null) {
361376
return CompletableFuture.completedFuture(Collections.emptyList());
362377
}
@@ -371,7 +386,7 @@ public CompletableFuture<List<CallHierarchyIncomingCall>> callHierarchyIncomingC
371386
public CompletableFuture<List<CallHierarchyOutgoingCall>> callHierarchyOutgoingCalls(
372387
CallHierarchyOutgoingCallsParams params
373388
) {
374-
var documentContext = context.getDocument(params.getItem().getUri());
389+
var documentContext = context.getDocumentUnsafe(params.getItem().getUri());
375390
if (documentContext == null) {
376391
return CompletableFuture.completedFuture(Collections.emptyList());
377392
}
@@ -384,7 +399,7 @@ public CompletableFuture<List<CallHierarchyOutgoingCall>> callHierarchyOutgoingC
384399

385400
@Override
386401
public CompletableFuture<List<@Nullable SelectionRange>> selectionRange(SelectionRangeParams params) {
387-
var documentContext = context.getDocument(params.getTextDocument().getUri());
402+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
388403
if (documentContext == null) {
389404
return CompletableFuture.completedFuture(Collections.emptyList());
390405
}
@@ -397,7 +412,7 @@ public CompletableFuture<List<CallHierarchyOutgoingCall>> callHierarchyOutgoingC
397412

398413
@Override
399414
public CompletableFuture<List<ColorInformation>> documentColor(DocumentColorParams params) {
400-
var documentContext = context.getDocument(params.getTextDocument().getUri());
415+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
401416
if (documentContext == null) {
402417
return CompletableFuture.completedFuture(Collections.emptyList());
403418
}
@@ -410,7 +425,7 @@ public CompletableFuture<List<ColorInformation>> documentColor(DocumentColorPara
410425

411426
@Override
412427
public CompletableFuture<List<ColorPresentation>> colorPresentation(ColorPresentationParams params) {
413-
var documentContext = context.getDocument(params.getTextDocument().getUri());
428+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
414429
if (documentContext == null) {
415430
return CompletableFuture.completedFuture(Collections.emptyList());
416431
}
@@ -423,7 +438,7 @@ public CompletableFuture<List<ColorPresentation>> colorPresentation(ColorPresent
423438

424439
@Override
425440
public CompletableFuture<List<InlayHint>> inlayHint(InlayHintParams params) {
426-
var documentContext = context.getDocument(params.getTextDocument().getUri());
441+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
427442
if (documentContext == null) {
428443
return CompletableFuture.completedFuture(Collections.emptyList());
429444
}
@@ -459,7 +474,7 @@ public void didOpen(DidOpenTextDocumentParams params) {
459474

460475
@Override
461476
public void didChange(DidChangeTextDocumentParams params) {
462-
var documentContext = context.getDocument(params.getTextDocument().getUri());
477+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
463478
if (documentContext == null) {
464479
return;
465480
}
@@ -486,7 +501,7 @@ public void didChange(DidChangeTextDocumentParams params) {
486501

487502
@Override
488503
public void didClose(DidCloseTextDocumentParams params) {
489-
var documentContext = context.getDocument(params.getTextDocument().getUri());
504+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
490505
if (documentContext == null) {
491506
return;
492507
}
@@ -515,7 +530,7 @@ public void didClose(DidCloseTextDocumentParams params) {
515530

516531
@Override
517532
public void didSave(DidSaveTextDocumentParams params) {
518-
var documentContext = context.getDocument(params.getTextDocument().getUri());
533+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
519534
if (documentContext == null) {
520535
return;
521536
}
@@ -527,7 +542,7 @@ public void didSave(DidSaveTextDocumentParams params) {
527542

528543
@Override
529544
public CompletableFuture<List<DocumentLink>> documentLink(DocumentLinkParams params) {
530-
var documentContext = context.getDocument(params.getTextDocument().getUri());
545+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
531546
if (documentContext == null) {
532547
return CompletableFuture.completedFuture(null);
533548
}
@@ -540,7 +555,7 @@ public CompletableFuture<List<DocumentLink>> documentLink(DocumentLinkParams par
540555

541556
@Override
542557
public CompletableFuture<Diagnostics> diagnostics(DiagnosticParams params) {
543-
var documentContext = context.getDocument(params.getTextDocument().getUri());
558+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
544559
if (documentContext == null) {
545560
return CompletableFuture.completedFuture(Diagnostics.EMPTY);
546561
}
@@ -563,7 +578,7 @@ public CompletableFuture<Diagnostics> diagnostics(DiagnosticParams params) {
563578

564579
@Override
565580
public CompletableFuture<DocumentDiagnosticReport> diagnostic(DocumentDiagnosticParams params) {
566-
var documentContext = context.getDocument(params.getTextDocument().getUri());
581+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
567582
if (documentContext == null) {
568583
return CompletableFuture.completedFuture(
569584
new DocumentDiagnosticReport(new RelatedFullDocumentDiagnosticReport(Collections.emptyList()))
@@ -578,7 +593,7 @@ public CompletableFuture<DocumentDiagnosticReport> diagnostic(DocumentDiagnostic
578593

579594
@Override
580595
public CompletableFuture<Either3<Range, PrepareRenameResult, PrepareRenameDefaultBehavior>> prepareRename(PrepareRenameParams params) {
581-
var documentContext = context.getDocument(params.getTextDocument().getUri());
596+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
582597
if (documentContext == null) {
583598
return CompletableFuture.completedFuture(null);
584599
}
@@ -591,7 +606,7 @@ public CompletableFuture<Either3<Range, PrepareRenameResult, PrepareRenameDefaul
591606

592607
@Override
593608
public CompletableFuture<WorkspaceEdit> rename(RenameParams params) {
594-
var documentContext = context.getDocument(params.getTextDocument().getUri());
609+
var documentContext = context.getDocumentUnsafe(params.getTextDocument().getUri());
595610
if (documentContext == null) {
596611
return CompletableFuture.completedFuture(null);
597612
}

0 commit comments

Comments
 (0)