UNPKG

eslint-plugin-json-schema-validator

Version:
196 lines (195 loc) 7.16 kB
import type { JSONSchema4 } from "json-schema"; import type { Rule } from "eslint"; import type { AST as JSON } from "jsonc-eslint-parser"; import type { AST as YAML } from "yaml-eslint-parser"; import type { AST as TOML } from "toml-eslint-parser"; import type { AST as ES } from "eslint"; import type { Comment as ESTreeComment } from "estree"; import type { ESLintNode, VElement } from "vue-eslint-parser/ast"; export interface RuleListener { [key: string]: ((node: never) => void) | undefined; } export interface RuleModule { meta: RuleMetaData; create(context: Rule.RuleContext): RuleListener; } export interface RuleMetaData { docs: { description: string; categories: "recommended"[] | null; url: string; ruleId: string; ruleName: string; replacedBy?: string[]; default?: "error" | "warn"; }; messages: { [messageId: string]: string; }; fixable?: "code" | "whitespace"; schema: JSONSchema4 | JSONSchema4[]; deprecated?: boolean; type: "problem" | "suggestion" | "layout"; } export interface PartialRuleModule { meta: PartialRuleMetaData; create(context: RuleContext, params: { customBlock: boolean; filename: string; }): RuleListener; } export interface PartialRuleMetaData { docs: { description: string; categories: "recommended"[] | null; replacedBy?: string[]; default?: "error" | "warn"; }; messages: { [messageId: string]: string; }; fixable?: "code" | "whitespace"; schema: JSONSchema4 | JSONSchema4[]; deprecated?: boolean; type: "problem" | "suggestion" | "layout"; } export declare type JsonSchemaValidatorSettings = { http?: { requestOptions?: any; getModulePath?: string; }; }; export interface RuleContext { id: string; options: any[]; settings: { "json-schema-validator"?: JsonSchemaValidatorSettings; }; parserPath: string; parserServices: { isJSON?: true; isYAML?: true; isTOML?: true; customBlock?: VElement; }; getAncestors(): Node[]; getFilename(): string; getSourceCode(): SourceCode; report(descriptor: ReportDescriptor): void; getCwd?: () => string; } export declare namespace SourceCode { function splitLines(text: string): string[]; } export declare type Node = ESLintNode | JSON.JSONNode | YAML.YAMLNode | TOML.TOMLNode; export declare type Token = ES.Token | YAML.Token | TOML.Token | Comment; export declare type Comment = ESTreeComment | YAML.Comment | TOML.Comment; export declare type NodeOrToken = Node | Token; export interface SourceCode { text: string; ast: JSON.JSONProgram | YAML.YAMLProgram | TOML.TOMLProgram; lines: string[]; hasBOM: boolean; parserServices: { isJSON?: true; isYAML?: true; isTOML?: true; }; visitorKeys: { [nodeType: string]: string[]; }; getText(node?: NodeOrToken, beforeCount?: number, afterCount?: number): string; getLines(): string[]; getAllComments(): Comment[]; getComments(node: NodeOrToken): { leading: Comment[]; trailing: Comment[]; }; getNodeByRangeIndex(index: number): Node | null; isSpaceBetweenTokens(first: Token, second: Token): boolean; getLocFromIndex(index: number): JSON.Position; getIndexFromLoc(loc: JSON.Position): number; getTokenByRangeStart(offset: number, options?: { includeComments?: boolean; }): Token | null; getFirstToken(node: Node): Token; getFirstToken(node: Node, options?: CursorWithSkipOptions): Token | null; getFirstTokens(node: Node, options?: CursorWithCountOptions): Token[]; getLastToken(node: Node): Token; getLastToken(node: Node, options?: CursorWithSkipOptions): Token | null; getLastTokens(node: Node, options?: CursorWithCountOptions): Token[]; getTokenBefore(node: NodeOrToken, options?: CursorWithSkipOptions): Token | null; getTokensBefore(node: NodeOrToken, options?: CursorWithCountOptions): Token[]; getTokenAfter(node: NodeOrToken, options?: CursorWithSkipOptions): Token | null; getTokensAfter(node: NodeOrToken, options?: CursorWithCountOptions): Token[]; getFirstTokenBetween(left: NodeOrToken, right: NodeOrToken, options?: CursorWithSkipOptions): Token | null; getFirstTokensBetween(left: NodeOrToken, right: NodeOrToken, options?: CursorWithCountOptions): Token[]; getLastTokenBetween(left: NodeOrToken, right: NodeOrToken, options?: CursorWithSkipOptions): Token | null; getLastTokensBetween(left: NodeOrToken, right: NodeOrToken, options?: CursorWithCountOptions): Token[]; getTokensBetween(left: NodeOrToken, right: NodeOrToken, padding?: number | FilterPredicate | CursorWithCountOptions): Token[]; getTokens(node: Node, beforeCount?: number, afterCount?: number): Token[]; getTokens(node: Node, options: FilterPredicate | CursorWithCountOptions): Token[]; commentsExistBetween(left: NodeOrToken, right: NodeOrToken): boolean; getCommentsBefore(nodeOrToken: NodeOrToken): Comment[]; getCommentsAfter(nodeOrToken: NodeOrToken): Comment[]; getCommentsInside(node: Node): Comment[]; } declare type FilterPredicate = (tokenOrComment: Token) => boolean; declare type CursorWithSkipOptions = number | FilterPredicate | { includeComments?: boolean; filter?: FilterPredicate; skip?: number; }; declare type CursorWithCountOptions = number | FilterPredicate | { includeComments?: boolean; filter?: FilterPredicate; count?: number; }; interface ReportDescriptorOptionsBase { data?: { [key: string]: string; }; fix?: null | ((fixer: RuleFixer) => null | Fix | IterableIterator<Fix> | Fix[]); } declare type SuggestionDescriptorMessage = { desc: string; } | { messageId: string; }; declare type SuggestionReportDescriptor = SuggestionDescriptorMessage & ReportDescriptorOptionsBase; interface ReportDescriptorOptions extends ReportDescriptorOptionsBase { suggest?: SuggestionReportDescriptor[] | null; } declare type ReportDescriptor = ReportDescriptorMessage & ReportDescriptorLocation & ReportDescriptorOptions; declare type ReportDescriptorMessage = { message: string; } | { messageId: string; }; declare type ReportDescriptorLocation = { node: NodeOrToken; } | { loc: SourceLocation | { line: number; column: number; }; }; export interface RuleFixer { insertTextAfter(nodeOrToken: NodeOrToken, text: string): Fix; insertTextAfterRange(range: [number, number], text: string): Fix; insertTextBefore(nodeOrToken: NodeOrToken, text: string): Fix; insertTextBeforeRange(range: [number, number], text: string): Fix; remove(nodeOrToken: NodeOrToken): Fix; removeRange(range: [number, number]): Fix; replaceText(nodeOrToken: NodeOrToken, text: string): Fix; replaceTextRange(range: [number, number], text: string): Fix; } export interface Fix { range: [number, number]; text: string; } interface SourceLocation { start: JSON.Position; end: JSON.Position; } export {};