Skip to content

Commit e74fae3

Browse files
authored
Merge pull request #3730 from 1c-syntax/feature/variable-info-in-hover
В ховер добавлена информация о месте объявления переменной
2 parents 9c1f478 + 23af142 commit e74fae3

File tree

4 files changed

+71
-13
lines changed

4 files changed

+71
-13
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration;
2525
import com.github._1c_syntax.bsl.languageserver.context.symbol.VariableSymbol;
2626
import com.github._1c_syntax.bsl.languageserver.context.symbol.variable.VariableDescription;
27+
import com.github._1c_syntax.bsl.languageserver.utils.Resources;
2728
import lombok.RequiredArgsConstructor;
2829
import org.eclipse.lsp4j.MarkupContent;
2930
import org.eclipse.lsp4j.MarkupKind;
@@ -41,19 +42,25 @@ public class VariableSymbolMarkupContentBuilder implements MarkupContentBuilder<
4142

4243
private final LanguageServerConfiguration configuration;
4344
private final DescriptionFormatter descriptionFormatter;
45+
private final Resources resources;
4446

4547
@Override
4648
public MarkupContent getContent(VariableSymbol symbol) {
4749
var markupBuilder = new StringJoiner("\n");
4850

4951
// сигнатура
52+
// информация о переменной
5053
// местоположение переменной
5154
// описание переменной
5255

5356
// сигнатура
5457
String signature = descriptionFormatter.getSignature(symbol);
5558
descriptionFormatter.addSectionIfNotEmpty(markupBuilder, signature);
5659

60+
// информация о переменной
61+
var variableInfo = getVariableInfo(symbol);
62+
descriptionFormatter.addSectionIfNotEmpty(markupBuilder, variableInfo);
63+
5764
// местоположение переменной
5865
var location = descriptionFormatter.getLocation(symbol);
5966
descriptionFormatter.addSectionIfNotEmpty(markupBuilder, location);
@@ -78,4 +85,20 @@ public SymbolKind getSymbolKind() {
7885
return SymbolKind.Variable;
7986
}
8087

88+
private String getVariableInfo(VariableSymbol symbol) {
89+
return switch (symbol.getKind()) {
90+
case GLOBAL -> getResourceString("globalVariable");
91+
case MODULE -> getResourceString("moduleVariable");
92+
case LOCAL -> getResourceString("localVariable").formatted(symbol.getScope().getName());
93+
case PARAMETER -> getResourceString("methodParameter").formatted(symbol.getScope().getName());
94+
case DYNAMIC -> symbol.getScope().getSymbolKind() == SymbolKind.Module
95+
? getResourceString("dynamicVariableOfModule")
96+
: getResourceString("dynamicVariableOfMethod").formatted(symbol.getScope().getName());
97+
};
98+
}
99+
100+
private String getResourceString(String key) {
101+
return resources.getResourceString(getClass(), key);
102+
}
103+
81104
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Variable kinds
2+
globalVariable=Global variable
3+
moduleVariable=Module-level variable
4+
localVariable=Local variable of method %s
5+
methodParameter=Parameter of method %s
6+
dynamicVariableOfModule=Dynamic variable of module
7+
dynamicVariableOfMethod=Dynamic variable of method %s
8+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Variable kinds
2+
globalVariable=Глобальная переменная
3+
moduleVariable=Переменная уровня модуля
4+
localVariable=Локальная переменная метода %s
5+
methodParameter=Параметр метода %s
6+
dynamicVariableOfModule=Динамическая переменная модуля
7+
dynamicVariableOfMethod=Динамическая переменная метода %s

src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,18 @@ void testFileVarContentFromDirectFile_NoComments() {
6868

6969
var blocks = Arrays.asList(content.split("---\n?"));
7070

71-
assertThat(blocks).hasSize(2);
71+
assertThat(blocks).hasSize(3);
7272
assertThat(blocks.get(0)).isEqualTo("""
7373
```bsl
7474
Перем ИмяБезОписания
7575
```
7676
7777
""");
78-
assertThat(blocks.get(1)).matches("""
78+
assertThat(blocks.get(1)).isEqualTo("""
79+
Переменная уровня модуля
80+
81+
""");
82+
assertThat(blocks.get(2)).matches("""
7983
\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)
8084
8185
""");
@@ -95,18 +99,22 @@ void testFileVarContentFromDirectFile_OneCommentsStringFromRight() {
9599

96100
var blocks = Arrays.asList(content.split("---\n?"));
97101

98-
assertThat(blocks).hasSize(3);
102+
assertThat(blocks).hasSize(4);
99103
assertThat(blocks.get(0)).isEqualTo("""
100104
```bsl
101105
Перем Имя_ОписаниеСправаОднойСтрокой
102106
```
103107
104108
""");
105-
assertThat(blocks.get(1)).matches("""
106-
\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)
109+
assertThat(blocks.get(1)).isEqualTo("""
110+
Переменная уровня модуля
107111
108112
""");
109113
assertThat(blocks.get(2)).matches("""
114+
\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)
115+
116+
""");
117+
assertThat(blocks.get(3)).matches("""
110118
описание
111119
112120
""");
@@ -127,19 +135,23 @@ void testMethodVarContentFromDirectFile_2_comments_strings() {
127135

128136
var blocks = Arrays.asList(content.split("---\n?"));
129137

130-
assertThat(blocks).hasSize(3);
138+
assertThat(blocks).hasSize(4);
131139
assertThat(blocks.get(0)).isEqualTo("""
132140
```bsl
133141
Перем Имя_ОписаниеСверхуДвеСтроки_Функция
134142
```
135143
136144
""");
137-
assertThat(blocks.get(1)).matches("""
145+
assertThat(blocks.get(1)).isEqualTo("""
146+
Локальная переменная метода ИмяФункции
147+
148+
""");
149+
assertThat(blocks.get(2)).matches("""
138150
\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl.ИмяФункции]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)
139151
140152
""");
141153
// TODO баг - нет \n для многострочного описания переменной
142-
assertThat(blocks.get(2)).matches("""
154+
assertThat(blocks.get(3)).matches("""
143155
описание 1 строка
144156
2 строка
145157
@@ -161,18 +173,22 @@ void testMethodVarContentFromDirectFile_3_comments_strings() {
161173

162174
var blocks = Arrays.asList(content.split("---\n?"));
163175

164-
assertThat(blocks).hasSize(3);
176+
assertThat(blocks).hasSize(4);
165177
assertThat(blocks.get(0)).isEqualTo("""
166178
```bsl
167179
Перем Имя_ОписаниеСверхуТриСтрокиПоследняяПустая_Функция
168180
```
169181
170182
""");
171-
assertThat(blocks.get(1)).matches("""
172-
\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl.ИмяФункции]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)
183+
assertThat(blocks.get(1)).isEqualTo("""
184+
Локальная переменная метода ИмяФункции
173185
174186
""");
175187
assertThat(blocks.get(2)).matches("""
188+
\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl.ИмяФункции]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)
189+
190+
""");
191+
assertThat(blocks.get(3)).matches("""
176192
описание 1 строка
177193
2 строка
178194
@@ -195,14 +211,18 @@ void testContentFromObjectModule() {
195211

196212
var blocks = Arrays.asList(content.split("---\n?"));
197213

198-
assertThat(blocks).hasSize(2);
214+
assertThat(blocks).hasSize(3);
199215
assertThat(blocks.get(0)).isEqualTo("""
200216
```bsl
201217
Перем ВалютаУчета
202218
```
203219
204220
""");
205-
assertThat(blocks.get(1)).matches("\\[Catalog.Справочник1]\\(.*Catalogs/.*/Ext/ObjectModule.bsl#\\d+\\)\n\n");
221+
assertThat(blocks.get(1)).isEqualTo("""
222+
Переменная уровня модуля
223+
224+
""");
225+
assertThat(blocks.get(2)).matches("\\[Catalog.Справочник1]\\(.*Catalogs/.*/Ext/ObjectModule.bsl#\\d+\\)\n\n");
206226
}
207227

208228
}

0 commit comments

Comments
 (0)