@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
package/lib/plugin.d.ts
CHANGED
|
@@ -2,203 +2,232 @@ export declare const ts: import("@flint.fyi/core").Plugin<import("@flint.fyi/cor
|
|
|
2
2
|
readonly description: "Reports returning a value with type `any` from a function.";
|
|
3
3
|
readonly id: "anyReturns";
|
|
4
4
|
readonly preset: "logical";
|
|
5
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
5
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unsafeReturn" | "unsafeReturnAssignment" | "unsafeReturnThis", undefined>, import("@flint.fyi/core").Rule<{
|
|
6
6
|
readonly description: "Reports using async functions as Promise executor functions.";
|
|
7
7
|
readonly id: "asyncPromiseExecutors";
|
|
8
8
|
readonly preset: "logical";
|
|
9
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
9
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "asyncPromiseExecutor", undefined>, import("@flint.fyi/core").Rule<{
|
|
10
10
|
readonly description: "Reports lexical declarations in case clauses without wrapping them in blocks.";
|
|
11
11
|
readonly id: "caseDeclarations";
|
|
12
12
|
readonly preset: "untyped";
|
|
13
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
13
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unexpectedLexicalDeclaration", undefined>, import("@flint.fyi/core").Rule<{
|
|
14
14
|
readonly description: "Reports switch statements with duplicate case clause test expressions.";
|
|
15
15
|
readonly id: "caseDuplicates";
|
|
16
16
|
readonly preset: "logical";
|
|
17
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
17
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "duplicateCase", undefined>, import("@flint.fyi/core").Rule<{
|
|
18
18
|
readonly description: "Reports using chained assignment expressions (e.g., a = b = c).";
|
|
19
19
|
readonly id: "chainedAssignments";
|
|
20
20
|
readonly preset: "stylistic";
|
|
21
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
21
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noChainedAssignment", undefined>, import("@flint.fyi/core").Rule<{
|
|
22
22
|
readonly description: "Reports reassigning class declarations.";
|
|
23
23
|
readonly id: "classAssignments";
|
|
24
24
|
readonly preset: "untyped";
|
|
25
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
25
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noClassAssign", undefined>, import("@flint.fyi/core").Rule<{
|
|
26
26
|
readonly description: "Reports unnecessary extra non-null assertions.";
|
|
27
27
|
readonly id: "consecutiveNonNullAssertions";
|
|
28
28
|
readonly preset: "logical";
|
|
29
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
29
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "consecutiveNonNullAssertion", undefined>, import("@flint.fyi/core").Rule<{
|
|
30
30
|
readonly description: "Reports attempting to reassign variables declared with const.";
|
|
31
31
|
readonly id: "constantAssignments";
|
|
32
32
|
readonly preset: "untyped";
|
|
33
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
33
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noConstAssign", undefined>, import("@flint.fyi/core").Rule<{
|
|
34
34
|
readonly description: "Reports returning values from constructor functions.";
|
|
35
35
|
readonly id: "constructorReturns";
|
|
36
36
|
readonly preset: "untyped";
|
|
37
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
37
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noConstructorReturn", undefined>, import("@flint.fyi/core").Rule<{
|
|
38
38
|
readonly description: "Reports using debugger statements.";
|
|
39
39
|
readonly id: "debuggerStatements";
|
|
40
40
|
readonly preset: "logical";
|
|
41
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
41
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noDebugger", undefined>, import("@flint.fyi/core").Rule<{
|
|
42
42
|
readonly description: "Reports switch statements where the default clause is not last.";
|
|
43
43
|
readonly id: "defaultCaseLast";
|
|
44
44
|
readonly preset: "logical";
|
|
45
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
45
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "defaultCaseShouldBeLast", undefined>, import("@flint.fyi/core").Rule<{
|
|
46
46
|
readonly description: "Reports functions with duplicate parameter names in their signatures.";
|
|
47
47
|
readonly id: "duplicateArguments";
|
|
48
48
|
readonly preset: "untyped";
|
|
49
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
49
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "duplicateParam", undefined>, import("@flint.fyi/core").Rule<{
|
|
50
50
|
readonly description: "Reports duplicate conditions in if-else-if chains that make code unreachable.";
|
|
51
51
|
readonly id: "elseIfDuplicates";
|
|
52
52
|
readonly preset: "logical";
|
|
53
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
53
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "duplicateCondition", undefined>, import("@flint.fyi/core").Rule<{
|
|
54
54
|
readonly description: "Reports empty block statements that should contain code.";
|
|
55
55
|
readonly id: "emptyBlocks";
|
|
56
56
|
readonly preset: "stylistic";
|
|
57
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
57
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "emptyBlock", undefined>, import("@flint.fyi/core").Rule<{
|
|
58
58
|
readonly description: "Reports using empty destructuring patterns that destructure no values.";
|
|
59
59
|
readonly id: "emptyDestructures";
|
|
60
60
|
readonly preset: "logical";
|
|
61
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
61
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "emptyPattern", undefined>, import("@flint.fyi/core").Rule<{
|
|
62
62
|
readonly description: "Reports empty static initialization blocks within class declarations.";
|
|
63
63
|
readonly id: "emptyStaticBlocks";
|
|
64
64
|
readonly preset: "stylistic";
|
|
65
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
65
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "emptyStaticBlock", undefined>, import("@flint.fyi/core").Rule<{
|
|
66
66
|
readonly description: "Reports reassigning exception parameters in catch clauses.";
|
|
67
67
|
readonly id: "exceptionAssignments";
|
|
68
68
|
readonly preset: "logical";
|
|
69
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
69
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noExAssign", undefined>, import("@flint.fyi/core").Rule<{
|
|
70
|
+
readonly description: "Reports control flow statements in `finally` blocks that can override control flow in `try`/`catch` blocks.";
|
|
71
|
+
readonly id: "finallyStatementSafety";
|
|
72
|
+
readonly preset: "logical";
|
|
73
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unsafeFinally", undefined>, import("@flint.fyi/core").Rule<{
|
|
70
74
|
readonly description: "Reports for loops with counter variables that move in the wrong direction.";
|
|
71
75
|
readonly id: "forDirections";
|
|
72
76
|
readonly preset: "stylistic";
|
|
73
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
77
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "wrongDirection", undefined>, import("@flint.fyi/core").Rule<{
|
|
74
78
|
readonly description: "Reports iterating over an array with a for-in loop.";
|
|
75
79
|
readonly id: "forInArrays";
|
|
76
80
|
readonly preset: "logical";
|
|
77
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
81
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "forIn", undefined>, import("@flint.fyi/core").Rule<{
|
|
78
82
|
readonly description: "Reports reassigning variables declared with function declarations.";
|
|
79
83
|
readonly id: "functionAssignments";
|
|
80
84
|
readonly preset: "untyped";
|
|
81
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
85
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noFunctionAssignment", undefined>, import("@flint.fyi/core").Rule<{
|
|
86
|
+
readonly description: "Reports using `.apply()` or `.call()` or when the context (`this` value) provides no benefit.";
|
|
87
|
+
readonly id: "functionCurryingRedundancy";
|
|
88
|
+
readonly preset: "logical";
|
|
89
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unnecessaryCall", undefined>, import("@flint.fyi/core").Rule<{
|
|
82
90
|
readonly description: "Reports using the Function constructor to create functions from strings.";
|
|
83
91
|
readonly id: "functionNewCalls";
|
|
84
92
|
readonly preset: "logical";
|
|
85
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
93
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noFunctionConstructor", undefined>, import("@flint.fyi/core").Rule<{
|
|
86
94
|
readonly description: "Reports generator functions that do not yield values.";
|
|
87
95
|
readonly id: "generatorFunctionYields";
|
|
88
96
|
readonly preset: "logical";
|
|
89
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
97
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "missingYield", undefined>, import("@flint.fyi/core").Rule<{
|
|
90
98
|
readonly description: "Reports attempting to assign to read-only global variables such as undefined, NaN, Infinity, Object, etc.";
|
|
91
99
|
readonly id: "globalAssignments";
|
|
92
100
|
readonly preset: "untyped";
|
|
93
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
101
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noGlobalAssign", undefined>, import("@flint.fyi/core").Rule<{
|
|
94
102
|
readonly description: "Reports calling global objects like Math, JSON, or Reflect as functions.";
|
|
95
103
|
readonly id: "globalObjectCalls";
|
|
96
104
|
readonly preset: "untyped";
|
|
97
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
105
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noGlobalObjectCall", undefined>, import("@flint.fyi/core").Rule<{
|
|
98
106
|
readonly description: "Reports using legacy `namespace` declarations.";
|
|
99
107
|
readonly id: "namespaceDeclarations";
|
|
100
108
|
readonly preset: "logical";
|
|
101
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
109
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferModules", {
|
|
102
110
|
readonly allowDeclarations: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
103
111
|
readonly allowDefinitionFiles: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
104
112
|
}>, import("@flint.fyi/core").Rule<{
|
|
105
113
|
readonly description: "Reports comparisons with -0 that may not behave as expected.";
|
|
106
114
|
readonly id: "negativeZeroComparisons";
|
|
107
115
|
readonly preset: "logical";
|
|
108
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
116
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unexpectedNegativeZeroComparison", undefined>, import("@flint.fyi/core").Rule<{
|
|
109
117
|
readonly description: "Reports standalone new expressions that don't use the constructed object.";
|
|
110
118
|
readonly id: "newExpressions";
|
|
111
119
|
readonly preset: "logical";
|
|
112
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
120
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noStandaloneNew", undefined>, import("@flint.fyi/core").Rule<{
|
|
113
121
|
readonly description: "Disallows using `new` with global non-constructor functions like Symbol and BigInt.";
|
|
114
122
|
readonly id: "newNativeNonConstructors";
|
|
115
123
|
readonly preset: "untyped";
|
|
116
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
124
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noNewNonConstructor", undefined>, import("@flint.fyi/core").Rule<{
|
|
117
125
|
readonly description: "Reports non-octal decimal escape sequences (\\8 and \\9) in string literals.";
|
|
118
126
|
readonly id: "nonOctalDecimalEscapes";
|
|
119
127
|
readonly preset: "logical";
|
|
120
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
128
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unexpectedEscape", undefined>, import("@flint.fyi/core").Rule<{
|
|
121
129
|
readonly description: "Reports parseInt calls with binary, hexadecimal, or octal strings that can be replaced with numeric literals.";
|
|
122
130
|
readonly id: "numericLiteralParsing";
|
|
123
131
|
readonly preset: "stylistic";
|
|
124
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
132
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferLiteral", undefined>, import("@flint.fyi/core").Rule<{
|
|
133
|
+
readonly description: "Prefer `{}` object literal notation or `Object.create` instead of calling or constructing `Object`.";
|
|
134
|
+
readonly id: "objectCalls";
|
|
135
|
+
readonly preset: "stylistic";
|
|
136
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferObjectLiteral", undefined>, import("@flint.fyi/core").Rule<{
|
|
137
|
+
readonly description: "Prefer Object.hasOwn() over Object.prototype.hasOwnProperty.call() for checking own properties.";
|
|
138
|
+
readonly id: "objectHasOwns";
|
|
139
|
+
readonly preset: "stylistic";
|
|
140
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferHasOwn", undefined>, import("@flint.fyi/core").Rule<{
|
|
141
|
+
readonly description: "Reports unnecessary duplicate keys that override previous values.";
|
|
142
|
+
readonly id: "objectKeyDuplicates";
|
|
143
|
+
readonly preset: "untyped";
|
|
144
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "duplicateKey", undefined>, import("@flint.fyi/core").Rule<{
|
|
125
145
|
readonly description: "Reports using the deprecated __proto__ property to access or modify an object's prototype.";
|
|
126
146
|
readonly id: "objectProto";
|
|
127
147
|
readonly preset: "untyped";
|
|
128
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
148
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noProto", undefined>, import("@flint.fyi/core").Rule<{
|
|
149
|
+
readonly description: "Reports direct calls to Object.prototype methods on object instances.";
|
|
150
|
+
readonly id: "objectPrototypeBuiltIns";
|
|
151
|
+
readonly preset: "logical";
|
|
152
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "prototypeBuiltIn", undefined>, import("@flint.fyi/core").Rule<{
|
|
129
153
|
readonly description: "Reports using octal escape sequences in string literals.";
|
|
130
154
|
readonly id: "octalEscapes";
|
|
131
155
|
readonly preset: "logical";
|
|
132
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
156
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noOctalEscape", undefined>, import("@flint.fyi/core").Rule<{
|
|
133
157
|
readonly description: "Reports using legacy octal numeric literals.";
|
|
134
158
|
readonly id: "octalNumbers";
|
|
135
159
|
readonly preset: "untyped";
|
|
136
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
160
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noOctalNumber", undefined>, import("@flint.fyi/core").Rule<{
|
|
137
161
|
readonly description: "Reports using assignment expressions in return statements.";
|
|
138
162
|
readonly id: "returnAssignments";
|
|
139
163
|
readonly preset: "stylistic";
|
|
140
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
164
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noReturnAssign", undefined>, import("@flint.fyi/core").Rule<{
|
|
141
165
|
readonly description: "Reports self-assignments which have no effect and are likely errors.";
|
|
142
166
|
readonly id: "selfAssignments";
|
|
143
167
|
readonly preset: "logical";
|
|
144
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
168
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "selfAssignment", undefined>, import("@flint.fyi/core").Rule<{
|
|
145
169
|
readonly description: "Reports comparing a value to itself.";
|
|
146
170
|
readonly id: "selfComparisons";
|
|
147
171
|
readonly preset: "logical";
|
|
148
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
172
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noSelfComparison", undefined>, import("@flint.fyi/core").Rule<{
|
|
149
173
|
readonly description: "Reports using the comma operator in expressions.";
|
|
150
174
|
readonly id: "sequences";
|
|
151
175
|
readonly preset: "untyped";
|
|
152
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
176
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noSequences", undefined>, import("@flint.fyi/core").Rule<{
|
|
153
177
|
readonly description: "Reports variable declarations that shadow JavaScript's restricted names.";
|
|
154
178
|
readonly id: "shadowedRestrictedNames";
|
|
155
179
|
readonly preset: "untyped";
|
|
156
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
180
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "shadowedRestrictedName", undefined>, import("@flint.fyi/core").Rule<{
|
|
157
181
|
readonly description: "Reports array literals with holes (sparse arrays).";
|
|
158
182
|
readonly id: "sparseArrays";
|
|
159
183
|
readonly preset: "logical";
|
|
160
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
184
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noSparseArray", undefined>, import("@flint.fyi/core").Rule<{
|
|
161
185
|
readonly description: "Reports Symbol() calls without description arguments.";
|
|
162
186
|
readonly id: "symbolDescriptions";
|
|
163
187
|
readonly preset: "stylistic";
|
|
164
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
188
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "missingDescription", undefined>, import("@flint.fyi/core").Rule<{
|
|
165
189
|
readonly description: "Reports typeof expressions that compare impossible string literals.";
|
|
166
190
|
readonly id: "typeofComparisons";
|
|
167
191
|
readonly preset: "untyped";
|
|
168
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
192
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "invalidValue", undefined>, import("@flint.fyi/core").Rule<{
|
|
169
193
|
readonly description: "Reports variables that are declared but never assigned a value.";
|
|
170
194
|
readonly id: "unassignedVariables";
|
|
171
195
|
readonly preset: "untyped";
|
|
172
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
196
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noUnassigned", undefined>, import("@flint.fyi/core").Rule<{
|
|
173
197
|
readonly description: "Reports using variables that are not defined.";
|
|
174
198
|
readonly id: "undefinedVariables";
|
|
175
199
|
readonly preset: "untyped";
|
|
176
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
200
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "undefinedVariable", undefined>, import("@flint.fyi/core").Rule<{
|
|
177
201
|
readonly description: "Reports files with Unicode Byte Order Marks (BOMs).";
|
|
178
202
|
readonly id: "unicodeBOMs";
|
|
179
203
|
readonly preset: "stylistic";
|
|
180
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
204
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noBOM", undefined>, import("@flint.fyi/core").Rule<{
|
|
181
205
|
readonly description: "Reports standalone block statements that don't create a meaningful scope.";
|
|
182
206
|
readonly id: "unnecessaryBlocks";
|
|
183
207
|
readonly preset: "stylistic";
|
|
184
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
208
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unnecessaryBlock", undefined>, import("@flint.fyi/core").Rule<{
|
|
185
209
|
readonly description: "Reports catch clauses that only rethrow the caught error without modification.";
|
|
186
210
|
readonly id: "unnecessaryCatches";
|
|
187
211
|
readonly preset: "logical";
|
|
188
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
212
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unnecessaryCatch", undefined>, import("@flint.fyi/core").Rule<{
|
|
189
213
|
readonly description: "Reports string concatenation using the + operator when both operands are string literals.";
|
|
190
214
|
readonly id: "unnecessaryConcatenation";
|
|
191
215
|
readonly preset: "stylistic";
|
|
192
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
216
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unnecessaryConcatenation", undefined>, import("@flint.fyi/core").Rule<{
|
|
193
217
|
readonly description: "Reports negating the left operand of `in` or `instanceof` relations.";
|
|
194
218
|
readonly id: "unsafeNegations";
|
|
195
219
|
readonly preset: "untyped";
|
|
196
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
220
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferNegatingRelation", undefined>, import("@flint.fyi/core").Rule<{
|
|
197
221
|
readonly description: "Reports attempting to delete variables with the delete operator.";
|
|
198
222
|
readonly id: "variableDeletions";
|
|
199
223
|
readonly preset: "untyped";
|
|
200
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
224
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noDeleteVar", undefined>, import("@flint.fyi/core").Rule<{
|
|
201
225
|
readonly description: "Reports using the void operator.";
|
|
202
226
|
readonly id: "voidOperator";
|
|
203
227
|
readonly preset: "stylistic";
|
|
204
|
-
}, import("./nodes.js").TSNodesByName, import("./language.js").
|
|
228
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noVoid", undefined>, import("@flint.fyi/core").Rule<{
|
|
229
|
+
readonly description: "Reports using with statements";
|
|
230
|
+
readonly id: "withStatements";
|
|
231
|
+
readonly preset: "untyped";
|
|
232
|
+
}, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "withStatement", undefined>]>;
|
|
233
|
+
//# sourceMappingURL=plugin.d.ts.map
|
package/lib/plugin.js
CHANGED
|
@@ -16,9 +16,11 @@ import emptyBlocks from "./rules/emptyBlocks.js";
|
|
|
16
16
|
import emptyDestructures from "./rules/emptyDestructures.js";
|
|
17
17
|
import emptyStaticBlocks from "./rules/emptyStaticBlocks.js";
|
|
18
18
|
import exceptionAssignments from "./rules/exceptionAssignments.js";
|
|
19
|
+
import finallyStatementSafety from "./rules/finallyStatementSafety.js";
|
|
19
20
|
import forDirections from "./rules/forDirections.js";
|
|
20
21
|
import forInArrays from "./rules/forInArrays.js";
|
|
21
22
|
import functionAssignments from "./rules/functionAssignments.js";
|
|
23
|
+
import functionCurryingRedundancy from "./rules/functionCurryingRedundancy.js";
|
|
22
24
|
import functionNewCalls from "./rules/functionNewCalls.js";
|
|
23
25
|
import generatorFunctionYields from "./rules/generatorFunctionYields.js";
|
|
24
26
|
import globalAssignments from "./rules/globalAssignments.js";
|
|
@@ -29,7 +31,11 @@ import newExpressions from "./rules/newExpressions.js";
|
|
|
29
31
|
import newNativeNonConstructors from "./rules/newNativeNonConstructors.js";
|
|
30
32
|
import nonOctalDecimalEscapes from "./rules/nonOctalDecimalEscapes.js";
|
|
31
33
|
import numericLiteralParsing from "./rules/numericLiteralParsing.js";
|
|
34
|
+
import objectCalls from "./rules/objectCalls.js";
|
|
35
|
+
import objectHasOwns from "./rules/objectHasOwns.js";
|
|
36
|
+
import objectKeyDuplicates from "./rules/objectKeyDuplicates.js";
|
|
32
37
|
import objectProto from "./rules/objectProto.js";
|
|
38
|
+
import objectPrototypeBuiltIns from "./rules/objectPrototypeBuiltIns.js";
|
|
33
39
|
import octalEscapes from "./rules/octalEscapes.js";
|
|
34
40
|
import octalNumbers from "./rules/octalNumbers.js";
|
|
35
41
|
import returnAssignments from "./rules/returnAssignments.js";
|
|
@@ -49,11 +55,12 @@ import unnecessaryConcatenation from "./rules/unnecessaryConcatenation.js";
|
|
|
49
55
|
import unsafeNegations from "./rules/unsafeNegations.js";
|
|
50
56
|
import variableDeletions from "./rules/variableDeletions.js";
|
|
51
57
|
import voidOperator from "./rules/voidOperator.js";
|
|
58
|
+
import withStatements from "./rules/withStatements.js";
|
|
52
59
|
export const ts = createPlugin({
|
|
53
60
|
files: {
|
|
54
61
|
all: ["**/*.{cjs,js,jsx,mjs,ts,tsx}"],
|
|
55
62
|
},
|
|
56
|
-
name: "
|
|
63
|
+
name: "TypeScript",
|
|
57
64
|
rules: [
|
|
58
65
|
anyReturns,
|
|
59
66
|
asyncPromiseExecutors,
|
|
@@ -72,9 +79,11 @@ export const ts = createPlugin({
|
|
|
72
79
|
emptyDestructures,
|
|
73
80
|
emptyStaticBlocks,
|
|
74
81
|
exceptionAssignments,
|
|
82
|
+
finallyStatementSafety,
|
|
75
83
|
forDirections,
|
|
76
84
|
forInArrays,
|
|
77
85
|
functionAssignments,
|
|
86
|
+
functionCurryingRedundancy,
|
|
78
87
|
functionNewCalls,
|
|
79
88
|
generatorFunctionYields,
|
|
80
89
|
globalAssignments,
|
|
@@ -85,7 +94,11 @@ export const ts = createPlugin({
|
|
|
85
94
|
newNativeNonConstructors,
|
|
86
95
|
nonOctalDecimalEscapes,
|
|
87
96
|
numericLiteralParsing,
|
|
97
|
+
objectCalls,
|
|
98
|
+
objectHasOwns,
|
|
99
|
+
objectKeyDuplicates,
|
|
88
100
|
objectProto,
|
|
101
|
+
objectPrototypeBuiltIns,
|
|
89
102
|
octalEscapes,
|
|
90
103
|
octalNumbers,
|
|
91
104
|
returnAssignments,
|
|
@@ -105,5 +118,7 @@ export const ts = createPlugin({
|
|
|
105
118
|
unsafeNegations,
|
|
106
119
|
variableDeletions,
|
|
107
120
|
voidOperator,
|
|
121
|
+
withStatements,
|
|
108
122
|
],
|
|
109
123
|
});
|
|
124
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
export interface TypeScriptBasedLanguageFile extends Partial<Disposable> {
|
|
3
|
+
program: ts.Program;
|
|
4
|
+
sourceFile: ts.SourceFile;
|
|
5
|
+
}
|
|
6
|
+
export interface TypeScriptBasedLanguageFileFactoryDefinition {
|
|
7
|
+
createFromDisk(filePathAbsolute: string): TypeScriptBasedLanguageFile;
|
|
8
|
+
createFromVirtual(filePathAbsolute: string, sourceText: string): TypeScriptBasedLanguageFile;
|
|
9
|
+
}
|
|
10
|
+
export declare function prepareTypeScriptBasedLanguage(): TypeScriptBasedLanguageFileFactoryDefinition;
|
|
11
|
+
//# sourceMappingURL=prepareTypeScriptBasedLanguage.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createProjectService } from "@typescript-eslint/project-service";
|
|
2
|
+
import { createFSBackedSystem, createVirtualTypeScriptEnvironment, } from "@typescript/vfs";
|
|
3
|
+
import { CachedFactory } from "cached-factory";
|
|
4
|
+
import { debugForFile } from "debug-for-file";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import * as ts from "typescript";
|
|
7
|
+
import { createTypeScriptFileFromProjectService } from "./createTypeScriptFileFromProjectService.js";
|
|
8
|
+
const projectRoot = path.join(import.meta.dirname, "../..");
|
|
9
|
+
const log = debugForFile(import.meta.filename);
|
|
10
|
+
export function prepareTypeScriptBasedLanguage() {
|
|
11
|
+
const { service } = createProjectService();
|
|
12
|
+
const seenPrograms = new Set();
|
|
13
|
+
const environments = new CachedFactory((filePathAbsolute) => {
|
|
14
|
+
const system = createFSBackedSystem(new Map([[filePathAbsolute, "// ..."]]), projectRoot, ts);
|
|
15
|
+
return createVirtualTypeScriptEnvironment(system, [filePathAbsolute], ts, {
|
|
16
|
+
skipLibCheck: true,
|
|
17
|
+
target: ts.ScriptTarget.ESNext,
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
const servicePrograms = new CachedFactory((filePathAbsolute) => {
|
|
21
|
+
log("Opening client file:", filePathAbsolute);
|
|
22
|
+
service.openClientFile(filePathAbsolute);
|
|
23
|
+
log("Retrieving client services:", filePathAbsolute);
|
|
24
|
+
const scriptInfo = service.getScriptInfo(filePathAbsolute);
|
|
25
|
+
if (!scriptInfo) {
|
|
26
|
+
throw new Error(`Could not find script info for file: ${filePathAbsolute}`);
|
|
27
|
+
}
|
|
28
|
+
const defaultProject = service.getDefaultProjectForFile(scriptInfo.fileName, true);
|
|
29
|
+
if (!defaultProject) {
|
|
30
|
+
throw new Error(`Could not find default project for file: ${filePathAbsolute}`);
|
|
31
|
+
}
|
|
32
|
+
const program = defaultProject.getLanguageService(true).getProgram();
|
|
33
|
+
if (!program) {
|
|
34
|
+
throw new Error(`Could not retrieve program for file: ${filePathAbsolute}`);
|
|
35
|
+
}
|
|
36
|
+
return program;
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
createFromDisk: (filePathAbsolute) => {
|
|
40
|
+
const program = servicePrograms.get(filePathAbsolute);
|
|
41
|
+
seenPrograms.add(program);
|
|
42
|
+
return createTypeScriptFileFromProjectService(filePathAbsolute, program, service);
|
|
43
|
+
},
|
|
44
|
+
createFromVirtual: (filePathAbsolute, sourceText) => {
|
|
45
|
+
const environment = environments.get(filePathAbsolute);
|
|
46
|
+
environment.updateFile(filePathAbsolute, sourceText);
|
|
47
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
48
|
+
const sourceFile = environment.getSourceFile(filePathAbsolute);
|
|
49
|
+
const program = environment.languageService.getProgram();
|
|
50
|
+
/* eslint-enable @typescript-eslint/no-non-null-assertion */
|
|
51
|
+
seenPrograms.add(program);
|
|
52
|
+
return {
|
|
53
|
+
program,
|
|
54
|
+
sourceFile,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=prepareTypeScriptBasedLanguage.js.map
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { TypeScriptBasedLanguageFile } from "./prepareTypeScriptBasedLanguage.js";
|
|
2
|
+
export declare function prepareTypeScriptFile(file: TypeScriptBasedLanguageFile): {
|
|
3
|
+
file: {
|
|
4
|
+
cache?: import("@flint.fyi/core").LanguageFileCacheImpacts;
|
|
5
|
+
getDiagnostics?(): import("@flint.fyi/core").LanguageDiagnostics;
|
|
6
|
+
runRule<OptionsSchema extends import("@flint.fyi/core").AnyOptionalSchema | undefined = import("@flint.fyi/core").AnyOptionalSchema | undefined>(rule: import("@flint.fyi/core").AnyRuleDefinition<OptionsSchema>, options: import("@flint.fyi/core").InferredObject<OptionsSchema>): import("@flint.fyi/utils").PromiseOrSync<import("@flint.fyi/core").NormalizedReport[]>;
|
|
7
|
+
[Symbol.dispose]?: (() => void) | undefined;
|
|
8
|
+
};
|
|
5
9
|
directives: import("@flint.fyi/core").CommentDirective[];
|
|
6
10
|
reports: import("@flint.fyi/core").FileReport[];
|
|
7
11
|
};
|
|
12
|
+
//# sourceMappingURL=prepareTypeScriptFile.d.ts.map
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
import { createTypeScriptFileFromProgram } from "./createTypeScriptFileFromProgram.js";
|
|
1
2
|
import { parseDirectivesFromTypeScriptFile } from "./directives/parseDirectivesFromTypeScriptFile.js";
|
|
2
|
-
export function prepareTypeScriptFile(
|
|
3
|
+
export function prepareTypeScriptFile(file) {
|
|
4
|
+
const { program, sourceFile, [Symbol.dispose]: onDispose } = file;
|
|
3
5
|
return {
|
|
4
6
|
...parseDirectivesFromTypeScriptFile(sourceFile),
|
|
5
|
-
file:
|
|
7
|
+
file: {
|
|
8
|
+
...(onDispose != null && { [Symbol.dispose]: onDispose }),
|
|
9
|
+
...createTypeScriptFileFromProgram(program, sourceFile),
|
|
10
|
+
},
|
|
6
11
|
};
|
|
7
12
|
}
|
|
13
|
+
//# sourceMappingURL=prepareTypeScriptFile.js.map
|
|
@@ -2,5 +2,6 @@ declare const _default: import("@flint.fyi/core").Rule<{
|
|
|
2
2
|
readonly description: "Reports returning a value with type `any` from a function.";
|
|
3
3
|
readonly id: "anyReturns";
|
|
4
4
|
readonly preset: "logical";
|
|
5
|
-
}, import("../nodes.js").TSNodesByName, import("../language.js").
|
|
5
|
+
}, import("../nodes.js").TSNodesByName, import("../language.js").TypeScriptFileServices, "unsafeReturn" | "unsafeReturnAssignment" | "unsafeReturnThis", undefined>;
|
|
6
6
|
export default _default;
|
|
7
|
+
//# sourceMappingURL=anyReturns.d.ts.map
|
package/lib/rules/anyReturns.js
CHANGED
|
@@ -46,10 +46,9 @@ export default typescriptLanguage.createRule({
|
|
|
46
46
|
},
|
|
47
47
|
},
|
|
48
48
|
setup(context) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
const anyType = discriminateAnyType(type, context.typeChecker, context.program, returnNode);
|
|
49
|
+
function checkReturn(returnNode, reportingNode, program, typeChecker) {
|
|
50
|
+
const type = typeChecker.getTypeAtLocation(returnNode);
|
|
51
|
+
const anyType = discriminateAnyType(type, typeChecker, program, returnNode);
|
|
53
52
|
const functionNode = ts.findAncestor(returnNode,
|
|
54
53
|
// TODO: I believe isFunctionLikeDeclaration was incorrectly marked
|
|
55
54
|
// as deprecated in https://github.com/JoshuaKGoldberg/ts-api-utils/pull/124
|
|
@@ -62,16 +61,16 @@ export default typescriptLanguage.createRule({
|
|
|
62
61
|
return;
|
|
63
62
|
}
|
|
64
63
|
// function has an explicit return type, so ensure it's a safe return
|
|
65
|
-
const returnNodeType = getConstrainedTypeAtLocation(returnNode,
|
|
64
|
+
const returnNodeType = getConstrainedTypeAtLocation(returnNode, typeChecker);
|
|
66
65
|
// function expressions will not have their return type modified based on receiver typing
|
|
67
66
|
// so we have to use the contextual typing in these cases, i.e.
|
|
68
67
|
// const foo1: () => Set<string> = () => new Set<any>();
|
|
69
68
|
// the return type of the arrow function is Set<any> even though the variable is typed as Set<string>
|
|
70
69
|
let functionType = ts.isFunctionExpression(functionNode) ||
|
|
71
70
|
ts.isArrowFunction(functionNode)
|
|
72
|
-
?
|
|
73
|
-
:
|
|
74
|
-
functionType ??=
|
|
71
|
+
? typeChecker.getContextualType(functionNode)
|
|
72
|
+
: typeChecker.getTypeAtLocation(functionNode);
|
|
73
|
+
functionType ??= typeChecker.getTypeAtLocation(functionNode);
|
|
75
74
|
const callSignatures = tsutils.getCallSignaturesOfType(functionType);
|
|
76
75
|
// If there is an explicit type annotation *and* that type matches the actual
|
|
77
76
|
// function return type, we shouldn't complain (it's intentional, even if unsafe)
|
|
@@ -83,8 +82,8 @@ export default typescriptLanguage.createRule({
|
|
|
83
82
|
return;
|
|
84
83
|
}
|
|
85
84
|
if (tsutils.includesModifier(functionNode.modifiers, ts.SyntaxKind.AsyncKeyword)) {
|
|
86
|
-
const awaitedSignatureReturnType =
|
|
87
|
-
const awaitedReturnNodeType =
|
|
85
|
+
const awaitedSignatureReturnType = typeChecker.getAwaitedType(signatureReturnType);
|
|
86
|
+
const awaitedReturnNodeType = typeChecker.getAwaitedType(returnNodeType);
|
|
88
87
|
if (awaitedReturnNodeType === awaitedSignatureReturnType ||
|
|
89
88
|
(awaitedSignatureReturnType &&
|
|
90
89
|
tsutils.isTypeFlagSet(awaitedSignatureReturnType, ts.TypeFlags.Any | ts.TypeFlags.Unknown))) {
|
|
@@ -103,11 +102,11 @@ export default typescriptLanguage.createRule({
|
|
|
103
102
|
return;
|
|
104
103
|
}
|
|
105
104
|
if (anyType === AnyType.AnyArray &&
|
|
106
|
-
|
|
107
|
-
tsutils.isTypeFlagSet(
|
|
105
|
+
typeChecker.isArrayType(functionReturnType) &&
|
|
106
|
+
tsutils.isTypeFlagSet(typeChecker.getTypeArguments(functionReturnType)[0], ts.TypeFlags.Unknown)) {
|
|
108
107
|
return;
|
|
109
108
|
}
|
|
110
|
-
const awaitedType =
|
|
109
|
+
const awaitedType = typeChecker.getAwaitedType(functionReturnType);
|
|
111
110
|
if (awaitedType &&
|
|
112
111
|
anyType === AnyType.PromiseAny &&
|
|
113
112
|
tsutils.isTypeFlagSet(awaitedType, ts.TypeFlags.Unknown)) {
|
|
@@ -120,11 +119,11 @@ export default typescriptLanguage.createRule({
|
|
|
120
119
|
}
|
|
121
120
|
let message = "unsafeReturn";
|
|
122
121
|
const isErrorType = tsutils.isIntrinsicErrorType(returnNodeType);
|
|
123
|
-
if (!
|
|
122
|
+
if (!tsutils.isStrictCompilerOptionEnabled(program.getCompilerOptions(), "noImplicitThis")) {
|
|
124
123
|
// `return this`
|
|
125
124
|
const thisExpression = getThisExpression(returnNode);
|
|
126
125
|
if (thisExpression &&
|
|
127
|
-
tsutils.isTypeFlagSet(getConstrainedTypeAtLocation(thisExpression,
|
|
126
|
+
tsutils.isTypeFlagSet(getConstrainedTypeAtLocation(thisExpression, typeChecker), ts.TypeFlags.Any)) {
|
|
128
127
|
message = "unsafeReturnThis";
|
|
129
128
|
}
|
|
130
129
|
}
|
|
@@ -150,15 +149,15 @@ export default typescriptLanguage.createRule({
|
|
|
150
149
|
const signature = functionType.getCallSignatures().at(0);
|
|
151
150
|
if (signature) {
|
|
152
151
|
const functionReturnType = signature.getReturnType();
|
|
153
|
-
const result = isUnsafeAssignment(returnNodeType, functionReturnType,
|
|
152
|
+
const result = isUnsafeAssignment(returnNodeType, functionReturnType, typeChecker, returnNode);
|
|
154
153
|
if (!result) {
|
|
155
154
|
return;
|
|
156
155
|
}
|
|
157
156
|
const { receiver, sender } = result;
|
|
158
157
|
context.report({
|
|
159
158
|
data: {
|
|
160
|
-
receiver:
|
|
161
|
-
sender:
|
|
159
|
+
receiver: typeChecker.typeToString(receiver),
|
|
160
|
+
sender: typeChecker.typeToString(sender),
|
|
162
161
|
},
|
|
163
162
|
message: "unsafeReturnAssignment",
|
|
164
163
|
range: {
|
|
@@ -171,17 +170,18 @@ export default typescriptLanguage.createRule({
|
|
|
171
170
|
}
|
|
172
171
|
return {
|
|
173
172
|
visitors: {
|
|
174
|
-
ArrowFunction: (node) => {
|
|
173
|
+
ArrowFunction: (node, { program, typeChecker }) => {
|
|
175
174
|
if (!ts.isBlock(node.body)) {
|
|
176
|
-
checkReturn(node.body, node.body);
|
|
175
|
+
checkReturn(node.body, node.body, program, typeChecker);
|
|
177
176
|
}
|
|
178
177
|
},
|
|
179
|
-
ReturnStatement: (node) => {
|
|
178
|
+
ReturnStatement: (node, { program, typeChecker }) => {
|
|
180
179
|
if (node.expression != null) {
|
|
181
|
-
checkReturn(node.expression, node);
|
|
180
|
+
checkReturn(node.expression, node, program, typeChecker);
|
|
182
181
|
}
|
|
183
182
|
},
|
|
184
183
|
},
|
|
185
184
|
};
|
|
186
185
|
},
|
|
187
186
|
});
|
|
187
|
+
//# sourceMappingURL=anyReturns.js.map
|