prettier-plugin-pegjs
Version:
A Prettier plugin for formatting Pegjs and Peggy-js grammars
106 lines (105 loc) • 3.23 kB
TypeScript
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 {};