@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,70 +0,0 @@
|
|
|
1
|
-
import rule from "./nonOctalDecimalEscapes.js";
|
|
2
|
-
import { ruleTester } from "./ruleTester.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
"\\8"
|
|
9
|
-
`,
|
|
10
|
-
snapshot: `
|
|
11
|
-
"\\8"
|
|
12
|
-
~~
|
|
13
|
-
Non-octal decimal escape sequences (\\8 and \\9) should not be used in string literals.
|
|
14
|
-
`,
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
code: `
|
|
18
|
-
"\\9"
|
|
19
|
-
`,
|
|
20
|
-
snapshot: `
|
|
21
|
-
"\\9"
|
|
22
|
-
~~
|
|
23
|
-
Non-octal decimal escape sequences (\\8 and \\9) should not be used in string literals.
|
|
24
|
-
`,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
code: `
|
|
28
|
-
"w\\8less"
|
|
29
|
-
`,
|
|
30
|
-
snapshot: `
|
|
31
|
-
"w\\8less"
|
|
32
|
-
~~
|
|
33
|
-
Non-octal decimal escape sequences (\\8 and \\9) should not be used in string literals.
|
|
34
|
-
`,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
code: `
|
|
38
|
-
"December 1\\9"
|
|
39
|
-
`,
|
|
40
|
-
snapshot: `
|
|
41
|
-
"December 1\\9"
|
|
42
|
-
~~
|
|
43
|
-
Non-octal decimal escape sequences (\\8 and \\9) should not be used in string literals.
|
|
44
|
-
`,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
code: `
|
|
48
|
-
"Don't use \\8 and \\9 escapes."
|
|
49
|
-
`,
|
|
50
|
-
snapshot: `
|
|
51
|
-
"Don't use \\8 and \\9 escapes."
|
|
52
|
-
~~
|
|
53
|
-
Non-octal decimal escape sequences (\\8 and \\9) should not be used in string literals.
|
|
54
|
-
~~
|
|
55
|
-
Non-octal decimal escape sequences (\\8 and \\9) should not be used in string literals.
|
|
56
|
-
`,
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
code: `
|
|
60
|
-
"\\0\\8"
|
|
61
|
-
`,
|
|
62
|
-
snapshot: `
|
|
63
|
-
"\\0\\8"
|
|
64
|
-
~~
|
|
65
|
-
Non-octal decimal escape sequences (\\8 and \\9) should not be used in string literals.
|
|
66
|
-
`,
|
|
67
|
-
},
|
|
68
|
-
],
|
|
69
|
-
valid: ['"8"', '"9"', '"w8less"', '"December 19"', '"\\\\8"', '"\\0\\u0038"'],
|
|
70
|
-
});
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { typescriptLanguage } from "../language.js";
|
|
4
|
-
|
|
5
|
-
const nonOctalDecimalEscapePattern = /\\[89]/g;
|
|
6
|
-
|
|
7
|
-
export default typescriptLanguage.createRule({
|
|
8
|
-
about: {
|
|
9
|
-
description:
|
|
10
|
-
"Reports non-octal decimal escape sequences (\\8 and \\9) in string literals.",
|
|
11
|
-
id: "nonOctalDecimalEscapes",
|
|
12
|
-
preset: "logical",
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
unexpectedEscape: {
|
|
16
|
-
primary:
|
|
17
|
-
"Non-octal decimal escape sequences (\\8 and \\9) should not be used in string literals.",
|
|
18
|
-
secondary: [
|
|
19
|
-
"Non-octal decimal escape sequences \\8 and \\9 are legacy features that are treated as identity escapes (the same as the literal digits).",
|
|
20
|
-
"They are optional in the ECMAScript specification and not supported in strict mode in all environments.",
|
|
21
|
-
"Use the literal digits directly instead.",
|
|
22
|
-
],
|
|
23
|
-
suggestions: [
|
|
24
|
-
"Remove the backslash to use the literal digit.",
|
|
25
|
-
"If an escape sequence is needed, use a Unicode escape like \\u0038 or \\u0039.",
|
|
26
|
-
],
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
setup(context) {
|
|
30
|
-
function checkNode(
|
|
31
|
-
node: ts.NoSubstitutionTemplateLiteral | ts.StringLiteral,
|
|
32
|
-
) {
|
|
33
|
-
const text = node.getText(context.sourceFile);
|
|
34
|
-
const matches = [...text.matchAll(nonOctalDecimalEscapePattern)];
|
|
35
|
-
|
|
36
|
-
for (const match of matches) {
|
|
37
|
-
// Ignore escapes where the backslash itself is escaped (e.g. "\\\\8" -> literal "\\8").
|
|
38
|
-
// Count the number of consecutive backslashes immediately before the match.
|
|
39
|
-
const matchIndex = match.index;
|
|
40
|
-
let backslashesBefore = 0;
|
|
41
|
-
for (let i = matchIndex - 1; i >= 0 && text[i] === "\\"; i--) {
|
|
42
|
-
backslashesBefore++;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// If there is an odd number of backslashes before this one, the backslash is escaped
|
|
46
|
-
// and should not be treated as an escape sequence.
|
|
47
|
-
if (backslashesBefore % 2 === 1) {
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const start = node.getStart(context.sourceFile) + matchIndex;
|
|
52
|
-
|
|
53
|
-
context.report({
|
|
54
|
-
message: "unexpectedEscape",
|
|
55
|
-
range: {
|
|
56
|
-
begin: start,
|
|
57
|
-
end: start + match[0].length,
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
visitors: {
|
|
65
|
-
NoSubstitutionTemplateLiteral: checkNode,
|
|
66
|
-
StringLiteral: checkNode,
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
},
|
|
70
|
-
});
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import rule from "./numericLiteralParsing.js";
|
|
2
|
-
import { ruleTester } from "./ruleTester.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
const binary = parseInt("111110111", 2);
|
|
9
|
-
`,
|
|
10
|
-
snapshot: `
|
|
11
|
-
const binary = parseInt("111110111", 2);
|
|
12
|
-
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
13
|
-
Use 0b111110111 instead of parseInt with radix 2.
|
|
14
|
-
`,
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
code: `
|
|
18
|
-
const octal = parseInt("767", 8);
|
|
19
|
-
`,
|
|
20
|
-
snapshot: `
|
|
21
|
-
const octal = parseInt("767", 8);
|
|
22
|
-
~~~~~~~~~~~~~~~~~~
|
|
23
|
-
Use 0o767 instead of parseInt with radix 8.
|
|
24
|
-
`,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
code: `
|
|
28
|
-
const hex = parseInt("1F7", 16);
|
|
29
|
-
`,
|
|
30
|
-
snapshot: `
|
|
31
|
-
const hex = parseInt("1F7", 16);
|
|
32
|
-
~~~~~~~~~~~~~~~~~~~
|
|
33
|
-
Use 0x1F7 instead of parseInt with radix 16.
|
|
34
|
-
`,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
code: `
|
|
38
|
-
const value = Number.parseInt("111110111", 2);
|
|
39
|
-
`,
|
|
40
|
-
snapshot: `
|
|
41
|
-
const value = Number.parseInt("111110111", 2);
|
|
42
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
43
|
-
Use 0b111110111 instead of parseInt with radix 2.
|
|
44
|
-
`,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
code: `
|
|
48
|
-
const result = Number.parseInt("767", 8);
|
|
49
|
-
`,
|
|
50
|
-
snapshot: `
|
|
51
|
-
const result = Number.parseInt("767", 8);
|
|
52
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
53
|
-
Use 0o767 instead of parseInt with radix 8.
|
|
54
|
-
`,
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
code: `
|
|
58
|
-
const num = Number.parseInt("1F7", 16);
|
|
59
|
-
`,
|
|
60
|
-
snapshot: `
|
|
61
|
-
const num = Number.parseInt("1F7", 16);
|
|
62
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
63
|
-
Use 0x1F7 instead of parseInt with radix 16.
|
|
64
|
-
`,
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
code: `
|
|
68
|
-
const value = parseInt(\`111110111\`, 2);
|
|
69
|
-
`,
|
|
70
|
-
snapshot: `
|
|
71
|
-
const value = parseInt(\`111110111\`, 2);
|
|
72
|
-
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
73
|
-
Use 0b111110111 instead of parseInt with radix 2.
|
|
74
|
-
`,
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
valid: [
|
|
78
|
-
`const decimal = parseInt("123");`,
|
|
79
|
-
`const value = parseInt("123", 10);`,
|
|
80
|
-
`const ternary = parseInt("102", 3);`,
|
|
81
|
-
`const binary = 0b111110111;`,
|
|
82
|
-
`const octal = 0o767;`,
|
|
83
|
-
`const hex = 0x1F7;`,
|
|
84
|
-
`const dynamic = parseInt(value, 2);`,
|
|
85
|
-
`const variable = parseInt("111", radix);`,
|
|
86
|
-
`const single = parseInt("111");`,
|
|
87
|
-
`Number.parseInt("123");`,
|
|
88
|
-
`Number.parseInt("123", 10);`,
|
|
89
|
-
`
|
|
90
|
-
function parseInt(...values: unknown[]) {}
|
|
91
|
-
parseInt("1", 2);
|
|
92
|
-
export {};
|
|
93
|
-
`,
|
|
94
|
-
`
|
|
95
|
-
const Number = { parseInt(...values: unknown[]) {} };
|
|
96
|
-
Number.parseInt("1", 2);
|
|
97
|
-
export {};
|
|
98
|
-
`,
|
|
99
|
-
],
|
|
100
|
-
});
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { getTSNodeRange } from "../getTSNodeRange.js";
|
|
4
|
-
import { typescriptLanguage } from "../language.js";
|
|
5
|
-
import { isGlobalDeclaration } from "../utils/isGlobalDeclaration.js";
|
|
6
|
-
|
|
7
|
-
function convertToLiteral(value: string, radix: number): string {
|
|
8
|
-
const parsed = Number.parseInt(value, radix);
|
|
9
|
-
if (Number.isNaN(parsed)) {
|
|
10
|
-
return value;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
switch (radix) {
|
|
14
|
-
case 2:
|
|
15
|
-
return `0b${parsed.toString(2)}`;
|
|
16
|
-
case 8:
|
|
17
|
-
return `0o${parsed.toString(8)}`;
|
|
18
|
-
case 16:
|
|
19
|
-
return `0x${parsed.toString(16).toUpperCase()}`;
|
|
20
|
-
default:
|
|
21
|
-
return value;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function getRadixValue(node: ts.Expression): number | undefined {
|
|
26
|
-
if (!ts.isNumericLiteral(node)) {
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const value = Number(node.text);
|
|
31
|
-
if (![2, 8, 16].includes(value)) {
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return value;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// TODO: Use a util like getStaticValue
|
|
39
|
-
function getStringValue(node: ts.Expression): string | undefined {
|
|
40
|
-
return ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)
|
|
41
|
-
? node.text
|
|
42
|
-
: undefined;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export default typescriptLanguage.createRule({
|
|
46
|
-
about: {
|
|
47
|
-
description:
|
|
48
|
-
"Reports parseInt calls with binary, hexadecimal, or octal strings that can be replaced with numeric literals.",
|
|
49
|
-
id: "numericLiteralParsing",
|
|
50
|
-
preset: "stylistic",
|
|
51
|
-
},
|
|
52
|
-
messages: {
|
|
53
|
-
preferLiteral: {
|
|
54
|
-
primary: "Use {{ literal }} instead of parseInt with radix {{ radix }}.",
|
|
55
|
-
secondary: [
|
|
56
|
-
"Binary, octal, and hexadecimal numeric literals are more readable and direct than using parseInt with a radix.",
|
|
57
|
-
"Numeric literals are supported natively and don't require function calls.",
|
|
58
|
-
],
|
|
59
|
-
suggestions: ["Replace the parseInt call with the numeric literal."],
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
setup(context) {
|
|
63
|
-
function checkParseIntCall(node: ts.CallExpression) {
|
|
64
|
-
if (node.arguments.length !== 2) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const stringValue = getStringValue(node.arguments[0]);
|
|
69
|
-
if (!stringValue) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const radixValue = getRadixValue(node.arguments[1]);
|
|
74
|
-
if (!radixValue) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
context.report({
|
|
79
|
-
data: {
|
|
80
|
-
literal: convertToLiteral(stringValue, radixValue),
|
|
81
|
-
radix: String(radixValue),
|
|
82
|
-
},
|
|
83
|
-
message: "preferLiteral",
|
|
84
|
-
range: getTSNodeRange(node, context.sourceFile),
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return {
|
|
89
|
-
visitors: {
|
|
90
|
-
CallExpression: (node) => {
|
|
91
|
-
if (ts.isIdentifier(node.expression)) {
|
|
92
|
-
if (
|
|
93
|
-
node.expression.text === "parseInt" &&
|
|
94
|
-
isGlobalDeclaration(node.expression, context.typeChecker)
|
|
95
|
-
) {
|
|
96
|
-
checkParseIntCall(node);
|
|
97
|
-
}
|
|
98
|
-
} else if (ts.isPropertyAccessExpression(node.expression)) {
|
|
99
|
-
if (
|
|
100
|
-
ts.isIdentifier(node.expression.expression) &&
|
|
101
|
-
node.expression.expression.text === "Number" &&
|
|
102
|
-
ts.isIdentifier(node.expression.name) &&
|
|
103
|
-
node.expression.name.text === "parseInt" &&
|
|
104
|
-
isGlobalDeclaration(
|
|
105
|
-
node.expression.expression,
|
|
106
|
-
context.typeChecker,
|
|
107
|
-
)
|
|
108
|
-
) {
|
|
109
|
-
checkParseIntCall(node);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
},
|
|
116
|
-
});
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import rule from "./objectProto.js";
|
|
2
|
-
import { ruleTester } from "./ruleTester.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
const proto = obj.__proto__;
|
|
9
|
-
`,
|
|
10
|
-
snapshot: `
|
|
11
|
-
const proto = obj.__proto__;
|
|
12
|
-
~~~~~~~~~
|
|
13
|
-
Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.
|
|
14
|
-
`,
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
code: `
|
|
18
|
-
obj.__proto__ = prototype;
|
|
19
|
-
`,
|
|
20
|
-
snapshot: `
|
|
21
|
-
obj.__proto__ = prototype;
|
|
22
|
-
~~~~~~~~~
|
|
23
|
-
Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.
|
|
24
|
-
`,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
code: `
|
|
28
|
-
const descriptor = Object.getOwnPropertyDescriptor(obj, "__proto__");
|
|
29
|
-
const proto = obj.__proto__;
|
|
30
|
-
`,
|
|
31
|
-
snapshot: `
|
|
32
|
-
const descriptor = Object.getOwnPropertyDescriptor(obj, "__proto__");
|
|
33
|
-
const proto = obj.__proto__;
|
|
34
|
-
~~~~~~~~~
|
|
35
|
-
Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.
|
|
36
|
-
`,
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
code: `
|
|
40
|
-
const value = obj["__proto__"];
|
|
41
|
-
`,
|
|
42
|
-
snapshot: `
|
|
43
|
-
const value = obj["__proto__"];
|
|
44
|
-
~~~~~~~~~~~
|
|
45
|
-
Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.
|
|
46
|
-
`,
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
code: `
|
|
50
|
-
obj["__proto__"] = prototype;
|
|
51
|
-
`,
|
|
52
|
-
snapshot: `
|
|
53
|
-
obj["__proto__"] = prototype;
|
|
54
|
-
~~~~~~~~~~~
|
|
55
|
-
Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.
|
|
56
|
-
`,
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
code: `
|
|
60
|
-
if (obj.__proto__ === null) {
|
|
61
|
-
console.log("No prototype");
|
|
62
|
-
}
|
|
63
|
-
`,
|
|
64
|
-
snapshot: `
|
|
65
|
-
if (obj.__proto__ === null) {
|
|
66
|
-
~~~~~~~~~
|
|
67
|
-
Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.
|
|
68
|
-
console.log("No prototype");
|
|
69
|
-
}
|
|
70
|
-
`,
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
code: `
|
|
74
|
-
function getProto(obj: object) {
|
|
75
|
-
return obj.__proto__;
|
|
76
|
-
}
|
|
77
|
-
`,
|
|
78
|
-
snapshot: `
|
|
79
|
-
function getProto(obj: object) {
|
|
80
|
-
return obj.__proto__;
|
|
81
|
-
~~~~~~~~~
|
|
82
|
-
Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.
|
|
83
|
-
}
|
|
84
|
-
`,
|
|
85
|
-
},
|
|
86
|
-
],
|
|
87
|
-
valid: [
|
|
88
|
-
`const proto = Object.getPrototypeOf(obj);`,
|
|
89
|
-
`Object.setPrototypeOf(obj, prototype);`,
|
|
90
|
-
`const obj = Object.create(prototype);`,
|
|
91
|
-
`const descriptor = Object.getOwnPropertyDescriptor(obj, "__proto__");`,
|
|
92
|
-
`const key = "__proto__";`,
|
|
93
|
-
`const string = "obj.__proto__";`,
|
|
94
|
-
`const obj = { "__proto__": null };`,
|
|
95
|
-
`const obj = { __proto__: null };`,
|
|
96
|
-
],
|
|
97
|
-
});
|
package/src/rules/objectProto.ts
DELETED
|
@@ -1,62 +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 using the deprecated __proto__ property to access or modify an object's prototype.",
|
|
9
|
-
id: "objectProto",
|
|
10
|
-
preset: "untyped",
|
|
11
|
-
},
|
|
12
|
-
messages: {
|
|
13
|
-
noProto: {
|
|
14
|
-
primary:
|
|
15
|
-
"Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.",
|
|
16
|
-
secondary: [
|
|
17
|
-
"The __proto__ property is deprecated and not part of the ECMAScript standard.",
|
|
18
|
-
"It is maintained for compatibility with older browsers but can cause performance issues and unexpected behavior.",
|
|
19
|
-
"Direct manipulation of an object's prototype can lead to hidden classes deoptimizations in JavaScript engines.",
|
|
20
|
-
],
|
|
21
|
-
suggestions: [
|
|
22
|
-
"Use Object.getPrototypeOf(obj) to read the prototype of an object.",
|
|
23
|
-
"Use Object.setPrototypeOf(obj, proto) to set the prototype of an object.",
|
|
24
|
-
"Use Object.create(proto) when creating new objects with a specific prototype.",
|
|
25
|
-
],
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
setup(context) {
|
|
29
|
-
return {
|
|
30
|
-
visitors: {
|
|
31
|
-
ElementAccessExpression: (node) => {
|
|
32
|
-
if (
|
|
33
|
-
ts.isStringLiteral(node.argumentExpression) &&
|
|
34
|
-
node.argumentExpression.text === "__proto__"
|
|
35
|
-
) {
|
|
36
|
-
context.report({
|
|
37
|
-
message: "noProto",
|
|
38
|
-
range: {
|
|
39
|
-
begin: node.argumentExpression.getStart(context.sourceFile),
|
|
40
|
-
end: node.argumentExpression.getEnd(),
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
PropertyAccessExpression: (node) => {
|
|
46
|
-
if (
|
|
47
|
-
node.name.kind === ts.SyntaxKind.Identifier &&
|
|
48
|
-
node.name.text === "__proto__"
|
|
49
|
-
) {
|
|
50
|
-
context.report({
|
|
51
|
-
message: "noProto",
|
|
52
|
-
range: {
|
|
53
|
-
begin: node.name.getStart(context.sourceFile),
|
|
54
|
-
end: node.name.getEnd(),
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
},
|
|
62
|
-
});
|