Skip to content

Commit 336a31b

Browse files
committed
Обновление до lsp4j
1 parent cb7ab57 commit 336a31b

File tree

7 files changed

+43
-35
lines changed

7 files changed

+43
-35
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ dependencies {
6060
api("info.picocli:picocli-spring-boot-starter:4.6.3")
6161

6262
// lsp4j core
63-
api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.12.0")
63+
api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.14.0")
6464

6565
// 1c-syntax
6666
api("com.github.1c-syntax", "bsl-parser", "0.21.0") {

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ public CompletableFuture<List<? extends Location>> references(ReferenceParams pa
145145
}
146146

147147
@Override
148+
@SuppressWarnings("deprecation")
148149
public CompletableFuture<List<Either<SymbolInformation, DocumentSymbol>>> documentSymbol(
149150
DocumentSymbolParams params
150151
) {
@@ -153,7 +154,11 @@ public CompletableFuture<List<Either<SymbolInformation, DocumentSymbol>>> docume
153154
return CompletableFuture.completedFuture(null);
154155
}
155156

156-
return CompletableFuture.supplyAsync(() -> documentSymbolProvider.getDocumentSymbols(documentContext));
157+
return CompletableFuture.supplyAsync(() ->
158+
documentSymbolProvider.getDocumentSymbols(documentContext).stream()
159+
.map(Either::<SymbolInformation, DocumentSymbol>forRight)
160+
.collect(Collectors.toList())
161+
);
157162
}
158163

159164
@Override

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
import org.eclipse.lsp4j.DidChangeConfigurationParams;
2929
import org.eclipse.lsp4j.DidChangeWatchedFilesParams;
3030
import org.eclipse.lsp4j.SymbolInformation;
31+
import org.eclipse.lsp4j.WorkspaceSymbol;
3132
import org.eclipse.lsp4j.WorkspaceSymbolParams;
33+
import org.eclipse.lsp4j.jsonrpc.messages.Either;
3234
import org.eclipse.lsp4j.services.WorkspaceService;
3335
import org.springframework.stereotype.Component;
3436

@@ -44,8 +46,9 @@ public class BSLWorkspaceService implements WorkspaceService {
4446
private final SymbolProvider symbolProvider;
4547

4648
@Override
47-
public CompletableFuture<List<? extends SymbolInformation>> symbol(WorkspaceSymbolParams params) {
48-
return CompletableFuture.supplyAsync(() -> symbolProvider.getSymbols(params));
49+
@SuppressWarnings("deprecation")
50+
public CompletableFuture<Either<List<? extends SymbolInformation>,List<? extends WorkspaceSymbol>>> symbol(WorkspaceSymbolParams params) {
51+
return CompletableFuture.supplyAsync(() -> Either.forRight(symbolProvider.getSymbols(params)));
4952
}
5053

5154
@Override

src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import com.github._1c_syntax.bsl.languageserver.context.DocumentContext;
2525
import com.github._1c_syntax.bsl.languageserver.context.symbol.SourceDefinedSymbol;
2626
import org.eclipse.lsp4j.DocumentSymbol;
27-
import org.eclipse.lsp4j.SymbolInformation;
28-
import org.eclipse.lsp4j.jsonrpc.messages.Either;
2927
import org.springframework.stereotype.Component;
3028

3129
import java.util.List;
@@ -39,10 +37,9 @@ public final class DocumentSymbolProvider {
3937
*/
4038
public static final String LABEL = "BSL Language Server";
4139

42-
public List<Either<SymbolInformation, DocumentSymbol>> getDocumentSymbols(DocumentContext documentContext) {
40+
public List<DocumentSymbol> getDocumentSymbols(DocumentContext documentContext) {
4341
return documentContext.getSymbolTree().getChildren().stream()
4442
.map(DocumentSymbolProvider::toDocumentSymbol)
45-
.map(Either::<SymbolInformation, DocumentSymbol>forRight)
4643
.collect(Collectors.toList());
4744
}
4845

src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,17 @@
3232
import lombok.extern.slf4j.Slf4j;
3333
import org.apache.commons.lang3.tuple.Pair;
3434
import org.eclipse.lsp4j.Location;
35-
import org.eclipse.lsp4j.SymbolInformation;
35+
import org.eclipse.lsp4j.WorkspaceSymbol;
3636
import org.eclipse.lsp4j.WorkspaceSymbolParams;
37+
import org.eclipse.lsp4j.jsonrpc.messages.Either;
3738
import org.springframework.stereotype.Component;
3839

3940
import java.net.URI;
4041
import java.util.Collections;
42+
import java.util.EnumSet;
4143
import java.util.List;
4244
import java.util.Optional;
45+
import java.util.Set;
4346
import java.util.regex.Pattern;
4447
import java.util.regex.PatternSyntaxException;
4548
import java.util.stream.Collectors;
@@ -52,7 +55,12 @@ public class SymbolProvider {
5255

5356
private final ServerContext context;
5457

55-
public List<? extends SymbolInformation> getSymbols(WorkspaceSymbolParams params) {
58+
private static final Set<VariableKind> supportedVariableKinds = EnumSet.of(
59+
VariableKind.MODULE,
60+
VariableKind.GLOBAL
61+
);
62+
63+
public List<? extends WorkspaceSymbol> getSymbols(WorkspaceSymbolParams params) {
5664
var queryString = Optional.ofNullable(params.getQuery())
5765
.orElse("");
5866

@@ -67,7 +75,7 @@ public List<? extends SymbolInformation> getSymbols(WorkspaceSymbolParams params
6775
return context.getDocuments().values().stream()
6876
.flatMap(SymbolProvider::getSymbolPairs)
6977
.filter(symbolPair -> queryString.isEmpty() || pattern.matcher(symbolPair.getValue().getName()).find())
70-
.map(SymbolProvider::createSymbolInformation)
78+
.map(SymbolProvider::createWorkspaceSymbol)
7179
.collect(Collectors.toList());
7280
}
7381

@@ -83,21 +91,23 @@ private static boolean isSupported(Symbol symbol) {
8391
case Method:
8492
return true;
8593
case Variable:
86-
return ((VariableSymbol) symbol).getKind() != VariableKind.LOCAL;
94+
return supportedVariableKinds.contains(((VariableSymbol) symbol).getKind());
8795
default:
8896
return false;
8997
}
9098
}
9199

92-
private static SymbolInformation createSymbolInformation(Pair<URI, SourceDefinedSymbol> symbolPair) {
100+
private static WorkspaceSymbol createWorkspaceSymbol(Pair<URI, SourceDefinedSymbol> symbolPair) {
93101
var uri = symbolPair.getKey();
94102
var symbol = symbolPair.getValue();
95-
var symbolInformation = new SymbolInformation(
96-
symbol.getName(),
97-
symbol.getSymbolKind(),
98-
new Location(uri.toString(), symbol.getRange())
99-
);
100-
symbolInformation.setTags(symbol.getTags());
101-
return symbolInformation;
103+
var location = new Location(uri.toString(), symbol.getRange());
104+
105+
var workspaceSymbol = new WorkspaceSymbol();
106+
workspaceSymbol.setName(symbol.getName());
107+
workspaceSymbol.setKind(symbol.getSymbolKind());
108+
workspaceSymbol.setLocation(Either.forLeft(location));
109+
workspaceSymbol.setTags(symbol.getTags());
110+
111+
return workspaceSymbol;
102112
}
103113
}

src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,11 @@
2121
*/
2222
package com.github._1c_syntax.bsl.languageserver.providers;
2323

24-
import com.github._1c_syntax.bsl.languageserver.context.DocumentContext;
2524
import com.github._1c_syntax.bsl.languageserver.util.TestUtils;
2625
import com.github._1c_syntax.bsl.languageserver.utils.Ranges;
2726
import org.eclipse.lsp4j.DocumentSymbol;
28-
import org.eclipse.lsp4j.SymbolInformation;
2927
import org.eclipse.lsp4j.SymbolKind;
3028
import org.eclipse.lsp4j.SymbolTag;
31-
import org.eclipse.lsp4j.jsonrpc.messages.Either;
3229
import org.junit.jupiter.api.Test;
3330
import org.springframework.beans.factory.annotation.Autowired;
3431
import org.springframework.boot.test.context.SpringBootTest;
@@ -48,25 +45,23 @@ void testDocumentSymbol() {
4845

4946
var documentContext = TestUtils.getDocumentContextFromFile("./src/test/resources/providers/documentSymbol.bsl");
5047

51-
List<Either<SymbolInformation, DocumentSymbol>> documentSymbols = documentSymbolProvider.getDocumentSymbols(documentContext);
48+
List<DocumentSymbol> documentSymbols = documentSymbolProvider.getDocumentSymbols(documentContext);
5249

5350
assertThat(documentSymbols).hasSize(9);
5451

5552
// global variables
5653
assertThat(documentSymbols)
57-
.filteredOn(documentSymbol -> documentSymbol.getRight().getKind().equals(SymbolKind.Variable))
54+
.filteredOn(documentSymbol -> documentSymbol.getKind().equals(SymbolKind.Variable))
5855
.hasSize(3)
59-
.extracting(Either::getRight)
6056
.anyMatch(documentSymbol -> documentSymbol.getRange().equals(Ranges.create(0, 6, 0, 7)))
6157
.anyMatch(documentSymbol -> documentSymbol.getRange().equals(Ranges.create(2, 6, 2, 7)))
6258
.anyMatch(documentSymbol -> documentSymbol.getRange().equals(Ranges.create(2, 9, 2, 10)))
6359
;
6460

6561
// methods
6662
assertThat(documentSymbols)
67-
.filteredOn(documentSymbol -> documentSymbol.getRight().getKind().equals(SymbolKind.Method))
63+
.filteredOn(documentSymbol -> documentSymbol.getKind().equals(SymbolKind.Method))
6864
.hasSize(4)
69-
.extracting(Either::getRight)
7065
.anyMatch(documentSymbol -> documentSymbol.getRange().equals(Ranges.create(4, 0, 5, 14)))
7166
.anyMatch(documentSymbol -> documentSymbol.getRange().equals(Ranges.create(7, 0, 8, 12)))
7267
.anyMatch(documentSymbol -> documentSymbol.getRange().equals(Ranges.create(10, 0, 13, 14)))
@@ -77,8 +72,7 @@ void testDocumentSymbol() {
7772

7873
// sub vars
7974
assertThat(documentSymbols)
80-
.filteredOn(documentSymbol -> documentSymbol.getRight().getKind().equals(SymbolKind.Method))
81-
.extracting(Either::getRight)
75+
.filteredOn(documentSymbol -> documentSymbol.getKind().equals(SymbolKind.Method))
8276
.flatExtracting(DocumentSymbol::getChildren)
8377
.filteredOn(documentSymbol -> documentSymbol.getKind() == SymbolKind.Variable)
8478
.hasSize(3)
@@ -89,8 +83,7 @@ void testDocumentSymbol() {
8983

9084
// regions
9185
assertThat(documentSymbols)
92-
.filteredOn(documentSymbol -> documentSymbol.getRight().getKind() == SymbolKind.Namespace)
93-
.extracting(Either::getRight)
86+
.filteredOn(documentSymbol -> documentSymbol.getKind() == SymbolKind.Namespace)
9487
.hasSize(2)
9588

9689
.flatExtracting(DocumentSymbol::getChildren)
@@ -105,7 +98,6 @@ void testDocumentSymbol() {
10598
;
10699

107100
DocumentSymbol externalRegion = documentSymbols.stream()
108-
.map(Either::getRight)
109101
.filter(documentSymbol -> documentSymbol.getKind() == SymbolKind.Namespace)
110102
.filter(documentSymbol -> documentSymbol.getName().equals("ВнешняяОбласть"))
111103
.findFirst().get();

src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import lombok.SneakyThrows;
2727
import org.eclipse.lsp4j.SymbolKind;
2828
import org.eclipse.lsp4j.SymbolTag;
29+
import org.eclipse.lsp4j.WorkspaceSymbol;
2930
import org.eclipse.lsp4j.WorkspaceSymbolParams;
3031
import org.junit.jupiter.api.BeforeEach;
3132
import org.junit.jupiter.api.Test;
@@ -93,8 +94,8 @@ && uriContains(symbolInformation, "ManagedApplicationModule")
9394
}
9495

9596
@SneakyThrows
96-
private boolean uriContains(org.eclipse.lsp4j.SymbolInformation symbolInformation, String name) {
97-
return Paths.get(new URI(symbolInformation.getLocation().getUri())).toString().contains(name);
97+
private boolean uriContains(WorkspaceSymbol workspaceSymbol, String name) {
98+
return Paths.get(new URI(workspaceSymbol.getLocation().getLeft().getUri())).toString().contains(name);
9899
}
99100

100101
@Test

0 commit comments

Comments
 (0)