UNPKG

prettier-plugin-pegjs

Version:

A Prettier plugin for formatting Pegjs and Peggy-js grammars

106 lines (105 loc) 3.23 kB
interface Node<T = string> { type: T; loc: Location; } export type AstNode = Grammar | Comment | Initializer | GInitializer | Rule | StringLiteral | Literal | Delimiter | Expression | Variable | Constant | FunctionNode; export type Location = { source?: string; start: { offset: number; line: number; column: number; }; end: { offset: number; line: number; column: number; }; }; export interface Grammar extends Node<"grammar"> { ginitializer: Initializer | undefined; initializer: GInitializer | undefined; rules: Rule[]; comments: Comment[]; } export interface Comment extends Node<"comment"> { value: string; multiline: boolean; } export interface Initializer extends Node<"initializer"> { code: string; } export interface GInitializer extends Node<"ginitializer"> { code: string; } export interface Rule extends Node<"rule"> { name: Identifier; displayName: StringLiteral; delimiter: Delimiter; expression: Expression; } type Identifier = string; export interface StringLiteral extends Node<"stringliteral"> { value: string; } export interface Literal extends Node<"literal"> { value: string; ignoreCase: boolean; } export interface Delimiter extends Node<"delimiter"> { value: "=" | "/"; } export type Expression = ChoiceExpression | ActionExpression | SequenceExpression | LabeledExpression | PrefixedExpression | SuffixedExpression | PrimaryExpression; export interface ChoiceExpression extends Node<"choice"> { alternatives: ActionExpression[]; delimiters: Delimiter[]; } export interface LabeledExpression extends Node<"labeled"> { label: Identifier; expression: Expression; pick?: boolean; } export interface PrefixedExpression extends Node<"text" | "simple_and" | "simple_not"> { expression: Expression; } export interface SuffixedExpression extends Node<"optional" | "zero_or_more" | "one_or_more"> { expression: Expression; } type PrimaryExpression = Literal | CharacterClass | Node<"any"> | RuleReference | SemanticPredicate | Group | RepeatedExpression; export interface RepeatedExpression extends Node<"repeated"> { min: Constant | Variable | FunctionNode | null; max: Constant | Variable | FunctionNode | null; expression: PrimaryExpression; delimiter: Expression | null; } export interface CharacterClass extends Node<"class"> { parts: string[]; inverted: boolean; ignoreCase: boolean; } export interface RuleReference extends Node<"rule_ref"> { name: Identifier; } export interface SemanticPredicate extends Node<"semantic_and" | "semantic_not"> { code: string; } export interface Group extends Node<"group"> { expression: Expression; } export interface ActionExpression extends Node<"action"> { expression: SequenceExpression | Expression; code: string; } export interface SequenceExpression extends Node<"sequence"> { elements: Expression[]; } export interface Variable extends Node<"variable"> { value: Identifier; } export interface Constant extends Node<"constant"> { value: number | null; } export interface FunctionNode extends Node<"function"> { value: string; } export {};