@flint.fyi/ts 0.14.5 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/collectReferencedFilePaths.d.ts +1 -0
- package/lib/collectReferencedFilePaths.js +3 -2
- package/lib/convertTypeScriptDiagnosticToLanguageFileDiagnostic.d.ts +14 -0
- package/lib/{formatDiagnostic.js → convertTypeScriptDiagnosticToLanguageFileDiagnostic.js} +23 -15
- package/lib/createTypeScriptFileFromProgram.d.ts +4 -1
- package/lib/createTypeScriptFileFromProgram.js +25 -30
- package/lib/createTypeScriptFileFromProjectService.d.ts +3 -6
- package/lib/createTypeScriptFileFromProjectService.js +5 -11
- package/lib/directives/parseDirectivesFromTypeScriptFile.d.ts +8 -0
- package/lib/directives/parseDirectivesFromTypeScriptFile.js +12 -4
- package/lib/directives/parseDirectivesFromTypeScriptFile.test.d.ts +1 -0
- package/lib/directives/parseDirectivesFromTypeScriptFile.test.js +1 -0
- package/lib/getFirstEnumValues.d.ts +1 -0
- package/lib/getFirstEnumValues.js +1 -0
- package/lib/getFirstEnumValues.test.d.ts +1 -0
- package/lib/getFirstEnumValues.test.js +1 -0
- package/lib/getTSNodeRange.d.ts +1 -0
- package/lib/getTSNodeRange.js +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +5 -0
- package/lib/language.d.ts +3 -2
- package/lib/language.js +7 -52
- package/lib/nodes.d.ts +1 -0
- package/lib/nodes.js +1 -0
- package/lib/normalizeRange.d.ts +1 -0
- package/lib/normalizeRange.js +4 -6
- package/lib/plugin.d.ts +79 -50
- package/lib/plugin.js +16 -1
- package/lib/prepareTypeScriptBasedLanguage.d.ts +11 -0
- package/lib/prepareTypeScriptBasedLanguage.js +59 -0
- package/lib/prepareTypeScriptFile.d.ts +9 -4
- package/lib/prepareTypeScriptFile.js +8 -2
- package/lib/rules/anyReturns.d.ts +2 -1
- package/lib/rules/anyReturns.js +22 -22
- package/lib/rules/anyReturns.test.d.ts +1 -0
- package/lib/rules/anyReturns.test.js +1 -0
- package/lib/rules/asyncPromiseExecutors.d.ts +2 -1
- package/lib/rules/asyncPromiseExecutors.js +4 -3
- package/lib/rules/asyncPromiseExecutors.test.d.ts +1 -0
- package/lib/rules/asyncPromiseExecutors.test.js +1 -0
- package/lib/rules/caseDeclarations.d.ts +3 -1
- package/lib/rules/caseDeclarations.js +7 -6
- package/lib/rules/caseDeclarations.test.d.ts +1 -0
- package/lib/rules/caseDeclarations.test.js +1 -0
- package/lib/rules/caseDuplicates.d.ts +2 -1
- package/lib/rules/caseDuplicates.js +4 -3
- package/lib/rules/caseDuplicates.test.d.ts +1 -0
- package/lib/rules/caseDuplicates.test.js +1 -0
- package/lib/rules/chainedAssignments.d.ts +2 -1
- package/lib/rules/chainedAssignments.js +3 -2
- package/lib/rules/chainedAssignments.test.d.ts +1 -0
- package/lib/rules/chainedAssignments.test.js +1 -0
- package/lib/rules/classAssignments.d.ts +2 -1
- package/lib/rules/classAssignments.js +4 -3
- package/lib/rules/classAssignments.test.d.ts +1 -0
- package/lib/rules/classAssignments.test.js +1 -0
- package/lib/rules/consecutiveNonNullAssertions.d.ts +2 -1
- package/lib/rules/consecutiveNonNullAssertions.js +1 -0
- package/lib/rules/consecutiveNonNullAssertions.test.d.ts +1 -0
- package/lib/rules/consecutiveNonNullAssertions.test.js +1 -0
- package/lib/rules/constantAssignments.d.ts +2 -1
- package/lib/rules/constantAssignments.js +4 -3
- package/lib/rules/constantAssignments.test.d.ts +1 -0
- package/lib/rules/constantAssignments.test.js +1 -0
- package/lib/rules/constructorReturns.d.ts +2 -1
- package/lib/rules/constructorReturns.js +3 -2
- package/lib/rules/constructorReturns.test.d.ts +1 -0
- package/lib/rules/constructorReturns.test.js +1 -0
- package/lib/rules/debuggerStatements.d.ts +2 -1
- package/lib/rules/debuggerStatements.js +1 -0
- package/lib/rules/debuggerStatements.test.d.ts +1 -0
- package/lib/rules/debuggerStatements.test.js +1 -0
- package/lib/rules/defaultCaseLast.d.ts +2 -1
- package/lib/rules/defaultCaseLast.js +4 -3
- package/lib/rules/defaultCaseLast.test.d.ts +1 -0
- package/lib/rules/defaultCaseLast.test.js +1 -0
- package/lib/rules/duplicateArguments.d.ts +3 -1
- package/lib/rules/duplicateArguments.js +3 -2
- package/lib/rules/duplicateArguments.test.d.ts +1 -0
- package/lib/rules/duplicateArguments.test.js +1 -0
- package/lib/rules/elseIfDuplicates.d.ts +2 -1
- package/lib/rules/elseIfDuplicates.js +6 -5
- package/lib/rules/elseIfDuplicates.test.d.ts +1 -0
- package/lib/rules/elseIfDuplicates.test.js +1 -0
- package/lib/rules/emptyBlocks.d.ts +2 -1
- package/lib/rules/emptyBlocks.js +12 -10
- package/lib/rules/emptyBlocks.test.d.ts +1 -0
- package/lib/rules/emptyBlocks.test.js +1 -0
- package/lib/rules/emptyDestructures.d.ts +3 -1
- package/lib/rules/emptyDestructures.js +3 -2
- package/lib/rules/emptyDestructures.test.d.ts +1 -0
- package/lib/rules/emptyDestructures.test.js +1 -0
- package/lib/rules/emptyStaticBlocks.d.ts +2 -1
- package/lib/rules/emptyStaticBlocks.js +5 -4
- package/lib/rules/emptyStaticBlocks.test.d.ts +1 -0
- package/lib/rules/emptyStaticBlocks.test.js +1 -0
- package/lib/rules/exceptionAssignments.d.ts +2 -1
- package/lib/rules/exceptionAssignments.js +4 -3
- package/lib/rules/exceptionAssignments.test.d.ts +1 -0
- package/lib/rules/exceptionAssignments.test.js +1 -0
- package/lib/rules/finallyStatementSafety.d.ts +7 -0
- package/lib/rules/finallyStatementSafety.js +71 -0
- package/lib/rules/finallyStatementSafety.test.d.ts +2 -0
- package/lib/rules/finallyStatementSafety.test.js +307 -0
- package/lib/rules/forDirections.d.ts +2 -1
- package/lib/rules/forDirections.js +18 -10
- package/lib/rules/forDirections.test.d.ts +1 -0
- package/lib/rules/forDirections.test.js +26 -0
- package/lib/rules/forInArrays.d.ts +2 -1
- package/lib/rules/forInArrays.js +8 -7
- package/lib/rules/forInArrays.test.d.ts +1 -0
- package/lib/rules/forInArrays.test.js +1 -0
- package/lib/rules/functionAssignments.d.ts +2 -1
- package/lib/rules/functionAssignments.js +4 -3
- package/lib/rules/functionAssignments.test.d.ts +1 -0
- package/lib/rules/functionAssignments.test.js +1 -0
- package/lib/rules/functionCurryingRedundancy.d.ts +7 -0
- package/lib/rules/functionCurryingRedundancy.js +77 -0
- package/lib/rules/functionCurryingRedundancy.test.d.ts +2 -0
- package/lib/rules/functionCurryingRedundancy.test.js +172 -0
- package/lib/rules/functionNewCalls.d.ts +3 -1
- package/lib/rules/functionNewCalls.js +7 -6
- package/lib/rules/functionNewCalls.test.d.ts +1 -0
- package/lib/rules/functionNewCalls.test.js +1 -0
- package/lib/rules/generatorFunctionYields.d.ts +3 -1
- package/lib/rules/generatorFunctionYields.js +3 -2
- package/lib/rules/generatorFunctionYields.test.d.ts +1 -0
- package/lib/rules/generatorFunctionYields.test.js +1 -0
- package/lib/rules/globalAssignments.d.ts +2 -1
- package/lib/rules/globalAssignments.js +10 -9
- package/lib/rules/globalAssignments.test.d.ts +1 -0
- package/lib/rules/globalAssignments.test.js +1 -0
- package/lib/rules/globalObjectCalls.d.ts +3 -1
- package/lib/rules/globalObjectCalls.js +5 -4
- package/lib/rules/globalObjectCalls.test.d.ts +1 -0
- package/lib/rules/globalObjectCalls.test.js +1 -0
- package/lib/rules/namespaceDeclarations.d.ts +2 -1
- package/lib/rules/namespaceDeclarations.js +7 -6
- package/lib/rules/namespaceDeclarations.test.d.ts +1 -0
- package/lib/rules/namespaceDeclarations.test.js +1 -0
- package/lib/rules/negativeZeroComparisons.d.ts +2 -1
- package/lib/rules/negativeZeroComparisons.js +8 -7
- package/lib/rules/negativeZeroComparisons.test.d.ts +1 -0
- package/lib/rules/negativeZeroComparisons.test.js +1 -0
- package/lib/rules/newExpressions.d.ts +2 -1
- package/lib/rules/newExpressions.js +3 -2
- package/lib/rules/newExpressions.test.d.ts +1 -0
- package/lib/rules/newExpressions.test.js +1 -0
- package/lib/rules/newNativeNonConstructors.d.ts +2 -1
- package/lib/rules/newNativeNonConstructors.js +6 -5
- package/lib/rules/newNativeNonConstructors.test.d.ts +1 -0
- package/lib/rules/newNativeNonConstructors.test.js +1 -0
- package/lib/rules/nonOctalDecimalEscapes.d.ts +3 -1
- package/lib/rules/nonOctalDecimalEscapes.js +4 -3
- package/lib/rules/nonOctalDecimalEscapes.test.d.ts +1 -0
- package/lib/rules/nonOctalDecimalEscapes.test.js +1 -0
- package/lib/rules/numericLiteralParsing.d.ts +2 -1
- package/lib/rules/numericLiteralParsing.js +8 -7
- package/lib/rules/numericLiteralParsing.test.d.ts +1 -0
- package/lib/rules/numericLiteralParsing.test.js +1 -0
- package/lib/rules/objectCalls.d.ts +7 -0
- package/lib/rules/objectCalls.js +47 -0
- package/lib/rules/objectCalls.test.d.ts +2 -0
- package/lib/rules/objectCalls.test.js +172 -0
- package/lib/rules/objectHasOwns.d.ts +7 -0
- package/lib/rules/objectHasOwns.js +74 -0
- package/lib/rules/objectHasOwns.test.d.ts +2 -0
- package/lib/rules/objectHasOwns.test.js +112 -0
- package/lib/rules/objectKeyDuplicates.d.ts +7 -0
- package/lib/rules/objectKeyDuplicates.js +91 -0
- package/lib/rules/objectKeyDuplicates.test.d.ts +2 -0
- package/lib/rules/objectKeyDuplicates.test.js +180 -0
- package/lib/rules/objectProto.d.ts +2 -1
- package/lib/rules/objectProto.js +5 -4
- package/lib/rules/objectProto.test.d.ts +1 -0
- package/lib/rules/objectProto.test.js +1 -0
- package/lib/rules/objectPrototypeBuiltIns.d.ts +7 -0
- package/lib/rules/objectPrototypeBuiltIns.js +65 -0
- package/lib/rules/objectPrototypeBuiltIns.test.d.ts +2 -0
- package/lib/rules/objectPrototypeBuiltIns.test.js +146 -0
- package/lib/rules/octalEscapes.d.ts +2 -1
- package/lib/rules/octalEscapes.js +13 -8
- package/lib/rules/octalEscapes.test.d.ts +1 -0
- package/lib/rules/octalEscapes.test.js +1 -0
- package/lib/rules/octalNumbers.d.ts +2 -1
- package/lib/rules/octalNumbers.js +4 -3
- package/lib/rules/octalNumbers.test.d.ts +1 -0
- package/lib/rules/octalNumbers.test.js +1 -0
- package/lib/rules/returnAssignments.d.ts +2 -1
- package/lib/rules/returnAssignments.js +7 -6
- package/lib/rules/returnAssignments.test.d.ts +1 -0
- package/lib/rules/returnAssignments.test.js +1 -0
- package/lib/rules/ruleTester.d.ts +1 -0
- package/lib/rules/ruleTester.js +6 -1
- package/lib/rules/selfAssignments.d.ts +2 -1
- package/lib/rules/selfAssignments.js +4 -3
- package/lib/rules/selfAssignments.test.d.ts +1 -0
- package/lib/rules/selfAssignments.test.js +1 -0
- package/lib/rules/selfComparisons.d.ts +2 -1
- package/lib/rules/selfComparisons.js +4 -3
- package/lib/rules/selfComparisons.test.d.ts +1 -0
- package/lib/rules/selfComparisons.test.js +1 -0
- package/lib/rules/sequences.d.ts +2 -1
- package/lib/rules/sequences.js +3 -2
- package/lib/rules/sequences.test.d.ts +1 -0
- package/lib/rules/sequences.test.js +1 -0
- package/lib/rules/shadowedRestrictedNames.d.ts +2 -1
- package/lib/rules/shadowedRestrictedNames.js +24 -23
- package/lib/rules/shadowedRestrictedNames.test.d.ts +1 -0
- package/lib/rules/shadowedRestrictedNames.test.js +1 -0
- package/lib/rules/sparseArrays.d.ts +2 -1
- package/lib/rules/sparseArrays.js +5 -4
- package/lib/rules/sparseArrays.test.d.ts +1 -0
- package/lib/rules/sparseArrays.test.js +1 -0
- package/lib/rules/symbolDescriptions.d.ts +2 -1
- package/lib/rules/symbolDescriptions.js +3 -2
- package/lib/rules/symbolDescriptions.test.d.ts +1 -0
- package/lib/rules/symbolDescriptions.test.js +1 -0
- package/lib/rules/typeofComparisons.d.ts +2 -1
- package/lib/rules/typeofComparisons.js +5 -4
- package/lib/rules/typeofComparisons.test.d.ts +1 -0
- package/lib/rules/typeofComparisons.test.js +1 -0
- package/lib/rules/unassignedVariables.d.ts +2 -1
- package/lib/rules/unassignedVariables.js +4 -3
- package/lib/rules/unassignedVariables.test.d.ts +1 -0
- package/lib/rules/unassignedVariables.test.js +1 -0
- package/lib/rules/undefinedVariables.d.ts +2 -1
- package/lib/rules/undefinedVariables.js +5 -4
- package/lib/rules/undefinedVariables.test.d.ts +1 -0
- package/lib/rules/undefinedVariables.test.js +1 -0
- package/lib/rules/unicodeBOMs.d.ts +2 -1
- package/lib/rules/unicodeBOMs.js +27 -20
- package/lib/rules/unicodeBOMs.test.d.ts +1 -0
- package/lib/rules/unicodeBOMs.test.js +1 -0
- package/lib/rules/unnecessaryBlocks.d.ts +2 -1
- package/lib/rules/unnecessaryBlocks.js +4 -3
- package/lib/rules/unnecessaryBlocks.test.d.ts +1 -0
- package/lib/rules/unnecessaryBlocks.test.js +1 -0
- package/lib/rules/unnecessaryCatches.d.ts +2 -1
- package/lib/rules/unnecessaryCatches.js +4 -3
- package/lib/rules/unnecessaryCatches.test.d.ts +1 -0
- package/lib/rules/unnecessaryCatches.test.js +1 -0
- package/lib/rules/unnecessaryConcatenation.d.ts +2 -1
- package/lib/rules/unnecessaryConcatenation.js +3 -2
- package/lib/rules/unnecessaryConcatenation.test.d.ts +1 -0
- package/lib/rules/unnecessaryConcatenation.test.js +1 -0
- package/lib/rules/unsafeNegations.d.ts +2 -1
- package/lib/rules/unsafeNegations.js +3 -2
- package/lib/rules/unsafeNegations.test.d.ts +1 -0
- package/lib/rules/unsafeNegations.test.js +1 -0
- package/lib/rules/utils/discriminateAnyType.d.ts +1 -0
- package/lib/rules/utils/discriminateAnyType.js +1 -0
- package/lib/rules/utils/getConstrainedType.d.ts +1 -0
- package/lib/rules/utils/getConstrainedType.js +1 -0
- package/lib/rules/utils/getThisExpression.d.ts +1 -0
- package/lib/rules/utils/getThisExpression.js +1 -0
- package/lib/rules/utils/isTypeRecursive.d.ts +1 -0
- package/lib/rules/utils/isTypeRecursive.js +1 -0
- package/lib/rules/utils/isUnsafeAssignment.d.ts +1 -0
- package/lib/rules/utils/isUnsafeAssignment.js +1 -0
- package/lib/rules/utils/operators.d.ts +1 -0
- package/lib/rules/utils/operators.js +1 -0
- package/lib/rules/variableDeletions.d.ts +2 -1
- package/lib/rules/variableDeletions.js +3 -2
- package/lib/rules/variableDeletions.test.d.ts +1 -0
- package/lib/rules/variableDeletions.test.js +1 -0
- package/lib/rules/voidOperator.d.ts +2 -1
- package/lib/rules/voidOperator.js +3 -2
- package/lib/rules/voidOperator.test.d.ts +1 -0
- package/lib/rules/voidOperator.test.js +1 -0
- package/lib/rules/withStatements.d.ts +7 -0
- package/lib/rules/withStatements.js +37 -0
- package/lib/rules/withStatements.test.d.ts +2 -0
- package/lib/rules/withStatements.test.js +27 -0
- package/lib/utils/declarationIncludesGlobal.d.ts +1 -0
- package/lib/utils/declarationIncludesGlobal.js +1 -0
- package/lib/utils/declarationsIncludeGlobal.d.ts +1 -0
- package/lib/utils/declarationsIncludeGlobal.js +1 -0
- package/lib/utils/getDeclarationsIfGlobal.d.ts +1 -0
- package/lib/utils/getDeclarationsIfGlobal.js +1 -0
- package/lib/utils/getModifyingReferences.d.ts +1 -0
- package/lib/utils/getModifyingReferences.js +1 -0
- package/lib/utils/hasSameTokens.d.ts +1 -0
- package/lib/utils/hasSameTokens.js +1 -0
- package/lib/utils/isFunction.d.ts +3 -0
- package/lib/utils/isFunction.js +6 -0
- package/lib/utils/isGlobalDeclaration.d.ts +1 -0
- package/lib/utils/isGlobalDeclaration.js +1 -0
- package/lib/utils/isGlobalDeclarationOfName.d.ts +1 -0
- package/lib/utils/isGlobalDeclarationOfName.js +1 -0
- package/lib/utils/isGlobalVariable.d.ts +1 -0
- package/lib/utils/isGlobalVariable.js +1 -0
- package/lib/utils/unwrapParentParenthesizedExpressions.d.ts +1 -0
- package/lib/utils/unwrapParentParenthesizedExpressions.js +1 -0
- package/lib/utils/unwrapParenthesizedExpression.d.ts +1 -0
- package/lib/utils/unwrapParenthesizedExpression.js +1 -0
- package/package.json +17 -7
- package/CHANGELOG.md +0 -82
- package/lib/formatDiagnostic.d.ts +0 -10
- package/src/collectReferencedFilePaths.ts +0 -37
- package/src/createTypeScriptFileFromProgram.ts +0 -86
- package/src/createTypeScriptFileFromProjectService.ts +0 -31
- package/src/directives/parseDirectivesFromTypeScriptFile.test.ts +0 -108
- package/src/directives/parseDirectivesFromTypeScriptFile.ts +0 -31
- package/src/formatDiagnostic.ts +0 -166
- package/src/getFirstEnumValues.test.ts +0 -51
- package/src/getFirstEnumValues.ts +0 -59
- package/src/getTSNodeRange.ts +0 -13
- package/src/index.ts +0 -7
- package/src/language.ts +0 -122
- package/src/nodes.ts +0 -146
- package/src/normalizeRange.ts +0 -30
- package/src/plugin.ts +0 -111
- package/src/prepareTypeScriptFile.ts +0 -14
- package/src/rules/anyReturns.test.ts +0 -649
- package/src/rules/anyReturns.ts +0 -263
- package/src/rules/asyncPromiseExecutors.test.ts +0 -72
- package/src/rules/asyncPromiseExecutors.ts +0 -61
- package/src/rules/caseDeclarations.test.ts +0 -228
- package/src/rules/caseDeclarations.ts +0 -70
- package/src/rules/caseDuplicates.test.ts +0 -308
- package/src/rules/caseDuplicates.ts +0 -57
- package/src/rules/chainedAssignments.test.ts +0 -263
- package/src/rules/chainedAssignments.ts +0 -58
- package/src/rules/classAssignments.test.ts +0 -157
- package/src/rules/classAssignments.ts +0 -50
- package/src/rules/consecutiveNonNullAssertions.test.ts +0 -33
- package/src/rules/consecutiveNonNullAssertions.ts +0 -46
- package/src/rules/constantAssignments.test.ts +0 -222
- package/src/rules/constantAssignments.ts +0 -78
- package/src/rules/constructorReturns.test.ts +0 -97
- package/src/rules/constructorReturns.ts +0 -59
- package/src/rules/debuggerStatements.test.ts +0 -81
- package/src/rules/debuggerStatements.ts +0 -45
- package/src/rules/defaultCaseLast.test.ts +0 -196
- package/src/rules/defaultCaseLast.ts +0 -54
- package/src/rules/duplicateArguments.test.ts +0 -140
- package/src/rules/duplicateArguments.ts +0 -58
- package/src/rules/elseIfDuplicates.test.ts +0 -177
- package/src/rules/elseIfDuplicates.ts +0 -69
- package/src/rules/emptyBlocks.test.ts +0 -136
- package/src/rules/emptyBlocks.ts +0 -73
- package/src/rules/emptyDestructures.test.ts +0 -187
- package/src/rules/emptyDestructures.ts +0 -48
- package/src/rules/emptyStaticBlocks.test.ts +0 -168
- package/src/rules/emptyStaticBlocks.ts +0 -60
- package/src/rules/exceptionAssignments.test.ts +0 -265
- package/src/rules/exceptionAssignments.ts +0 -77
- package/src/rules/forDirections.test.ts +0 -100
- package/src/rules/forDirections.ts +0 -163
- package/src/rules/forInArrays.test.ts +0 -25
- package/src/rules/forInArrays.ts +0 -70
- package/src/rules/functionAssignments.test.ts +0 -210
- package/src/rules/functionAssignments.ts +0 -51
- package/src/rules/functionNewCalls.test.ts +0 -116
- package/src/rules/functionNewCalls.ts +0 -75
- package/src/rules/generatorFunctionYields.test.ts +0 -152
- package/src/rules/generatorFunctionYields.ts +0 -71
- package/src/rules/globalAssignments.test.ts +0 -216
- package/src/rules/globalAssignments.ts +0 -67
- package/src/rules/globalObjectCalls.test.ts +0 -94
- package/src/rules/globalObjectCalls.ts +0 -52
- package/src/rules/namespaceDeclarations.test.ts +0 -41
- package/src/rules/namespaceDeclarations.ts +0 -74
- package/src/rules/negativeZeroComparisons.test.ts +0 -210
- package/src/rules/negativeZeroComparisons.ts +0 -87
- package/src/rules/newExpressions.test.ts +0 -80
- package/src/rules/newExpressions.ts +0 -67
- package/src/rules/newNativeNonConstructors.test.ts +0 -95
- package/src/rules/newNativeNonConstructors.ts +0 -59
- package/src/rules/nonOctalDecimalEscapes.test.ts +0 -70
- package/src/rules/nonOctalDecimalEscapes.ts +0 -70
- package/src/rules/numericLiteralParsing.test.ts +0 -100
- package/src/rules/numericLiteralParsing.ts +0 -116
- package/src/rules/objectProto.test.ts +0 -97
- package/src/rules/objectProto.ts +0 -62
- package/src/rules/octalEscapes.test.ts +0 -214
- package/src/rules/octalEscapes.ts +0 -85
- package/src/rules/octalNumbers.test.ts +0 -246
- package/src/rules/octalNumbers.ts +0 -75
- package/src/rules/returnAssignments.test.ts +0 -186
- package/src/rules/returnAssignments.ts +0 -57
- package/src/rules/ruleTester.ts +0 -4
- package/src/rules/selfAssignments.test.ts +0 -67
- package/src/rules/selfAssignments.ts +0 -50
- package/src/rules/selfComparisons.test.ts +0 -298
- package/src/rules/selfComparisons.ts +0 -45
- package/src/rules/sequences.test.ts +0 -49
- package/src/rules/sequences.ts +0 -37
- package/src/rules/shadowedRestrictedNames.test.ts +0 -148
- package/src/rules/shadowedRestrictedNames.ts +0 -105
- package/src/rules/sparseArrays.test.ts +0 -111
- package/src/rules/sparseArrays.ts +0 -61
- package/src/rules/symbolDescriptions.test.ts +0 -90
- package/src/rules/symbolDescriptions.ts +0 -47
- package/src/rules/typeofComparisons.test.ts +0 -86
- package/src/rules/typeofComparisons.ts +0 -88
- package/src/rules/unassignedVariables.test.ts +0 -73
- package/src/rules/unassignedVariables.ts +0 -69
- package/src/rules/undefinedVariables.test.ts +0 -81
- package/src/rules/undefinedVariables.ts +0 -97
- package/src/rules/unicodeBOMs.test.ts +0 -67
- package/src/rules/unicodeBOMs.ts +0 -44
- package/src/rules/unnecessaryBlocks.test.ts +0 -148
- package/src/rules/unnecessaryBlocks.ts +0 -89
- package/src/rules/unnecessaryCatches.test.ts +0 -211
- package/src/rules/unnecessaryCatches.ts +0 -84
- package/src/rules/unnecessaryConcatenation.test.ts +0 -88
- package/src/rules/unnecessaryConcatenation.ts +0 -44
- package/src/rules/unsafeNegations.test.ts +0 -64
- package/src/rules/unsafeNegations.ts +0 -59
- package/src/rules/utils/discriminateAnyType.ts +0 -66
- package/src/rules/utils/getConstrainedType.ts +0 -9
- package/src/rules/utils/getThisExpression.ts +0 -24
- package/src/rules/utils/isTypeRecursive.ts +0 -10
- package/src/rules/utils/isUnsafeAssignment.ts +0 -113
- package/src/rules/utils/operators.ts +0 -39
- package/src/rules/variableDeletions.test.ts +0 -76
- package/src/rules/variableDeletions.ts +0 -43
- package/src/rules/voidOperator.test.ts +0 -99
- package/src/rules/voidOperator.ts +0 -38
- package/src/utils/declarationIncludesGlobal.ts +0 -9
- package/src/utils/declarationsIncludeGlobal.ts +0 -7
- package/src/utils/getDeclarationsIfGlobal.ts +0 -14
- package/src/utils/getModifyingReferences.ts +0 -58
- package/src/utils/hasSameTokens.ts +0 -45
- package/src/utils/isGlobalDeclaration.ts +0 -10
- package/src/utils/isGlobalDeclarationOfName.ts +0 -56
- package/src/utils/isGlobalVariable.ts +0 -30
- package/src/utils/unwrapParentParenthesizedExpressions.ts +0 -7
- package/src/utils/unwrapParenthesizedExpression.ts +0 -9
- package/tsconfig.json +0 -9
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { ruleTester } from "./ruleTester.js";
|
|
2
|
-
import rule from "./unnecessaryBlocks.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
{
|
|
9
|
-
const x = 1;
|
|
10
|
-
}
|
|
11
|
-
`,
|
|
12
|
-
snapshot: `
|
|
13
|
-
{
|
|
14
|
-
~
|
|
15
|
-
This standalone block statement is unnecessary and doesn't change any variable scopes.
|
|
16
|
-
const x = 1;
|
|
17
|
-
}
|
|
18
|
-
`,
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
code: `
|
|
22
|
-
function test() {
|
|
23
|
-
{
|
|
24
|
-
const y = 2;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
`,
|
|
28
|
-
snapshot: `
|
|
29
|
-
function test() {
|
|
30
|
-
{
|
|
31
|
-
~
|
|
32
|
-
This standalone block statement is unnecessary and doesn't change any variable scopes.
|
|
33
|
-
const y = 2;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
`,
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
code: `
|
|
40
|
-
if (condition) {
|
|
41
|
-
doSomething();
|
|
42
|
-
{
|
|
43
|
-
const nested = true;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
`,
|
|
47
|
-
snapshot: `
|
|
48
|
-
if (condition) {
|
|
49
|
-
doSomething();
|
|
50
|
-
{
|
|
51
|
-
~
|
|
52
|
-
This standalone block statement is unnecessary and doesn't change any variable scopes.
|
|
53
|
-
const nested = true;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
`,
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
code: `
|
|
60
|
-
{
|
|
61
|
-
console.log("standalone");
|
|
62
|
-
}
|
|
63
|
-
`,
|
|
64
|
-
snapshot: `
|
|
65
|
-
{
|
|
66
|
-
~
|
|
67
|
-
This standalone block statement is unnecessary and doesn't change any variable scopes.
|
|
68
|
-
console.log("standalone");
|
|
69
|
-
}
|
|
70
|
-
`,
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
code: `
|
|
74
|
-
function outer() {
|
|
75
|
-
{
|
|
76
|
-
console.log("inner");
|
|
77
|
-
}
|
|
78
|
-
{
|
|
79
|
-
console.log("another");
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
`,
|
|
83
|
-
snapshot: `
|
|
84
|
-
function outer() {
|
|
85
|
-
{
|
|
86
|
-
~
|
|
87
|
-
This standalone block statement is unnecessary and doesn't change any variable scopes.
|
|
88
|
-
console.log("inner");
|
|
89
|
-
}
|
|
90
|
-
{
|
|
91
|
-
~
|
|
92
|
-
This standalone block statement is unnecessary and doesn't change any variable scopes.
|
|
93
|
-
console.log("another");
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
`,
|
|
97
|
-
},
|
|
98
|
-
],
|
|
99
|
-
valid: [
|
|
100
|
-
`if (condition) { doSomething(); }`,
|
|
101
|
-
`for (let i = 0; i < 10; i++) { console.log(i); }`,
|
|
102
|
-
`while (condition) { doWork(); }`,
|
|
103
|
-
`do { doWork(); } while (condition);`,
|
|
104
|
-
`function test() { return 42; }`,
|
|
105
|
-
`const arrow = () => { return 1; };`,
|
|
106
|
-
`
|
|
107
|
-
switch (value) {
|
|
108
|
-
case 1: {
|
|
109
|
-
const x = 1;
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
case 2: {
|
|
113
|
-
const y = 2;
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
`,
|
|
118
|
-
`
|
|
119
|
-
try {
|
|
120
|
-
doSomething();
|
|
121
|
-
} catch (error) {
|
|
122
|
-
handleError(error);
|
|
123
|
-
}
|
|
124
|
-
`,
|
|
125
|
-
`
|
|
126
|
-
class MyClass {
|
|
127
|
-
method() {
|
|
128
|
-
return 1;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
`,
|
|
132
|
-
`
|
|
133
|
-
for (const item of items) {
|
|
134
|
-
processItem(item);
|
|
135
|
-
}
|
|
136
|
-
`,
|
|
137
|
-
`
|
|
138
|
-
for (const key in object) {
|
|
139
|
-
processKey(key);
|
|
140
|
-
}
|
|
141
|
-
`,
|
|
142
|
-
`
|
|
143
|
-
label: {
|
|
144
|
-
break label;
|
|
145
|
-
}
|
|
146
|
-
`,
|
|
147
|
-
],
|
|
148
|
-
});
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { typescriptLanguage } from "../language.js";
|
|
4
|
-
|
|
5
|
-
export default typescriptLanguage.createRule({
|
|
6
|
-
about: {
|
|
7
|
-
description:
|
|
8
|
-
"Reports standalone block statements that don't create a meaningful scope.",
|
|
9
|
-
id: "unnecessaryBlocks",
|
|
10
|
-
preset: "stylistic",
|
|
11
|
-
},
|
|
12
|
-
messages: {
|
|
13
|
-
unnecessaryBlock: {
|
|
14
|
-
primary:
|
|
15
|
-
"This standalone block statement is unnecessary and doesn't change any variable scopes.",
|
|
16
|
-
secondary: [
|
|
17
|
-
"Standalone block statements that aren't part of control flow (if/else, loops, switch) or don't create a meaningful lexical scope can be confusing and should be avoided.",
|
|
18
|
-
"In modern JavaScript and TypeScript, blocks primarily serve to create lexical scope for `let` and `const` variables, but this is often better achieved through other means.",
|
|
19
|
-
],
|
|
20
|
-
suggestions: [
|
|
21
|
-
"Remove the block statement and move its contents to the parent scope.",
|
|
22
|
-
"If you need lexical scoping, consider using an IIFE (Immediately Invoked Function Expression) or extracting to a separate function.",
|
|
23
|
-
],
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
setup(context) {
|
|
27
|
-
function isValidBlock(node: ts.Block): boolean {
|
|
28
|
-
const parent = node.parent;
|
|
29
|
-
|
|
30
|
-
// Valid blocks: function bodies, arrow functions, class/interface bodies, etc.
|
|
31
|
-
if (
|
|
32
|
-
ts.isFunctionDeclaration(parent) ||
|
|
33
|
-
ts.isFunctionExpression(parent) ||
|
|
34
|
-
ts.isArrowFunction(parent) ||
|
|
35
|
-
ts.isMethodDeclaration(parent) ||
|
|
36
|
-
ts.isConstructorDeclaration(parent) ||
|
|
37
|
-
ts.isGetAccessorDeclaration(parent) ||
|
|
38
|
-
ts.isSetAccessorDeclaration(parent) ||
|
|
39
|
-
ts.isModuleBlock(parent)
|
|
40
|
-
) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Valid blocks: control flow statements
|
|
45
|
-
if (
|
|
46
|
-
ts.isIfStatement(parent) ||
|
|
47
|
-
ts.isForStatement(parent) ||
|
|
48
|
-
ts.isForInStatement(parent) ||
|
|
49
|
-
ts.isForOfStatement(parent) ||
|
|
50
|
-
ts.isWhileStatement(parent) ||
|
|
51
|
-
ts.isDoStatement(parent) ||
|
|
52
|
-
ts.isWithStatement(parent) ||
|
|
53
|
-
ts.isTryStatement(parent) ||
|
|
54
|
-
ts.isCatchClause(parent)
|
|
55
|
-
) {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Valid block: switch case/default clause with block
|
|
60
|
-
// In ES6+, blocks in switch cases create scope for let/const
|
|
61
|
-
if (ts.isCaseClause(parent) || ts.isDefaultClause(parent)) {
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Valid block: labeled statement
|
|
66
|
-
if (ts.isLabeledStatement(parent)) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return {
|
|
74
|
-
visitors: {
|
|
75
|
-
Block: (node) => {
|
|
76
|
-
if (!isValidBlock(node)) {
|
|
77
|
-
context.report({
|
|
78
|
-
message: "unnecessaryBlock",
|
|
79
|
-
range: {
|
|
80
|
-
begin: node.getStart(context.sourceFile),
|
|
81
|
-
end: node.getStart(context.sourceFile) + 1,
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
},
|
|
89
|
-
});
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { ruleTester } from "./ruleTester.js";
|
|
2
|
-
import rule from "./unnecessaryCatches.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
try {
|
|
9
|
-
doSomething();
|
|
10
|
-
} catch (error) {
|
|
11
|
-
throw error;
|
|
12
|
-
}
|
|
13
|
-
`,
|
|
14
|
-
output: `
|
|
15
|
-
try {
|
|
16
|
-
doSomething();
|
|
17
|
-
}
|
|
18
|
-
`,
|
|
19
|
-
snapshot: `
|
|
20
|
-
try {
|
|
21
|
-
doSomething();
|
|
22
|
-
} catch (error) {
|
|
23
|
-
~~~~~
|
|
24
|
-
This catch clause is unnecessary, as it only rethrows the exception without modification.
|
|
25
|
-
throw error;
|
|
26
|
-
}
|
|
27
|
-
`,
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
code: `
|
|
31
|
-
async function fetchData() {
|
|
32
|
-
try {
|
|
33
|
-
return await fetch("/api/data");
|
|
34
|
-
} catch (error) {
|
|
35
|
-
throw error;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
`,
|
|
39
|
-
output: `
|
|
40
|
-
async function fetchData() {
|
|
41
|
-
try {
|
|
42
|
-
return await fetch("/api/data");
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
`,
|
|
46
|
-
snapshot: `
|
|
47
|
-
async function fetchData() {
|
|
48
|
-
try {
|
|
49
|
-
return await fetch("/api/data");
|
|
50
|
-
} catch (error) {
|
|
51
|
-
~~~~~
|
|
52
|
-
This catch clause is unnecessary, as it only rethrows the exception without modification.
|
|
53
|
-
throw error;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
`,
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
code: `
|
|
60
|
-
try {
|
|
61
|
-
processData();
|
|
62
|
-
} catch (exception) {
|
|
63
|
-
throw exception;
|
|
64
|
-
}
|
|
65
|
-
`,
|
|
66
|
-
output: `
|
|
67
|
-
try {
|
|
68
|
-
processData();
|
|
69
|
-
}
|
|
70
|
-
`,
|
|
71
|
-
snapshot: `
|
|
72
|
-
try {
|
|
73
|
-
processData();
|
|
74
|
-
} catch (exception) {
|
|
75
|
-
~~~~~
|
|
76
|
-
This catch clause is unnecessary, as it only rethrows the exception without modification.
|
|
77
|
-
throw exception;
|
|
78
|
-
}
|
|
79
|
-
`,
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
code: `
|
|
83
|
-
function handleRequest() {
|
|
84
|
-
try {
|
|
85
|
-
const result = performOperation();
|
|
86
|
-
return result;
|
|
87
|
-
} catch (err) {
|
|
88
|
-
throw err;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
`,
|
|
92
|
-
output: `
|
|
93
|
-
function handleRequest() {
|
|
94
|
-
try {
|
|
95
|
-
const result = performOperation();
|
|
96
|
-
return result;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
`,
|
|
100
|
-
snapshot: `
|
|
101
|
-
function handleRequest() {
|
|
102
|
-
try {
|
|
103
|
-
const result = performOperation();
|
|
104
|
-
return result;
|
|
105
|
-
} catch (err) {
|
|
106
|
-
~~~~~
|
|
107
|
-
This catch clause is unnecessary, as it only rethrows the exception without modification.
|
|
108
|
-
throw err;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
`,
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
code: `
|
|
115
|
-
try {
|
|
116
|
-
doSomething();
|
|
117
|
-
} catch (error) {
|
|
118
|
-
throw error;
|
|
119
|
-
} finally {
|
|
120
|
-
cleanup();
|
|
121
|
-
}
|
|
122
|
-
`,
|
|
123
|
-
output: `
|
|
124
|
-
try {
|
|
125
|
-
doSomething();
|
|
126
|
-
} finally {
|
|
127
|
-
cleanup();
|
|
128
|
-
}
|
|
129
|
-
`,
|
|
130
|
-
snapshot: `
|
|
131
|
-
try {
|
|
132
|
-
doSomething();
|
|
133
|
-
} catch (error) {
|
|
134
|
-
~~~~~
|
|
135
|
-
This catch clause is unnecessary, as it only rethrows the exception without modification.
|
|
136
|
-
throw error;
|
|
137
|
-
} finally {
|
|
138
|
-
cleanup();
|
|
139
|
-
}
|
|
140
|
-
`,
|
|
141
|
-
},
|
|
142
|
-
],
|
|
143
|
-
valid: [
|
|
144
|
-
`try { doSomething(); } catch (error) { console.error(error); throw error; }`,
|
|
145
|
-
`try { doSomething(); } catch (error) { throw new Error("Failed"); }`,
|
|
146
|
-
`try { doSomething(); } catch (error) { logError(error); throw error; }`,
|
|
147
|
-
`try { doSomething(); } catch { throw new Error("Something went wrong"); }`,
|
|
148
|
-
`
|
|
149
|
-
try {
|
|
150
|
-
doSomething();
|
|
151
|
-
} catch (error) {
|
|
152
|
-
console.error("An error occurred:", error);
|
|
153
|
-
throw error;
|
|
154
|
-
}
|
|
155
|
-
`,
|
|
156
|
-
`
|
|
157
|
-
try {
|
|
158
|
-
doSomething();
|
|
159
|
-
} catch (error) {
|
|
160
|
-
throw new Error("Operation failed: " + error.message);
|
|
161
|
-
}
|
|
162
|
-
`,
|
|
163
|
-
`
|
|
164
|
-
try {
|
|
165
|
-
doSomething();
|
|
166
|
-
} catch (error) {
|
|
167
|
-
cleanup();
|
|
168
|
-
throw error;
|
|
169
|
-
}
|
|
170
|
-
`,
|
|
171
|
-
`
|
|
172
|
-
try {
|
|
173
|
-
doSomething();
|
|
174
|
-
} catch (error) {
|
|
175
|
-
throw error.originalError;
|
|
176
|
-
}
|
|
177
|
-
`,
|
|
178
|
-
`
|
|
179
|
-
async function fetchData() {
|
|
180
|
-
try {
|
|
181
|
-
return await fetch("/api/data");
|
|
182
|
-
} catch (error) {
|
|
183
|
-
await logError(error);
|
|
184
|
-
throw error;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
`,
|
|
188
|
-
`
|
|
189
|
-
try {
|
|
190
|
-
doSomething();
|
|
191
|
-
} catch ({ message }) {
|
|
192
|
-
throw message;
|
|
193
|
-
}
|
|
194
|
-
`,
|
|
195
|
-
`
|
|
196
|
-
try {
|
|
197
|
-
doSomething();
|
|
198
|
-
} catch (error) {
|
|
199
|
-
}
|
|
200
|
-
`,
|
|
201
|
-
`
|
|
202
|
-
try {
|
|
203
|
-
doSomething();
|
|
204
|
-
} catch (error) {
|
|
205
|
-
console.log("error");
|
|
206
|
-
cleanup();
|
|
207
|
-
throw error;
|
|
208
|
-
}
|
|
209
|
-
`,
|
|
210
|
-
],
|
|
211
|
-
});
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { typescriptLanguage } from "../language.js";
|
|
4
|
-
|
|
5
|
-
export default typescriptLanguage.createRule({
|
|
6
|
-
about: {
|
|
7
|
-
description:
|
|
8
|
-
"Reports catch clauses that only rethrow the caught error without modification.",
|
|
9
|
-
id: "unnecessaryCatches",
|
|
10
|
-
preset: "logical",
|
|
11
|
-
},
|
|
12
|
-
messages: {
|
|
13
|
-
unnecessaryCatch: {
|
|
14
|
-
primary:
|
|
15
|
-
"This catch clause is unnecessary, as it only rethrows the exception without modification.",
|
|
16
|
-
secondary: [
|
|
17
|
-
"A catch clause that only rethrows the caught error adds no value and creates unnecessary code complexity.",
|
|
18
|
-
"Removing such catch clauses allows errors to propagate naturally without the overhead of an unnecessary try-catch block.",
|
|
19
|
-
],
|
|
20
|
-
suggestions: [
|
|
21
|
-
"Remove the try-catch block if the catch clause only rethrows the error, or add meaningful error handling logic to the catch clause.",
|
|
22
|
-
],
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
setup(context) {
|
|
26
|
-
return {
|
|
27
|
-
visitors: {
|
|
28
|
-
CatchClause: (node) => {
|
|
29
|
-
if (!node.variableDeclaration || !ts.isBlock(node.block)) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const statements = node.block.statements;
|
|
34
|
-
|
|
35
|
-
if (statements.length !== 1) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const statement = statements[0];
|
|
40
|
-
|
|
41
|
-
if (!ts.isThrowStatement(statement)) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const catchVariable = node.variableDeclaration.name;
|
|
46
|
-
const thrownExpression = statement.expression;
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
!ts.isIdentifier(catchVariable) ||
|
|
50
|
-
!ts.isIdentifier(thrownExpression)
|
|
51
|
-
) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (catchVariable.text !== thrownExpression.text) {
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const tryStatement = node.parent;
|
|
60
|
-
if (!ts.isTryStatement(tryStatement)) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const range = {
|
|
65
|
-
begin: node.getStart(context.sourceFile),
|
|
66
|
-
end: node.getStart(context.sourceFile) + "catch".length,
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
context.report({
|
|
70
|
-
fix: {
|
|
71
|
-
range: {
|
|
72
|
-
begin: tryStatement.tryBlock.getEnd(),
|
|
73
|
-
end: node.getEnd(),
|
|
74
|
-
},
|
|
75
|
-
text: "",
|
|
76
|
-
},
|
|
77
|
-
message: "unnecessaryCatch",
|
|
78
|
-
range,
|
|
79
|
-
});
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
},
|
|
84
|
-
});
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { ruleTester } from "./ruleTester.js";
|
|
2
|
-
import rule from "./unnecessaryConcatenation.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
const message = "Hello" + "World";
|
|
9
|
-
`,
|
|
10
|
-
snapshot: `
|
|
11
|
-
const message = "Hello" + "World";
|
|
12
|
-
~
|
|
13
|
-
This string concatenation can be streamlined into a single string literal.
|
|
14
|
-
`,
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
code: `
|
|
18
|
-
const path = 'foo' + 'bar';
|
|
19
|
-
`,
|
|
20
|
-
snapshot: `
|
|
21
|
-
const path = 'foo' + 'bar';
|
|
22
|
-
~
|
|
23
|
-
This string concatenation can be streamlined into a single string literal.
|
|
24
|
-
`,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
code: `
|
|
28
|
-
const result = "abc" + "def" + "ghi";
|
|
29
|
-
`,
|
|
30
|
-
snapshot: `
|
|
31
|
-
const result = "abc" + "def" + "ghi";
|
|
32
|
-
~
|
|
33
|
-
This string concatenation can be streamlined into a single string literal.
|
|
34
|
-
`,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
code: `
|
|
38
|
-
const text = "first" + "second";
|
|
39
|
-
`,
|
|
40
|
-
snapshot: `
|
|
41
|
-
const text = "first" + "second";
|
|
42
|
-
~
|
|
43
|
-
This string concatenation can be streamlined into a single string literal.
|
|
44
|
-
`,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
code: `
|
|
48
|
-
const mixed = 'single' + "double";
|
|
49
|
-
`,
|
|
50
|
-
snapshot: `
|
|
51
|
-
const mixed = 'single' + "double";
|
|
52
|
-
~
|
|
53
|
-
This string concatenation can be streamlined into a single string literal.
|
|
54
|
-
`,
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
code: `
|
|
58
|
-
const withSpace = "Hello " + "World";
|
|
59
|
-
`,
|
|
60
|
-
snapshot: `
|
|
61
|
-
const withSpace = "Hello " + "World";
|
|
62
|
-
~
|
|
63
|
-
This string concatenation can be streamlined into a single string literal.
|
|
64
|
-
`,
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
code: `
|
|
68
|
-
const longString = "This is a very long string that " +
|
|
69
|
-
"continues on the next line";
|
|
70
|
-
`,
|
|
71
|
-
snapshot: `
|
|
72
|
-
const longString = "This is a very long string that " +
|
|
73
|
-
~
|
|
74
|
-
This string concatenation can be streamlined into a single string literal.
|
|
75
|
-
"continues on the next line";
|
|
76
|
-
`,
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
valid: [
|
|
80
|
-
`const message = "Hello" + variable;`,
|
|
81
|
-
`const message = variable + "World";`,
|
|
82
|
-
`const result = variable1 + variable2;`,
|
|
83
|
-
`const template = \`Hello\${name}World\`;`,
|
|
84
|
-
`const number = 1 + 2;`,
|
|
85
|
-
`const mixed = "Hello" + getName() + "World";`,
|
|
86
|
-
`const value = "prefix" + getValue();`,
|
|
87
|
-
],
|
|
88
|
-
});
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { getTSNodeRange } from "../getTSNodeRange.js";
|
|
4
|
-
import { typescriptLanguage } from "../language.js";
|
|
5
|
-
|
|
6
|
-
export default typescriptLanguage.createRule({
|
|
7
|
-
about: {
|
|
8
|
-
description:
|
|
9
|
-
"Reports string concatenation using the + operator when both operands are string literals.",
|
|
10
|
-
id: "unnecessaryConcatenation",
|
|
11
|
-
preset: "stylistic",
|
|
12
|
-
},
|
|
13
|
-
messages: {
|
|
14
|
-
unnecessaryConcatenation: {
|
|
15
|
-
primary:
|
|
16
|
-
"This string concatenation can be streamlined into a single string literal.",
|
|
17
|
-
secondary: [
|
|
18
|
-
"Concatenating string literals with the + operator is unnecessary and reduces code readability.",
|
|
19
|
-
"String literals can be combined into a single literal, which is clearer and potentially more performant.",
|
|
20
|
-
],
|
|
21
|
-
suggestions: [
|
|
22
|
-
"Combine the string literals into a single string literal.",
|
|
23
|
-
],
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
setup(context) {
|
|
27
|
-
return {
|
|
28
|
-
visitors: {
|
|
29
|
-
BinaryExpression: (node) => {
|
|
30
|
-
if (
|
|
31
|
-
node.operatorToken.kind === ts.SyntaxKind.PlusToken &&
|
|
32
|
-
ts.isStringLiteral(node.left) &&
|
|
33
|
-
ts.isStringLiteral(node.right)
|
|
34
|
-
) {
|
|
35
|
-
context.report({
|
|
36
|
-
message: "unnecessaryConcatenation",
|
|
37
|
-
range: getTSNodeRange(node.operatorToken, context.sourceFile),
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
},
|
|
44
|
-
});
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { ruleTester } from "./ruleTester.js";
|
|
2
|
-
import rule from "./unsafeNegations.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
!key in object;
|
|
9
|
-
`,
|
|
10
|
-
snapshot: `
|
|
11
|
-
!key in object;
|
|
12
|
-
~
|
|
13
|
-
This negation applies before the \`in\` operator.
|
|
14
|
-
`,
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
code: `
|
|
18
|
-
!object instanceof Constructor;
|
|
19
|
-
`,
|
|
20
|
-
snapshot: `
|
|
21
|
-
!object instanceof Constructor;
|
|
22
|
-
~
|
|
23
|
-
This negation applies before the \`instanceof\` operator.
|
|
24
|
-
`,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
code: `
|
|
28
|
-
(!key) in object;
|
|
29
|
-
`,
|
|
30
|
-
snapshot: `
|
|
31
|
-
(!key) in object;
|
|
32
|
-
~
|
|
33
|
-
This negation applies before the \`in\` operator.
|
|
34
|
-
`,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
code: `
|
|
38
|
-
(!object) instanceof Constructor;
|
|
39
|
-
`,
|
|
40
|
-
snapshot: `
|
|
41
|
-
(!object) instanceof Constructor;
|
|
42
|
-
~
|
|
43
|
-
This negation applies before the \`instanceof\` operator.
|
|
44
|
-
`,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
code: `
|
|
48
|
-
const exists = !key in object;
|
|
49
|
-
`,
|
|
50
|
-
snapshot: `
|
|
51
|
-
const exists = !key in object;
|
|
52
|
-
~
|
|
53
|
-
This negation applies before the \`in\` operator.
|
|
54
|
-
`,
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
valid: [
|
|
58
|
-
`!(key in object);`,
|
|
59
|
-
`!(object instanceof Constructor);`,
|
|
60
|
-
`key in object;`,
|
|
61
|
-
`object instanceof Constructor;`,
|
|
62
|
-
`!flag && key in object;`,
|
|
63
|
-
],
|
|
64
|
-
});
|