Skip to content

Conversation

@theshadowco
Copy link
Member

@theshadowco theshadowco commented Nov 19, 2025

Описание

Новые Антлр и парсер. Отказ от BSLParserRuleContext

Связанные задачи

Closes

Чеклист

Общие

  • Ветка PR обновлена из develop
  • Отладочные, закомментированные и прочие, не имеющие смысла участки кода удалены
  • Изменения покрыты тестами
  • Обязательные действия перед коммитом выполнены (запускал команду gradlew precommit)

Для диагностик

  • Описание диагностики заполнено для обоих языков (присутствуют файлы для обоих языков, для русского заполнено все подробно, перевод на английский можно опустить)

Дополнительно

Summary by CodeRabbit

  • Chores
    • Updated BSL parser to v0.27.0-rc.1 and removed obsolete parser artifact.
  • Refactor
    • Broadened/internal parser context handling and delegated tree utilities to standard ANTLR helpers for more reliable parsing and analysis.
  • Maintenance
    • Cleaned imports and removed outdated exclusions to streamline dependency usage and improve code clarity.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 19, 2025

Walkthrough

Generalize code from BSL-specific BSLParserRuleContext to ANTLR's ParserRuleContext, refactor many helpers to use ANTLR's Trees utilities, remove bsl-parser-core dependency, and bump bsl-parser to 0.27.0-rc.1. Changes are mostly type generalization and delegation refactors.

Changes

