Skip to content

Commit 9dd34c1

Browse files
committed
refactor: Упрощены комментарии и улучшена документация по исключению путей
- Обновлены комментарии в `BSLWorkspaceService`, `LanguageServerConfiguration` и `PathExclusionUtils` для более ясного описания обработки событий создания и изменения файлов, а также логики исключения путей. - Упрощены описания методов и параметров, улучшена читаемость кода. - Обновлены тесты для проверки функциональности исключения путей, включая новые сценарии.
1 parent 400e1d5 commit 9dd34c1

File tree

5 files changed

+20
-43
lines changed

5 files changed

+20
-43
lines changed

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

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,8 @@ private void handleDeletedFileEvent(URI uri) {
144144
}
145145

146146
/**
147-
* Обрабатывает событие создания нового файла в файловой системе.
148-
* <p>
149-
* Добавляет файл в контекст сервера. Если файл не открыт в редакторе,
150-
* выполняет его парсинг и анализ, после чего сразу очищает вторичные данные
151-
* для экономии памяти. Для открытых файлов обработка пропускается,
152-
* т.к. их содержимое управляется через события textDocument/didOpen.
153-
* Файлы из каталогов из excludePaths не добавляются.
147+
* Обрабатывает событие создания файла: добавляет в контекст (кроме путей из excludePaths),
148+
* при необходимости парсит и очищает вторичные данные.
154149
*
155150
* @param uri URI созданного файла
156151
*/
@@ -168,17 +163,10 @@ private void handleCreatedFileEvent(URI uri) {
168163
}
169164

170165
/**
171-
* Обрабатывает событие изменения файла в файловой системе.
172-
* <p>
173-
* Если файл уже есть в контексте сервера и не открыт в редакторе,
174-
* перечитывает его содержимое с диска, выполняет повторный парсинг и анализ,
175-
* после чего очищает вторичные данные. Для открытых файлов обработка пропускается,
176-
* т.к. их актуальное содержимое управляется через события textDocument/didChange.
177-
* <p>
178-
* Если файл отсутствует в контексте, добавляет его и обрабатывает аналогично созданному.
179-
* Файлы из каталогов из excludePaths не добавляются в контекст.
166+
* Обрабатывает событие изменения файла: перечитывает с диска или добавляет в контекст
167+
* (пути из excludePaths не добавляются), при необходимости парсит и очищает вторичные данные.
180168
*
181-
* @param uri URI измененного файла
169+
* @param uri URI изменённого файла
182170
*/
183171
private void handleChangedFileEvent(URI uri) {
184172
var documentContext = serverContext.getDocument(uri);
@@ -196,6 +184,7 @@ private void handleChangedFileEvent(URI uri) {
196184
}
197185
}
198186

