Skip to content

Commit f344361

Browse files
committed
1. Добавлено хранение расположения элементов описания в тексте
2. токенайзер описаний сделан приватным
1 parent f27280c commit f344361

19 files changed

+630
-91
lines changed

src/main/antlr/BSLDescriptionParser.g4

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ returnsValue: type
9696

9797
typeDescription:
9898
(
99-
(hyperlink | ~(RETURNS_KEYWORD | EXAMPLE_KEYWORD | DEPRECATE_KEYWORD | EOL | EOF | SPACE))
100-
(hyperlink | ~(EOL | EOF))*
99+
(hyperlink | first=~(RETURNS_KEYWORD | EXAMPLE_KEYWORD | DEPRECATE_KEYWORD | EOL | EOF | SPACE))
100+
(hyperlink | second=~(EOL | EOF))*
101101
EOL
102102
)
103103
| (SPACE* EOL)

src/main/java/com/github/_1c_syntax/bsl/parser/description/CollectionTypeDescription.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.description;
2323

24+
import com.github._1c_syntax.bsl.parser.description.support.DescriptionElement;
2425
import lombok.AccessLevel;
2526
import lombok.AllArgsConstructor;
2627
import lombok.Value;
@@ -56,7 +57,14 @@ public class CollectionTypeDescription implements TypeDescription {
5657
@Accessors(fluent = true)
5758
TypeDescription valueType;
5859

60+
/**
61+
* Элемент описания имени коллекции
62+
*/
63+
@Accessors(fluent = true)
64+
DescriptionElement element;
65+
5966
public static TypeDescription create(String collectionName,
67+
DescriptionElement element,
6068
String description,
6169
TypeDescription valueType,
6270
List<ParameterDescription> fieldList) {
@@ -71,7 +79,8 @@ public static TypeDescription create(String collectionName,
7179
description.strip(),
7280
fieldList,
7381
collectionName.strip().intern(),
74-
valueType
82+
valueType,
83+
element
7584
);
7685
}
7786

src/main/java/com/github/_1c_syntax/bsl/parser/description/HyperlinkTypeDescription.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.description;
2323

24+
import com.github._1c_syntax.bsl.parser.description.support.DescriptionElement;
2425
import com.github._1c_syntax.bsl.parser.description.support.Hyperlink;
2526
import lombok.AccessLevel;
2627
import lombok.AllArgsConstructor;
@@ -50,12 +51,19 @@ public class HyperlinkTypeDescription implements TypeDescription {
5051
@Accessors(fluent = true)
5152
Hyperlink hyperlink;
5253

53-
public static TypeDescription create(Hyperlink hyperlink, String description, List<ParameterDescription> fieldList) {
54+
/**
55+
* Элемент описания ссылки
56+
*/
57+
@Accessors(fluent = true)
58+
DescriptionElement element;
59+
60+
public static TypeDescription create(Hyperlink hyperlink, DescriptionElement element, String description, List<ParameterDescription> fieldList) {
5461
return new HyperlinkTypeDescription(
5562
hyperlink.link(),
5663
description.strip(),
5764
fieldList,
58-
hyperlink
65+
hyperlink,
66+
element
5967
);
6068
}
6169

src/main/java/com/github/_1c_syntax/bsl/parser/description/MethodDescription.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,17 @@
2222
package com.github._1c_syntax.bsl.parser.description;
2323

2424
import com.github._1c_syntax.bsl.parser.description.reader.MethodDescriptionReader;
25+
import com.github._1c_syntax.bsl.parser.description.support.DescriptionElement;
2526
import com.github._1c_syntax.bsl.parser.description.support.Hyperlink;
2627
import com.github._1c_syntax.bsl.parser.description.support.SimpleRange;
28+
import lombok.AccessLevel;
2729
import lombok.Builder;
30+
import lombok.Getter;
2831
import lombok.Singular;
2932
import lombok.Value;
3033
import org.antlr.v4.runtime.Token;
3134

35+
import java.util.ArrayList;
3236
import java.util.List;
3337

3438
/**
@@ -89,7 +93,28 @@ public class MethodDescription implements SourceDefinedSymbolDescription {
8993
*/
9094
SimpleRange range;
9195

96+
/**
97+
* Список собственных элементов описания.
98+
*/
99+
@Singular
100+
@Getter(AccessLevel.NONE)
101+
List<DescriptionElement> keywords;
102+
103+
/**
104+
* Список всех элементов описания включая все дочерние описания (типы, параметры, возвращаемые значения)
105+
*/
106+
@Getter(lazy = true)
107+
List<DescriptionElement> elements = computeAllElements();
108+
92109
public static MethodDescription create(List<Token> comments) {
93110
return MethodDescriptionReader.read(comments);
94111
}
112+
113+
private List<DescriptionElement> computeAllElements() {
114+
List<DescriptionElement> allElements = new ArrayList<>(keywords);
115+
parameters.forEach(parameter -> allElements.addAll(parameter.allElements()));
116+
returnedValue.forEach(type -> allElements.addAll(type.allElements()));
117+
118+
return allElements;
119+
}
95120
}

src/main/java/com/github/_1c_syntax/bsl/parser/description/ParameterDescription.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,30 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.description;
2323

24+
import com.github._1c_syntax.bsl.parser.description.support.DescriptionElement;
2425
import com.github._1c_syntax.bsl.parser.description.support.Hyperlink;
2526

27+
import java.util.ArrayList;
2628
import java.util.Collections;
2729
import java.util.List;
2830

2931
/**
3032
* Описание параметра из комментария - описания метода
3133
*
32-
* @param name Имя параметра
33-
* @param types Список типов параметра
34+
* @param name Имя параметра
35+
* @param element Положение параметра в тексте
36+
* @param types Список типов параметра
3437
*/
35-
public record ParameterDescription(String name, List<TypeDescription> types) {
38+
public record ParameterDescription(String name, DescriptionElement element, List<TypeDescription> types) {
3639
/**
37-
* @param name Имя параметра
38-
* @param types Возможные типы параметра. Может быть пустым
40+
* @param name Имя параметра
41+
* @param element Положение параметра в тексте
42+
* @param types Возможные типы параметра. Может быть пустым
3943
*/
40-
public ParameterDescription(String name, List<TypeDescription> types) {
44+
public ParameterDescription(String name, DescriptionElement element, List<TypeDescription> types) {
4145
this.name = name.strip().intern();
4246
this.types = Collections.unmodifiableList(types);
47+
this.element = element;
4348
}
4449

4550
/**
@@ -60,4 +65,16 @@ public boolean isHyperlink() {
6065
public Hyperlink link() {
6166
return (isHyperlink()) ? ((HyperlinkTypeDescription) types.get(0)).hyperlink() : Hyperlink.EMPTY;
6267
}
68+
69+
/**
70+
* Список элементов описания включая все дочерние описания (поля, типы...)
71+
*
72+
* @return Список элементов описания
73+
*/
74+
public List<DescriptionElement> allElements() {
75+
List<DescriptionElement> elements = new ArrayList<>();
76+
elements.add(element);
77+
types.forEach(type -> elements.addAll(type.allElements()));
78+
return elements;
79+
}
6380
}

src/main/java/com/github/_1c_syntax/bsl/parser/description/SimpleTypeDescription.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.description;
2323

24+
import com.github._1c_syntax.bsl.parser.description.support.DescriptionElement;
25+
import com.github._1c_syntax.bsl.parser.description.support.SimpleRange;
2426
import lombok.AccessLevel;
2527
import lombok.AllArgsConstructor;
2628
import lombok.Value;
@@ -45,16 +47,25 @@ public class SimpleTypeDescription implements TypeDescription {
4547
@Accessors(fluent = true)
4648
List<ParameterDescription> fields;
4749

48-
public static final SimpleTypeDescription EMPTY = new SimpleTypeDescription("", "", Collections.emptyList());
50+
@Accessors(fluent = true)
51+
DescriptionElement element;
52+
53+
public static final SimpleTypeDescription EMPTY = new SimpleTypeDescription(
54+
"",
55+
"",
56+
Collections.emptyList(),
57+
new DescriptionElement(SimpleRange.create(0, 0, 0, 0), DescriptionElement.Type.UNKNOWN)
58+
);
4959

50-
public static TypeDescription create(String name, String description, List<ParameterDescription> fieldList) {
60+
public static TypeDescription create(String name, DescriptionElement element, String description, List<ParameterDescription> fieldList) {
5161
if (name.isBlank() && description.isBlank()) {
5262
return EMPTY;
5363
}
5464
return new SimpleTypeDescription(
5565
name.strip().intern(),
5666
description.strip(),
57-
fieldList
67+
fieldList,
68+
element
5869
);
5970
}
6071

src/main/java/com/github/_1c_syntax/bsl/parser/description/SourceDefinedSymbolDescription.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.description;
2323

24+
import com.github._1c_syntax.bsl.parser.description.support.DescriptionElement;
2425
import com.github._1c_syntax.bsl.parser.description.support.Hyperlink;
2526
import com.github._1c_syntax.bsl.parser.description.support.SimpleRange;
2627
import org.antlr.v4.runtime.Token;
@@ -78,6 +79,13 @@ public interface SourceDefinedSymbolDescription {
7879
*/
7980
SimpleRange getRange();
8081

82+
/**
83+
* Список значимых элементов описания.
84+
*
85+
* @return Список элементов
86+
*/
87+
List<DescriptionElement> getElements();
88+
8189
/**
8290
* Проверяет вхождение области заданной двумя пограничными токенами в область описания
8391
*

src/main/java/com/github/_1c_syntax/bsl/parser/description/TypeDescription.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.description;
2323

24+
import com.github._1c_syntax.bsl.parser.description.support.DescriptionElement;
25+
26+
import java.util.ArrayList;
2427
import java.util.List;
2528

2629
/**
@@ -57,6 +60,23 @@ public interface TypeDescription {
5760
*/
5861
List<ParameterDescription> fields();
5962

63+
/**
64+
* Элемент описания имени параметра
65+
*/
66+
DescriptionElement element();
67+
68+
/**
69+
* Список элементов описания включая все дочерние описания (поля, типы...)
70+
*
71+
* @return Список элементов описания
72+
*/
73+
default List<DescriptionElement> allElements() {
74+
List<DescriptionElement> elements = new ArrayList<>();
75+
elements.add(element());
76+
fields().forEach(field -> elements.addAll(field.allElements()));
77+
return elements;
78+
}
79+
6080
/**
6181
* Возможные виды типов
6282
*/

src/main/java/com/github/_1c_syntax/bsl/parser/description/VariableDescription.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
package com.github._1c_syntax.bsl.parser.description;
2323

2424
import com.github._1c_syntax.bsl.parser.description.reader.VariableDescriptionReader;
25+
import com.github._1c_syntax.bsl.parser.description.support.DescriptionElement;
2526
import com.github._1c_syntax.bsl.parser.description.support.Hyperlink;
2627
import com.github._1c_syntax.bsl.parser.description.support.SimpleRange;
2728
import lombok.Builder;
29+
import lombok.Singular;
2830
import lombok.Value;
2931
import org.antlr.v4.runtime.Token;
3032

@@ -77,6 +79,9 @@ public class VariableDescription implements SourceDefinedSymbolDescription {
7779
*/
7880
Optional<VariableDescription> trailingDescription;
7981

82+
@Singular
83+
List<DescriptionElement> elements;
84+
8085
public static VariableDescription create(List<Token> comments) {
8186
return VariableDescriptionReader.read(comments);
8287
}

0 commit comments

Comments
 (0)