8000 feat(experimental-utils): Add types for eslint-scope · vieron/typescript-eslint@1012935 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1012935

Browse files
committed
feat(experimental-utils): Add types for eslint-scope
1 parent bf00c63 commit 1012935

File tree

21 files changed

+662
-546
lines changed

21 files changed

+662
-546
lines changed

packages/eslint-plugin/tsconfig.json

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
{
22
"extends": "./tsconfig.build.json",
3-
"include": [
4-
"src",
5-
"typings",
6-
// include the parser's ambient typings because the parser exports them in its type defs
7-
"../parser/typings",
8-
"tests",
9-
"tools"
10-
]
3+
"include": ["src", "typings", "tests", "tools"]
114
}

packages/experimental-utils/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@
2828
"prebuild": "npm run clean",
2929
"build": "tsc -p tsconfig.build.json",
3030
"clean": "rimraf dist/",
31+
"format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore",
3132
"typecheck": "tsc --noEmit"
3233
},
3334
"dependencies": {
34-
"@typescript-eslint/typescript-estree": "1.9.0"
35+
"@typescript-eslint/typescript-estree": "1.9.0",
36+
"eslint-scope": "^4.0.0"
3537
},
3638
"peerDependencies": {
3739
"eslint": "*",

packages/experimental-utils/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import * as ESLintUtils from './eslint-utils';
22
import * as TSESLint from './ts-eslint';
3+
import * as TSESLintScope from './ts-eslint-scope';
34

4-
export { ESLintUtils, TSESLint };
5+
export { ESLintUtils, TSESLint, TSESLintScope };
56

67
// for convenience's sake - export the types directly from here so consumers
78
// don't need to reference/install both packages in their code
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { TSESTree } from '@typescript-eslint/typescript-estree';
2+
import {
3+
Definition as ESLintDefinition,
4+
ParameterDefinition as ESLintParameterDefinition,
5+
} from 'eslint-scope/lib/definition';
6+
7+
interface Definition {
8+
type: string;
9+
name: TSESTree.BindingName;
10+
node: TSESTree.Node;
11+
parent?: TSESTree.Node | null;
12+
index?: number | null;
13+
kind?: string | null;
14+
rest?: boolean;
15+
}
16+
interface DefinitionConstructor {
17+
new (
18+
type: string,
19+
name: TSESTree.BindingName | TSESTree.PropertyName,
20+
node: TSESTree.Node,
21+
parent?: TSESTree.Node | null,
22+
index?: number | null,
23+
kind?: string | null,
24+
): Definition;
25+
}
26+
const Definition = ESLintDefinition as DefinitionConstructor;
27+
28+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
29+
interface ParameterDefinition extends Definition {}
30+
const ParameterDefinition = ESLintParameterDefinition as DefinitionConstructor & {
31+
new (
32+
name: TSESTree.Node,
33+
node: TSESTree.Node,
34+
index?: number | null,
35+
rest?: boolean,
36+
): ParameterDefinition;
37+
};
38+
39+
export { Definition, ParameterDefinition };
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { TSESTree } from '@typescript-eslint/typescript-estree';
2+
3+
type PatternVisitorCallback = (
4+
pattern: TSESTree.Identifier,
5+
info: {
6+
rest: boolean;
7+
topLevel: boolean;
8+
assignments: TSESTree.AssignmentPattern[];
9+
},
10+
) => void;
11+
12+
interface PatternVisitorOptions {
13+
processRightHandNodes?: boolean;
14+
}
15+
16+
interface Visitor {
17+
visitChildren<T extends TSESTree.BaseNode | undefined | null>(node?: T): void;
18+
visit<T extends TSESTree.BaseNode | undefined | null>(node?: T): void;
19+
}
20+
21+
export { PatternVisitorCallback, PatternVisitorOptions, Visitor };
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { TSESTree } from '@typescript-eslint/typescript-estree';
2+
import ESLintPatternVisitor from 'eslint-scope/lib/pattern-visitor';
3+
import { ScopeManager } from './ScopeManager';
4+
import {
5+
PatternVisitorCallback,
6+
PatternVisitorOptions,
7+
Visitor,
8+
} from './Options';
9+
10+
interface PatternVisitor extends Visitor {
11+
options: any;
12+
scopeManager: ScopeManager;
13+
parent?: TSESTree.Node;
14+
rightHandNodes: TSESTree.Node[];
15+
16+
Identifier(pattern: TSESTree.Node): void;
17+
Property(property: TSESTree.Node): void;
18+
ArrayPattern(pattern: TSESTree.Node): void;
19+
AssignmentPattern(pattern: TSESTree.Node): void;
20+
RestElement(pattern: TSESTree.Node): void;
21+
MemberExpression(node: TSESTree.Node): void;
22+
SpreadElement(node: TSESTree.Node): void;
23+
ArrayExpression(node: TSESTree.Node): void;
24+
AssignmentExpression(node: TSESTree.Node): void;
25+
CallExpression(node: TSESTree.Node): void;
26+
}
27+
const PatternVisitor = ESLintPatternVisitor as {
28+
new (
29+
options: PatternVisitorOptions,
30+
rootPattern: any,
31+
callback: PatternVisitorCallback,
32+
): PatternVisitor;
33+
34+
// static methods
35+
isPattern(node: TSESTree.Node): boolean;
36+
};
37+
38+
export { PatternVisitor };
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { TSESTree } from '@typescript-eslint/typescript-estree';
2+
import ESLintReference from 'eslint-scope/lib/reference';
3+
import { Scope } from './Scope';
4+
import { Variable } from './Variable';
5+
6+
interface Reference {
7+
identifier: TSESTree.Identifier;
8+
from: Scope;
9+
resolved: Variable | null;
10+
writeExpr: TSESTree.Node | null;
11+
init: boolean;
12+
13+
isWrite(): boolean;
14+
isRead(): boolean;
15+
isWriteOnly(): boolean;
16+
isReadOnly(): boolean;
17+
isReadWrite(): boolean;
18+
}
19+
const Reference = ESLintReference as {
20+
new (): Reference;
21+
22+
READ: 0x1;
23+
WRITE: 0x2;
24+
RW: 0x3;
25+
};
26+
27+
export { Reference };
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { TSESTree } from '@typescript-eslint/typescript-estree';
2+
import ESLintReferencer from 'eslint-scope/lib/referencer';
3+
import {
4+
PatternVisitorCallback,
5+
PatternVisitorOptions,
6+
Visitor,
7+
} from './Options';
8+
import { Scope } from './Scope';
9+
import { ScopeManager } from './ScopeManager';
10+
11+
interface Referencer<SM extends ScopeManager> extends Visitor {
12+
isInnerMethodDefinition: boolean;
13+
options: any;
14+
scopeManager: SM;
15+
parent?: TSESTree.Node;
16+
17+
currentScope(): Scope;
18+
close(node: TSESTree.Node): void;
19+
pushInnerMethodDefinition(isInnerMethodDefinition: boolean): boolean;
20+
popInnerMethodDefinition(isInnerMethodDefinition: boolean): void;
21+
22+
referencingDefaultValue(
23+
pattern: any,
24+
assignments: any,
25+
maybeImplicitGlobal: any,
26+
init: boolean,
27+
): void;
28+
visitPattern(
29+
node: TSESTree.Node,
30+
options: PatternVisitorOptions,
31+
callback: PatternVisitorCallback,
32+
): void;
33+
visitFunction(node: TSESTree.Node): void;
34+
visitClass(node: TSESTree.Node): void;
35+
visitProperty(node: TSESTree.Node): void;
36+
visitForIn(node: TSESTree.Node): void;
37+
visitVariableDeclaration(
38+
variableTargetScope: any,
39+
type: any,
40+
node: TSESTree.Node,
41+
index: any,
42+
): void;
43+
44+
AssignmentExpression(node: TSESTree.Node): void;
45+
CatchClause(node: TSESTree.Node): void;
46+
Program(node: TSESTree.Node): void;
47+
Identifier(node: TSESTree.Node): void;
48+
UpdateExpression(node: TSESTree.Node): void;
49+
MemberExpression(node: TSESTree.Node): void;
50+
Property(node: TSESTree.Node): void;
51+
MethodDefinition(node: TSESTree.Node): void;
52+
BreakStatement(): void;
53+
ContinueStatement(): void;
54+
LabeledStatement(node: TSESTree.Node): void;
55+
ForStatement(node: TSESTree.Node): void;
56+
ClassExpression(node: TSESTree.Node): void;
57+
ClassDeclaration(node: TSESTree.Node): void;
58+
CallExpression(node: TSESTree.Node): void;
59+
BlockStatement(node: TSESTree.Node): void;
60+
ThisExpression(): void;
61+
WithStatement(node: TSESTree.Node): void;
62+
VariableDeclaration(node: TSESTree.Node): void;
63+
SwitchStatement(node: TSESTree.Node): void;
64+
FunctionDeclaration(node: TSESTree.Node): void;
65+
FunctionExpression(node: TSESTree.Node): void;
66+
ForOfStatement(node: TSESTree.Node): void;
67+
ForInStatement(node: TSESTree.Node): void;
68+
ArrowFunctionExpression(node: TSESTree.Node): void;
69+
ImportDeclaration(node: TSESTree.Node): void;
70+
visitExportDeclaration(node: TSESTree.Node): void;
71+
ExportDeclaration(node: TSESTree.Node): void;
72+
ExportNamedDeclaration(node: TSESTree.Node): void;
73+
ExportSpecifier(node: TSESTree.Node): void;
74+
MetaProperty(): void;
75+
}
76+
const Referencer = ESLintReferencer as {
77+
new <SM extends ScopeManager>(options: any, scopeManager: SM): Referencer<SM>;
78+
};
79+
80+
export { Referencer };

0 commit comments

Comments
 (0)
0