Skip to content

Commit 3eb5d45

Browse files
authored
feat(experimental-utils): expose ast utility functions (typescript-eslint#1670)
1 parent 2b9603d commit 3eb5d45

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+835
-537
lines changed

.cspell.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"**/**/CONTRIBUTORS.md",
1111
"**/**/ROADMAP.md",
1212
"**/*.{json,snap}",
13-
".cspell.json"
13+
".cspell.json",
14+
"yarn.lock"
1415
],
1516
"dictionaries": [
1617
"typescript",

packages/eslint-plugin/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
},
4343
"dependencies": {
4444
"@typescript-eslint/experimental-utils": "2.24.0",
45-
"eslint-utils": "^1.4.3",
4645
"functional-red-black-tree": "^1.0.1",
4746
"regexpp": "^3.0.0",
4847
"tsutils": "^3.17.1"

packages/eslint-plugin/src/rules/comma-spacing.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ import {
22
TSESTree,
33
AST_TOKEN_TYPES,
44
} from '@typescript-eslint/experimental-utils';
5-
import { isClosingParenToken, isCommaToken } from 'eslint-utils';
6-
import { isTokenOnSameLine, createRule } from '../util';
5+
import {
6+
isClosingParenToken,
7+
isCommaToken,
8+
isTokenOnSameLine,
9+
createRule,
10+
} from '../util';
711

812
type Options = [
913
{

packages/eslint-plugin/src/rules/func-call-spacing.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { TSESTree } from '@typescript-eslint/experimental-utils';
2-
import { isOpeningParenToken } from 'eslint-utils';
32
import * as util from '../util';
43

54
export type Options = [
@@ -79,7 +78,7 @@ export default util.createRule<Options, MessageIds>({
7978
| TSESTree.OptionalCallExpression
8079
| TSESTree.NewExpression,
8180
): void {
82-
const isOptionalCall = util.isOptionalOptionalChain(node);
81+
const isOptionalCall = util.isOptionalOptionalCallExpression(node);
8382

8483
const closingParenToken = sourceCode.getLastToken(node)!;
8584
const lastCalleeTokenWithoutPossibleParens = sourceCode.getLastToken(
@@ -88,7 +87,7 @@ export default util.createRule<Options, MessageIds>({
8887
const openingParenToken = sourceCode.getFirstTokenBetween(
8988
lastCalleeTokenWithoutPossibleParens,
9089
closingParenToken,
91-
isOpeningParenToken,
90+
util.isOpeningParenToken,
9291
);
9392
if (!openingParenToken || openingParenToken.range[1] >= node.range[1]) {
9493
// new expression with no parens...

packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ import {
88
TSESLint,
99
TSESTree,
1010
} from '@typescript-eslint/experimental-utils';
11+
12+
import { TokenOrComment } from './BinarySearchTree';
13+
import { OffsetStorage } from './OffsetStorage';
14+
import { TokenInfo } from './TokenInfo';
1115
import {
16+
createRule,
17+
ExcludeKeys,
1218
isClosingBraceToken,
1319
isClosingBracketToken,
1420
isClosingParenToken,
@@ -19,11 +25,8 @@ import {
1925
isOpeningBraceToken,
2026
isOpeningParenToken,
2127
isSemicolonToken,
22-
} from 'eslint-utils';
23-
import { TokenOrComment } from './BinarySearchTree';
24-
import { OffsetStorage } from './OffsetStorage';
25-
import { TokenInfo } from './TokenInfo';
26-
import { createRule, ExcludeKeys, RequireKeys } from '../../util';
28+
RequireKeys,
29+
} from '../../util';
2730

2831
const GLOBAL_LINEBREAK_REGEX = /\r\n|[\r\n\u2028\u2029]/gu;
2932
const WHITESPACE_REGEX = /\s*$/u;

packages/eslint-plugin/src/rules/no-array-constructor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export default util.createRule({
3737
node.callee.type === AST_NODE_TYPES.Identifier &&
3838
node.callee.name === 'Array' &&
3939
!node.typeParameters &&
40-
!util.isOptionalOptionalChain(node)
40+
!util.isOptionalOptionalCallExpression(node)
4141
) {
4242
context.report({
4343
node,

packages/eslint-plugin/src/rules/prefer-includes.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ import {
22
AST_NODE_TYPES,
33
TSESTree,
44
} from '@typescript-eslint/experimental-utils';
5-
import { getStaticValue } from 'eslint-utils';
65
import { AST as RegExpAST, parseRegExpLiteral } from 'regexpp';
76
import * as ts from 'typescript';
8-
import { createRule, getParserServices } from '../util';
7+
import { createRule, getParserServices, getStaticValue } from '../util';
98

109
export default createRule({
1110
name: 'prefer-includes',

packages/eslint-plugin/src/rules/prefer-optional-chain.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import {
22
AST_NODE_TYPES,
33
TSESTree,
44
} from '@typescript-eslint/experimental-utils';
5-
import { isOpeningParenToken } from 'eslint-utils';
65
import * as util from '../util';
76

87
type ValidChainTarget =
@@ -203,7 +202,7 @@ export default util.createRule({
203202
sourceCode.getFirstTokenBetween(
204203
node.callee,
205204
closingParenToken,
206-
isOpeningParenToken,
205+
util.isOpeningParenToken,
207206
),
208207
util.NullThrowsReasons.MissingToken('opening parenthesis', node.type),
209208
);

packages/eslint-plugin/src/rules/prefer-regexp-exec.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { TSESTree } from '@typescript-eslint/experimental-utils';
2-
import { getStaticValue } from 'eslint-utils';
3-
import { createRule, getParserServices, getTypeName } from '../util';
2+
import {
3+
createRule,
4+
getParserServices,
5+
getStaticValue,
6+
getTypeName,
7+
} from '../util';
48

59
export default createRule({
610
name: 'prefer-regexp-exec',

packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ import {
33
TSESLint,
44
TSESTree,
55
} from '@typescript-eslint/experimental-utils';
6+
import { AST as RegExpAST, RegExpParser } from 'regexpp';
67
import {
8+
createRule,
9+
getParserServices,
710
getPropertyName,
811
getStaticValue,
12+
getTypeName,
913
isNotClosingParenToken,
10-
} from 'eslint-utils';
11-
import { AST as RegExpAST, RegExpParser } from 'regexpp';
12-
import { createRule, getParserServices, getTypeName } from '../util';
14+
} from '../util';
1315

1416
const EQ_OPERATORS = /^[=!]=/;
1517
const regexpp = new RegExpParser();

packages/eslint-plugin/src/rules/require-await.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@ import {
33
TSESLint,
44
TSESTree,
55
} from '@typescript-eslint/experimental-utils';
6-
import {
7-
isArrowToken,
8-
getFunctionNameWithKind,
9-
isOpeningParenToken,
10-
} from 'eslint-utils';
116
import * as tsutils from 'tsutils';
127
import * as ts from 'typescript';
138
import * as util from '../util';
@@ -73,7 +68,7 @@ export default util.createRule({
7368
loc: getFunctionHeadLoc(node, sourceCode),
7469
messageId: 'missingAwait',
7570
data: {
76-
name: util.upperCaseFirst(getFunctionNameWithKind(node)),
71+
name: util.upperCaseFirst(util.getFunctionNameWithKind(node)),
7772
},
7873
});
7974
}
@@ -157,8 +152,8 @@ function getOpeningParenOfParams(
157152
): TSESTree.Token {
158153
return util.nullThrows(
159154
node.id
160-
? sourceCode.getTokenAfter(node.id, isOpeningParenToken)
161-
: sourceCode.getFirstToken(node, isOpeningParenToken),
155+
? sourceCode.getTokenAfter(node.id, util.isOpeningParenToken)
156+
: sourceCode.getFirstToken(node, util.isOpeningParenToken),
162157
util.NullThrowsReasons.MissingToken('(', node.type),
163158
);
164159
}
@@ -180,7 +175,7 @@ function getFunctionHeadLoc(
180175

181176
if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {
182177
const arrowToken = util.nullThrows(
183-
sourceCode.getTokenBefore(node.body, isArrowToken),
178+
sourceCode.getTokenBefore(node.body, util.isArrowToken),
184179
util.NullThrowsReasons.MissingToken('=>', node.type),
185180
);
186181

packages/eslint-plugin/src/rules/space-before-function-paren.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import {
22
AST_NODE_TYPES,
33
TSESTree,
44
} from '@typescript-eslint/experimental-utils';
5-
import { isOpeningParenToken } from 'eslint-utils';
65
import * as util from '../util';
76

87
type Option = 'never' | 'always';
@@ -106,7 +105,7 @@ export default util.createRule<Options, MessageIds>({
106105
// Always ignore non-async functions and arrow functions without parens, e.g. async foo => bar
107106
if (
108107
node.async &&
109-
isOpeningParenToken(sourceCode.getFirstToken(node, { skip: 1 })!)
108+
util.isOpeningParenToken(sourceCode.getFirstToken(node, { skip: 1 })!)
110109
) {
111110
return overrideConfig.asyncArrow ?? baseConfig;
112111
}
@@ -143,7 +142,7 @@ export default util.createRule<Options, MessageIds>({
143142
leftToken = sourceCode.getLastToken(node.typeParameters)!;
144143
rightToken = sourceCode.getTokenAfter(leftToken)!;
145144
} else {
146-
rightToken = sourceCode.getFirstToken(node, isOpeningParenToken)!;
145+
rightToken = sourceCode.getFirstToken(node, util.isOpeningParenToken)!;
147146
leftToken = sourceCode.getTokenBefore(rightToken)!;
148147
}
149148
const hasSpacing = sourceCode.isSpaceBetweenTokens(leftToken, rightToken);

packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils';
22
import * as ts from 'typescript';
33
import {
44
createRule,
5-
getParserServices,
65
getConstrainedTypeAtLocation,
6+
getParserServices,
7+
isClosingBraceToken,
8+
isOpeningBraceToken,
79
} from '../util';
810
import { isTypeFlagSet, unionTypeParts } from 'tsutils';
9-
import { isClosingBraceToken, isOpeningBraceToken } from 'eslint-utils';
1011

1112
export default createRule({
1213
name: 'switch-exhaustiveness-check',

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy