bsl-language-server
bsl-language-server copied to clipboard
Игнорирование серверных модулей при диагностике UsingSynchronousCalls
Описание
- В диагностике игнорируются модули, которые не могут содержать клиентского кода (а только он бывает асинхронным)
- Общие модули игнорируются, если у них не стоят клиентские флажки
- Расширен тест у диагностики, проверяются модули объекта и менеджера
Связанные задачи
Closes #3310
Чеклист
Общие
- [x] Ветка PR обновлена из develop
- [x] Отладочные, закомментированные и прочие, не имеющие смысла участки кода удалены
- [x] Изменения покрыты тестами
- [x] Обязательные действия перед коммитом выполнены (запускал команду
gradlew precommit)
Дополнительно
Walkthrough
В данном пулл-реквесте внесены изменения в класс UsingSynchronousCallsDiagnostic, включая добавление нового метода isServerModule, который улучшает логику определения серверных модулей. Также изменен метод visitFile для улучшения управления потоком выполнения. В тестах добавлен параметризованный метод testServerModules для повышения охвата тестирования, а также обновлены пути к файлам модулей. Внедрены новые пустые файлы ManagerModule.bsl и ObjectModule.bsl.
Changes
| Files | Change Summary |
|---|---|
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java |
Добавлен метод isServerModule, изменен метод visitFile для улучшения диагностики. |
src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java |
Добавлен параметризованный тест testServerModules, обновлен метод getDocumentContextWithUseFlag. |
src/test/resources/metadata/designer/Catalogs/СправочникСМенеджером/Ext/ManagerModule.bsl |
Добавлен пустой файл ManagerModule.bsl. |
src/test/resources/metadata/designer/Catalogs/СправочникСМенеджером/Ext/ObjectModule.bsl |
Добавлен пустой файл ObjectModule.bsl. |
Assessment against linked issues
| Objective | Addressed | Explanation |
|---|---|---|
| Проверяет модуль менеджера (3310) | ✅ |
🐰 В мире кода, где модули живут,
Синхронные вызовы в сервере цветут.
Тесты теперь с параметрами в ряд,
Менеджеры ждут, когда их поймут.
Путь к успеху — в логике ясной,
В каждом изменении — радость и счастье! 🌟
[!TIP]
Announcements
- The review status is no longer posted as a separate comment when there are no actionable or nitpick comments. In such cases, the review status is included in the walkthrough comment.
- We have updated our review workflow to use the Anthropic's Claude family of models. Please share any feedback in the discussion post on our Discord.
- Possibly related PRs: Walkthrough comment now includes a list of potentially related PRs to help you recall past context. Please share any feedback in the discussion post on our Discord.
- Suggested labels: CodeRabbit can now suggest labels by learning from your past PRs in the walkthrough comment. You can also provide custom labeling instructions in the UI or configuration file.
- Possibly related PRs, automatic label suggestions based on past PRs, learnings, and possibly related issues require data opt-in (enabled by default).
Recent review details
Configuration used: CodeRabbit UI Review profile: CHILL
Commits
Files that changed from the base of the PR and between fbe740048767dbb03ed13279f9d78cfc4c98df87 and b6d746f44c09131552be3f5523b9bfc5dd79b772.
Files selected for processing (1)
- src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java (3 hunks)
Additional comments not posted (6)
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java (6)
Line range hint
24-33: Импорты выглядят хорошо.Новые импорты корректно добавлены и не вводят никаких проблем.
139-142: Изменения в методеvisitFileвыглядят хорошо.Добавление проверки на серверный модуль и досрочный возврат из метода для серверных модулей - правильное решение, которое улучшает поток управления в методе.
146-152: Реализация методаisServerModuleвыглядит хорошо.Метод корректно обрабатывает все типы модулей, используя switch по типу модуля из
documentContext. Возвращаемые значения для каждого типа модуля выглядят правильными. Для модулей CommonModule вызывается отдельный методisServerCommonModule, чтобы определить результат.
154-161: Реализация методаisServerCommonModuleвыглядит хорошо.Метод корректно обрабатывает модули CommonModule, используя
mdObjectизdocumentContext. Он проверяет, что модуль не является клиентским, управляемым или обычным, с помощью методовisClientManagedApplicationиisClientOrdinaryApplication. Результат возвращается на основе наличияmdObjectи клиентских флагов.
139-139: Убедитесь, что методisServerModuleреализован корректно.Метод
isServerModuleиспользуется для определения серверных модулей, но его реализация отсутствует в предоставленном коде. Убедитесь, что этот метод корректно реализован, учитывая все возможные типы модулей и соответствующую логику.Чтобы проверить реализацию метода
isServerModule, выполните следующий скрипт:Verification successful
Метод
isServerModuleреализован корректно.Метод
isServerModuleприсутствует в коде и корректно обрабатывает различные типы модулей, используя оператор switch. Он возвращаетfalseдля определённых типов модулей и вызывает методisServerCommonModuleдляCommonModule. Для всех остальных типов модулей возвращаетсяtrue, что соответствует логике серверных модулей. Использование метода также подтверждено в том же файле.Scripts executed
The following scripts were executed for the analysis:
Script:
# Описание: Проверить реализацию метода `isServerModule` # и убедиться, что он корректно обрабатывает все типы модулей. # Тест: Поиск объявления метода `isServerModule`. # Ожидание: Метод должен быть объявлен как приватный статический метод, # принимающий DocumentContext в качестве аргумента. ast-grep --lang java --pattern $'private static boolean isServerModule(DocumentContext documentContext) { $$$ }' # Тест: Поиск использований метода `isServerModule`. # Ожидание: Метод должен вызываться только из метода `visitFile`. rg --type java $'isServerModule\('Length of output: 1632
149-149: Убедитесь, что методisServerCommonModuleреализован корректно.Метод
isServerCommonModuleиспользуется для определения серверных модулей CommonModule, но его реализация отсутствует в предоставленном коде. Убедитесь, что этот метод корректно реализован, учитывая специфику модулей CommonModule.Чтобы проверить реализацию метода
isServerCommonModule, выполните следующий скрипт:Verification successful
Метод
isServerCommonModuleреализован корректно.Метод
isServerCommonModuleобъявлен как приватный статический метод и корректно обрабатывает модулиCommonModule, проверяя, что они не являются клиентскими. Его использование также соответствует ожиданиям.
- Реализация метода найдена в
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.javaна строках 154-161.Scripts executed
The following scripts were executed for the analysis:
Script:
# Описание: Проверить реализацию метода `isServerCommonModule` # и убедиться, что он корректно обрабатывает модули CommonModule. # Тест: Поиск объявления метода `isServerCommonModule`. # Ожидание: Метод должен быть объявлен как приватный статический метод, # принимающий DocumentContext в качестве аргумента. ast-grep --lang java --pattern $'private static boolean isServerCommonModule(DocumentContext documentContext) { $$$ }' # Тест: Поиск использований метода `isServerCommonModule`. # Ожидание: Метод должен вызываться только из метода `isServerModule`. rg --type java $'isServerCommonModule\('Length of output: 1742
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
Tips
Chat
There are 3 ways to chat with CodeRabbit:
- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
I pushed a fix in commit <commit_id>.Generate unit testing code for this file.Open a follow-up GitHub issue for this discussion.
- Files and specific lines of code (under the "Files changed" tab): Tag
@coderabbitaiin a new review comment at the desired location with your query. Examples:@coderabbitai generate unit testing code for this file.@coderabbitai modularize this function.
- PR comments: Tag
@coderabbitaiin a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:@coderabbitai generate interesting stats about this repository and render them as a table.@coderabbitai show all the console.log statements in this repository.@coderabbitai read src/utils.ts and generate unit testing code.@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.@coderabbitai help me debug CodeRabbit configuration file.
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.
CodeRabbit Commands (Invoked using PR comments)
@coderabbitai pauseto pause the reviews on a PR.@coderabbitai resumeto resume the paused reviews.@coderabbitai reviewto trigger an incremental review. This is useful when automatic reviews are disabled for the repository.@coderabbitai full reviewto do a full review from scratch and review all the files again.@coderabbitai summaryto regenerate the summary of the PR.@coderabbitai resolveresolve all the CodeRabbit review comments.@coderabbitai configurationto show the current CodeRabbit configuration for the repository.@coderabbitai helpto get help.
Other keywords and placeholders
- Add
@coderabbitai ignoreanywhere in the PR description to prevent this PR from being reviewed. - Add
@coderabbitai summaryto generate the high-level summary at a specific location in the PR description. - Add
@coderabbitaianywhere in the PR title to generate the title automatically.
CodeRabbit Configuration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile to the root of your repository. - Please see the configuration documentation for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
Documentation and Community
- Visit our Documentation for detailed information on how to use CodeRabbit.
- Join our Discord Community to get help, request features, and share feedback.
- Follow us on X/Twitter for updates and announcements.
Quality Gate passed
Issues
0 New issues
0 Accepted issues
Measures
0 Security Hotspots
85.0% Coverage on New Code
0.0% Duplication on New Code