fix(symbols): описание и параметры асинхронных методов#3946
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughMethodSymbolComputer centralizes range-start selection into selectStartNode(...); visitFunction and visitProcedure now prefer ASYNC_KEYWORD as startOfMethod when present (or annotation marker), and the chosen token is passed into createMethodSymbol. New tests cover async functions/procedures, annotations, and compiler directives. ChangesASYNC Symbol Detection
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning Review ran into problems🔥 ProblemsGit: Failed to clone repository. Please run the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Исправление парсинга описания и параметров для асинхронных методов (Асинх Функция/Процедура) за счёт корректного выбора стартового токена при поиске doc-комментариев и расширения range символа метода на Асинх (когда нет аннотаций).
Changes:
- Изменён стартовый токен для поиска комментариев в
visitFunction/visitProcedure: используетсяASYNC_KEYWORD, если он присутствует. - Скорректировано начало
rangeметода: при отсутствии аннотаций начало сдвигается наАсинх. - Добавлены тесты, покрывающие описания/параметры для асинхронной функции и процедуры.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java | Выбор ASYNC_KEYWORD как стартового токена и сдвиг range на Асинх для корректного извлечения doc-комментариев |
| src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java | Добавлены тесты на наличие описания и описаний параметров для Асинх Функция/Процедура |
| if (!declaration.annotation().isEmpty()) { | ||
| startNode = declaration.annotation().getFirst().AMPERSAND(); | ||
| } else if (asyncKeyword != null) { | ||
| startNode = asyncKeyword; | ||
| } |
| if (!declaration.annotation().isEmpty()) { | ||
| startNode = declaration.annotation().getFirst().AMPERSAND(); | ||
| } else if (asyncKeyword != null) { | ||
| startNode = asyncKeyword; | ||
| } |
Для методов с ключевым словом Асинх (например, `Асинх Функция Foo()`) не парсился MethodDescription: поиск комментариев шёл от FUNCTION_KEYWORD назад и прерывался на пробеле между Асинх и Функция (Trees.isBlankLine трактует WHITE_SPACE на той же строке как пустую). Из-за этого пропадало описание метода, описания параметров в hover, и блок описания не попадал в semantic tokens. Чиним: если у декларации есть ASYNC_KEYWORD, используем его как стартовый токен для поиска комментариев и сдвигаем начало range символа метода на этот же токен. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Замечания PR #3946: - Выбор startNode переписан как самостоятельный helper selectStartNode с явной цепочкой приоритетов «аннотация → Асинх → ключевое слово» и комментарием о грамматике (preprocessor | compilerDirective | annotation)* ASYNC_KEYWORD? PROCEDURE_KEYWORD|FUNCTION_KEYWORD. - Добавлены тесты для двух непокрытых комбинаций: * Асинх + аннотация (&После) — range начинается с AMPERSAND аннотации; * Асинх + директива компиляции (&НаКлиенте) — range начинается с Асинх, директива не входит в range (исторически). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
a4b6c54 to
afccaa5
Compare
Pull request was closed
Summary
Асинх(например,Асинх Функция Foo()) не парсилсяMethodDescription: поиск комментариев вTrees.getCommentsшёл назад отFUNCTION_KEYWORD/PROCEDURE_KEYWORDи обрывался на пробеле междуАсинхи ключевым словом (Trees.isBlankLineтрактуетWHITE_SPACEна той же строке как пустую). Из-за этого пропадало описание метода, описания параметров в hover и блок описания в semantic tokens.MethodSymbolComputer.visitFunction/visitProcedureстартовый токен для поиска комментариев теперьASYNC_KEYWORD, если он есть; началоrangeсимвола метода также сдвигается наАсинх, когда нет аннотаций.Test plan
MethodSymbolComputerTest#testAsyncFunctionDescriptionи#testAsyncProcedureDescription(сначала падали, после фикса — зелёные)./gradlew test --tests "...MethodSymbolComputerTest"— зелёноcontext.computer.*,hover.*,semantictokens.*,SemanticTokensProviderTest,HoverProviderTest) — зелёно🤖 Generated with Claude Code
Summary by CodeRabbit
Bug Fixes
Tests