From fdedcdfaa5ecd49b243f53157e91410cfe50fabd Mon Sep 17 00:00:00 2001
From: Pierre-Marie
Date: Sun, 28 Jan 2018 10:03:03 -0800
Subject: [PATCH] Add missing types to source code
---
types/eslint/eslint-tests.ts | 15 ++++-
types/eslint/index.d.ts | 119 +++++++++++++++++++++++++++++++++--
2 files changed, 127 insertions(+), 7 deletions(-)
diff --git a/types/eslint/eslint-tests.ts b/types/eslint/eslint-tests.ts
index 6b60ef8757..2d4a4347d9 100644
--- a/types/eslint/eslint-tests.ts
+++ b/types/eslint/eslint-tests.ts
@@ -1,12 +1,23 @@
import { SourceCode, Linter, CLIEngine, RuleTester } from 'eslint';
// =============================================
-// Linter
+// SourceCode
// =============================================
const SOURCE = `var foo = bar;`;
-const sourceCode = new SourceCode(SOURCE, {});
+const ast = { comments: [], tokens: [], loc: {}, range: [] };
+const sourceCode = new SourceCode(SOURCE, ast);
+
+const text: string = sourceCode.getText();
+
+const lines: string[] = sourceCode.getLines();
+
+SourceCode.splitLines(SOURCE);
+
+// =============================================
+// Linter
+// =============================================
const linter = new Linter();
diff --git a/types/eslint/index.d.ts b/types/eslint/index.d.ts
index 7e04f5ebc7..b4b0a921ed 100644
--- a/types/eslint/index.d.ts
+++ b/types/eslint/index.d.ts
@@ -3,12 +3,121 @@
// Definitions by: Pierre-Marie Dartus
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
-export class SourceCode {
- text: string;
- ast: any;
- lines: string[];
+export interface Ast {
+ comments: any[],
+ tokens: any[],
+ loc: any,
+ range: any[];
+}
- constructor(text: string, ast: any);
+export type AstNode = any;
+export type Token = any;
+export type Comment = any;
+
+export type FilterPredicate = (tokenOrComment: Token | Comment) => boolean;
+
+export type CursorWithSkipOptions = number | FilterPredicate | {
+ includeComments?: boolean;
+ filter?: FilterPredicate;
+ skip?: number;
+}
+
+export type CursorWithCountOptions = number | FilterPredicate | {
+ includeComments?: boolean;
+ filter?: FilterPredicate;
+ count?: number;
+}
+
+export class TokenStore {
+ getTokenByRangeStart(offset: number, options?: { includeComments?: boolean }): Token | null;
+
+ getFirstToken(node: AstNode, options: CursorWithSkipOptions): Token | null;
+
+ getFirstTokens(node: AstNode, options: CursorWithCountOptions): Token[];
+
+ getLastToken(node: AstNode, options: CursorWithSkipOptions): Token | null;
+
+ getLastTokens(node: AstNode, options: CursorWithCountOptions): Token[];
+
+ getTokenBefore(node: AstNode | Token | Comment, options: CursorWithSkipOptions): Token | null;
+
+ getTokensBefore(node: AstNode | Token | Comment, options: CursorWithCountOptions): Token[];
+
+ getTokenAfter(node: AstNode | Token | Comment, options: CursorWithSkipOptions): Token | null;
+
+ getTokensAfter(node: AstNode | Token | Comment, options: CursorWithCountOptions): Token[];
+
+ getFirstTokenBetween(left: AstNode | Token | Comment, right: AstNode | Token | Comment, options: CursorWithSkipOptions): Token | null;
+
+ getFirstTokensBetween(left: AstNode | Token | Comment, right: AstNode | Token | Comment, options: CursorWithCountOptions): Token[];
+
+ getLastTokenBetween(left: AstNode | Token | Comment, right: AstNode | Token | Comment, options: CursorWithSkipOptions): Token | null;
+
+ getLastTokensBetween(left: AstNode | Token | Comment, right: AstNode | Token | Comment, options: CursorWithCountOptions): Token[];
+
+ getTokens(node: AstNode, beforeCount?: number, afterCount?: number): Token[];
+ getTokens(node: AstNode, options: FilterPredicate | CursorWithCountOptions): Token[];
+
+ getTokensBetween(left: AstNode | Token | Comment, right: AstNode | Token | Comment, padding: number): Token[];
+ getTokensBetween(left: AstNode | Token | Comment, right: AstNode | Token | Comment, padding: FilterPredicate | CursorWithCountOptions): Token[];
+
+ commentsExistBetween(left: AstNode, right: AstNode): boolean;
+
+ getCommentsBefore(nodeOrToken: AstNode | Token): Comment[];
+
+ getCommentsAfter(nodeOrToken: AstNode | Token): Comment[];
+
+ getCommentsInside(node: AstNode): Comment[];
+}
+
+export interface SourceCodeConfig {
+ text: string;
+ ast: Ast;
+ parserServices?: ParserServices;
+ scopeManager?: ScopeManager;
+ visitorKeys?: VisitorKeys;
+}
+
+export interface Location {
+ line: number;
+ column: number;
+}
+
+type ParserServices = any;
+type ScopeManager = any;
+type VisitorKeys = any;
+
+export class SourceCode extends TokenStore {
+ text: string;
+ ast: Ast;
+ lines: string[];
+ hasBOM: boolean;
+ parserServices: ParserServices;
+ scopeManager: ScopeManager;
+ visitorKeys: VisitorKeys;
+
+ constructor(text: string, ast: Ast);
+ constructor(config: SourceCodeConfig);
+
+ static splitLines(text: string): string[];
+
+ getText(node?: AstNode, beforeCount?: number, afterCount?: number): string;
+
+ getLines(): string[];
+
+ getAllComments(): AstNode[];
+
+ getComments(node: AstNode): { leading: Comment[], trailing: Comment[] };
+
+ getJSDocComment(node: AstNode): Token | null;
+
+ getNodeByRangeIndex(index: number): AstNode | null;
+
+ isSpaceBetweenTokens(first: Token, second: Token): boolean;
+
+ getLocFromIndex(index: number): Location;
+
+ getIndexFromLoc(location: Location): number;
}
export type RuleLevel = 'off' | 'warn' | 'error' | 0 | 1 | 2;