UNPKG

langium

Version:

A language engineering tool for the Language Server Protocol

1,206 lines (1,051 loc) 38.9 kB
/****************************************************************************** * This file was generated by langium-cli 3.5.0. * DO NOT EDIT MANUALLY! ******************************************************************************/ /* eslint-disable */ import * as langium from '../../syntax-tree.js'; export const LangiumGrammarTerminals = { ID: /\^?[_a-zA-Z][\w_]*/, STRING: /"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/, NUMBER: /NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/, RegexLiteral: /\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/, WS: /\s+/, ML_COMMENT: /\/\*[\s\S]*?\*\//, SL_COMMENT: /\/\/[^\n\r]*/, }; export type LangiumGrammarTerminalNames = keyof typeof LangiumGrammarTerminals; export type LangiumGrammarKeywordNames = | "!" | "&" | "(" | ")" | "*" | "+" | "+=" | "," | "->" | "." | ".." | ":" | ";" | "<" | "=" | "=>" | ">" | "?" | "?!" | "?<!" | "?<=" | "?=" | "@" | "Date" | "EOF" | "[" | "]" | "bigint" | "boolean" | "current" | "entry" | "extends" | "false" | "fragment" | "grammar" | "hidden" | "import" | "infer" | "infers" | "interface" | "number" | "returns" | "string" | "terminal" | "true" | "type" | "with" | "{" | "|" | "}"; export type LangiumGrammarTokenNames = LangiumGrammarTerminalNames | LangiumGrammarKeywordNames; export type AbstractRule = ParserRule | TerminalRule; export const AbstractRule = 'AbstractRule'; export function isAbstractRule(item: unknown): item is AbstractRule { return reflection.isInstance(item, AbstractRule); } export type AbstractType = InferredType | Interface | ParserRule | Type; export const AbstractType = 'AbstractType'; export function isAbstractType(item: unknown): item is AbstractType { return reflection.isInstance(item, AbstractType); } export type Condition = BooleanLiteral | Conjunction | Disjunction | Negation | ParameterReference; export const Condition = 'Condition'; export function isCondition(item: unknown): item is Condition { return reflection.isInstance(item, Condition); } export type FeatureName = 'current' | 'entry' | 'extends' | 'false' | 'fragment' | 'grammar' | 'hidden' | 'import' | 'infer' | 'infers' | 'interface' | 'returns' | 'terminal' | 'true' | 'type' | 'with' | PrimitiveType | string; export function isFeatureName(item: unknown): item is FeatureName { return isPrimitiveType(item) || item === 'current' || item === 'entry' || item === 'extends' || item === 'false' || item === 'fragment' || item === 'grammar' || item === 'hidden' || item === 'import' || item === 'interface' || item === 'returns' || item === 'terminal' || item === 'true' || item === 'type' || item === 'infer' || item === 'infers' || item === 'with' || (typeof item === 'string' && (/\^?[_a-zA-Z][\w_]*/.test(item))); } export type PrimitiveType = 'Date' | 'bigint' | 'boolean' | 'number' | 'string'; export function isPrimitiveType(item: unknown): item is PrimitiveType { return item === 'string' || item === 'number' || item === 'boolean' || item === 'Date' || item === 'bigint'; } export type TypeDefinition = ArrayType | ReferenceType | SimpleType | UnionType; export const TypeDefinition = 'TypeDefinition'; export function isTypeDefinition(item: unknown): item is TypeDefinition { return reflection.isInstance(item, TypeDefinition); } export type ValueLiteral = ArrayLiteral | BooleanLiteral | NumberLiteral | StringLiteral; export const ValueLiteral = 'ValueLiteral'; export function isValueLiteral(item: unknown): item is ValueLiteral { return reflection.isInstance(item, ValueLiteral); } export interface AbstractElement extends langium.AstNode { readonly $type: 'AbstractElement' | 'Action' | 'Alternatives' | 'Assignment' | 'CharacterRange' | 'CrossReference' | 'EndOfFile' | 'Group' | 'Keyword' | 'NegatedToken' | 'RegexToken' | 'RuleCall' | 'TerminalAlternatives' | 'TerminalGroup' | 'TerminalRuleCall' | 'UnorderedGroup' | 'UntilToken' | 'Wildcard'; cardinality?: '*' | '+' | '?'; lookahead?: '?!' | '?<!' | '?<=' | '?='; } export const AbstractElement = 'AbstractElement'; export function isAbstractElement(item: unknown): item is AbstractElement { return reflection.isInstance(item, AbstractElement); } export interface ArrayLiteral extends langium.AstNode { readonly $container: ArrayLiteral | TypeAttribute; readonly $type: 'ArrayLiteral'; elements: Array<ValueLiteral>; } export const ArrayLiteral = 'ArrayLiteral'; export function isArrayLiteral(item: unknown): item is ArrayLiteral { return reflection.isInstance(item, ArrayLiteral); } export interface ArrayType extends langium.AstNode { readonly $container: ArrayType | ReferenceType | Type | TypeAttribute | UnionType; readonly $type: 'ArrayType'; elementType: TypeDefinition; } export const ArrayType = 'ArrayType'; export function isArrayType(item: unknown): item is ArrayType { return reflection.isInstance(item, ArrayType); } export interface BooleanLiteral extends langium.AstNode { readonly $container: ArrayLiteral | Conjunction | Disjunction | Group | NamedArgument | Negation | TypeAttribute; readonly $type: 'BooleanLiteral'; true: boolean; } export const BooleanLiteral = 'BooleanLiteral'; export function isBooleanLiteral(item: unknown): item is BooleanLiteral { return reflection.isInstance(item, BooleanLiteral); } export interface Conjunction extends langium.AstNode { readonly $container: Conjunction | Disjunction | Group | NamedArgument | Negation; readonly $type: 'Conjunction'; left: Condition; right: Condition; } export const Conjunction = 'Conjunction'; export function isConjunction(item: unknown): item is Conjunction { return reflection.isInstance(item, Conjunction); } export interface Disjunction extends langium.AstNode { readonly $container: Conjunction | Disjunction | Group | NamedArgument | Negation; readonly $type: 'Disjunction'; left: Condition; right: Condition; } export const Disjunction = 'Disjunction'; export function isDisjunction(item: unknown): item is Disjunction { return reflection.isInstance(item, Disjunction); } export interface Grammar extends langium.AstNode { readonly $type: 'Grammar'; definesHiddenTokens: boolean; hiddenTokens: Array<langium.Reference<AbstractRule>>; imports: Array<GrammarImport>; interfaces: Array<Interface>; isDeclared: boolean; name?: string; rules: Array<AbstractRule>; types: Array<Type>; usedGrammars: Array<langium.Reference<Grammar>>; } export const Grammar = 'Grammar'; export function isGrammar(item: unknown): item is Grammar { return reflection.isInstance(item, Grammar); } export interface GrammarImport extends langium.AstNode { readonly $container: Grammar; readonly $type: 'GrammarImport'; path: string; } export const GrammarImport = 'GrammarImport'; export function isGrammarImport(item: unknown): item is GrammarImport { return reflection.isInstance(item, GrammarImport); } export interface InferredType extends langium.AstNode { readonly $container: Action | ParserRule; readonly $type: 'InferredType'; name: string; } export const InferredType = 'InferredType'; export function isInferredType(item: unknown): item is InferredType { return reflection.isInstance(item, InferredType); } export interface Interface extends langium.AstNode { readonly $container: Grammar; readonly $type: 'Interface'; attributes: Array<TypeAttribute>; name: string; superTypes: Array<langium.Reference<AbstractType>>; } export const Interface = 'Interface'; export function isInterface(item: unknown): item is Interface { return reflection.isInstance(item, Interface); } export interface NamedArgument extends langium.AstNode { readonly $container: RuleCall; readonly $type: 'NamedArgument'; calledByName: boolean; parameter?: langium.Reference<Parameter>; value: Condition; } export const NamedArgument = 'NamedArgument'; export function isNamedArgument(item: unknown): item is NamedArgument { return reflection.isInstance(item, NamedArgument); } export interface Negation extends langium.AstNode { readonly $container: Conjunction | Disjunction | Group | NamedArgument | Negation; readonly $type: 'Negation'; value: Condition; } export const Negation = 'Negation'; export function isNegation(item: unknown): item is Negation { return reflection.isInstance(item, Negation); } export interface NumberLiteral extends langium.AstNode { readonly $container: ArrayLiteral | TypeAttribute; readonly $type: 'NumberLiteral'; value: number; } export const NumberLiteral = 'NumberLiteral'; export function isNumberLiteral(item: unknown): item is NumberLiteral { return reflection.isInstance(item, NumberLiteral); } export interface Parameter extends langium.AstNode { readonly $container: ParserRule; readonly $type: 'Parameter'; name: string; } export const Parameter = 'Parameter'; export function isParameter(item: unknown): item is Parameter { return reflection.isInstance(item, Parameter); } export interface ParameterReference extends langium.AstNode { readonly $container: Conjunction | Disjunction | Group | NamedArgument | Negation; readonly $type: 'ParameterReference'; parameter: langium.Reference<Parameter>; } export const ParameterReference = 'ParameterReference'; export function isParameterReference(item: unknown): item is ParameterReference { return reflection.isInstance(item, ParameterReference); } export interface ParserRule extends langium.AstNode { readonly $container: Grammar; readonly $type: 'ParserRule'; dataType?: PrimitiveType; definesHiddenTokens: boolean; definition: AbstractElement; entry: boolean; fragment: boolean; hiddenTokens: Array<langium.Reference<AbstractRule>>; inferredType?: InferredType; name: string; parameters: Array<Parameter>; returnType?: langium.Reference<AbstractType>; wildcard: boolean; } export const ParserRule = 'ParserRule'; export function isParserRule(item: unknown): item is ParserRule { return reflection.isInstance(item, ParserRule); } export interface ReferenceType extends langium.AstNode { readonly $container: ArrayType | ReferenceType | Type | TypeAttribute | UnionType; readonly $type: 'ReferenceType'; referenceType: TypeDefinition; } export const ReferenceType = 'ReferenceType'; export function isReferenceType(item: unknown): item is ReferenceType { return reflection.isInstance(item, ReferenceType); } export interface ReturnType extends langium.AstNode { readonly $container: TerminalRule; readonly $type: 'ReturnType'; name: PrimitiveType | string; } export const ReturnType = 'ReturnType'; export function isReturnType(item: unknown): item is ReturnType { return reflection.isInstance(item, ReturnType); } export interface SimpleType extends langium.AstNode { readonly $container: ArrayType | ReferenceType | Type | TypeAttribute | UnionType; readonly $type: 'SimpleType'; primitiveType?: PrimitiveType; stringType?: string; typeRef?: langium.Reference<AbstractType>; } export const SimpleType = 'SimpleType'; export function isSimpleType(item: unknown): item is SimpleType { return reflection.isInstance(item, SimpleType); } export interface StringLiteral extends langium.AstNode { readonly $container: ArrayLiteral | TypeAttribute; readonly $type: 'StringLiteral'; value: string; } export const StringLiteral = 'StringLiteral'; export function isStringLiteral(item: unknown): item is StringLiteral { return reflection.isInstance(item, StringLiteral); } export interface TerminalRule extends langium.AstNode { readonly $container: Grammar; readonly $type: 'TerminalRule'; definition: AbstractElement; fragment: boolean; hidden: boolean; name: string; type?: ReturnType; } export const TerminalRule = 'TerminalRule'; export function isTerminalRule(item: unknown): item is TerminalRule { return reflection.isInstance(item, TerminalRule); } export interface Type extends langium.AstNode { readonly $container: Grammar; readonly $type: 'Type'; name: string; type: TypeDefinition; } export const Type = 'Type'; export function isType(item: unknown): item is Type { return reflection.isInstance(item, Type); } export interface TypeAttribute extends langium.AstNode { readonly $container: Interface; readonly $type: 'TypeAttribute'; defaultValue?: ValueLiteral; isOptional: boolean; name: FeatureName; type: TypeDefinition; } export const TypeAttribute = 'TypeAttribute'; export function isTypeAttribute(item: unknown): item is TypeAttribute { return reflection.isInstance(item, TypeAttribute); } export interface UnionType extends langium.AstNode { readonly $container: ArrayType | ReferenceType | Type | TypeAttribute | UnionType; readonly $type: 'UnionType'; types: Array<TypeDefinition>; } export const UnionType = 'UnionType'; export function isUnionType(item: unknown): item is UnionType { return reflection.isInstance(item, UnionType); } export interface Action extends AbstractElement { readonly $type: 'Action'; feature?: FeatureName; inferredType?: InferredType; operator?: '+=' | '='; type?: langium.Reference<AbstractType>; } export const Action = 'Action'; export function isAction(item: unknown): item is Action { return reflection.isInstance(item, Action); } export interface Alternatives extends AbstractElement { readonly $type: 'Alternatives'; elements: Array<AbstractElement>; } export const Alternatives = 'Alternatives'; export function isAlternatives(item: unknown): item is Alternatives { return reflection.isInstance(item, Alternatives); } export interface Assignment extends AbstractElement { readonly $type: 'Assignment'; feature: FeatureName; operator: '+=' | '=' | '?='; terminal: AbstractElement; } export const Assignment = 'Assignment'; export function isAssignment(item: unknown): item is Assignment { return reflection.isInstance(item, Assignment); } export interface CharacterRange extends AbstractElement { readonly $type: 'CharacterRange'; left: Keyword; right?: Keyword; } export const CharacterRange = 'CharacterRange'; export function isCharacterRange(item: unknown): item is CharacterRange { return reflection.isInstance(item, CharacterRange); } export interface CrossReference extends AbstractElement { readonly $type: 'CrossReference'; deprecatedSyntax: boolean; terminal?: AbstractElement; type: langium.Reference<AbstractType>; } export const CrossReference = 'CrossReference'; export function isCrossReference(item: unknown): item is CrossReference { return reflection.isInstance(item, CrossReference); } export interface EndOfFile extends AbstractElement { readonly $type: 'EndOfFile'; } export const EndOfFile = 'EndOfFile'; export function isEndOfFile(item: unknown): item is EndOfFile { return reflection.isInstance(item, EndOfFile); } export interface Group extends AbstractElement { readonly $type: 'Group'; elements: Array<AbstractElement>; guardCondition?: Condition; } export const Group = 'Group'; export function isGroup(item: unknown): item is Group { return reflection.isInstance(item, Group); } export interface Keyword extends AbstractElement { readonly $container: CharacterRange; readonly $type: 'Keyword'; value: string; } export const Keyword = 'Keyword'; export function isKeyword(item: unknown): item is Keyword { return reflection.isInstance(item, Keyword); } export interface NegatedToken extends AbstractElement { readonly $type: 'NegatedToken'; terminal: AbstractElement; } export const NegatedToken = 'NegatedToken'; export function isNegatedToken(item: unknown): item is NegatedToken { return reflection.isInstance(item, NegatedToken); } export interface RegexToken extends AbstractElement { readonly $type: 'RegexToken'; regex: string; } export const RegexToken = 'RegexToken'; export function isRegexToken(item: unknown): item is RegexToken { return reflection.isInstance(item, RegexToken); } export interface RuleCall extends AbstractElement { readonly $type: 'RuleCall'; arguments: Array<NamedArgument>; rule: langium.Reference<AbstractRule>; } export const RuleCall = 'RuleCall'; export function isRuleCall(item: unknown): item is RuleCall { return reflection.isInstance(item, RuleCall); } export interface TerminalAlternatives extends AbstractElement { readonly $type: 'TerminalAlternatives'; elements: Array<AbstractElement>; } export const TerminalAlternatives = 'TerminalAlternatives'; export function isTerminalAlternatives(item: unknown): item is TerminalAlternatives { return reflection.isInstance(item, TerminalAlternatives); } export interface TerminalGroup extends AbstractElement { readonly $type: 'TerminalGroup'; elements: Array<AbstractElement>; } export const TerminalGroup = 'TerminalGroup'; export function isTerminalGroup(item: unknown): item is TerminalGroup { return reflection.isInstance(item, TerminalGroup); } export interface TerminalRuleCall extends AbstractElement { readonly $type: 'TerminalRuleCall'; rule: langium.Reference<TerminalRule>; } export const TerminalRuleCall = 'TerminalRuleCall'; export function isTerminalRuleCall(item: unknown): item is TerminalRuleCall { return reflection.isInstance(item, TerminalRuleCall); } export interface UnorderedGroup extends AbstractElement { readonly $type: 'UnorderedGroup'; elements: Array<AbstractElement>; } export const UnorderedGroup = 'UnorderedGroup'; export function isUnorderedGroup(item: unknown): item is UnorderedGroup { return reflection.isInstance(item, UnorderedGroup); } export interface UntilToken extends AbstractElement { readonly $type: 'UntilToken'; terminal: AbstractElement; } export const UntilToken = 'UntilToken'; export function isUntilToken(item: unknown): item is UntilToken { return reflection.isInstance(item, UntilToken); } export interface Wildcard extends AbstractElement { readonly $type: 'Wildcard'; } export const Wildcard = 'Wildcard'; export function isWildcard(item: unknown): item is Wildcard { return reflection.isInstance(item, Wildcard); } export type LangiumGrammarAstType = { AbstractElement: AbstractElement AbstractRule: AbstractRule AbstractType: AbstractType Action: Action Alternatives: Alternatives ArrayLiteral: ArrayLiteral ArrayType: ArrayType Assignment: Assignment BooleanLiteral: BooleanLiteral CharacterRange: CharacterRange Condition: Condition Conjunction: Conjunction CrossReference: CrossReference Disjunction: Disjunction EndOfFile: EndOfFile Grammar: Grammar GrammarImport: GrammarImport Group: Group InferredType: InferredType Interface: Interface Keyword: Keyword NamedArgument: NamedArgument NegatedToken: NegatedToken Negation: Negation NumberLiteral: NumberLiteral Parameter: Parameter ParameterReference: ParameterReference ParserRule: ParserRule ReferenceType: ReferenceType RegexToken: RegexToken ReturnType: ReturnType RuleCall: RuleCall SimpleType: SimpleType StringLiteral: StringLiteral TerminalAlternatives: TerminalAlternatives TerminalGroup: TerminalGroup TerminalRule: TerminalRule TerminalRuleCall: TerminalRuleCall Type: Type TypeAttribute: TypeAttribute TypeDefinition: TypeDefinition UnionType: UnionType UnorderedGroup: UnorderedGroup UntilToken: UntilToken ValueLiteral: ValueLiteral Wildcard: Wildcard } export class LangiumGrammarAstReflection extends langium.AbstractAstReflection { getAllTypes(): string[] { return [AbstractElement, AbstractRule, AbstractType, Action, Alternatives, ArrayLiteral, ArrayType, Assignment, BooleanLiteral, CharacterRange, Condition, Conjunction, CrossReference, Disjunction, EndOfFile, Grammar, GrammarImport, Group, InferredType, Interface, Keyword, NamedArgument, NegatedToken, Negation, NumberLiteral, Parameter, ParameterReference, ParserRule, ReferenceType, RegexToken, ReturnType, RuleCall, SimpleType, StringLiteral, TerminalAlternatives, TerminalGroup, TerminalRule, TerminalRuleCall, Type, TypeAttribute, TypeDefinition, UnionType, UnorderedGroup, UntilToken, ValueLiteral, Wildcard]; } protected override computeIsSubtype(subtype: string, supertype: string): boolean { switch (subtype) { case Action: case Alternatives: case Assignment: case CharacterRange: case CrossReference: case EndOfFile: case Group: case Keyword: case NegatedToken: case RegexToken: case RuleCall: case TerminalAlternatives: case TerminalGroup: case TerminalRuleCall: case UnorderedGroup: case UntilToken: case Wildcard: { return this.isSubtype(AbstractElement, supertype); } case ArrayLiteral: case NumberLiteral: case StringLiteral: { return this.isSubtype(ValueLiteral, supertype); } case ArrayType: case ReferenceType: case SimpleType: case UnionType: { return this.isSubtype(TypeDefinition, supertype); } case BooleanLiteral: { return this.isSubtype(Condition, supertype) || this.isSubtype(ValueLiteral, supertype); } case Conjunction: case Disjunction: case Negation: case ParameterReference: { return this.isSubtype(Condition, supertype); } case InferredType: case Interface: case Type: { return this.isSubtype(AbstractType, supertype); } case ParserRule: { return this.isSubtype(AbstractRule, supertype) || this.isSubtype(AbstractType, supertype); } case TerminalRule: { return this.isSubtype(AbstractRule, supertype); } default: { return false; } } } getReferenceType(refInfo: langium.ReferenceInfo): string { const referenceId = `${refInfo.container.$type}:${refInfo.property}`; switch (referenceId) { case 'Action:type': case 'CrossReference:type': case 'Interface:superTypes': case 'ParserRule:returnType': case 'SimpleType:typeRef': { return AbstractType; } case 'Grammar:hiddenTokens': case 'ParserRule:hiddenTokens': case 'RuleCall:rule': { return AbstractRule; } case 'Grammar:usedGrammars': { return Grammar; } case 'NamedArgument:parameter': case 'ParameterReference:parameter': { return Parameter; } case 'TerminalRuleCall:rule': { return TerminalRule; } default: { throw new Error(`${referenceId} is not a valid reference id.`); } } } getTypeMetaData(type: string): langium.TypeMetaData { switch (type) { case AbstractElement: { return { name: AbstractElement, properties: [ { name: 'cardinality' }, { name: 'lookahead' } ] }; } case ArrayLiteral: { return { name: ArrayLiteral, properties: [ { name: 'elements', defaultValue: [] } ] }; } case ArrayType: { return { name: ArrayType, properties: [ { name: 'elementType' } ] }; } case BooleanLiteral: { return { name: BooleanLiteral, properties: [ { name: 'true', defaultValue: false } ] }; } case Conjunction: { return { name: Conjunction, properties: [ { name: 'left' }, { name: 'right' } ] }; } case Disjunction: { return { name: Disjunction, properties: [ { name: 'left' }, { name: 'right' } ] }; } case Grammar: { return { name: Grammar, properties: [ { name: 'definesHiddenTokens', defaultValue: false }, { name: 'hiddenTokens', defaultValue: [] }, { name: 'imports', defaultValue: [] }, { name: 'interfaces', defaultValue: [] }, { name: 'isDeclared', defaultValue: false }, { name: 'name' }, { name: 'rules', defaultValue: [] }, { name: 'types', defaultValue: [] }, { name: 'usedGrammars', defaultValue: [] } ] }; } case GrammarImport: { return { name: GrammarImport, properties: [ { name: 'path' } ] }; } case InferredType: { return { name: InferredType, properties: [ { name: 'name' } ] }; } case Interface: { return { name: Interface, properties: [ { name: 'attributes', defaultValue: [] }, { name: 'name' }, { name: 'superTypes', defaultValue: [] } ] }; } case NamedArgument: { return { name: NamedArgument, properties: [ { name: 'calledByName', defaultValue: false }, { name: 'parameter' }, { name: 'value' } ] }; } case Negation: { return { name: Negation, properties: [ { name: 'value' } ] }; } case NumberLiteral: { return { name: NumberLiteral, properties: [ { name: 'value' } ] }; } case Parameter: { return { name: Parameter, properties: [ { name: 'name' } ] }; } case ParameterReference: { return { name: ParameterReference, properties: [ { name: 'parameter' } ] }; } case ParserRule: { return { name: ParserRule, properties: [ { name: 'dataType' }, { name: 'definesHiddenTokens', defaultValue: false }, { name: 'definition' }, { name: 'entry', defaultValue: false }, { name: 'fragment', defaultValue: false }, { name: 'hiddenTokens', defaultValue: [] }, { name: 'inferredType' }, { name: 'name' }, { name: 'parameters', defaultValue: [] }, { name: 'returnType' }, { name: 'wildcard', defaultValue: false } ] }; } case ReferenceType: { return { name: ReferenceType, properties: [ { name: 'referenceType' } ] }; } case ReturnType: { return { name: ReturnType, properties: [ { name: 'name' } ] }; } case SimpleType: { return { name: SimpleType, properties: [ { name: 'primitiveType' }, { name: 'stringType' }, { name: 'typeRef' } ] }; } case StringLiteral: { return { name: StringLiteral, properties: [ { name: 'value' } ] }; } case TerminalRule: { return { name: TerminalRule, properties: [ { name: 'definition' }, { name: 'fragment', defaultValue: false }, { name: 'hidden', defaultValue: false }, { name: 'name' }, { name: 'type' } ] }; } case Type: { return { name: Type, properties: [ { name: 'name' }, { name: 'type' } ] }; } case TypeAttribute: { return { name: TypeAttribute, properties: [ { name: 'defaultValue' }, { name: 'isOptional', defaultValue: false }, { name: 'name' }, { name: 'type' } ] }; } case UnionType: { return { name: UnionType, properties: [ { name: 'types', defaultValue: [] } ] }; } case Action: { return { name: Action, properties: [ { name: 'cardinality' }, { name: 'feature' }, { name: 'inferredType' }, { name: 'lookahead' }, { name: 'operator' }, { name: 'type' } ] }; } case Alternatives: { return { name: Alternatives, properties: [ { name: 'cardinality' }, { name: 'elements', defaultValue: [] }, { name: 'lookahead' } ] }; } case Assignment: { return { name: Assignment, properties: [ { name: 'cardinality' }, { name: 'feature' }, { name: 'lookahead' }, { name: 'operator' }, { name: 'terminal' } ] }; } case CharacterRange: { return { name: CharacterRange, properties: [ { name: 'cardinality' }, { name: 'left' }, { name: 'lookahead' }, { name: 'right' } ] }; } case CrossReference: { return { name: CrossReference, properties: [ { name: 'cardinality' }, { name: 'deprecatedSyntax', defaultValue: false }, { name: 'lookahead' }, { name: 'terminal' }, { name: 'type' } ] }; } case EndOfFile: { return { name: EndOfFile, properties: [ { name: 'cardinality' }, { name: 'lookahead' } ] }; } case Group: { return { name: Group, properties: [ { name: 'cardinality' }, { name: 'elements', defaultValue: [] }, { name: 'guardCondition' }, { name: 'lookahead' } ] }; } case Keyword: { return { name: Keyword, properties: [ { name: 'cardinality' }, { name: 'lookahead' }, { name: 'value' } ] }; } case NegatedToken: { return { name: NegatedToken, properties: [ { name: 'cardinality' }, { name: 'lookahead' }, { name: 'terminal' } ] }; } case RegexToken: { return { name: RegexToken, properties: [ { name: 'cardinality' }, { name: 'lookahead' }, { name: 'regex' } ] }; } case RuleCall: { return { name: RuleCall, properties: [ { name: 'arguments', defaultValue: [] }, { name: 'cardinality' }, { name: 'lookahead' }, { name: 'rule' } ] }; } case TerminalAlternatives: { return { name: TerminalAlternatives, properties: [ { name: 'cardinality' }, { name: 'elements', defaultValue: [] }, { name: 'lookahead' } ] }; } case TerminalGroup: { return { name: TerminalGroup, properties: [ { name: 'cardinality' }, { name: 'elements', defaultValue: [] }, { name: 'lookahead' } ] }; } case TerminalRuleCall: { return { name: TerminalRuleCall, properties: [ { name: 'cardinality' }, { name: 'lookahead' }, { name: 'rule' } ] }; } case UnorderedGroup: { return { name: UnorderedGroup, properties: [ { name: 'cardinality' }, { name: 'elements', defaultValue: [] }, { name: 'lookahead' } ] }; } case UntilToken: { return { name: UntilToken, properties: [ { name: 'cardinality' }, { name: 'lookahead' }, { name: 'terminal' } ] }; } case Wildcard: { return { name: Wildcard, properties: [ { name: 'cardinality' }, { name: 'lookahead' } ] }; } default: { return { name: type, properties: [] }; } } } } export const reflection = new LangiumGrammarAstReflection();