Cohort / File(s) Summary
Build configuration
\build.gradle.kts``
Bumped io.github.1c-syntax:bsl-parser 0.26.2 → 0.27.0-rc.1; removed bsl-parser-core api entry; removed one transitive exclusion (org.abego.treelayout).
Core tree utils
src/main/java/.../utils/Trees.java
Large refactor: replace custom tree traversal with delegation to org.antlr.v4.runtime.tree.Trees; widen signatures and return types to ParserRuleContext and ANTLR types; update many public APIs.
CFG and vertices
src/main/java/.../cfg/*
\BasicBlockVertex.java`, `CfgVertex.java`, `ConditionalVertex.java`, `ForLoopVertex.java`, `ForeachLoopVertex.java`, `PreprocessorConditionVertex.java`, `TryExceptVertex.java`, `WhileLoopVertex.java``
Replace BSLParserRuleContext with ParserRuleContext in fields, getters and method signatures; update imports.
CFG building & block writer
src/main/java/.../cfg/CfgBuildingParseTreeVisitor.java, src/main/java/.../cfg/StatementsBlockWriter.java
Generalize parameter and helper types from BSLParserRuleContextParserRuleContext.
Trees delegators used by features
src/main/java/.../folding/*, .../providers/SelectionRangeProvider.java
Import changes to use ANTLR Tokenizer and updated private helpers to ParserRuleContext.
Diagnostics (many files)
src/main/java/.../diagnostics/* (numerous files)
Widespread internal type generalization: helper methods, fields and method signatures updated from BSLParserRuleContextParserRuleContext; some minor logic simplifications and cast removals.
Diagnostic storage & processing
src/main/java/.../diagnostics/DiagnosticStorage.java
Public/protected addDiagnostic overloads and ParseTree handling updated to accept/check ParserRuleContext; imports adjusted.
Complexity & symbol computers
src/main/java/.../context/computer/*
Replace BSLParserRuleContext usages with ParserRuleContext; small logic simplifications in expression flattening and checks.
Symbol tree & descriptions
src/main/java/.../context/symbol/*
Generalize method parameters/helpers to ParserRuleContext and update imports.
References & indexing
src/main/java/.../references/* (ReferenceIndexFiller.java, AnnotationReferenceFinder.java)
Visitor generics and many visit methods now use ParserRuleContext; internal casts and parent traversals updated; small visit logic tweak in call handling.
Code actions & providers
src/main/java/.../codeactions/ExtractStructureConstructorSupplier.java, src/main/java/.../inlayhints/SourceDefinedMethodCallInlayHintSupplier.java
Replace BSLParserRuleContext uses with ParserRuleContext for parent/getParent usage and helper params.
Utilities & misc
src/main/java/.../utils/MultilingualStringAnalyser.java, src/main/java/.../aop/measures/DocumentContextLazyDataMeasurer.java, src/main/java/.../infrastructure/CacheConfiguration.java, src/main/java/.../folding/QueryCommentFoldingRangeSupplier.java, src/main/java/.../folding/QueryPackageFoldingRangeSupplier.java
Import cleanups, minor refactors, and switching Tokenizer import to ANTLR's; small formatting changes.

Sequence Diagram(s)

sequenceDiagram
  participant Caller as Project code / callers
  participant TreesAPI as ANTLR Trees
  Note over Caller,TreesAPI `#DFF2E1`: Many helpers now delegate to ANTLR Trees
  Caller->>TreesAPI: Trees.findAllRuleNodes(parseTree, ruleIndices...)
  TreesAPI-->>Caller: Collection<ParserRuleContext>
  Caller->>TreesAPI: Trees.getAncestor(node, ruleIndex)
  TreesAPI-->>Caller: ParserRuleContext
  Caller->>TreesAPI: Trees.getTokens(tree)
  TreesAPI-->>Caller: List<Token>
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Areas to focus review on:

  • src/main/java/.../utils/Trees.java — large behavioral refactor and many public API changes; verify null-handling, rule-index semantics and performance.
  • DiagnosticStorage and other public methods that changed signatures — ensure consumers compile and semantics preserved.
  • ReferenceIndexFiller — visitor generic change and added call-check in visitCallStatement.
  • Dependency bump and removal of bsl-parser-core — confirm compatibility with updated ANTLR types and Tokenizer changes.

Possibly related PRs

Suggested reviewers

  • nixel2007

Poem

🐇 I hopped through ASTs with nimble feet,

Replaced the special with Generic sweet.
Trees now call the standard, true and small,
ParserRuleContext welcomes all.
A carrot for builds — hop on, compile! 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.58% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Новые Антлр и парсер. Отказ от BSLParserRuleContext' accurately describes the main changes: upgrading ANTLR and parser, and removing BSLParserRuleContext usage. The title is specific and clearly conveys the primary objective.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/bumpAntlr

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java (1)

225-230: Verify ctx.getRuleContext() call after migration to generic ParserRuleContext.

Line 226 has the same issue as line 200: it calls ctx.getRuleContext() on a ParserRuleContext object. This method likely doesn't exist in the standard ANTLR4 ParserRuleContext.

-    ParserRuleContext assignment = Trees.getAncestorByRuleIndex(ctx.getRuleContext(), type);
+    ParserRuleContext assignment = Trees.getAncestorByRuleIndex(ctx, type);
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java (1)

115-133: Возможный NPE при использовании Trees.getRootParent(..., EXCLUDED_COLUMNS_ROOT) без проверки на null

В фильтре:

.filter(parserRuleContext -> Trees.getRootParent(parserRuleContext, EXCLUDED_COLUMNS_ROOT)
  .getRuleIndex() == SDBLParser.RULE_query)

Trees.getRootParent помечен как @Nullable и по доке может вернуть null, если предок с одним из заданных типов не найден. В этом случае вызов getRuleIndex() приведёт к NPE. Это особенно вероятно на некорректном/обрезанном SDBL-коде, где дерево не полностью соответствует грамматике — диагностика при этом просто упадёт.

Имеет смысл сделать фильтр устойчивым, например:

.filter(parserRuleContext -> {
  var root = Trees.getRootParent(parserRuleContext, EXCLUDED_COLUMNS_ROOT);
  return root != null && root.getRuleIndex() == SDBLParser.RULE_query;
})

Так сохранится текущая логика, но диагностика станет толерантной к повреждённым деревьям или будущим изменениям грамматики.

src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java (1)

292-315: Add defensive type guard and document custom ANTLR dependency

The review comment raises valid concerns:

  1. Line 294: tree.getTokens() is not a standard ANTLR ParserRuleContext method. The codebase contains only a static Trees.getTokens(ParseTree) utility. This confirms the method depends on a custom extended ParserRuleContext implementation.

  2. Line 314: The cast (ParserRuleContext) child lacks an instanceof guard. Since Trees.getChildren() returns a generic List<Tree>, and only TerminalNode instances are checked with instanceof, non-TerminalNode children could theoretically be other Tree implementations, causing an unchecked ClassCastException.

Recommendations confirmed:

  • Add instanceof ParserRuleContext check before casting at line 314 to prevent runtime exceptions
  • Add Javadoc stating that this method requires the project's custom ParserRuleContext with getTokens() implementation

These are defensive coding improvements that guard against future ANTLR modifications or unexpected tree structures.

🧹 Nitpick comments (5)
src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java (1)

237-252: Переход c BSLParserRuleContext на ParserRuleContext в flattenExpression корректен; можно чуть упростить код

Логика не меняется: обрабатываются только те дочерние узлы, которые реально являются MemberContext или OperationContext, так что отказ от BSLParserRuleContext здесь безопасен и соответствует целям PR.

Как необязательный микро‑рефактор можно избавиться от промежуточного ParserRuleContext parserRule и самого импорта, матчаясь сразу по нужным типам:

-    for (Tree tree : children) {
-      if (!(tree instanceof ParserRuleContext parserRule)) {
-        continue;
-      }
-
-      if (parserRule instanceof BSLParser.MemberContext memberContext) {
+    for (Tree tree : children) {
+      if (tree instanceof BSLParser.MemberContext memberContext) {
         flattenMember(result, memberContext);
-      } else if (parserRule instanceof BSLParser.OperationContext operationContext) {
+      } else if (tree instanceof BSLParser.OperationContext operationContext) {
         flattenOperation(result, operationContext);
       }
     }

Это не обязательно, но немного упрощает чтение.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java (1)

143-143: Use lowercase variable name to avoid shadowing the class.

The lambda parameter ParserRuleContext shadows the imported class name, reducing readability.

Apply this diff to use conventional lowercase naming:

-      .sorted(Comparator.comparingInt(ParserRuleContext -> ParserRuleContext.getStart().getLine()))
+      .sorted(Comparator.comparingInt(ctx -> ctx.getStart().getLine()))
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java (1)

32-76: ParserRuleContext migration here looks correct; optional safety tweak possible

The new import on line 32 and the casts/usages on lines 60, 74–75 are consistent with moving off BSLParserRuleContext and relying on plain ParserRuleContext. You only use members provided by ParserRuleContext (getStart, exception), so behavior should stay the same with the updated parser.

The cast in visitErrorNode keeps the previous assumption that node.getParent() is always a rule context, so the risk profile (CCE if that ever changes) is unchanged relative to the old BSLParserRuleContext cast.

Optionally, you could make the stream in enterFile a bit more defensive by filtering directly on instanceof ParserRuleContext instead of !(parseTree instanceof TerminalNodeImpl) before casting, but with a standard ANTLR tree this is equivalent and not required.

Please re‑run the test suite that covers parsing/diagnostics after the ANTLR & parser bump to ensure no unexpected ClassCastException appears around these casts.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java (1)

34-35: ParserRuleContext migration here looks correct; consider tightening types to drop casts

  • The switch of enterNode, exitNode, and addRelatedInformationDiagnostic to ParserRuleContext aligns with the ANTLR API and is type‑safe given all callers pass BSLParser.*StatementContext instances. The ctx == lastCtx check and stack operations still behave as before, so the nesting logic remains correct.
  • Since nestedParents is only ever populated via enterNode(ctx) and ctx is now a ParserRuleContext, the elements in nestedParents are effectively always ParserRuleContext. You can simplify the code and gain static type‑safety by changing the fields and stream types, which also removes the explicit cast at Line 152:
-  private ParseTree lastCtx;
-  private final Deque<ParseTree> nestedParents = new ArrayDeque<>();
+  private ParserRuleContext lastCtx;
+  private final Deque<ParserRuleContext> nestedParents = new ArrayDeque<>();
@@
-  private void enterNode(ParserRuleContext ctx) {
-    lastCtx = ctx;
-    nestedParents.push(ctx);
-  }
+  private void enterNode(ParserRuleContext ctx) {
+    lastCtx = ctx;
+    nestedParents.push(ctx);
+  }
@@
-  private void exitNode(ParserRuleContext ctx) {
+  private void exitNode(ParserRuleContext ctx) {
@@
-    nestedParents.stream()
+    nestedParents.stream()
       .filter(node -> node != ctx)
       .map(expressionContext ->
         RelatedInformation.create(
           documentContext.getUri(),
-          Ranges.create(((ParserRuleContext) expressionContext).getStart()),
+          Ranges.create(expressionContext.getStart()),
           relatedMessage
         )
       )

(After this, ParseTree import becomes unnecessary and can be dropped by your usual cleanup.)

  • One thing to double‑check outside this diff: if Ranges.create(Token) behaves differently from any previous Ranges.create(BSLParserRuleContext) overload, please confirm that using ctx.getStart() for both the primary and related locations is the intended highlighting behaviour for this diagnostic.

Also applies to: 124-159

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java (1)

85-91: Переход на ParserRuleContext для breakers и модификаторов в целом корректен, есть небольшой читабельный нюанс

Что изменилось:

  • blockBreakers теперь List<ParserRuleContext>, инициализируется через List.copyOf(Trees.findAllRuleNodes(codeBlock, BREAKERS_INDEXES)) — ленивость и семантика сохранены, плюс список стал немодифицируемым.
  • hasBreakersBetweenCalls и hasBreakerIntoCodeBlock работают с ParserRuleContext, используя getRuleIndex() и Ranges.create(...) так же, как раньше с BSL‑контекстом.
  • В usedIdentifiers/getFullIdentifier маппинг заменён на ParserRuleContext::getText, что естественно для потомков ParserRuleContext.

Единственный момент: в лямбде

.filter(ParserRuleContext -> Ranges.containsRange(border, Ranges.create(ParserRuleContext)))

имя параметра ParserRuleContext с заглавной буквы визуально путается с типом. Лучше переименовать в что‑то вроде breakerContext:

.filter(breakerContext -> Ranges.containsRange(border, Ranges.create(breakerContext)))

Это не влияет на поведение, но делает код понятнее.

Also applies to: 262-269, 324-329, 373-377

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e686f4a and 57401e4.

📒 Files selected for processing (68)
  • build.gradle.kts (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java (0 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java (5 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerCallsInFormEventsDiagnostic.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java (0 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java (7 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java (5 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java (13 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java (15 hunks)
💤 Files with no reviewable changes (2)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java
🧰 Additional context used
🧠 Learnings (9)
📓 Common learnings
Learnt from: theshadowco
Repo: 1c-syntax/bsl-language-server PR: 3555
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java:163-166
Timestamp: 2025-10-27T08:05:10.072Z
Learning: В проекте bsl-language-server используется собственная версия ANTLR4, в которой интерфейс TerminalNode переопределяет метод getParent() с возвращаемым типом RuleNode вместо ParseTree (как в стандартной версии ANTLR4).
📚 Learning: 2025-10-27T08:05:10.072Z
Learnt from: theshadowco
Repo: 1c-syntax/bsl-language-server PR: 3555
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java:163-166
Timestamp: 2025-10-27T08:05:10.072Z
Learning: В проекте bsl-language-server используется собственная версия ANTLR4, в которой интерфейс TerminalNode переопределяет метод getParent() с возвращаемым типом RuleNode вместо ParseTree (как в стандартной версии ANTLR4).

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java
📚 Learning: 2025-04-18T22:46:43.245Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3449
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java:192-203
Timestamp: 2025-04-18T22:46:43.245Z
Learning: В проекте bsl-language-server класс BSLParser.ExpressionContext наследуется от BSLParserRuleContext, а не напрямую от ParserRuleContext. При работе с ним нужно учитывать специфичные методы BSLParserRuleContext.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java
📚 Learning: 2025-01-19T20:47:40.061Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3388
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java:46-46
Timestamp: 2025-01-19T20:47:40.061Z
Learning: Configuration classes in the BSL Language Server project use mutable collections (HashMap, ArrayList) and Data annotation from Lombok, allowing for modification of configuration properties after initialization.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java
📚 Learning: 2025-02-10T17:13:41.452Z
Learnt from: theshadowco
Repo: 1c-syntax/bsl-language-server PR: 3408
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProtectedModuleDiagnostic.java:54-58
Timestamp: 2025-02-10T17:13:41.452Z
Learning: In ProtectedModuleDiagnostic.java, the usage of `Range` field as a diagnostic target is accepted as is, despite being marked as a temporary solution in the comments.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerCallsInFormEventsDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java
📚 Learning: 2024-12-27T17:03:11.817Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3364
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java:125-127
Timestamp: 2024-12-27T17:03:11.817Z
Learning: В методе `findAnnotation` класса `AnnotationReferenceFinder` уже проверяется, что у аннотации ровно один параметр, поэтому в `getAnnotationName` не требуется отдельная проверка на пустой список.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java
📚 Learning: 2024-07-04T19:35:26.747Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3308
File: src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl:20-21
Timestamp: 2024-07-04T19:35:26.747Z
Learning: The file `DoubleNegativesDiagnostic.bsl` is a test resource intended to demonstrate the functionality of the DoubleNegatives diagnostic.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java
📚 Learning: 2025-02-10T17:12:56.150Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3408
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProtectedModuleDiagnostic.java:63-66
Timestamp: 2025-02-10T17:12:56.150Z
Learning: In BSL Language Server, `documentContext.getServerContext().getConfiguration()` is guaranteed to return a non-null value, making null checks unnecessary.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java
📚 Learning: 2025-04-18T22:42:30.042Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3449
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java:88-97
Timestamp: 2025-04-18T22:42:30.042Z
Learning: В реализации ANTLR, если метод `getChildCount()` возвращает значение больше 0, то поле `children` гарантированно не равно null.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java
🧬 Code graph analysis (2)
src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java (1)
src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java (1)
  • EqualsAndHashCode (30-46)
src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java (1)
src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java (1)
  • EqualsAndHashCode (30-66)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (20)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (25, windows-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: Benchmark
  • GitHub Check: Analyse
  • GitHub Check: build
  • GitHub Check: build (25, ubuntu-latest)
  • GitHub Check: build (25, macOS-latest)
  • GitHub Check: build (25, windows-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java (1)

148-165: Generalizing helper methods to ParserRuleContext looks correct and slightly safer

Both itVersionReturn and skipStatement now operate on ParserRuleContext, which is compatible with BSLParser.StringContext and other BSL contexts (they inherit from BSLParserRuleContextParserRuleContext). The added null‑handling in skipStatement (return false when no ancestor is found) avoids potential NPEs without changing semantics for existing positive matches. Overall this reduces coupling to the BSL‑specific base context and matches the ANTLR‑oriented Trees.getAncestorByRuleIndex utilities.

Optional: you might consider renaming ctx to context for readability, and/or extracting the ancestor lookup + matcher logic into a shared helper if similar patterns appear in other diagnostics. Please confirm via existing tests that exclusion behavior for version‑related returns (e.g., functions returning version strings) remains unchanged. Based on learnings.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 85840a1 and 630e45f.

📒 Files selected for processing (68)
  • build.gradle.kts (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java (0 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java (5 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerCallsInFormEventsDiagnostic.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java (0 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java (7 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java (5 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java (13 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java (15 hunks)
💤 Files with no reviewable changes (2)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java
🚧 Files skipped from review as they are similar to previous changes (31)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java
  • build.gradle.kts
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java
🧰 Additional context used
🧠 Learnings (8)
📓 Common learnings
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3449
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java:192-203
Timestamp: 2025-04-18T22:46:43.245Z
Learning: В проекте bsl-language-server класс BSLParser.ExpressionContext наследуется от BSLParserRuleContext, а не напрямую от ParserRuleContext. При работе с ним нужно учитывать специфичные методы BSLParserRuleContext.
📚 Learning: 2025-11-19T09:02:03.154Z
Learnt from: theshadowco
Repo: 1c-syntax/bsl-language-server PR: 3610
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java:26-26
Timestamp: 2025-11-19T09:02:03.154Z
Learning: В проекте bsl-language-server используется кастомная версия ANTLR4 от 1c-syntax (io.github.1c-syntax:antlr4), которая включает базовый класс org.antlr.v4.runtime.Tokenizer с методами getAst() и getTokens(). SDBLTokenizer и BSLTokenizer наследуются от этого базового класса.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java
📚 Learning: 2025-04-18T22:46:43.245Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3449
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java:192-203
Timestamp: 2025-04-18T22:46:43.245Z
Learning: В проекте bsl-language-server класс BSLParser.ExpressionContext наследуется от BSLParserRuleContext, а не напрямую от ParserRuleContext. При работе с ним нужно учитывать специфичные методы BSLParserRuleContext.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java
📚 Learning: 2024-07-04T19:35:26.747Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3308
File: src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl:20-21
Timestamp: 2024-07-04T19:35:26.747Z
Learning: The file `DoubleNegativesDiagnostic.bsl` is a test resource intended to demonstrate the functionality of the DoubleNegatives diagnostic.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java
📚 Learning: 2024-12-27T17:03:11.817Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3364
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java:125-127
Timestamp: 2024-12-27T17:03:11.817Z
Learning: В методе `findAnnotation` класса `AnnotationReferenceFinder` уже проверяется, что у аннотации ровно один параметр, поэтому в `getAnnotationName` не требуется отдельная проверка на пустой список.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java
📚 Learning: 2025-02-10T17:13:41.452Z
Learnt from: theshadowco
Repo: 1c-syntax/bsl-language-server PR: 3408
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProtectedModuleDiagnostic.java:54-58
Timestamp: 2025-02-10T17:13:41.452Z
Learning: In ProtectedModuleDiagnostic.java, the usage of `Range` field as a diagnostic target is accepted as is, despite being marked as a temporary solution in the comments.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerCallsInFormEventsDiagnostic.java
📚 Learning: 2025-02-10T17:12:56.150Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3408
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProtectedModuleDiagnostic.java:63-66
Timestamp: 2025-02-10T17:12:56.150Z
Learning: In BSL Language Server, `documentContext.getServerContext().getConfiguration()` is guaranteed to return a non-null value, making null checks unnecessary.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java
📚 Learning: 2025-04-18T22:42:30.042Z
Learnt from: nixel2007
Repo: 1c-syntax/bsl-language-server PR: 3449
File: src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java:88-97
Timestamp: 2025-04-18T22:42:30.042Z
Learning: В реализации ANTLR, если метод `getChildCount()` возвращает значение больше 0, то поле `children` гарантированно не равно null.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java
🧬 Code graph analysis (2)
src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java (1)
src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java (1)
  • EqualsAndHashCode (30-46)
src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java (1)
src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java (1)
  • EqualsAndHashCode (30-66)
🔇 Additional comments (68)
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java (2)

34-34: LGTM! Clean migration to standard ANTLR type.

The import change from BSLParserRuleContext to org.antlr.v4.runtime.ParserRuleContext aligns with the PR objective of removing dependency on BSL-specific context classes. This generalization is appropriate and maintains compatibility.


121-121: LGTM! Safe type generalization.

The method signature change from BSLParserRuleContext to ParserRuleContext is safe and appropriate. The method only uses getStart() which is available in ParserRuleContext, and all call sites (lines 108, 116) pass compatible context types.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java (2)

35-35: LGTM: Migration to standard ANTLR type.

The import change correctly replaces the custom BSLParserRuleContext with ANTLR's standard ParserRuleContext, aligning with the PR's objective to generalize the codebase to standard ANTLR types.


140-146: LGTM: Correct parameter type generalization.

The method signature change from BSLParserRuleContext to ParserRuleContext is correct and maintains all existing functionality. The method logic remains unchanged and properly handles the more general type, consistent with the PR's migration to standard ANTLR types.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java (2)

114-114: LGTM! Type generalization is appropriate.

The parameter type change from BSLParserRuleContext to ParserRuleContext is correct. The method only uses standard ParserRuleContext APIs (getStart(), getStop(), getLine()), and all callers pass contexts that extend ParserRuleContext.

Note: The retrieved learning about BSLParser.ExpressionContext inheriting from BSLParserRuleContext is now outdated due to this migration. Based on learnings.


135-137: LGTM! Consistent with the type migration.

The parameter type change from BSLParserRuleContext to ParserRuleContext aligns with the broader migration and is consistent with the findNestedCall method signature change at line 114.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerCallsInFormEventsDiagnostic.java (1)

24-31: LGTM! Import reorganization with no functional impact.

The import reordering aligns with the broader codebase refactor. The diagnostic logic remains unchanged and continues to work correctly with the updated parser types.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java (3)

31-31: LGTM: Import generalization aligns with PR objectives.

The import change from BSLParserRuleContext to standard ANTLR's ParserRuleContext is consistent with the PR's goal of removing the BSL-specific context dependency.


166-172: LGTM: Method signature correctly generalized.

The parameter type change from Class<? extends BSLParserRuleContext> to Class<? extends ParserRuleContext> is a proper generalization that maintains type safety while aligning with the PR's refactoring goals.


152-198: LGTM: All parent traversal calls correctly updated.

All method reference calls to ParserRuleContext::getParent (lines 154, 156, 169, 180, 182, 184, 185, 189, 191, 193, 195) are functionally equivalent to the previous BSLParserRuleContext::getParent calls. The refactoring maintains identical behavior while using standard ANTLR types.

src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java (1)

26-45: Import switch to org.antlr.v4.runtime.Tokenizer looks correct and consistent

The new import aligns with the project’s custom ANTLR fork where Tokenizer exposes getAst(), and the Tokenizer::getAst → QueryPackageContext::queries pipeline matches the existing pattern used for comments (via Tokenizer::getTokens). Behavior of folding ranges does not change; only the dependency type is clarified. Based on learnings.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java (2)

32-32: LGTM! Clean migration to ParserRuleContext.

The type generalization from BSLParserRuleContext to ParserRuleContext is correctly applied across the import and all affected method signatures. Since these methods only use the getText() method (available on ParserRuleContext), the migration is safe and behavior-preserving.

Also applies to: 145-145, 165-165, 179-179


147-147: LGTM! Stream pipeline correctly updated.

The cast and generic type changes in the stream pipeline are consistent with the overall migration. The type flow from Trees.findAllRuleNodes() through the cast to the groupingBy collector is properly maintained with ParserRuleContext.

Also applies to: 150-150

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java (5)

34-34: LGTM! Import aligns with generalization objective.

The addition of ParserRuleContext import is consistent with the PR's objective to migrate away from BSL-specific context types to standard ANTLR types.


143-143: LGTM! Sorting logic works correctly with generalized type.

The sorting by line number using getStart().getLine() is compatible with ParserRuleContext and maintains the same functionality.


199-199: LGTM! Method signature generalization is correct.

The parameter type change from BSLParserRuleContext to ParserRuleContext is appropriate, as the method only uses standard ANTLR methods available in ParserRuleContext.


224-239: LGTM! Variable type generalizations are consistent.

The changes to use ParserRuleContext for the statements list and endCurrentBlockNode variable are correct and maintain compatibility with Trees.getChildren() and subsequent operations.


253-280: LGTM! Method refactoring maintains functionality.

The getEndCurrentBlockNode method signature and implementation have been correctly updated to use ParserRuleContext throughout. All method calls (getStart(), getLine(), getCharPositionInLine()) are standard ANTLR methods and work correctly with the generalized type.

src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java (2)

130-143: LGTM! Type generalization is consistent and correct.

The refactoring from BSLParserRuleContext to ParserRuleContext is well-executed across all helper methods. All method calls rely on base ANTLR APIs that are available in ParserRuleContext, and the instanceof checks continue to work correctly since runtime types remain BSL-specific.

Also applies to: 158-170, 202-202


181-196: Verify the synthetic ParserRuleContext through tests.

The synthetic ParserRuleContext for grouping nearby statements looks correct—it only uses base ANTLR methods. However, since this changes the concrete type from BSLParserRuleContext, ensure that existing tests cover this code path and validate that selection ranges work as expected for consecutive statements.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java (1)

36-36: LGTM! Clean refactoring from BSLParserRuleContext to ParserRuleContext.

The type generalization is correct and aligns with the PR objective to remove BSL-specific context classes in favor of standard ANTLR types. The methods needCheck and getParams only use standard ParserRuleContext APIs (getRuleContext and getRuleContexts), so the refactoring is safe and preserves the existing logic.

Also applies to: 87-87, 92-92

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java (1)

32-32: Switch to ParserRuleContext import is consistent with the refactor

Replacing the previous BSL‑specific context import with org.antlr.v4.runtime.ParserRuleContext aligns this diagnostic with the project‑wide move away from BSLParserRuleContext and keeps usage compatible with BSLParser.*Context subclasses.

If not already done, please run the full Gradle build/tests on this branch to confirm there are no lingering references to BSLParserRuleContext in diagnostics. Based on learnings.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java (2)

33-33: LGTM: Import updated to standard ANTLR class.

The import change from BSLParserRuleContext to the standard ANTLR ParserRuleContext aligns with the PR objective of removing BSL-specific context usage.


90-92: LGTM: Type generalization to standard ANTLR ParserRuleContext.

The refactoring from BSLParserRuleContext to ParserRuleContext is correctly implemented across variable declarations, method parameters, and casts. All methods used (getParent(), getRuleIndex(), getChildCount(), children) are standard ANTLR ParserRuleContext APIs, ensuring compatibility without behavioral changes.

Also applies to: 103-104, 108-108, 116-116

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java (4)

34-34: LGTM! Type generalization improves code clarity.

The switch from ParseTree/BSLParserRuleContext to standard ANTLR ParserRuleContext aligns with the PR objectives and simplifies the diagnostic by using the base ANTLR type instead of a BSL-specific extension.

Also applies to: 65-66


123-126: LGTM! Method signature generalization is consistent.

The parameter type changes from BSLParserRuleContext to ParserRuleContext for the private helper methods are consistent with the field type changes and maintain compatibility with all the BSLParser context types passed from the listener methods.

Also applies to: 128-134, 136-158


151-151: Excellent! Unnecessary cast removed.

The cast to BSLParserRuleContext is no longer needed since getStart() is available directly on ParserRuleContext. This simplifies the code and removes the coupling to the BSL-specific type.


34-34: Verify test coverage confirms correct behavior.

The refactoring from BSLParserRuleContext to ParserRuleContext is well-executed and aligns with the PR's architectural goals. To ensure the diagnostic continues to function correctly with nested statements detection and related information reporting, please confirm that existing tests pass.

Based on learnings (noting that this PR explicitly moves away from the BSL-specific context mentioned in the learning).

Also applies to: 65-66, 123-158

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java (3)

31-31: LGTM: Import updated to standard ANTLR class.

The import change from BSLParserRuleContext to ParserRuleContext aligns with the PR objective to use standard ANTLR types instead of custom BSL-specific classes.


78-86: LGTM: Method successfully generalized to standard ANTLR types.

The method signature and body changes correctly generalize from BSLParserRuleContext to ParserRuleContext. The logic remains sound:

  • getParent() is available on ParserRuleContext
  • Type safety is maintained through filtering for BSLParser.ExpressionContext.class at line 84
  • Call sites remain compatible with the new signature

118-123: LGTM: Consistent type generalization.

The parameter type change from BSLParserRuleContext to ParserRuleContext is consistent with the broader refactoring. The call site at line 102 and the delegate call to getExpression at line 119 are both compatible with this change.

Note: The retrieved learning stating that BSLParser.ExpressionContext inherits from BSLParserRuleContext is now outdated by this PR, which removes BSLParserRuleContext from the class hierarchy in favor of standard ANTLR ParserRuleContext.

Based on learnings

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java (1)

27-27: LGTM – Type generalization aligns with PR objectives.

The method signature change from BSLParserRuleContext to ParserRuleContext correctly generalizes the type while maintaining compatibility with the instanceof checks for specific parser contexts.

Also applies to: 84-84

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java (1)

68-76: LGTM – Unnecessary casts correctly removed.

The removal of .map(BSLParserRuleContext.class::cast) operations addresses the previous review feedback and aligns with the PR's migration to ParserRuleContext.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java (1)

42-42: LGTM – Consistent type generalization across all helper methods.

All return types correctly updated from Optional<BSLParserRuleContext> to Optional<ParserRuleContext>, maintaining consistency throughout the diagnostic implementation.

Also applies to: 130-183

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java (1)

32-32: LGTM – Error handling logic preserves correctness with generalized types.

Type updates to ParserRuleContext in both error node handling and stream processing are consistent and correct.

Also applies to: 60-60, 73-75

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java (1)

34-34: LGTM – Private helper method correctly generalized.

The parameter type change for checkFileCodeBlock maintains compatibility with caller contexts while adopting the generalized ParserRuleContext type.

Also applies to: 128-128

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java (1)

31-31: LGTM – Field type generalization maintains diagnostic state correctly.

The nodeBeginTransaction field type change to ParserRuleContext is consistent with the broader refactor and maintains correct behavior in the transaction detection logic.

Also applies to: 51-51

src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java (1)

34-35: Generalizing to ParserRuleContext::getParent looks correct

Importing ParserRuleContext and switching the parent step in the maybeDoCall chain to .map(ParserRuleContext::getParent) preserves the original behavior while aligning with the move away from BSLParserRuleContext. The optional chain still safely handles missing parents (null → Optional.empty()), and the subsequent cast to BSLParser.NewExpressionContext remains valid assuming the grammar keeps TypeNameContext directly under NewExpressionContext, which matches the existing intent of this code.

Also applies to: 73-81

src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java (7)

39-39: LGTM: Import of standard ANTLR ParserRuleContext.

This import addition is correct and necessary for generalizing from the BSL-specific BSLParserRuleContext to the standard ANTLR base class.


115-117: LGTM: Safe generalization of instanceof check.

Changing from BSLParserRuleContext to ParserRuleContext is safe here because all BSL parser contexts extend the standard ANTLR base class, and subsequent operations cast to specific BSL context types.


137-149: LGTM: Method references updated to use ParserRuleContext.

The .map(ParserRuleContext::getParent) calls correctly use the standard ANTLR method, maintaining the same traversal logic while generalizing the type.


166-177: LGTM: Consistent method reference updates.

The changes to ParserRuleContext::getParent at lines 166 and 173 maintain the existing traversal logic while using the generalized type.


191-198: LGTM: Type generalization for annotation parameter handling.

The changes to use ParserRuleContext for the variable type (line 194), method reference (line 191), and cast (line 196) are consistent and correct. The getText() method is available on the standard ANTLR base class.


201-203: LGTM: Parse tree traversal updated consistently.

The method references at lines 201-202 correctly use ParserRuleContext::getParent to traverse up the parse tree, with helpful comments documenting the expected context types.


39-216: Verify that tests pass after ANTLR and parser updates.

The refactoring from BSLParserRuleContext to the standard ANTLR ParserRuleContext looks correct and consistent throughout the file. All method calls use standard ANTLR APIs. However, please ensure that unit tests and integration tests pass to confirm no behavioral changes were introduced.

Note: The retrieved learning from nixel2007 about BSLParserRuleContext as a base class is now outdated, as this PR removes that dependency. Based on learnings.

src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java (1)

27-27: LGTM! Clean type generalization.

The migration from BSLParserRuleContext to ParserRuleContext is correctly applied. The method body uses only standard ParserRuleContext methods (getChildCount, getChild, getText), and the specific instanceof check on line 231 for BSLMethodDescriptionParser.StartPartContext is still appropriate.

Also applies to: 226-237

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java (1)

32-32: LGTM! Consistent type generalization.

The changes correctly generalize from BSLParserRuleContext to ParserRuleContext:

  • Import updated appropriately
  • Method reference on line 135 correctly uses ParserRuleContext::getText
  • getPreviousNode signature and cast updated consistently

No behavioral changes; logic preserved.

Also applies to: 135-135, 193-207

src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java (1)

26-26: LGTM! Type generalization correctly applied.

The change from BSLParserRuleContext to ParserRuleContext is consistent with the broader refactoring across CFG vertex classes. Field type and getAst() return type properly updated.

Also applies to: 32-45

src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java (1)

25-25: LGTM! Comprehensive type generalization.

All public API methods correctly updated to use ParserRuleContext:

  • Field type for statements list
  • Accessor statements() return type
  • Mutator addStatement() parameter type
  • getAst() return type

Behavioral consistency maintained.

Also applies to: 33-50

src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java (1)

26-26: LGTM! Type generalization with proper downcasting.

The field and return type correctly generalized to ParserRuleContext. The getExpression() method appropriately downcasts to specific BSL context types when needed, which is safe since the constructors guarantee the actual runtime types.

Also applies to: 32-55

src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java (2)

36-36: LGTM! Type generalization applied.

The ignoredContexts field correctly updated to use ParserRuleContext instead of BSLParserRuleContext, consistent with the broader refactoring.

Also applies to: 87-87


312-328: LGTM! Improved logic with direct instanceof checks.

The refactored flattenExpression method now uses direct instanceof checks with pattern matching (lines 320, 322) instead of the previous rule-based filtering. This is cleaner and more maintainable while preserving the same logic flow.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java (1)

27-27: LGTM! Consistent API generalization.

All diagnostic storage methods correctly updated to accept ParserRuleContext instead of BSLParserRuleContext:

  • Protected addDiagnostic overloads updated
  • Public addDiagnostic overloads updated
  • The addDiagnostic(ParseTree) method correctly uses pattern matching for instanceof check

Exception handling and range creation logic preserved.

Also applies to: 67-86, 140-175, 218-226

src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java (3)

35-35: LGTM! Import supports type generalization.

The addition of ParserRuleContext import aligns with the PR objective to migrate from BSL-specific context types to standard ANTLR types.


218-228: Type generalization verified—no issues found.

The Ranges.create() method accepts ParserRuleContext (as shown in the Ranges utility class), so the generalization from BSLParserRuleContext to ParserRuleContext is safe and correct. The code change maintains type compatibility and follows good ANTLR API practices by using the parent type.


266-284: Type generalization is correct and safe.

The parameter type change from BSLParserRuleContext to ParserRuleContext is appropriate and compatible. The method only uses standard ANTLR API methods (getStart(), getStop()), both available on ParserRuleContext. The call to Trees.getPreviousTokenFromDefaultChannel() at line 271-272 passes ctx.getStart().getTokenIndex() which returns an int and matches the method signature at line 167 of Trees.java.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java (1)

32-32: ParserRuleContext generalization in helper looks correct

The switch to ParserRuleContext (import and helper signature/body) is consistent with the ANTLR-wide refactor: visitNewExpression still passes a BSLParser.NewExpressionContext, which is a ParserRuleContext, and Trees.getAncestorByRuleIndex also operates on ParserRuleContext. The recursive search with the existing null-guard remains safe and behaviorally equivalent.

No further changes needed here.

Also applies to: 78-89

src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java (2)

41-41: LGTM! Type generalization aligns with PR objectives.

The addition of ParserRuleContext import and the update of both visitor class hierarchies from BSLParserBaseVisitor<BSLParserRuleContext> to BSLParserBaseVisitor<ParserRuleContext> correctly implements the refactoring away from the BSL-specific context type to ANTLR's standard type.

Based on learnings

Also applies to: 93-93, 263-263


99-108: Refactoring verified and approved.

All visitor method return types have been successfully updated from BSLParserRuleContext to ParserRuleContext. Verification confirms:

  • bsl-parser 0.27.0-rc.1 correctly generates BSLParser.*Context classes inheriting from ParserRuleContext
  • No legacy BSLParserRuleContext references remain in the codebase
  • Utility method Trees.nodeContainsErrors() is compatible with the new type
  • All method calls and type usage are consistent throughout

The refactoring is clean, complete, and ready to merge.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java (2)

196-209: LGTM! Type generalization correctly applied.

The method signature change from BSLParserRuleContext to ParserRuleContext aligns with the PR objectives. The direct usage of ctx with Trees.getAncestorByRuleIndex is correct, and the cast to BSLParser.AssignmentContext at line 204 is safe since the ancestor lookup uses BSLParser.RULE_assignment.


225-230: LGTM! Consistent refactoring applied.

The method correctly generalizes the parameter type to ParserRuleContext and uses ctx directly with Trees.getAncestorByRuleIndex, consistent with the broader migration away from BSLParserRuleContext.

src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java (5)

63-98: LGTM! Clean delegation to ANTLR Trees utilities.

The refactoring to delegate getTokens, findAllRuleNodes, getChildren, and related methods to org.antlr.v4.runtime.tree.Trees is well-structured and eliminates custom traversal logic in favor of standard ANTLR utilities.


195-221: LGTM! getRootParent variants correctly generalized.

All getRootParent method overloads now return ParserRuleContext instead of BSLParserRuleContext and delegate to org.antlr.v4.runtime.tree.Trees.getAncestor. The type generalization is consistent with the PR objectives.


226-283: LGTM! Collection methods correctly refactored.

Methods getChildren, getFirstChild, findAllRuleNodes, findAllTopLevelDescendantNodes, and nodeContains have been updated to return ParserRuleContext-based types and delegate to ANTLR's Trees utilities. The refactoring maintains the public API while leveraging standard ANTLR implementations.


292-322: LGTM! Terminal node finder correctly updated.

The findTerminalNodeContainsPosition method parameter has been widened from BSLParserRuleContext to ParserRuleContext, with the recursive call at line 314 correctly casting to ParserRuleContext. The logic remains sound.


127-129: I need to verify the ANTLR library version and confirm the Trees.getAncestor method signature from the library documentation.

I need to check the project's build configuration and ANTLR version to verify the method signature.

Based on the script output, I can confirm the verification:

The generic method signature <T extends ParserRuleContext> T getAncestorByRuleIndex(ParserRuleContext element, int type) correctly delegates to org.antlr.v4.runtime.tree.Trees.getAncestor(element, type). The method is being used successfully throughout the codebase (as shown in the output with multiple usage examples), and the code compiles without errors. The generic return type properly allows callers to receive the correctly cast type, with the delegation pattern working as intended.

No issues found.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java (2)

114-145: LGTM! Simplified filter logic.

The removal of explicit BSLParserRuleContext.cast usage at line 120 simplifies the stream filter. The code now relies on the stream type inference, which works correctly since findAllRuleNodes returns ParserRuleContext nodes.


170-184: LGTM! Type inference works correctly.

Line 172 leverages the generic return type from Trees.getAncestorByRuleIndex to directly infer BSLParser.AssignmentContext, eliminating the need for explicit casting. This is cleaner and consistent with the refactoring pattern.

@sonarqubecloud
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants