diff --git a/packages/eslint-plugin/src/rules/consistent-type-definitions.ts b/packages/eslint-plugin/src/rules/consistent-type-definitions.ts index f90d1c56613..d8d574d4d25 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-definitions.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-definitions.ts @@ -1,4 +1,8 @@ -import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; +import { + AST_TOKEN_TYPES, + TSESLint, + TSESTree, +} from '@typescript-eslint/experimental-utils'; import * as util from '../util'; export default util.createRule({ @@ -53,7 +57,7 @@ export default util.createRule({ const afterToken = sourceCode.getTokenAfter(node.typeAnnotation); if ( afterToken && - afterToken.type === 'Punctuator' && + afterToken.type === AST_TOKEN_TYPES.Punctuator && afterToken.value === ';' ) { fixes.push(fixer.remove(afterToken)); diff --git a/packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts b/packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts index 7bbdd6522e0..d8c3775d1c9 100644 --- a/packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts +++ b/packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts @@ -4,21 +4,21 @@ import { AST_NODE_TYPES, - TSESTree, AST_TOKEN_TYPES, TSESLint, + TSESTree, } from '@typescript-eslint/experimental-utils'; import { - isOpeningParenToken, - isClosingParenToken, - isNotOpeningParenToken, - isSemicolonToken, - isClosingBracketToken, isClosingBraceToken, - isOpeningBraceToken, - isNotClosingParenToken, + isClosingBracketToken, + isClosingParenToken, isColonToken, isCommentToken, + isNotClosingParenToken, + isNotOpeningParenToken, + isOpeningBraceToken, + isOpeningParenToken, + isSemicolonToken, } from 'eslint-utils'; import { TokenOrComment } from './BinarySearchTree'; import { OffsetStorage } from './OffsetStorage'; @@ -523,7 +523,7 @@ export default createRule({ */ if ( !node.parent || - node.parent.type !== 'CallExpression' || + node.parent.type !== AST_NODE_TYPES.CallExpression || node.parent.callee !== node ) { return false; @@ -659,7 +659,7 @@ export default createRule({ * Scenarios are for or while statements without braces around them */ function addBlocklessNodeIndent(node: TSESTree.Node): void { - if (node.type !== 'BlockStatement') { + if (node.type !== AST_NODE_TYPES.BlockStatement) { const lastParentToken = sourceCode.getTokenBefore( node, isNotOpeningParenToken, @@ -692,7 +692,7 @@ export default createRule({ if ( lastToken && - node.type !== 'EmptyStatement' && + node.type !== AST_NODE_TYPES.EmptyStatement && isSemicolonToken(lastToken) ) { offsets.setDesiredOffset(lastToken, lastParentToken, 0); @@ -1127,7 +1127,10 @@ export default createRule({ IfStatement(node) { addBlocklessNodeIndent(node.consequent); - if (node.alternate && node.alternate.type !== 'IfStatement') { + if ( + node.alternate && + node.alternate.type !== AST_NODE_TYPES.IfStatement + ) { addBlocklessNodeIndent(node.alternate); } }, @@ -1135,7 +1138,7 @@ export default createRule({ ImportDeclaration(node) { if ( node.specifiers.some( - specifier => specifier.type === 'ImportSpecifier', + specifier => specifier.type === AST_NODE_TYPES.ImportSpecifier, ) ) { const openingCurly = sourceCode.getFirstToken( @@ -1149,7 +1152,7 @@ export default createRule({ addElementListIndent( node.specifiers.filter( - specifier => specifier.type === 'ImportSpecifier', + specifier => specifier.type === AST_NODE_TYPES.ImportSpecifier, ), openingCurly, closingCurly, @@ -1159,11 +1162,12 @@ export default createRule({ const fromToken = sourceCode.getLastToken( node, - token => token.type === 'Identifier' && token.value === 'from', + token => + token.type === AST_TOKEN_TYPES.Identifier && token.value === 'from', )!; const sourceToken = sourceCode.getLastToken( node, - token => token.type === 'String', + token => token.type === AST_TOKEN_TYPES.String, )!; const semiToken = sourceCode.getLastToken( node, @@ -1345,7 +1349,7 @@ export default createRule({ if ( !( node.consequent.length === 1 && - node.consequent[0].type === 'BlockStatement' + node.consequent[0].type === AST_NODE_TYPES.BlockStatement ) ) { const caseKeyword = sourceCode.getFirstToken(node)!; diff --git a/packages/eslint-plugin/src/rules/member-ordering.ts b/packages/eslint-plugin/src/rules/member-ordering.ts index ffc8d9e90c1..b9fb0ee8ef0 100644 --- a/packages/eslint-plugin/src/rules/member-ordering.ts +++ b/packages/eslint-plugin/src/rules/member-ordering.ts @@ -287,8 +287,8 @@ export default util.createRule({ } const abstract = - node.type === 'TSAbstractClassProperty' || - node.type === 'TSAbstractMethodDefinition'; + node.type === AST_NODE_TYPES.TSAbstractClassProperty || + node.type === AST_NODE_TYPES.TSAbstractMethodDefinition; const scope = 'static' in node && node.static diff --git a/packages/eslint-plugin/src/rules/no-empty-function.ts b/packages/eslint-plugin/src/rules/no-empty-function.ts index 17f238abec1..ce93c16c389 100644 --- a/packages/eslint-plugin/src/rules/no-empty-function.ts +++ b/packages/eslint-plugin/src/rules/no-empty-function.ts @@ -1,6 +1,6 @@ import { - TSESTree, AST_NODE_TYPES, + TSESTree, } from '@typescript-eslint/experimental-utils'; import baseRule from 'eslint/lib/rules/no-empty-function'; import * as util from '../util'; @@ -99,7 +99,7 @@ export default util.createRule({ const parent = node.parent; if ( isBodyEmpty(node) && - parent?.type === 'MethodDefinition' && + parent?.type === AST_NODE_TYPES.MethodDefinition && parent.kind === 'constructor' ) { const { accessibility } = parent; diff --git a/packages/eslint-plugin/src/rules/no-inferrable-types.ts b/packages/eslint-plugin/src/rules/no-inferrable-types.ts index f1219e67dc4..057958da0d4 100644 --- a/packages/eslint-plugin/src/rules/no-inferrable-types.ts +++ b/packages/eslint-plugin/src/rules/no-inferrable-types.ts @@ -1,6 +1,6 @@ import { - TSESTree, AST_NODE_TYPES, + TSESTree, } from '@typescript-eslint/experimental-utils'; import * as util from '../util'; @@ -164,7 +164,7 @@ export default util.createRule({ init.value instanceof RegExp; const isRegExpNewCall = init.type === AST_NODE_TYPES.NewExpression && - init.callee.type === 'Identifier' && + init.callee.type === AST_NODE_TYPES.Identifier && init.callee.name === 'RegExp'; const isRegExpCall = isFunctionCall(init, 'RegExp'); diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts b/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts index 45508e4692e..dbf07b46848 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts @@ -1,4 +1,7 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { + AST_NODE_TYPES, + TSESTree, +} from '@typescript-eslint/experimental-utils'; import ts from 'typescript'; import * as tsutils from 'tsutils'; import * as util from '../util'; @@ -146,12 +149,12 @@ export default util.createRule({ function isPropertyAccessExpression( node: TSESTree.Node, ): node is TSESTree.MemberExpression { - return node.type === 'MemberExpression' && !node.computed; + return node.type === AST_NODE_TYPES.MemberExpression && !node.computed; } function isEntityNameExpression(node: TSESTree.Node): boolean { return ( - node.type === 'Identifier' || + node.type === AST_NODE_TYPES.Identifier || (isPropertyAccessExpression(node) && isEntityNameExpression(node.object)) ); diff --git a/packages/eslint-plugin/src/rules/prefer-includes.ts b/packages/eslint-plugin/src/rules/prefer-includes.ts index 7ae89cb8f67..90dff86663f 100644 --- a/packages/eslint-plugin/src/rules/prefer-includes.ts +++ b/packages/eslint-plugin/src/rules/prefer-includes.ts @@ -1,6 +1,6 @@ import { - TSESTree, AST_NODE_TYPES, + TSESTree, } from '@typescript-eslint/experimental-utils'; import { getStaticValue } from 'eslint-utils'; import { AST as RegExpAST, parseRegExpLiteral } from 'regexpp'; @@ -204,13 +204,13 @@ export default createRule({ *fix(fixer) { const argNode = callNode.arguments[0]; const needsParen = - argNode.type !== 'Literal' && - argNode.type !== 'TemplateLiteral' && - argNode.type !== 'Identifier' && - argNode.type !== 'MemberExpression' && - argNode.type !== 'OptionalMemberExpression' && - argNode.type !== 'CallExpression' && - argNode.type !== 'OptionalCallExpression'; + argNode.type !== AST_NODE_TYPES.Literal && + argNode.type !== AST_NODE_TYPES.TemplateLiteral && + argNode.type !== AST_NODE_TYPES.Identifier && + argNode.type !== AST_NODE_TYPES.MemberExpression && + argNode.type !== AST_NODE_TYPES.OptionalMemberExpression && + argNode.type !== AST_NODE_TYPES.CallExpression && + argNode.type !== AST_NODE_TYPES.OptionalCallExpression; yield fixer.removeRange([callNode.range[0], argNode.range[0]]); if (needsParen) { diff --git a/packages/eslint-plugin/src/rules/prefer-readonly.ts b/packages/eslint-plugin/src/rules/prefer-readonly.ts index 3daa37e14dd..4620d89cde4 100644 --- a/packages/eslint-plugin/src/rules/prefer-readonly.ts +++ b/packages/eslint-plugin/src/rules/prefer-readonly.ts @@ -16,12 +16,10 @@ type Options = [ ]; const functionScopeBoundaries = [ - 'ArrowFunctionExpression', - 'FunctionDeclaration', - 'FunctionExpression', - 'GetAccessor', - 'MethodDefinition', - 'SetAccessor', + AST_NODE_TYPES.ArrowFunctionExpression, + AST_NODE_TYPES.FunctionDeclaration, + AST_NODE_TYPES.FunctionExpression, + AST_NODE_TYPES.MethodDefinition, ].join(', '); export default util.createRule({ @@ -221,7 +219,13 @@ export default util.createRule({ ); } }, - [functionScopeBoundaries](node: TSESTree.Node): void { + [functionScopeBoundaries]( + node: + | TSESTree.ArrowFunctionExpression + | TSESTree.FunctionDeclaration + | TSESTree.FunctionExpression + | TSESTree.MethodDefinition, + ): void { if (isConstructor(node)) { classScopeStack[classScopeStack.length - 1].enterConstructor( parserServices.esTreeNodeToTSNodeMap.get( @@ -232,7 +236,13 @@ export default util.createRule({ classScopeStack[classScopeStack.length - 1].enterNonConstructor(); } }, - [`${functionScopeBoundaries}:exit`](node: TSESTree.Node): void { + [`${functionScopeBoundaries}:exit`]( + node: + | TSESTree.ArrowFunctionExpression + | TSESTree.FunctionDeclaration + | TSESTree.FunctionExpression + | TSESTree.MethodDefinition, + ): void { if (isConstructor(node)) { classScopeStack[classScopeStack.length - 1].exitConstructor(); } else if (isFunctionScopeBoundaryInStack(node)) { diff --git a/packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts b/packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts index 56344783b34..6782d272392 100644 --- a/packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts +++ b/packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts @@ -1,10 +1,14 @@ -import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; import { - isNotClosingParenToken, + AST_NODE_TYPES, + TSESLint, + TSESTree, +} from '@typescript-eslint/experimental-utils'; +import { getPropertyName, getStaticValue, + isNotClosingParenToken, } from 'eslint-utils'; -import { RegExpParser, AST as RegExpAST } from 'regexpp'; +import { AST as RegExpAST, RegExpParser } from 'regexpp'; import { createRule, getParserServices, getTypeName } from '../util'; const EQ_OPERATORS = /^[=!]=/; @@ -94,7 +98,8 @@ export default createRule({ node: TSESTree.Node, ): node is TSESTree.BinaryExpression { return ( - node.type === 'BinaryExpression' && EQ_OPERATORS.test(node.operator) + node.type === AST_NODE_TYPES.BinaryExpression && + EQ_OPERATORS.test(node.operator) ); } @@ -138,7 +143,7 @@ export default createRule({ node: TSESTree.Node, expectedObjectNode: TSESTree.Node, ): boolean { - if (node.type === 'MemberExpression') { + if (node.type === AST_NODE_TYPES.MemberExpression) { return ( getPropertyName(node, globalScope) === 'length' && isSameTokens(node.object, expectedObjectNode) @@ -169,7 +174,7 @@ export default createRule({ expectedObjectNode: TSESTree.Node, ): boolean { return ( - node.type === 'BinaryExpression' && + node.type === AST_NODE_TYPES.BinaryExpression && node.operator === '-' && isLengthExpression(node.left, expectedObjectNode) && isNumber(node.right, 1) @@ -273,7 +278,7 @@ export default createRule({ negative: boolean, ): IterableIterator { // left is CallExpression or MemberExpression. - const leftNode = (node.left.type === 'CallExpression' + const leftNode = (node.left.type === AST_NODE_TYPES.CallExpression ? node.left.callee : node.left) as TSESTree.MemberExpression; const propertyRange = getPropertyRange(leftNode); @@ -326,7 +331,7 @@ export default createRule({ ])](node: TSESTree.MemberExpression): void { let parentNode = node.parent!; let indexNode: TSESTree.Node | null = null; - if (parentNode.type === 'CallExpression') { + if (parentNode.type === AST_NODE_TYPES.CallExpression) { if (parentNode.arguments.length === 1) { indexNode = parentNode.arguments[0]; } @@ -411,7 +416,7 @@ export default createRule({ callNode.arguments.length !== 1 || !isEqualityComparison(parentNode) || parentNode.left !== callNode || - parentNode.right.type !== 'BinaryExpression' || + parentNode.right.type !== AST_NODE_TYPES.BinaryExpression || parentNode.right.operator !== '-' || !isLengthExpression(parentNode.right.left, node.object) || !isLengthExpression(parentNode.right.right, callNode.arguments[0]) || @@ -520,7 +525,7 @@ export default createRule({ // Don't fix if it can change the behavior. if ( eqNode.operator.length === 2 && - (eqNode.right.type !== 'Literal' || + (eqNode.right.type !== AST_NODE_TYPES.Literal || typeof eqNode.right.value !== 'string') ) { return null; @@ -532,12 +537,12 @@ export default createRule({ } else { const posNode = callNode.arguments[0]; const posNodeIsAbsolutelyValid = - (posNode.type === 'BinaryExpression' && + (posNode.type === AST_NODE_TYPES.BinaryExpression && posNode.operator === '-' && isLengthExpression(posNode.left, node.object) && isLengthExpression(posNode.right, eqNode.right)) || (negativeIndexSupported && - posNode.type === 'UnaryExpression' && + posNode.type === AST_NODE_TYPES.UnaryExpression && posNode.operator === '-' && isLengthExpression(posNode.argument, eqNode.right)); if (!posNodeIsAbsolutelyValid) { @@ -576,11 +581,11 @@ export default createRule({ *fix(fixer) { const argNode = callNode.arguments[0]; const needsParen = - argNode.type !== 'Literal' && - argNode.type !== 'TemplateLiteral' && - argNode.type !== 'Identifier' && - argNode.type !== 'MemberExpression' && - argNode.type !== 'CallExpression'; + argNode.type !== AST_NODE_TYPES.Literal && + argNode.type !== AST_NODE_TYPES.TemplateLiteral && + argNode.type !== AST_NODE_TYPES.Identifier && + argNode.type !== AST_NODE_TYPES.MemberExpression && + argNode.type !== AST_NODE_TYPES.CallExpression; yield fixer.removeRange([callNode.range[0], argNode.range[0]]); if (needsParen) { diff --git a/packages/eslint-plugin/src/rules/promise-function-async.ts b/packages/eslint-plugin/src/rules/promise-function-async.ts index d907f3d45a5..e736f5a9201 100644 --- a/packages/eslint-plugin/src/rules/promise-function-async.ts +++ b/packages/eslint-plugin/src/rules/promise-function-async.ts @@ -1,4 +1,7 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { + AST_NODE_TYPES, + TSESTree, +} from '@typescript-eslint/experimental-utils'; import * as util from '../util'; type Options = [ @@ -109,8 +112,8 @@ export default util.createRule({ if ( node.parent && - (node.parent.type === 'Property' || - node.parent.type === 'MethodDefinition') && + (node.parent.type === AST_NODE_TYPES.Property || + node.parent.type === AST_NODE_TYPES.MethodDefinition) && (node.parent.kind === 'get' || node.parent.kind === 'set') ) { return; diff --git a/packages/eslint-plugin/src/rules/space-before-function-paren.ts b/packages/eslint-plugin/src/rules/space-before-function-paren.ts index 20ea4382002..197c87f2b29 100644 --- a/packages/eslint-plugin/src/rules/space-before-function-paren.ts +++ b/packages/eslint-plugin/src/rules/space-before-function-paren.ts @@ -1,6 +1,6 @@ import { - TSESTree, AST_NODE_TYPES, + TSESTree, } from '@typescript-eslint/experimental-utils'; import { isOpeningParenToken } from 'eslint-utils'; import * as util from '../util'; @@ -85,8 +85,8 @@ export default util.createRule({ const parent = node.parent!; return ( - parent.type === 'MethodDefinition' || - (parent.type === 'Property' && + parent.type === AST_NODE_TYPES.MethodDefinition || + (parent.type === AST_NODE_TYPES.Property && (parent.kind === 'get' || parent.kind === 'set' || parent.method)) ); } diff --git a/packages/eslint-plugin/tools/generate-configs.ts b/packages/eslint-plugin/tools/generate-configs.ts index d6b814135fd..2c7bcfe40cb 100644 --- a/packages/eslint-plugin/tools/generate-configs.ts +++ b/packages/eslint-plugin/tools/generate-configs.ts @@ -56,6 +56,7 @@ const ruleEntries = Object.entries(rules).sort((a, b) => * Helper function reduces records to key - value pairs. * @param config * @param entry + * @param settings */ function reducer( config: LinterConfigRules,