Skip to content

Commit 3256a32

Browse files
committed
Переход к модулю
1 parent 906a841 commit 3256a32

File tree

4 files changed

+55
-30
lines changed

4 files changed

+55
-30
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/references/OSModulesReferenceFinder.java renamed to src/main/java/com/github/_1c_syntax/bsl/languageserver/references/OscriptReferenceFinder.java

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@
2222
package com.github._1c_syntax.bsl.languageserver.references;
2323

2424
import com.github._1c_syntax.bsl.languageserver.context.DocumentContext;
25+
import com.github._1c_syntax.bsl.languageserver.context.ModuleType;
2526
import com.github._1c_syntax.bsl.languageserver.context.ServerContext;
2627
import com.github._1c_syntax.bsl.languageserver.providers.SelectionRangeProvider;
2728
import com.github._1c_syntax.bsl.languageserver.references.model.OccurrenceType;
2829
import com.github._1c_syntax.bsl.languageserver.references.model.Reference;
2930
import com.github._1c_syntax.bsl.languageserver.utils.Ranges;
3031
import com.github._1c_syntax.bsl.parser.BSLParser;
3132
import lombok.RequiredArgsConstructor;
33+
import org.antlr.v4.runtime.tree.TerminalNode;
3234
import org.eclipse.lsp4j.Position;
3335
import org.springframework.stereotype.Component;
3436

@@ -38,7 +40,7 @@
3840

3941
@Component
4042
@RequiredArgsConstructor
41-
public class OSModulesReferenceFinder implements ReferenceFinder {
43+
public class OscriptReferenceFinder implements ReferenceFinder {
4244

4345
private final ServerContext serverContext;
4446

@@ -56,28 +58,33 @@ public Optional<Reference> findReference(URI uri, Position position) {
5658
return Optional.empty();
5759
}
5860

59-
if (!(node.get().getParent() instanceof BSLParser.TypeNameContext)) {
60-
return Optional.empty();
61-
}
61+
return serverContext.getDocuments().values().stream()
62+
.filter(documentContext -> documentContext.getTypeName().equals(node.get().getText()))
63+
.filter(d -> filterByType(node, d.getModuleType()))
64+
.map(documentContext -> new Reference(
65+
documentContext.getSymbolTree().getModule(),
66+
documentContext.getSymbolTree().getModule(),
67+
documentContext.getUri(),
68+
Ranges.create(0, 0, 0, 0),
69+
OccurrenceType.DEFINITION)
70+
).findAny();
6271

63-
var className = node.get().getText();
72+
}
6473

65-
var dd = serverContext.getDocuments().values().stream()
66-
.filter(d -> d.getTypeName().equals(className))
67-
.findFirst();
74+
private boolean filterByType(Optional<TerminalNode> node, ModuleType moduleType) {
6875

69-
if (dd.isEmpty()) {
70-
return Optional.empty();
76+
if (node.isEmpty()) {
77+
return false;
7178
}
7279

73-
return Optional.of(new Reference(
74-
dd.get().getSymbolTree().getModule(),
75-
dd.get().getSymbolTree().getModule(),
76-
dd.get().getUri(),
77-
Ranges.create(0, 0, 0, 0),
78-
OccurrenceType.DEFINITION
79-
)
80-
);
80+
if ((node.get().getParent() instanceof BSLParser.TypeNameContext)
81+
&& moduleType == ModuleType.Class) {
82+
return true;
83+
} else {
84+
return (node.get().getParent() instanceof BSLParser.ComplexIdentifierContext)
85+
&& moduleType == ModuleType.Module;
86+
}
8187

8288
}
89+
8390
}
Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@
3232
import static org.assertj.core.api.Assertions.assertThat;
3333

3434
@SpringBootTest
35-
class OSModulesReferenceFinderTest {
35+
class OscriptReferenceFinderTest {
3636

3737
@Autowired
38-
private OSModulesReferenceFinder referenceFinder;
38+
private OscriptReferenceFinder referenceFinder;
3939

4040
@Autowired
4141
private ServerContext serverContext;
@@ -45,21 +45,31 @@ void testFindReferenceToClass() {
4545
// given
4646
serverContext.setConfigurationRoot(Absolute.path("src/test/resources/metadata/oscript"));
4747
serverContext.populateContext();
48-
var documentContext = TestUtils.getDocumentContextFromFile("./src/test/resources/metadata/oscript/Классы/ТестовыйКласс.os");
4948
var mainOsContext = TestUtils.getDocumentContextFromFile("./src/test/resources/metadata/oscript/main.os");
5049

5150
// when
52-
var optionalReference = referenceFinder.findReference(
53-
mainOsContext.getUri(),
54-
new Position(1, 25)
55-
);
51+
var optionalReference = referenceFinder.findReference(mainOsContext.getUri(), new Position(1, 25));
5652

5753
// then
58-
assertThat(optionalReference)
59-
.isPresent()
60-
// .hasValueSatisfying(reference -> assertThat(reference.getSymbol().getSymbolKind()).isEqualTo())
61-
;
54+
assertThat(optionalReference).isPresent();
6255
}
6356

57+
@Test
58+
void testFindReferenceToModule() {
59+
// given
60+
serverContext.setConfigurationRoot(Absolute.path("src/test/resources/metadata/oscript"));
61+
serverContext.populateContext();
62+
var mainOsContext = TestUtils.getDocumentContextFromFile("./src/test/resources/metadata/oscript/main.os");
63+
64+
// when
65+
var optionalReference = referenceFinder.findReference(mainOsContext.getUri(), new Position(3, 17));
66+
// then
67+
assertThat(optionalReference).isPresent();
68+
69+
// when
70+
var variable = referenceFinder.findReference(mainOsContext.getUri(), new Position(3, 53));
71+
// then
72+
assertThat(variable).isEmpty();
73+
}
6474

6575
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11

22
ТестовыйКласс = Новый ТестовыйКласс;
33

4-
Другая = 1 + ТестовыйКласс;
4+
Другая = ТестовыйМодуль.ЭкспортныйМетод() + ТестовыйКласс;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
Процедура ПростоМетод()
3+
4+
КонецПроцедуры
5+
6+
Процедура ЭкспортныйМетод() Экспорт
7+
ПростоМетод();
8+
КонецПроцедуры

0 commit comments

Comments
 (0)