Skip to content

Commit a1f06a3

Browse files
authored
fix: correct SourceCode typings (#20114)
* fix: correct SourceCode typings * add tests * revert `ParserServices` type change
1 parent dbb200e commit a1f06a3

File tree

2 files changed

+92
-5
lines changed

2 files changed

+92
-5
lines changed

lib/types/index.d.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,16 @@ export class SourceCode
222222

223223
getDeclaredVariables(node: ESTree.Node): Scope.Variable[];
224224

225+
/** @deprecated */
225226
getJSDocComment(node: ESTree.Node): ESTree.Comment | null;
226227

227228
getNodeByRangeIndex(index: number): ESTree.Node | null;
228229

229-
isSpaceBetweenTokens(first: AST.Token, second: AST.Token): boolean;
230+
/** @deprecated Use `isSpaceBetween()` instead. */
231+
isSpaceBetweenTokens(
232+
first: ESTree.Node | AST.Token,
233+
second: ESTree.Node | AST.Token,
234+
): boolean;
230235

231236
getLocFromIndex(index: number): ESTree.Position;
232237

@@ -260,6 +265,18 @@ export class SourceCode
260265

261266
getTokensAfter: SourceCode.UnaryCursorWithCountOptions;
262267

268+
/** @deprecated Use `getTokenBefore()` instead. */
269+
getTokenOrCommentBefore(
270+
node: ESTree.Node | AST.Token | ESTree.Comment,
271+
skip?: number | undefined,
272+
): AST.Token | ESTree.Comment | null;
273+
274+
/** @deprecated Use `getTokenAfter()` instead. */
275+
getTokenOrCommentAfter(
276+
node: ESTree.Node | AST.Token | ESTree.Comment,
277+
skip?: number | undefined,
278+
): AST.Token | ESTree.Comment | null;
279+
263280
getFirstTokenBetween: SourceCode.BinaryCursorWithSkipOptions;
264281

265282
getFirstTokensBetween: SourceCode.BinaryCursorWithCountOptions;
@@ -306,9 +323,10 @@ export namespace SourceCode {
306323
interface Config {
307324
text: string;
308325
ast: AST.Program;
309-
parserServices?: ParserServices | undefined;
310-
scopeManager?: Scope.ScopeManager | undefined;
311-
visitorKeys?: VisitorKeys | undefined;
326+
hasBOM?: boolean | undefined;
327+
parserServices?: ParserServices | null | undefined;
328+
scopeManager?: Scope.ScopeManager | null | undefined;
329+
visitorKeys?: VisitorKeys | null | undefined;
312330
}
313331

314332
type ParserServices = any;

tests/lib/types/types.test.ts

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,52 @@ const COMMENT: Comment = {
9393

9494
// #region SourceCode
9595

96-
let sourceCode = new SourceCode(SOURCE, AST);
96+
let sourceCode: SourceCode;
97+
98+
sourceCode = new SourceCode(SOURCE, AST);
99+
sourceCode = new SourceCode({ text: SOURCE, ast: AST });
100+
sourceCode = new SourceCode({ text: SOURCE, ast: AST, hasBOM: true });
101+
sourceCode = new SourceCode({ text: SOURCE, ast: AST, hasBOM: undefined });
102+
sourceCode = new SourceCode({
103+
text: SOURCE,
104+
ast: AST,
105+
parserServices: {
106+
foo() {},
107+
},
108+
});
109+
sourceCode = new SourceCode({ text: SOURCE, ast: AST, parserServices: null });
110+
sourceCode = new SourceCode({
111+
text: SOURCE,
112+
ast: AST,
113+
parserServices: undefined,
114+
});
115+
sourceCode = new SourceCode({
116+
text: SOURCE,
117+
ast: AST,
118+
scopeManager: {
119+
scopes: [],
120+
globalScope: null,
121+
acquire(node, inner) {
122+
return scopeManager.scopes[0];
123+
},
124+
getDeclaredVariables() {
125+
return [];
126+
},
127+
},
128+
});
129+
sourceCode = new SourceCode({ text: SOURCE, ast: AST, scopeManager: null });
130+
sourceCode = new SourceCode({
131+
text: SOURCE,
132+
ast: AST,
133+
scopeManager: undefined,
134+
});
135+
sourceCode = new SourceCode({
136+
text: SOURCE,
137+
ast: AST,
138+
visitorKeys: { ArrayExpression: ["elements"] },
139+
});
140+
sourceCode = new SourceCode({ text: SOURCE, ast: AST, visitorKeys: null });
141+
sourceCode = new SourceCode({ text: SOURCE, ast: AST, visitorKeys: undefined });
97142

98143
SourceCode.splitLines(SOURCE);
99144

@@ -113,6 +158,8 @@ sourceCode.getNodeByRangeIndex(0);
113158
sourceCode.getNodeByRangeIndex(0);
114159

115160
sourceCode.isSpaceBetweenTokens(TOKEN, TOKEN);
161+
sourceCode.isSpaceBetweenTokens(AST, TOKEN);
162+
sourceCode.isSpaceBetweenTokens(TOKEN, AST);
116163

117164
sourceCode.isSpaceBetween(TOKEN, TOKEN);
118165
sourceCode.isSpaceBetween(AST, TOKEN);
@@ -292,6 +339,16 @@ sourceCode.getTokensAfter(AST, {
292339
sourceCode.getTokensAfter(TOKEN, 0);
293340
sourceCode.getTokensAfter(COMMENT, 0);
294341

342+
sourceCode.getTokenOrCommentBefore(AST);
343+
sourceCode.getTokenOrCommentBefore(AST, 0);
344+
sourceCode.getTokenOrCommentBefore(TOKEN, 0);
345+
sourceCode.getTokenOrCommentBefore(COMMENT, 0);
346+
347+
sourceCode.getTokenOrCommentAfter(AST);
348+
sourceCode.getTokenOrCommentAfter(AST, 0);
349+
sourceCode.getTokenOrCommentAfter(TOKEN, 0);
350+
sourceCode.getTokenOrCommentAfter(COMMENT, 0);
351+
295352
sourceCode.getFirstTokenBetween(AST, AST); // $ExpectType Token | null
296353
sourceCode.getFirstTokenBetween(AST, AST, 0);
297354
sourceCode.getFirstTokenBetween(AST, AST, { skip: 0 });
@@ -2046,6 +2103,18 @@ ruleTester.run("simple-valid-test", rule2, {
20462103
},
20472104
});
20482105

2106+
interface CustomParserServices {
2107+
program: any;
2108+
}
2109+
2110+
(parserServices: CustomParserServices): Linter.Config => ({
2111+
languageOptions: {
2112+
parser: {
2113+
parseForESLint: () => ({ ast: AST, services: parserServices }),
2114+
},
2115+
},
2116+
});
2117+
20492118
(): Linter.Config => ({
20502119
languageOptions: {
20512120
// @ts-expect-error

0 commit comments

Comments
 (0)