187+
/** Проверяет, входит ли путь по uri в excludePaths относительно корня конфигурации. */
199188
private boolean isExcludedPath(URI uri) {
200189
var root = serverContext.getConfigurationRoot();
201190
var patterns = configuration.getExcludePaths();

src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,8 @@ public class LanguageServerConfiguration {
121121
private Path configurationRoot;
122122

123123
/**
124-
* Список путей (каталогов или glob-паттернов) для исключения из индексации.
125-
* <p>
126-
* Поддерживаются простые имена каталогов (например, ".git", "node_modules")
127-
* и glob-паттерны. Путь считается исключённым, если он совпадает с любым из
128-
* паттернов относительно корня конфигурации.
124+
* Паттерны путей для исключения из индексации (простые имена каталогов или glob).
125+
* Сопоставление выполняется относительно корня конфигурации.
129126
*/
130127
private List<String> excludePaths = new ArrayList<>();
131128

src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/PathExclusionUtils.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,19 @@
3636
public final class PathExclusionUtils {
3737

3838
private PathExclusionUtils() {
39-
// utility
4039
}
4140

4241
/**
4342
* Проверяет, исключён ли путь из индексации по списку паттернов.
43+
* <p>
44+
* Путь приводится к относительному от {@code root}. Если путь не является подпутём root,
45+
* возвращается false. Для простых имён (без «/» и «*») проверяется вхождение сегмента;
46+
* для glob-паттернов используется PathMatcher.
4447
*
45-
* @param root корень конфигурации (относительно него проверяется путь); может быть null
46-
* @param path абсолютный путь к файлу или каталогу
47-
* @param patterns список паттернов (имена каталогов или glob)
48-
* @return true, если путь следует исключить
48+
* @param root корень, относительно которого проверяется путь; может быть null
49+
* @param path абсолютный путь к файлу или каталогу
50+
* @param patterns список паттернов (имена каталогов или glob); может быть null
51+
* @return true, если путь совпадает с одним из паттернов
4952
*/
5053
public static boolean isExcluded(@Nullable Path root, Path path, @Nullable List<String> patterns) {
5154
if (root == null || patterns == null || patterns.isEmpty()) {
@@ -56,7 +59,6 @@ public static boolean isExcluded(@Nullable Path root, Path path, @Nullable List<
5659
try {
5760
relativePath = root.relativize(path);
5861
} catch (IllegalArgumentException e) {
59-
// path не внутри root — не исключаем
6062
return false;
6163
}
6264

@@ -73,9 +75,8 @@ public static boolean isExcluded(@Nullable Path root, Path path, @Nullable List<
7375
}
7476

7577
/**
76-
* Проверяет совпадение пути с паттерном.
77-
* Простые имена (без / и *) — проверка по сегментам пути (кроссплатформенно).
78-
* Glob-паттерны — через PathMatcher с нормализацией пути к "/".
78+
* Сопоставляет относительный путь с паттерном: для простых имён — по сегментам,
79+
* для glob — через PathMatcher (путь нормализуется к «/»).
7980
*/
8081
private static boolean matchesPattern(Path relativePath, String pattern) {
8182
if (!pattern.contains("/") && !pattern.contains("*")) {
@@ -91,9 +92,7 @@ private static boolean matchesPattern(Path relativePath, String pattern) {
9192
return matcher.matches(pathForGlobMatching(relativePath));
9293
}
9394

94-
/**
95-
* Нормализует путь к представлению с прямыми слешами для сопоставления с glob-паттерном.
96-
*/
95+
/** Собирает путь из сегментов с разделителем «/» для кроссплатформенного glob. */
9796
private static Path pathForGlobMatching(Path path) {
9897
if (path.getNameCount() == 0) {
9998
return path;

src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,12 @@ void testPopulateContext() {
132132

133133
@Test
134134
void testPopulateContextExcludesPathsFromConfig() {
135-
// given: excludePaths исключает каталог CommonModules
136135
Path path = Absolute.path(PATH_TO_METADATA);
137136
serverContext.setConfigurationRoot(path);
138137
configuration.setExcludePaths(List.of("CommonModules"));
139138

140-
// when
141139
serverContext.populateContext();
142140

143-
// then: документы из CommonModules не попадают в контекст
144141
var documents = serverContext.getDocuments();
145142
assertThat(documents).isNotEmpty();
146143
var commonModuleUris = documents.keySet().stream()

src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/PathExclusionUtilsTest.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
package com.github._1c_syntax.bsl.languageserver.utils;
2323

2424
import org.junit.jupiter.api.Test;
25-
import org.junit.jupiter.api.condition.EnabledOnOs;
26-
import org.junit.jupiter.api.condition.OS;
2725

2826
import java.nio.file.Path;
2927
import java.util.ArrayList;
@@ -55,10 +53,8 @@ void isExcludedReturnsFalseWhenPatternsIsEmpty() {
5553

5654
@Test
5755
void isExcludedReturnsFalseWhenPathIsOutsideRoot() {
58-
// path не является подпутём root — на разных дисках (Windows) relativize бросает IllegalArgumentException
5956
Path root = Path.of("project").toAbsolutePath();
6057
Path path = root.resolve("sibling").resolve("file.bsl");
61-
// root = .../project, path = .../project/sibling/file.bsl — path внутри root, паттерн "other" не совпадает
6258
assertThat(PathExclusionUtils.isExcluded(root, path, List.of("other"))).isFalse();
6359
}
6460

@@ -70,10 +66,9 @@ void isExcludedReturnsTrueWhenPathMatchesSimpleNamePattern() {
7066
}
7167

7268
@Test
73-
@EnabledOnOs({OS.LINUX, OS.MAC})
7469
void isExcludedReturnsTrueWhenPathMatchesGlobPattern() {
7570
Path root = Path.of("project").toAbsolutePath();
76-
Path path = root.resolve(".git").resolve("refs").resolve("HEAD");
71+
Path path = root.resolve("repo").resolve(".git").resolve("refs").resolve("HEAD");
7772
assertThat(PathExclusionUtils.isExcluded(root, path, List.of("**/.git/**"))).isTrue();
7873
}
7974

0 commit comments

Comments
 (0)