Class UselessTernaryOperatorDiagnostic
java.lang.Object
org.antlr.v4.runtime.tree.AbstractParseTreeVisitor<ParseTree>
com.github._1c_syntax.bsl.parser.BSLParserBaseVisitor<ParseTree>
com.github._1c_syntax.bsl.languageserver.diagnostics.AbstractVisitorDiagnostic
com.github._1c_syntax.bsl.languageserver.diagnostics.UselessTernaryOperatorDiagnostic
- All Implemented Interfaces:
BSLDiagnostic, QuickFixProvider, BSLParserVisitor<ParseTree>, ParseTreeVisitor<ParseTree>
@DiagnosticMetadata(type=CODE_SMELL,
severity=INFO,
scope=BSL,
minutesToFix=1,
tags={BADPRACTICE,SUSPICIOUS})
public class UselessTernaryOperatorDiagnostic
extends AbstractVisitorDiagnostic
implements QuickFixProvider
-
Field Summary
Fields inherited from class AbstractVisitorDiagnostic
diagnosticStorage, documentContext, info -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiongetQuickFixes(List<Diagnostic> diagnostics, CodeActionParams params, DocumentContext documentContext) Формирует быстрые исправления для срабатываний диагностики, к которым приложен текст замены (см.Проверяет тернарный оператор?(условие, ветка1, ветка2)на бесполезность.Methods inherited from class AbstractVisitorDiagnostic
getDiagnostics, getInfo, setInfoMethods inherited from class BSLParserBaseVisitor
visitAcceptor, visitAccessCall, visitAccessIndex, visitAccessProperty, visitAddHandlerStatement, visitAnnotation, visitAnnotationName, visitAnnotationParam, visitAnnotationParamName, visitAnnotationParams, visitAnnotationParamValue, visitAssignment, visitBoolOperation, visitBreakStatement, visitCallParam, visitCallParamList, visitCallStatement, visitCodeBlock, visitCompareOperation, visitCompilerDirective, visitCompilerDirectiveSymbol, visitComplexIdentifier, visitCompoundStatement, visitConstValue, visitContinueStatement, visitDefaultValue, visitDoCall, visitElseBranch, visitElsifBranch, visitEvent, visitExceptCodeBlock, visitExecuteStatement, visitExpression, visitFile, visitFileCodeBlock, visitFileCodeBlockBeforeSub, visitForEachStatement, visitForStatement, visitFuncDeclaration, visitFunction, visitGlobalMethodCall, visitGotoStatement, visitHandler, visitIfBranch, visitIfStatement, visitLabel, visitLabelName, visitLValue, visitMember, visitMethodCall, visitMethodName, visitModifier, visitModuleAnnotations, visitModuleVar, visitModuleVarDeclaration, visitModuleVars, visitModuleVarsList, visitMultilineString, visitNewExpression, visitNumeric, visitOperation, visitParam, visitParamList, visitPreproc_boolOperation, visitPreproc_else, visitPreproc_elsif, visitPreproc_endif, visitPreproc_expression, visitPreproc_if, visitPreproc_logicalExpression, visitPreproc_logicalOperand, visitPreproc_native, visitPreproc_symbol, visitPreproc_unknownSymbol, visitPreprocessor, visitProcDeclaration, visitProcedure, visitRaiseStatement, visitRegionEnd, visitRegionName, visitRegionStart, visitRemoveHandlerStatement, visitReturnStatement, visitShebang, visitStatement, visitString, visitSub, visitSubCodeBlock, visitSubName, visitSubs, visitSubVar, visitSubVarDeclaration, visitSubVars, visitSubVarsList, visitTryCodeBlock, visitTryStatement, visitTypeName, visitUnaryModifier, visitUse, visitUsedLib, visitVar_name, visitWaitExpression, visitWaitStatement, visitWhileStatementMethods inherited from class AbstractParseTreeVisitor
aggregateResult, defaultResult, shouldVisitNextChild, visit, visitChildren, visitErrorNode, visitTerminalMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface BSLDiagnostic
configureMethods inherited from interface ParseTreeVisitor
visit, visitChildren, visitErrorNode, visitTerminal
-
Constructor Details
-
UselessTernaryOperatorDiagnostic
public UselessTernaryOperatorDiagnostic()
-
-
Method Details
-
visitTernaryOperator
Проверяет тернарный оператор?(условие, ветка1, ветка2)на бесполезность. Диагностика срабатывает, если:- условие — булева константа (
Истина/Ложь), т.е. результат всегда известен; - обе ветки — булевы константы:
?(X, Истина, Ложь)— упрощается доX(предлагается quickfix);?(X, Ложь, Истина)— упрощается доНЕ X(предлагается quickfix);- обе ветки одинаковы (
?(X, Истина, Истина)/?(X, Ложь, Ложь)) — результат не зависит от условия.
- Specified by:
visitTernaryOperatorin interfaceBSLParserVisitor<ParseTree>- Overrides:
visitTernaryOperatorin classBSLParserBaseVisitor<ParseTree>
- условие — булева константа (
-
getQuickFixes
public List<CodeAction> getQuickFixes(List<Diagnostic> diagnostics, CodeActionParams params, DocumentContext documentContext) Формирует быстрые исправления для срабатываний диагностики, к которым приложен текст замены (см.DiagnosticStorage.DiagnosticAdditionalData). Соответствует случаям?(X, Истина, Ложь)и?(X, Ложь, Истина), где тернарный оператор заменяется на выражение условия (или его отрицание).- Specified by:
getQuickFixesin interfaceQuickFixProvider- Parameters:
diagnostics- Список диагностик для исправленияparams- Параметры запроса code actiondocumentContext- Контекст документа- Returns:
- Список code actions для автоматического исправления проблем
-