Skip to content

Commit 5df0c12

Browse files
committed
добавил опциональный параметр диагностики
параметр позволяет не учитывать регистр в словаре исключений
1 parent 91453c1 commit 5df0c12

File tree

5 files changed

+43
-4
lines changed

5 files changed

+43
-4
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java

+17-2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ public class TypoDiagnostic extends AbstractDiagnostic {
111111
type = String.class
112112
)
113113
private String userWordsToIgnore = DEFAULT_USER_WORDS_TO_IGNORE;
114+
@DiagnosticParameter(
115+
type = Boolean.class
116+
)
117+
private Boolean caseInsensitive = false;
114118

115119
@Override
116120
public void configure(Map<String, Object> configuration) {
@@ -125,6 +129,10 @@ private Set<String> getWordsToIgnore() {
125129
exceptions = exceptions + delimiter + SPACES_PATTERN.matcher(userWordsToIgnore).replaceAll("");
126130
}
127131

132+
if (caseInsensitive) {
133+
exceptions = exceptions.toLowerCase();
134+
}
135+
128136
return Arrays.stream(exceptions.split(delimiter))
129137
.collect(Collectors.toSet());
130138
}
@@ -150,9 +158,16 @@ private Map<String, List<Token>> getTokensMap(
150158
.filter(token -> !FORMAT_STRING_PATTERN.matcher(token.getText()).find())
151159
.forEach((Token token) -> {
152160
String curText = QUOTE_PATTERN.matcher(token.getText()).replaceAll("").trim();
153-
String[] camelCaseSplitedWords = StringUtils.splitByCharacterTypeCamelCase(curText);
161+
String[] camelCaseSplitWords = StringUtils.splitByCharacterTypeCamelCase(curText);
162+
163+
if (caseInsensitive) {
164+
camelCaseSplitWords = Arrays.stream(camelCaseSplitWords)
165+
.map(String::toLowerCase)
166+
.toArray(String[]::new);
167+
}
154168

155-
Arrays.stream(camelCaseSplitedWords)
169+
Arrays.stream(camelCaseSplitWords)
170+
.distinct()
156171
.filter(Predicate.not(String::isBlank))
157172
.filter(element -> element.length() >= minWordLength)
158173
.filter(Predicate.not(wordsToIgnore::contains))

src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json

+6
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,12 @@
17661766
"default": 3,
17671767
"type": "integer",
17681768
"title": "Minimum length for checked words"
1769+
},
1770+
"caseInsensitive": {
1771+
"description": "Excluded words are case-insensitive",
1772+
"default": false,
1773+
"type": "boolean",
1774+
"title": "Excluded words are case-insensitive"
17691775
}
17701776
},
17711777
"$id": "#/definitions/Typo"

src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic_en.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ diagnosticExceptions=Str,Autotest,Infobase,Enums,Len,Desc,Asc,Overridable,GUID,E
77
Sys,Saas,www,yyyy,xsl,src,deserialization,Params,Archiver,Serializer,xsi,ico,epf,cfu,txt,htm,rtf,ppt,vsd,mpp,mdb,msg,rar,exe,grs,geo,jpg,bmp,\
88
tif,gif,png,pdf,odt,odf,odp,odg,ods,erf,docx,xlsx,pptx,utf,xsd,SRVR,saas,wsdl,Apdex,APDEX,uid,XLS,XLSX,html,TXT,ODT,Addin,DIB
99
minWordLength=Minimum length for checked words
10-
userWordsToIgnore=Dictionary for excluding words (comma separated)
10+
userWordsToIgnore=Dictionary for excluding words (comma separated)
11+
caseInsensitive=Excluded words are case-insensitive

src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic_ru.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ diagnosticExceptions=Автогенерируемых,Автогруппиров
1515
,Студотряде,Субконто,Таб,Техподдержки,Токене,Транслите,Тэги,Тэгов,Убыв,Физлица,Финализировать,Фич,Хэш,Штрихкодам\
1616
,Штрихкодом,Штрихкоду,Мдд,Чммсс
1717
minWordLength=Минимальная длина проверяемых слов
18-
userWordsToIgnore=Пользовательский словарь исключений (через запятую)
18+
userWordsToIgnore=Пользовательский словарь исключений (через запятую)
19+
caseInsensitive=Не учитывать регистр в словаре исключений

src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java

+16
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,22 @@ void testConfigureUserWordsToIgnore() {
8383
.hasRange(8, 13, 8, 18);
8484
}
8585

86+
@Test
87+
void testConfigureUserWordsToIgnoreCaseInsensitive() {
88+
89+
Map<String, Object> configuration = diagnosticInstance.getInfo().getDefaultConfiguration();
90+
configuration.put("userWordsToIgnore", "ваРинаты");
91+
configuration.put("caseInsensitive", true);
92+
diagnosticInstance.configure(configuration);
93+
94+
List<Diagnostic> diagnostics = getDiagnostics();
95+
96+
assertThat(diagnostics).hasSize(2);
97+
assertThat(diagnostics, true)
98+
.hasRange(1, 13, 1, 21)
99+
.hasRange(8, 13, 8, 18);
100+
}
101+
86102
@Test
87103
void testConfigureUserWordsToIgnoreWithSpaces() {
88104

0 commit comments

Comments
 (0)