Class UselessTernaryOperatorDiagnostic

All Implemented Interfaces:
BSLDiagnostic, QuickFixProvider, BSLParserVisitor<ParseTree>, ParseTreeVisitor<ParseTree>

  • Constructor Details

    • UselessTernaryOperatorDiagnostic

      public UselessTernaryOperatorDiagnostic()
  • Method Details

    • visitTernaryOperator

      public ParseTree visitTernaryOperator(BSLParser.TernaryOperatorContext ctx)
      Проверяет тернарный оператор ?(условие, ветка1, ветка2) на бесполезность. Диагностика срабатывает, если:
      • условие — булева константа (Истина/Ложь), т.е. результат всегда известен;
      • обе ветки — булевы константы:
        • ?(X, Истина, Ложь) — упрощается до X (предлагается quickfix);
        • ?(X, Ложь, Истина) — упрощается до НЕ X (предлагается quickfix);
        • обе ветки одинаковы (?(X, Истина, Истина) / ?(X, Ложь, Ложь)) — результат не зависит от условия.
      Если булевой константой является только одна из веток, упростить выражение нельзя и диагностика не срабатывает.
      Specified by:
      visitTernaryOperator in interface BSLParserVisitor<ParseTree>
      Overrides:
      visitTernaryOperator in class BSLParserBaseVisitor<ParseTree>
    • getQuickFixes

      public List<CodeAction> getQuickFixes(List<Diagnostic> diagnostics, CodeActionParams params, DocumentContext documentContext)
      Формирует быстрые исправления для срабатываний диагностики, к которым приложен текст замены (см. DiagnosticStorage.DiagnosticAdditionalData). Соответствует случаям ?(X, Истина, Ложь) и ?(X, Ложь, Истина), где тернарный оператор заменяется на выражение условия (или его отрицание).
      Specified by:
      getQuickFixes in interface QuickFixProvider
      Parameters:
      diagnostics - Список диагностик для исправления
      params - Параметры запроса code action
      documentContext - Контекст документа
      Returns:
      Список code actions для автоматического исправления проблем