|
| 1 | +/** |
| 2 | + * @fileoverview Additional types for this package. |
| 3 | + * @author Nicholas C. Zakas |
| 4 | + */ |
| 5 | + |
| 6 | +//------------------------------------------------------------------------------ |
| 7 | +// Imports |
| 8 | +//------------------------------------------------------------------------------ |
| 9 | + |
| 10 | +import type { |
| 11 | + RuleVisitor, |
| 12 | + TextSourceCode, |
| 13 | + Language, |
| 14 | + LanguageOptions, |
| 15 | + RuleDefinition, |
| 16 | +} from "@eslint/core"; |
| 17 | +import { |
| 18 | + DocumentNode, |
| 19 | + MemberNode, |
| 20 | + ElementNode, |
| 21 | + ObjectNode, |
| 22 | + ArrayNode, |
| 23 | + StringNode, |
| 24 | + NullNode, |
| 25 | + NumberNode, |
| 26 | + BooleanNode, |
| 27 | + NaNNode, |
| 28 | + InfinityNode, |
| 29 | + IdentifierNode, |
| 30 | + AnyNode, |
| 31 | + Token, |
| 32 | +} from "@humanwhocodes/momoa"; |
| 33 | + |
| 34 | +//------------------------------------------------------------------------------ |
| 35 | +// Types |
| 36 | +//------------------------------------------------------------------------------ |
| 37 | + |
| 38 | +type ValueNodeParent = DocumentNode | MemberNode | ElementNode; |
| 39 | + |
| 40 | +/** |
| 41 | + * A JSON syntax element, including nodes and tokens. |
| 42 | + */ |
| 43 | +export type JSONSyntaxElement = Token | AnyNode; |
| 44 | + |
| 45 | +/** |
| 46 | + * Language options provided for JSON files. |
| 47 | + */ |
| 48 | +export interface JSONLanguageOptions extends LanguageOptions { |
| 49 | + /** |
| 50 | + * Whether to allow trailing commas. Only valid in JSONC. |
| 51 | + */ |
| 52 | + allowTrailingCommas?: boolean; |
| 53 | +} |
| 54 | + |
| 55 | +/** |
| 56 | + * The visitor format returned from rules in this package. |
| 57 | + */ |
| 58 | +export interface JSONRuleVisitor extends RuleVisitor { |
| 59 | + Document?(node: DocumentNode): void; |
| 60 | + Member?(node: MemberNode, parent?: ObjectNode): void; |
| 61 | + Element?(node: ElementNode, parent?: ArrayNode): void; |
| 62 | + Object?(node: ObjectNode, parent?: ValueNodeParent): void; |
| 63 | + Array?(node: ArrayNode, parent?: ValueNodeParent): void; |
| 64 | + String?(node: StringNode, parent?: ValueNodeParent): void; |
| 65 | + Null?(node: NullNode, parent?: ValueNodeParent): void; |
| 66 | + Number?(node: NumberNode, parent?: ValueNodeParent): void; |
| 67 | + Boolean?(node: BooleanNode, parent?: ValueNodeParent): void; |
| 68 | + NaN?(node: NaNNode, parent?: ValueNodeParent): void; |
| 69 | + Infinity?(node: InfinityNode, parent?: ValueNodeParent): void; |
| 70 | + Identifier?(node: IdentifierNode, parent?: ValueNodeParent): void; |
| 71 | + |
| 72 | + "Document:exit"?(node: DocumentNode): void; |
| 73 | + "Member:exit"?(node: MemberNode, parent?: ObjectNode): void; |
| 74 | + "Element:exit"?(node: ElementNode, parent?: ArrayNode): void; |
| 75 | + "Object:exit"?(node: ObjectNode, parent?: ValueNodeParent): void; |
| 76 | + "Array:exit"?(node: ArrayNode, parent?: ValueNodeParent): void; |
| 77 | + "String:exit"?(node: StringNode, parent?: ValueNodeParent): void; |
| 78 | + "Null:exit"?(node: NullNode, parent?: ValueNodeParent): void; |
| 79 | + "Number:exit"?(node: NumberNode, parent?: ValueNodeParent): void; |
| 80 | + "Boolean:exit"?(node: BooleanNode, parent?: ValueNodeParent): void; |
| 81 | + "NaN:exit"?(node: NaNNode, parent?: ValueNodeParent): void; |
| 82 | + "Infinity:exit"?(node: InfinityNode, parent?: ValueNodeParent): void; |
| 83 | + "Identifier:exit"?(node: IdentifierNode, parent?: ValueNodeParent): void; |
| 84 | +} |
| 85 | + |
| 86 | +/** |
| 87 | + * The `SourceCode` implementation for JSON files. |
| 88 | + */ |
| 89 | +export interface IJSONSourceCode |
| 90 | + extends TextSourceCode<{ |
| 91 | + LangOptions: JSONLanguageOptions; |
| 92 | + RootNode: DocumentNode; |
| 93 | + SyntaxElementWithLoc: JSONSyntaxElement; |
| 94 | + ConfigNode: Token; |
| 95 | + }> { |
| 96 | + /** |
| 97 | + * Get the text of a syntax element. |
| 98 | + * @param syntaxElement The syntax element to get the text of. |
| 99 | + * @param beforeCount The number of characters to include before the syntax element. |
| 100 | + * @param afterCount The number of characters to include after the syntax element. |
| 101 | + * @returns The text of the syntax element. |
| 102 | + */ |
| 103 | + getText( |
| 104 | + syntaxElement: JSONSyntaxElement, |
| 105 | + beforeCount?: number, |
| 106 | + afterCount?: number, |
| 107 | + ): string; |
| 108 | +} |
| 109 | + |
| 110 | +export type IJSONLanguage = Language<{ |
| 111 | + LangOptions: JSONLanguageOptions; |
| 112 | + Code: IJSONSourceCode; |
| 113 | + RootNode: DocumentNode; |
| 114 | + Node: AnyNode; |
| 115 | +}>; |
| 116 | + |
| 117 | +export type JSONRuleDefinition< |
| 118 | + JSONRuleOptions extends unknown[], |
| 119 | + JSONRuleMessageIds extends string = "", |
| 120 | +> = RuleDefinition<{ |
| 121 | + LangOptions: JSONLanguageOptions; |
| 122 | + Code: IJSONSourceCode; |
| 123 | + RuleOptions: JSONRuleOptions; |
| 124 | + Visitor: JSONRuleVisitor; |
| 125 | + Node: AnyNode; |
| 126 | + MessageIds: JSONRuleMessageIds; |
| 127 | + ExtRuleDocs: {}; |
| 128 | +}>; |
0 commit comments