{"version":3,"sources":["../src/language/builtin/index.ts","../src/language/generated/ast.ts","../src/language/generated/grammar.ts","../src/language/generated/module.ts","../src/language/lsp/completion.ts","../src/language/lsp/formatter.ts","../src/language/lsp/hover.ts","../src/language/lsp/semantic-token.ts","../src/language/reference/scope-computation.ts","../src/language/reference/scope-provider.ts","../src/language/builtin/validator.ts","../src/language/validator/validator.ts","../src/language/workspace/workspace-manager.ts","../src/language/iproto-module.ts","../src/shape/main.ts"],"names":["URI","AbstractAstReflection","loadGrammarFromJson","DefaultCompletionProvider","CompletionItemKind","keyword","AbstractFormatter","Formatting","node","AstNodeHoverProvider","AbstractSemanticTokenProvider","SemanticTokenTypes","DefaultScopeComputation","AstUtils","interruptAndCheck","Cancellation","DefaultScopeProvider","EMPTY_SCOPE","RegExpParser","target","Decimal","DefaultWorkspaceManager","createDefaultSharedModule","inject","createDefaultModule","path","NodeFileSystem","globby","file","DiagnosticSeverity"],"mappings":"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","file":"shape.cjs","sourcesContent":["import { URI } from \"langium\";\n\nexport const BUILTIN_LIBRARY = `\nmodule Builtin\n\nscalar Float.[\n  const:float\n  lt:float\n  gt:float\n  lte:float\n  gte:float\n  positive: boolean\n  nonnegative: boolean\n  negative: boolean\n  nonpositive: boolean\n]\n\nscalar Int.[\n  const:int\n  lt:int\n  gt:int\n  lte:int\n  gte:int\n  positive: boolean\n  nonnegative: boolean\n  negative: boolean\n  nonpositive: boolean\n]\n\nscalar String.[\n  const:string\n  max:int\n  min:int\n  length:int\n  nonempty:boolean\n  pattern:string\n  email:boolean\n  uuid:boolean\n  prefix:string\n  suffix:string\n  url:boolean\n  nanoid:boolean\n]\n\nscalar Boolean.[\n  const:boolean\n]\n\nscalar Binary.[\n  min:int\n  min_kb:float\n  min_mb:float\n  max:int\n  max_kb:float\n  max_mb:float\n  nonempty:boolean\n]\n\nscalar Time\n\nscalar List<T>.[\n  max:int\n  min:int\n  length:int\n  nonempty:boolean\n]\n\nscalar Dictionary<T>.[\n  max:int\n  min:int\n  size:int\n  nonempty:boolean\n]\n\nscalar Union<A B ...>\n\ndirective Deprecated(reason?:string)\n\ndirective Optional on field\n\ndirective Relaxed on struct exception\n\ndirective Incremental on enum\n`;\n\nexport const BUILTIN_LIBRARY_URI = URI.parse(\"iproto:///builtin.iproto\").toString();\n","/******************************************************************************\r\n * This file was generated by langium-cli 3.3.0.\r\n * DO NOT EDIT MANUALLY!\r\n ******************************************************************************/\r\n\r\n/* eslint-disable */\r\nimport type { AstNode, Reference, ReferenceInfo, TypeMetaData } from 'langium';\r\nimport { AbstractAstReflection } from 'langium';\r\n\r\nexport const IprotoTerminals = {\r\n    WS: /\\s+/,\r\n    ML_COMMENT: /--[\\s\\S]*?--/,\r\n    SL_COMMENT: /\\/\\/[^\\n\\r]*/,\r\n    STRING: /\"(\\\\.|[^\"\\\\])*\"/,\r\n    NUMBER: /-?\\d+(\\.\\d+)?/,\r\n    BOOLEAN: /true|false/,\r\n    IDENTIFIER: /[a-zA-Z][a-zA-Z0-9_]*/,\r\n};\r\n\r\nexport type IprotoTerminalNames = keyof typeof IprotoTerminals;\r\n\r\nexport type IprotoKeywordNames = \r\n    | \"#\"\r\n    | \"(\"\r\n    | \")\"\r\n    | \".\"\r\n    | \"...\"\r\n    | \":\"\r\n    | \"::\"\r\n    | \"<\"\r\n    | \">\"\r\n    | \"?\"\r\n    | \"[\"\r\n    | \"]\"\r\n    | \"alias\"\r\n    | \"as\"\r\n    | \"boolean\"\r\n    | \"directive\"\r\n    | \"endpoint\"\r\n    | \"enum\"\r\n    | \"exception\"\r\n    | \"field\"\r\n    | \"float\"\r\n    | \"int\"\r\n    | \"module\"\r\n    | \"on\"\r\n    | \"scalar\"\r\n    | \"string\"\r\n    | \"struct\"\r\n    | \"use\"\r\n    | \"variant\"\r\n    | \"with\"\r\n    | \"{\"\r\n    | \"}\";\r\n\r\nexport type IprotoTokenNames = IprotoTerminalNames | IprotoKeywordNames;\r\n\r\nexport type Declaration = Alias | Directive | Endpoint | Enum | Exception | Import | Scalar | Struct;\r\n\r\nexport const Declaration = 'Declaration';\r\n\r\nexport function isDeclaration(item: unknown): item is Declaration {\r\n    return reflection.isInstance(item, Declaration);\r\n}\r\n\r\nexport type DirectiveLocation = 'endpoint' | 'enum' | 'exception' | 'field' | 'module' | 'scalar' | 'struct' | 'variant';\r\n\r\nexport function isDirectiveLocation(item: unknown): item is DirectiveLocation {\r\n    return item === 'module' || item === 'scalar' || item === 'enum' || item === 'variant' || item === 'struct' || item === 'field' || item === 'exception' || item === 'endpoint';\r\n}\r\n\r\nexport type Importable = Directive | Type;\r\n\r\nexport const Importable = 'Importable';\r\n\r\nexport function isImportable(item: unknown): item is Importable {\r\n    return reflection.isInstance(item, Importable);\r\n}\r\n\r\nexport type Keyword = 'alias' | 'as' | 'directive' | 'endpoint' | 'enum' | 'exception' | 'module' | 'on' | 'scalar' | 'struct' | 'use' | 'with';\r\n\r\nexport function isKeyword(item: unknown): item is Keyword {\r\n    return item === 'module' || item === 'use' || item === 'as' || item === 'directive' || item === 'on' || item === 'scalar' || item === 'enum' || item === 'struct' || item === 'with' || item === 'alias' || item === 'endpoint' || item === 'exception';\r\n}\r\n\r\nexport type LiteralValue = BooleanLiteral | NumberLiteral | StringLiteral;\r\n\r\nexport const LiteralValue = 'LiteralValue';\r\n\r\nexport function isLiteralValue(item: unknown): item is LiteralValue {\r\n    return reflection.isInstance(item, LiteralValue);\r\n}\r\n\r\nexport type LiteralValueType = 'boolean' | 'float' | 'int' | 'string';\r\n\r\nexport function isLiteralValueType(item: unknown): item is LiteralValueType {\r\n    return item === 'int' || item === 'float' || item === 'boolean' || item === 'string';\r\n}\r\n\r\nexport type RegularDeclarationName = DirectiveLocation | string;\r\n\r\nexport function isRegularDeclarationName(item: unknown): item is RegularDeclarationName {\r\n    return isDirectiveLocation(item) || (typeof item === 'string' && (/[a-zA-Z][a-zA-Z0-9_]*/.test(item)));\r\n}\r\n\r\nexport type RegularName = DirectiveLocation | Keyword | LiteralValueType | string;\r\n\r\nexport function isRegularName(item: unknown): item is RegularName {\r\n    return isLiteralValueType(item) || isDirectiveLocation(item) || isKeyword(item) || (typeof item === 'string' && (/[a-zA-Z][a-zA-Z0-9_]*/.test(item)));\r\n}\r\n\r\nexport type Type = Alias | Enum | Scalar | Struct;\r\n\r\nexport const Type = 'Type';\r\n\r\nexport function isType(item: unknown): item is Type {\r\n    return reflection.isInstance(item, Type);\r\n}\r\n\r\nexport interface Alias extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Alias';\r\n    name: RegularDeclarationName;\r\n    type: ReferenceType;\r\n}\r\n\r\nexport const Alias = 'Alias';\r\n\r\nexport function isAlias(item: unknown): item is Alias {\r\n    return reflection.isInstance(item, Alias);\r\n}\r\n\r\nexport interface BooleanLiteral extends AstNode {\r\n    readonly $container: ReferenceDirectiveArgument | ReferenceTypeOption;\r\n    readonly $type: 'BooleanLiteral';\r\n    value: boolean;\r\n}\r\n\r\nexport const BooleanLiteral = 'BooleanLiteral';\r\n\r\nexport function isBooleanLiteral(item: unknown): item is BooleanLiteral {\r\n    return reflection.isInstance(item, BooleanLiteral);\r\n}\r\n\r\nexport interface Directive extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Directive';\r\n    locations: Array<DirectiveLocation>;\r\n    name: RegularDeclarationName;\r\n    parameters: Array<DirectiveParameter>;\r\n}\r\n\r\nexport const Directive = 'Directive';\r\n\r\nexport function isDirective(item: unknown): item is Directive {\r\n    return reflection.isInstance(item, Directive);\r\n}\r\n\r\nexport interface DirectiveParameter extends AstNode {\r\n    readonly $container: Directive;\r\n    readonly $type: 'DirectiveParameter';\r\n    name: RegularName;\r\n    optional: boolean;\r\n    type: LiteralValueType;\r\n}\r\n\r\nexport const DirectiveParameter = 'DirectiveParameter';\r\n\r\nexport function isDirectiveParameter(item: unknown): item is DirectiveParameter {\r\n    return reflection.isInstance(item, DirectiveParameter);\r\n}\r\n\r\nexport interface Endpoint extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Endpoint';\r\n    directives: Array<ReferenceDirective>;\r\n    input?: ReferenceType;\r\n    name: RegularName;\r\n    output?: ReferenceType;\r\n}\r\n\r\nexport const Endpoint = 'Endpoint';\r\n\r\nexport function isEndpoint(item: unknown): item is Endpoint {\r\n    return reflection.isInstance(item, Endpoint);\r\n}\r\n\r\nexport interface Enum extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Enum';\r\n    directives: Array<ReferenceDirective>;\r\n    members: Array<EnumMember>;\r\n    name: RegularDeclarationName;\r\n}\r\n\r\nexport const Enum = 'Enum';\r\n\r\nexport function isEnum(item: unknown): item is Enum {\r\n    return reflection.isInstance(item, Enum);\r\n}\r\n\r\nexport interface EnumMember extends AstNode {\r\n    readonly $container: Enum;\r\n    readonly $type: 'EnumMember';\r\n    directives: Array<ReferenceDirective>;\r\n    name: RegularName;\r\n}\r\n\r\nexport const EnumMember = 'EnumMember';\r\n\r\nexport function isEnumMember(item: unknown): item is EnumMember {\r\n    return reflection.isInstance(item, EnumMember);\r\n}\r\n\r\nexport interface Exception extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Exception';\r\n    directives: Array<ReferenceDirective>;\r\n    fields: Array<Field>;\r\n    name: RegularDeclarationName;\r\n}\r\n\r\nexport const Exception = 'Exception';\r\n\r\nexport function isException(item: unknown): item is Exception {\r\n    return reflection.isInstance(item, Exception);\r\n}\r\n\r\nexport interface Field extends AstNode {\r\n    readonly $container: Exception | Struct;\r\n    readonly $type: 'Field';\r\n    directives: Array<ReferenceDirective>;\r\n    name: RegularName;\r\n    type: ReferenceType;\r\n}\r\n\r\nexport const Field = 'Field';\r\n\r\nexport function isField(item: unknown): item is Field {\r\n    return reflection.isInstance(item, Field);\r\n}\r\n\r\nexport interface File extends AstNode {\r\n    readonly $type: 'File';\r\n    declaraions: Array<Declaration>;\r\n    module: Module;\r\n}\r\n\r\nexport const File = 'File';\r\n\r\nexport function isFile(item: unknown): item is File {\r\n    return reflection.isInstance(item, File);\r\n}\r\n\r\nexport interface Import extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Import';\r\n    members: Array<ImportMember>;\r\n    target: Reference<Module>;\r\n}\r\n\r\nexport const Import = 'Import';\r\n\r\nexport function isImport(item: unknown): item is Import {\r\n    return reflection.isInstance(item, Import);\r\n}\r\n\r\nexport interface ImportMember extends AstNode {\r\n    readonly $container: Import;\r\n    readonly $type: 'ImportMember';\r\n    name?: RegularDeclarationName;\r\n    target: Reference<Importable>;\r\n}\r\n\r\nexport const ImportMember = 'ImportMember';\r\n\r\nexport function isImportMember(item: unknown): item is ImportMember {\r\n    return reflection.isInstance(item, ImportMember);\r\n}\r\n\r\nexport interface Module extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Module';\r\n    directives: Array<ReferenceDirective>;\r\n    name: RegularDeclarationName;\r\n}\r\n\r\nexport const Module = 'Module';\r\n\r\nexport function isModule(item: unknown): item is Module {\r\n    return reflection.isInstance(item, Module);\r\n}\r\n\r\nexport interface NumberLiteral extends AstNode {\r\n    readonly $container: ReferenceDirectiveArgument | ReferenceTypeOption;\r\n    readonly $type: 'NumberLiteral';\r\n    value: string;\r\n}\r\n\r\nexport const NumberLiteral = 'NumberLiteral';\r\n\r\nexport function isNumberLiteral(item: unknown): item is NumberLiteral {\r\n    return reflection.isInstance(item, NumberLiteral);\r\n}\r\n\r\nexport interface ReferenceDirective extends AstNode {\r\n    readonly $container: Endpoint | Enum | EnumMember | Exception | Field | Module | Scalar | Struct;\r\n    readonly $type: 'ReferenceDirective';\r\n    arguments: Array<ReferenceDirectiveArgument>;\r\n    target: Reference<Directive>;\r\n}\r\n\r\nexport const ReferenceDirective = 'ReferenceDirective';\r\n\r\nexport function isReferenceDirective(item: unknown): item is ReferenceDirective {\r\n    return reflection.isInstance(item, ReferenceDirective);\r\n}\r\n\r\nexport interface ReferenceDirectiveArgument extends AstNode {\r\n    readonly $container: ReferenceDirective;\r\n    readonly $type: 'ReferenceDirectiveArgument';\r\n    target: Reference<DirectiveParameter>;\r\n    value?: LiteralValue;\r\n}\r\n\r\nexport const ReferenceDirectiveArgument = 'ReferenceDirectiveArgument';\r\n\r\nexport function isReferenceDirectiveArgument(item: unknown): item is ReferenceDirectiveArgument {\r\n    return reflection.isInstance(item, ReferenceDirectiveArgument);\r\n}\r\n\r\nexport interface ReferenceType extends AstNode {\r\n    readonly $container: Alias | Endpoint | Field | ReferenceType | Struct;\r\n    readonly $type: 'ReferenceType';\r\n    arguments: Array<ReferenceType>;\r\n    options: Array<ReferenceTypeOption>;\r\n    target: Reference<Type>;\r\n}\r\n\r\nexport const ReferenceType = 'ReferenceType';\r\n\r\nexport function isReferenceType(item: unknown): item is ReferenceType {\r\n    return reflection.isInstance(item, ReferenceType);\r\n}\r\n\r\nexport interface ReferenceTypeOption extends AstNode {\r\n    readonly $container: ReferenceType;\r\n    readonly $type: 'ReferenceTypeOption';\r\n    target: Reference<ScalarOption>;\r\n    value?: LiteralValue;\r\n}\r\n\r\nexport const ReferenceTypeOption = 'ReferenceTypeOption';\r\n\r\nexport function isReferenceTypeOption(item: unknown): item is ReferenceTypeOption {\r\n    return reflection.isInstance(item, ReferenceTypeOption);\r\n}\r\n\r\nexport interface Scalar extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Scalar';\r\n    directives: Array<ReferenceDirective>;\r\n    ellipsis: boolean;\r\n    name: RegularDeclarationName;\r\n    options: Array<ScalarOption>;\r\n    parameters: Array<ScalarParameter>;\r\n}\r\n\r\nexport const Scalar = 'Scalar';\r\n\r\nexport function isScalar(item: unknown): item is Scalar {\r\n    return reflection.isInstance(item, Scalar);\r\n}\r\n\r\nexport interface ScalarOption extends AstNode {\r\n    readonly $container: Scalar;\r\n    readonly $type: 'ScalarOption';\r\n    name: RegularName;\r\n    type: LiteralValueType;\r\n}\r\n\r\nexport const ScalarOption = 'ScalarOption';\r\n\r\nexport function isScalarOption(item: unknown): item is ScalarOption {\r\n    return reflection.isInstance(item, ScalarOption);\r\n}\r\n\r\nexport interface ScalarParameter extends AstNode {\r\n    readonly $container: Scalar;\r\n    readonly $type: 'ScalarParameter';\r\n    name: RegularDeclarationName;\r\n}\r\n\r\nexport const ScalarParameter = 'ScalarParameter';\r\n\r\nexport function isScalarParameter(item: unknown): item is ScalarParameter {\r\n    return reflection.isInstance(item, ScalarParameter);\r\n}\r\n\r\nexport interface StringLiteral extends AstNode {\r\n    readonly $container: ReferenceDirectiveArgument | ReferenceTypeOption;\r\n    readonly $type: 'StringLiteral';\r\n    value: string;\r\n}\r\n\r\nexport const StringLiteral = 'StringLiteral';\r\n\r\nexport function isStringLiteral(item: unknown): item is StringLiteral {\r\n    return reflection.isInstance(item, StringLiteral);\r\n}\r\n\r\nexport interface Struct extends AstNode {\r\n    readonly $container: File;\r\n    readonly $type: 'Struct';\r\n    directives: Array<ReferenceDirective>;\r\n    fields: Array<Field>;\r\n    mixins: Array<ReferenceType>;\r\n    name: RegularDeclarationName;\r\n}\r\n\r\nexport const Struct = 'Struct';\r\n\r\nexport function isStruct(item: unknown): item is Struct {\r\n    return reflection.isInstance(item, Struct);\r\n}\r\n\r\nexport type IprotoAstType = {\r\n    Alias: Alias\r\n    BooleanLiteral: BooleanLiteral\r\n    Declaration: Declaration\r\n    Directive: Directive\r\n    DirectiveParameter: DirectiveParameter\r\n    Endpoint: Endpoint\r\n    Enum: Enum\r\n    EnumMember: EnumMember\r\n    Exception: Exception\r\n    Field: Field\r\n    File: File\r\n    Import: Import\r\n    ImportMember: ImportMember\r\n    Importable: Importable\r\n    LiteralValue: LiteralValue\r\n    Module: Module\r\n    NumberLiteral: NumberLiteral\r\n    ReferenceDirective: ReferenceDirective\r\n    ReferenceDirectiveArgument: ReferenceDirectiveArgument\r\n    ReferenceType: ReferenceType\r\n    ReferenceTypeOption: ReferenceTypeOption\r\n    Scalar: Scalar\r\n    ScalarOption: ScalarOption\r\n    ScalarParameter: ScalarParameter\r\n    StringLiteral: StringLiteral\r\n    Struct: Struct\r\n    Type: Type\r\n}\r\n\r\nexport class IprotoAstReflection extends AbstractAstReflection {\r\n\r\n    getAllTypes(): string[] {\r\n        return [Alias, BooleanLiteral, Declaration, Directive, DirectiveParameter, Endpoint, Enum, EnumMember, Exception, Field, File, Import, ImportMember, Importable, LiteralValue, Module, NumberLiteral, ReferenceDirective, ReferenceDirectiveArgument, ReferenceType, ReferenceTypeOption, Scalar, ScalarOption, ScalarParameter, StringLiteral, Struct, Type];\r\n    }\r\n\r\n    protected override computeIsSubtype(subtype: string, supertype: string): boolean {\r\n        switch (subtype) {\r\n            case Alias:\r\n            case Enum:\r\n            case Scalar:\r\n            case Struct: {\r\n                return this.isSubtype(Declaration, supertype) || this.isSubtype(Type, supertype);\r\n            }\r\n            case BooleanLiteral:\r\n            case NumberLiteral:\r\n            case StringLiteral: {\r\n                return this.isSubtype(LiteralValue, supertype);\r\n            }\r\n            case Directive: {\r\n                return this.isSubtype(Declaration, supertype) || this.isSubtype(Importable, supertype);\r\n            }\r\n            case Endpoint:\r\n            case Exception:\r\n            case Import: {\r\n                return this.isSubtype(Declaration, supertype);\r\n            }\r\n            case Type: {\r\n                return this.isSubtype(Importable, supertype);\r\n            }\r\n            default: {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    getReferenceType(refInfo: ReferenceInfo): string {\r\n        const referenceId = `${refInfo.container.$type}:${refInfo.property}`;\r\n        switch (referenceId) {\r\n            case 'Import:target': {\r\n                return Module;\r\n            }\r\n            case 'ImportMember:target': {\r\n                return Importable;\r\n            }\r\n            case 'ReferenceDirective:target': {\r\n                return Directive;\r\n            }\r\n            case 'ReferenceDirectiveArgument:target': {\r\n                return DirectiveParameter;\r\n            }\r\n            case 'ReferenceType:target': {\r\n                return Type;\r\n            }\r\n            case 'ReferenceTypeOption:target': {\r\n                return ScalarOption;\r\n            }\r\n            default: {\r\n                throw new Error(`${referenceId} is not a valid reference id.`);\r\n            }\r\n        }\r\n    }\r\n\r\n    getTypeMetaData(type: string): TypeMetaData {\r\n        switch (type) {\r\n            case Alias: {\r\n                return {\r\n                    name: Alias,\r\n                    properties: [\r\n                        { name: 'name' },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case BooleanLiteral: {\r\n                return {\r\n                    name: BooleanLiteral,\r\n                    properties: [\r\n                        { name: 'value', defaultValue: false }\r\n                    ]\r\n                };\r\n            }\r\n            case Directive: {\r\n                return {\r\n                    name: Directive,\r\n                    properties: [\r\n                        { name: 'locations', defaultValue: [] },\r\n                        { name: 'name' },\r\n                        { name: 'parameters', defaultValue: [] }\r\n                    ]\r\n                };\r\n            }\r\n            case DirectiveParameter: {\r\n                return {\r\n                    name: DirectiveParameter,\r\n                    properties: [\r\n                        { name: 'name' },\r\n                        { name: 'optional', defaultValue: false },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case Endpoint: {\r\n                return {\r\n                    name: Endpoint,\r\n                    properties: [\r\n                        { name: 'directives', defaultValue: [] },\r\n                        { name: 'input' },\r\n                        { name: 'name' },\r\n                        { name: 'output' }\r\n                    ]\r\n                };\r\n            }\r\n            case Enum: {\r\n                return {\r\n                    name: Enum,\r\n                    properties: [\r\n                        { name: 'directives', defaultValue: [] },\r\n                        { name: 'members', defaultValue: [] },\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            case EnumMember: {\r\n                return {\r\n                    name: EnumMember,\r\n                    properties: [\r\n                        { name: 'directives', defaultValue: [] },\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            case Exception: {\r\n                return {\r\n                    name: Exception,\r\n                    properties: [\r\n                        { name: 'directives', defaultValue: [] },\r\n                        { name: 'fields', defaultValue: [] },\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            case Field: {\r\n                return {\r\n                    name: Field,\r\n                    properties: [\r\n                        { name: 'directives', defaultValue: [] },\r\n                        { name: 'name' },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case File: {\r\n                return {\r\n                    name: File,\r\n                    properties: [\r\n                        { name: 'declaraions', defaultValue: [] },\r\n                        { name: 'module' }\r\n                    ]\r\n                };\r\n            }\r\n            case Import: {\r\n                return {\r\n                    name: Import,\r\n                    properties: [\r\n                        { name: 'members', defaultValue: [] },\r\n                        { name: 'target' }\r\n                    ]\r\n                };\r\n            }\r\n            case ImportMember: {\r\n                return {\r\n                    name: ImportMember,\r\n                    properties: [\r\n                        { name: 'name' },\r\n                        { name: 'target' }\r\n                    ]\r\n                };\r\n            }\r\n            case Module: {\r\n                return {\r\n                    name: Module,\r\n                    properties: [\r\n                        { name: 'directives', defaultValue: [] },\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            case NumberLiteral: {\r\n                return {\r\n                    name: NumberLiteral,\r\n                    properties: [\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case ReferenceDirective: {\r\n                return {\r\n                    name: ReferenceDirective,\r\n                    properties: [\r\n                        { name: 'arguments', defaultValue: [] },\r\n                        { name: 'target' }\r\n                    ]\r\n                };\r\n            }\r\n            case ReferenceDirectiveArgument: {\r\n                return {\r\n                    name: ReferenceDirectiveArgument,\r\n                    properties: [\r\n                        { name: 'target' },\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case ReferenceType: {\r\n                return {\r\n                    name: ReferenceType,\r\n                    properties: [\r\n                        { name: 'arguments', defaultValue: [] },\r\n                        { name: 'options', defaultValue: [] },\r\n                        { name: 'target' }\r\n                    ]\r\n                };\r\n            }\r\n            case ReferenceTypeOption: {\r\n                return {\r\n                    name: ReferenceTypeOption,\r\n                    properties: [\r\n                        { name: 'target' },\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case Scalar: {\r\n                return {\r\n                    name: Scalar,\r\n                    properties: [\r\n                        { name: 'directives', defaultValue: [] },\r\n                        { name: 'ellipsis', defaultValue: false },\r\n                        { name: 'name' },\r\n                        { name: 'options', defaultValue: [] },\r\n                        { name: 'parameters', defaultValue: [] }\r\n                    ]\r\n                };\r\n            }\r\n            case ScalarOption: {\r\n                return {\r\n                    name: ScalarOption,\r\n                    properties: [\r\n                        { name: 'name' },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case ScalarParameter: {\r\n                return {\r\n                    name: ScalarParameter,\r\n                    properties: [\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            case StringLiteral: {\r\n                return {\r\n                    name: StringLiteral,\r\n                    properties: [\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case Struct: {\r\n                return {\r\n                    name: Struct,\r\n                    properties: [\r\n                        { name: 'directives', defaultValue: [] },\r\n                        { name: 'fields', defaultValue: [] },\r\n                        { name: 'mixins', defaultValue: [] },\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            default: {\r\n                return {\r\n                    name: type,\r\n                    properties: []\r\n                };\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport const reflection = new IprotoAstReflection();\r\n","/******************************************************************************\r\n * This file was generated by langium-cli 3.3.0.\r\n * DO NOT EDIT MANUALLY!\r\n ******************************************************************************/\r\n\r\nimport type { Grammar } from 'langium';\r\nimport { loadGrammarFromJson } from 'langium';\r\n\r\nlet loadedIprotoGrammar: Grammar | undefined;\r\nexport const IprotoGrammar = (): Grammar => loadedIprotoGrammar ?? (loadedIprotoGrammar = loadGrammarFromJson('{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Iproto\",\"rules\":[{\"$type\":\"ParserRule\",\"name\":\"File\",\"entry\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"module\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"declaraions\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]},\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Declaration\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@29\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@27\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@24\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"RegularName\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@49\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@42\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"RegularDeclarationName\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@49\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Keyword\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"module\"},{\"$type\":\"Keyword\",\"value\":\"use\"},{\"$type\":\"Keyword\",\"value\":\"as\"},{\"$type\":\"Keyword\",\"value\":\"directive\"},{\"$type\":\"Keyword\",\"value\":\"on\"},{\"$type\":\"Keyword\",\"value\":\"scalar\"},{\"$type\":\"Keyword\",\"value\":\"enum\"},{\"$type\":\"Keyword\",\"value\":\"struct\"},{\"$type\":\"Keyword\",\"value\":\"with\"},{\"$type\":\"Keyword\",\"value\":\"alias\"},{\"$type\":\"Keyword\",\"value\":\"endpoint\"},{\"$type\":\"Keyword\",\"value\":\"exception\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Module\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@37\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\"module\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Import\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"use\"},{\"$type\":\"Assignment\",\"feature\":\"target\",\"operator\":\"=\",\"terminal\":{\"$type\":\"CrossReference\",\"type\":{\"$ref\":\"#/rules@5\"},\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]},\"deprecatedSyntax\":false}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Import\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"ImportMember\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"target\",\"operator\":\"=\",\"terminal\":{\"$type\":\"CrossReference\",\"type\":{\"$ref\":\"#/types@0\"},\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]},\"deprecatedSyntax\":false}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"as\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ImportBody\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"::\"},{\"$type\":\"Keyword\",\"value\":\"{\"},{\"$type\":\"Assignment\",\"feature\":\"members\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"}\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Directive\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"directive\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Directive\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"DirectiveParameter\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"optional\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"?\"},\"cardinality\":\"?\"},{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"type\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@42\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"DirectiveLocation\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"module\"},{\"$type\":\"Keyword\",\"value\":\"scalar\"},{\"$type\":\"Keyword\",\"value\":\"enum\"},{\"$type\":\"Keyword\",\"value\":\"variant\"},{\"$type\":\"Keyword\",\"value\":\"struct\"},{\"$type\":\"Keyword\",\"value\":\"field\"},{\"$type\":\"Keyword\",\"value\":\"exception\"},{\"$type\":\"Keyword\",\"value\":\"endpoint\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"DirectiveParameters\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"(\"},{\"$type\":\"Assignment\",\"feature\":\"parameters\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\")\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"DirectiveLocations\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"on\"},{\"$type\":\"Assignment\",\"feature\":\"locations\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]},\"cardinality\":\"+\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Scalar\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@37\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\"scalar\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@18\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Scalar\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"ScalarParameter\",\"definition\":{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ScalarOption\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"type\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@42\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ScalarOptions\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\".\"},{\"$type\":\"Keyword\",\"value\":\"[\"},{\"$type\":\"Assignment\",\"feature\":\"options\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"]\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ScalarParameters\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"<\"},{\"$type\":\"Assignment\",\"feature\":\"parameters\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"ellipsis\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"...\"},\"cardinality\":\"?\"},{\"$type\":\"Keyword\",\"value\":\">\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Enum\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@37\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\"enum\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@21\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Enum\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"EnumMember\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@37\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"EnumMembers\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"{\"},{\"$type\":\"Assignment\",\"feature\":\"members\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"}\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Field\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@37\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"type\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@30\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Field\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"Struct\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@37\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\"struct\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@25\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@26\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Struct\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"Alias\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"alias\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"type\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@30\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Alias\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"StructMixins\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"with\"},{\"$type\":\"Assignment\",\"feature\":\"mixins\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@30\"},\"arguments\":[]},\"cardinality\":\"+\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"StructFields\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"{\"},{\"$type\":\"Assignment\",\"feature\":\"fields\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"}\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Exception\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@37\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\"exception\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@28\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Exception\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"ExceptionFields\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"{\"},{\"$type\":\"Assignment\",\"feature\":\"fields\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"}\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Endpoint\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@37\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\"endpoint\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\"(\"},{\"$type\":\"Assignment\",\"feature\":\"input\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@30\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Keyword\",\"value\":\")\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"output\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@30\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Endpoint\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"ReferenceType\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"target\",\"operator\":\"=\",\"terminal\":{\"$type\":\"CrossReference\",\"type\":{\"$ref\":\"#/types@1\"},\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]},\"deprecatedSyntax\":false}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@32\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@33\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * ReferenceType\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"ReferenceTypeOption\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"target\",\"operator\":\"=\",\"terminal\":{\"$type\":\"CrossReference\",\"type\":{\"$ref\":\"#/rules@16\"},\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]},\"deprecatedSyntax\":false}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@41\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ReferenceTypeArguments\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"<\"},{\"$type\":\"Assignment\",\"feature\":\"arguments\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@30\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\">\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ReferenceTypeOptions\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\".\"},{\"$type\":\"Keyword\",\"value\":\"[\"},{\"$type\":\"Assignment\",\"feature\":\"options\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@31\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"]\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ReferenceDirective\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"#\"},{\"$type\":\"Assignment\",\"feature\":\"target\",\"operator\":\"=\",\"terminal\":{\"$type\":\"CrossReference\",\"type\":{\"$ref\":\"#/rules@9\"},\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]},\"deprecatedSyntax\":false}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@36\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * ReferenceDirective\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"ReferenceDirectiveArgument\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"target\",\"operator\":\"=\",\"terminal\":{\"$type\":\"CrossReference\",\"type\":{\"$ref\":\"#/rules@10\"},\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]},\"deprecatedSyntax\":false}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@41\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ReferenceDirectiveArguments\",\"fragment\":true,\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"(\"},{\"$type\":\"Assignment\",\"feature\":\"arguments\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@35\"},\"arguments\":[]},\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\")\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ReferenceDirectives\",\"fragment\":true,\"definition\":{\"$type\":\"Assignment\",\"feature\":\"directives\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@34\"},\"arguments\":[]},\"cardinality\":\"*\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"StringLiteral\",\"definition\":{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@46\"},\"arguments\":[]}},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false,\"$comment\":\"/**\\\\n * Literal\\\\n */\"},{\"$type\":\"ParserRule\",\"name\":\"BooleanLiteral\",\"definition\":{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@48\"},\"arguments\":[]}},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"NumberLiteral\",\"definition\":{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@47\"},\"arguments\":[]}},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"LiteralValue\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@40\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@38\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@39\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"LiteralValueType\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"int\"},{\"$type\":\"Keyword\",\"value\":\"float\"},{\"$type\":\"Keyword\",\"value\":\"boolean\"},{\"$type\":\"Keyword\",\"value\":\"string\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WS\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\s+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"ML_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/--[\\\\\\\\s\\\\\\\\S]*?--/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SL_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\/\\\\\\\\/[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"(\\\\\\\\\\\\\\\\.|[^\\\\\"\\\\\\\\\\\\\\\\])*\\\\\"/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/-?\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/true|false/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"IDENTIFIER\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[a-zA-Z][a-zA-Z0-9_]*/\"},\"fragment\":false,\"hidden\":false}],\"types\":[{\"$type\":\"Type\",\"name\":\"Importable\",\"type\":{\"$type\":\"UnionType\",\"types\":[{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/types@1\"}},{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@9\"}}]}},{\"$type\":\"Type\",\"name\":\"Type\",\"type\":{\"$type\":\"UnionType\",\"types\":[{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@14\"}},{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@19\"}},{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@23\"}},{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@24\"}}]}}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"imports\":[],\"interfaces\":[],\"usedGrammars\":[]}'));\r\n","/******************************************************************************\r\n * This file was generated by langium-cli 3.3.0.\r\n * DO NOT EDIT MANUALLY!\r\n ******************************************************************************/\r\n\r\nimport type { LangiumSharedCoreServices, LangiumCoreServices, LangiumGeneratedCoreServices, LangiumGeneratedSharedCoreServices, LanguageMetaData, Module } from 'langium';\r\nimport { IprotoAstReflection } from './ast.js';\r\nimport { IprotoGrammar } from './grammar.js';\r\n\r\nexport const IprotoLanguageMetaData = {\r\n    languageId: 'iproto',\r\n    fileExtensions: ['.iproto'],\r\n    caseInsensitive: false,\r\n    mode: 'production'\r\n} as const satisfies LanguageMetaData;\r\n\r\nexport const IprotoGeneratedSharedModule: Module<LangiumSharedCoreServices, LangiumGeneratedSharedCoreServices> = {\r\n    AstReflection: () => new IprotoAstReflection()\r\n};\r\n\r\nexport const IprotoGeneratedModule: Module<LangiumCoreServices, LangiumGeneratedCoreServices> = {\r\n    Grammar: () => IprotoGrammar(),\r\n    LanguageMetaData: () => IprotoLanguageMetaData,\r\n    parser: {}\r\n};\r\n","import type { AstNode, CommentProvider, GrammarAST, MaybePromise, ReferenceInfo } from \"langium\";\nimport {\n\ttype CompletionAcceptor,\n\ttype CompletionContext,\n\ttype CompletionProviderOptions,\n\tDefaultCompletionProvider,\n\ttype LangiumServices,\n\ttype NextFeature,\n} from \"langium/lsp\";\nimport { CompletionItemKind, type MarkupContent } from \"vscode-languageserver\";\nimport {\n\ttype ReferenceDirective,\n\tisDeclaration,\n\tisDirective,\n\tisDirectiveParameter,\n\tisImport,\n\tisImportMember,\n\tisImportable,\n\tisModule,\n\tisReferenceDirective,\n\tisReferenceDirectiveArgument,\n\tisReferenceType,\n\tisReferenceTypeOption,\n\tisScalarOption,\n\tisType,\n} from \"../generated/ast.js\";\n\nexport class IprotoCompletionProvider extends DefaultCompletionProvider {\n\tprivate commentProvider: CommentProvider;\n\n\toverride readonly completionOptions?: CompletionProviderOptions;\n\n\tconstructor(services: LangiumServices) {\n\t\tsuper(services);\n\n\t\tthis.commentProvider = services.documentation.CommentProvider;\n\n\t\tthis.completionOptions = {\n\t\t\ttriggerCharacters: [\":\", \"#\", \"<\"],\n\t\t};\n\t}\n\n\tprivate completionForReferenceTypeOption(\n\t\tcontext: CompletionContext,\n\t\tnext: NextFeature<GrammarAST.CrossReference>,\n\t\tacceptor: CompletionAcceptor,\n\t) {\n\t\tconst node = context.node;\n\n\t\tif (isReferenceTypeOption(node)) {\n\t\t\tconst property: keyof ReferenceDirective = \"target\";\n\n\t\t\tconst refInfo: ReferenceInfo = {\n\t\t\t\treference: {\n\t\t\t\t\t$refText: \"\",\n\t\t\t\t},\n\t\t\t\tcontainer: node,\n\t\t\t\tproperty,\n\t\t\t};\n\n\t\t\tfor (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {\n\t\t\t\tif (isScalarOption(element.node)) {\n\t\t\t\t\tlet insertText = element.node.name;\n\n\t\t\t\t\tif (element.node.type === \"int\" || element.node.type === \"float\") {\n\t\t\t\t\t\tinsertText += \":0\";\n\t\t\t\t\t}\n\t\t\t\t\tif (element.node.type === \"string\") {\n\t\t\t\t\t\tinsertText += `:\"\"`;\n\t\t\t\t\t}\n\t\t\t\t\tif (element.node.type === \"boolean\") {\n\t\t\t\t\t\tinsertText += \":true\";\n\t\t\t\t\t}\n\n\t\t\t\t\tacceptor(context, {\n\t\t\t\t\t\tlabel: element.name,\n\t\t\t\t\t\tlabelDetails: {\n\t\t\t\t\t\t\tdescription: `${element.node.type}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkind: CompletionItemKind.Field,\n\t\t\t\t\t\tdocumentation: this.formatComment(element.node),\n\t\t\t\t\t\tinsertText,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate completionForReferenceDirective(\n\t\tcontext: CompletionContext,\n\t\tnext: NextFeature<GrammarAST.CrossReference>,\n\t\tacceptor: CompletionAcceptor,\n\t) {\n\t\tconst node = context.node;\n\n\t\tif (isReferenceDirective(node)) {\n\t\t\tconst property: keyof ReferenceDirective = \"target\";\n\n\t\t\tconst refInfo: ReferenceInfo = {\n\t\t\t\treference: {\n\t\t\t\t\t$refText: \"\",\n\t\t\t\t},\n\t\t\t\tcontainer: node,\n\t\t\t\tproperty,\n\t\t\t};\n\n\t\t\tfor (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {\n\t\t\t\tif (isDirective(element.node)) {\n\t\t\t\t\tacceptor(context, {\n\t\t\t\t\t\tlabel: element.name,\n\t\t\t\t\t\tlabelDetails: {\n\t\t\t\t\t\t\tdescription: `on ${element.node.locations.join(\" | \").trim()}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkind: CompletionItemKind.Field,\n\t\t\t\t\t\tdocumentation: this.formatComment(element.node),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate completionForReferenceDirectiveArgument(\n\t\tcontext: CompletionContext,\n\t\tnext: NextFeature<GrammarAST.CrossReference>,\n\t\tacceptor: CompletionAcceptor,\n\t) {\n\t\tconst node = context.node;\n\n\t\tif (isReferenceDirectiveArgument(node)) {\n\t\t\tconst property: keyof ReferenceDirective = \"target\";\n\n\t\t\tconst refInfo: ReferenceInfo = {\n\t\t\t\treference: {\n\t\t\t\t\t$refText: \"\",\n\t\t\t\t},\n\t\t\t\tcontainer: node,\n\t\t\t\tproperty,\n\t\t\t};\n\n\t\t\tfor (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {\n\t\t\t\tif (isDirectiveParameter(element.node)) {\n\t\t\t\t\tlet insertText = element.node.name;\n\n\t\t\t\t\tif (element.node.type === \"int\" || element.node.type === \"float\") {\n\t\t\t\t\t\tinsertText += \":0\";\n\t\t\t\t\t}\n\t\t\t\t\tif (element.node.type === \"string\") {\n\t\t\t\t\t\tinsertText += `:\"\"`;\n\t\t\t\t\t}\n\t\t\t\t\tif (element.node.type === \"boolean\") {\n\t\t\t\t\t\tinsertText += \":true\";\n\t\t\t\t\t}\n\n\t\t\t\t\tacceptor(context, {\n\t\t\t\t\t\tlabel: element.name,\n\t\t\t\t\t\tlabelDetails: {\n\t\t\t\t\t\t\tdescription: `${element.node.type}${element.node.optional ? \"?\" : \"\"}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkind: CompletionItemKind.Field,\n\t\t\t\t\t\tdocumentation: this.formatComment(element.node),\n\t\t\t\t\t\tinsertText,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate completionForReferenceType(\n\t\tcontext: CompletionContext,\n\t\tnext: NextFeature<GrammarAST.CrossReference>,\n\t\tacceptor: CompletionAcceptor,\n\t) {\n\t\tconst node = context.node;\n\n\t\tif (isReferenceType(node)) {\n\t\t\tconst property: keyof ReferenceDirective = \"target\";\n\n\t\t\tconst refInfo: ReferenceInfo = {\n\t\t\t\treference: {\n\t\t\t\t\t$refText: \"\",\n\t\t\t\t},\n\t\t\t\tcontainer: node,\n\t\t\t\tproperty,\n\t\t\t};\n\n\t\t\tfor (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {\n\t\t\t\tif (isType(element.node)) {\n\t\t\t\t\tacceptor(context, {\n\t\t\t\t\t\tlabel: element.name,\n\t\t\t\t\t\tlabelDetails: {\n\t\t\t\t\t\t\tdescription: element.node.$type,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkind: CompletionItemKind.Field,\n\t\t\t\t\t\tdocumentation: this.formatComment(element.node),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate completionForImport(\n\t\tcontext: CompletionContext,\n\t\tnext: NextFeature<GrammarAST.CrossReference>,\n\t\tacceptor: CompletionAcceptor,\n\t) {\n\t\tconst node = context.node;\n\n\t\tif (isImport(node)) {\n\t\t\tconst property: keyof ReferenceDirective = \"target\";\n\n\t\t\tconst refInfo: ReferenceInfo = {\n\t\t\t\treference: {\n\t\t\t\t\t$refText: \"\",\n\t\t\t\t},\n\t\t\t\tcontainer: node,\n\t\t\t\tproperty,\n\t\t\t};\n\n\t\t\tfor (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {\n\t\t\t\tif (isModule(element.node)) {\n\t\t\t\t\tacceptor(context, {\n\t\t\t\t\t\tlabel: element.name,\n\t\t\t\t\t\tlabelDetails: {\n\t\t\t\t\t\t\tdescription: element.node.$type,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkind: CompletionItemKind.Field,\n\t\t\t\t\t\tdocumentation: this.formatComment(element.node),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate completionForImportMember(\n\t\tcontext: CompletionContext,\n\t\tnext: NextFeature<GrammarAST.CrossReference>,\n\t\tacceptor: CompletionAcceptor,\n\t) {\n\t\tconst node = context.node;\n\n\t\tif (isImportMember(node)) {\n\t\t\tconst property: keyof ReferenceDirective = \"target\";\n\n\t\t\tconst refInfo: ReferenceInfo = {\n\t\t\t\treference: {\n\t\t\t\t\t$refText: \"\",\n\t\t\t\t},\n\t\t\t\tcontainer: node,\n\t\t\t\tproperty,\n\t\t\t};\n\n\t\t\tfor (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {\n\t\t\t\tif (isImportable(element.node)) {\n\t\t\t\t\tacceptor(context, {\n\t\t\t\t\t\tlabel: element.name,\n\t\t\t\t\t\tlabelDetails: {\n\t\t\t\t\t\t\tdescription: element.node.$type,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkind: CompletionItemKind.Field,\n\t\t\t\t\t\tdocumentation: this.formatComment(element.node),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate formatComment(node: AstNode): MarkupContent | undefined {\n\t\tconst contents: MarkupContent = {\n\t\t\tkind: \"markdown\",\n\t\t\tvalue: \"\",\n\t\t};\n\n\t\tthis.documentationProvider.getDocumentation(node);\n\n\t\tconst comment = this.commentProvider.getComment(node);\n\n\t\tif (comment) {\n\t\t\treturn {\n\t\t\t\tkind: \"markdown\",\n\t\t\t\tvalue: comment.substring(2, comment.length - 2).trim(),\n\t\t\t};\n\t\t}\n\n\t\treturn contents;\n\t}\n\n\tprotected override completionForCrossReference(\n\t\tcontext: CompletionContext,\n\t\tnext: NextFeature<GrammarAST.CrossReference>,\n\t\tacceptor: CompletionAcceptor,\n\t) {\n\t\tconst node = context.node;\n\n\t\tif (!node) {\n\t\t\treturn super.completionForCrossReference(context, next, acceptor);\n\t\t}\n\n\t\tif (isReferenceTypeOption(node)) {\n\t\t\tthis.completionForReferenceTypeOption(context, next, acceptor);\n\t\t} else if (isReferenceDirective(node)) {\n\t\t\tthis.completionForReferenceDirective(context, next, acceptor);\n\t\t} else if (isReferenceDirectiveArgument(node)) {\n\t\t\tthis.completionForReferenceDirectiveArgument(context, next, acceptor);\n\t\t} else if (isReferenceType(node)) {\n\t\t\tthis.completionForReferenceType(context, next, acceptor);\n\t\t} else if (isImport(node)) {\n\t\t\tthis.completionForImport(context, next, acceptor);\n\t\t} else if (isImportMember(node)) {\n\t\t\tthis.completionForImportMember(context, next, acceptor);\n\t\t}\n\t}\n\n\tprotected override completionForKeyword(\n\t\tcontext: CompletionContext,\n\t\tkeyword: GrammarAST.Keyword,\n\t\tacceptor: CompletionAcceptor,\n\t): MaybePromise<void> {\n\t\tif (isDeclaration(context.node)) {\n\t\t\tfor (const keyword of [\"use\", \"directive\", \"scalar\", \"enum\", \"struct\", \"service\", \"exception\", \"alias\"]) {\n\t\t\t\tacceptor(context, {\n\t\t\t\t\tlabel: keyword,\n\t\t\t\t\tkind: CompletionItemKind.Keyword,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\treturn super.completionForKeyword(context, keyword, acceptor);\n\t}\n\n\tprotected override completionFor(\n\t\tcontext: CompletionContext,\n\t\tnext: NextFeature,\n\t\tacceptor: CompletionAcceptor,\n\t): MaybePromise<void> {\n\t\treturn super.completionFor(context, next, acceptor);\n\t}\n}\n","import type { AstNode, GrammarConfig } from \"langium\";\nimport { AbstractFormatter, Formatting, type LangiumServices } from \"langium/lsp\";\nimport {\n\ttype Alias,\n\ttype Directive,\n\ttype DirectiveParameter,\n\ttype Endpoint,\n\ttype Enum,\n\ttype EnumMember,\n\ttype Exception,\n\ttype Field,\n\ttype Import,\n\ttype ImportMember,\n\ttype Module,\n\ttype ReferenceDirective,\n\ttype ReferenceDirectiveArgument,\n\ttype ReferenceType,\n\ttype ReferenceTypeOption,\n\ttype Scalar,\n\ttype ScalarOption,\n\ttype Struct,\n\tisAlias,\n\tisDirective,\n\tisDirectiveParameter,\n\tisEndpoint,\n\tisEnum,\n\tisEnumMember,\n\tisException,\n\tisField,\n\tisImport,\n\tisImportMember,\n\tisModule,\n\tisReferenceDirective,\n\tisReferenceDirectiveArgument,\n\tisReferenceType,\n\tisReferenceTypeOption,\n\tisScalar,\n\tisScalarOption,\n\tisStruct,\n} from \"../generated/ast.js\";\n\nexport class IprotoFormatter extends AbstractFormatter {\n\tprotected readonly grammarConfig: () => GrammarConfig;\n\n\tconstructor(services: LangiumServices) {\n\t\tsuper();\n\n\t\tthis.grammarConfig = () => services.parser.GrammarConfig;\n\t}\n\n\tprivate formatDirectives(node: Module | Scalar | Struct | Enum | EnumMember | Exception | Endpoint | Field) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tnode.directives.map((directive, index) => {\n\t\t\tif (index !== 0) {\n\t\t\t\tformatter.node(directive).prepend(Formatting.oneSpace());\n\t\t\t} else {\n\t\t\t\tformatter.node(directive).prepend(Formatting.noIndent());\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate formatModule(node: Module) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"module\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\t\tformatter.property(\"name\").append(Formatting.newLines(2));\n\n\t\tthis.formatDirectives(node);\n\t}\n\n\tprivate formatImport(node: Import) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"use\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\t\tformatter.property(\"target\").append(Formatting.noSpace());\n\t\tformatter.keyword(\"::\").surround(Formatting.noSpace());\n\t\tformatter.keyword(\"{\").append(Formatting.oneSpace());\n\t\tformatter.keyword(\"}\").prepend(Formatting.oneSpace());\n\t\tformatter.nodes(...node.members).surround(Formatting.oneSpace());\n\t}\n\n\tprivate formatImportMember(node: ImportMember) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"as\").surround(Formatting.oneSpace());\n\t}\n\n\tprivate formatScalar(node: Scalar) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"scalar\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\t\tformatter.keywords(\"<\", \".\", \"[\").surround(Formatting.noSpace());\n\t\tformatter.keywords(\">\", \"]\").prepend(Formatting.noSpace());\n\t\tformatter.keyword(\"...\").prepend(Formatting.oneSpace());\n\n\t\tnode.parameters.map((node, index) => {\n\t\t\tif (index !== 0) {\n\t\t\t\tformatter.node(node).prepend(Formatting.oneSpace());\n\t\t\t}\n\t\t});\n\n\t\tnode.options.map((node, index) => {\n\t\t\tif (index !== 0) {\n\t\t\t\tformatter.node(node).prepend(Formatting.oneSpace());\n\t\t\t}\n\t\t});\n\n\t\tthis.formatDirectives(node);\n\t}\n\n\tprivate formatScalarOption(node: ScalarOption) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\t\tformatter.keyword(\":\").surround(Formatting.noSpace());\n\t}\n\n\tprivate formatEnum(node: Enum) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"enum\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\t\tformatter.property(\"name\").append(Formatting.oneSpace());\n\n\t\tconst bracesOpen = formatter.keyword(\"{\");\n\t\tconst bracesClose = formatter.keyword(\"}\").prepend(Formatting.newLine());\n\n\t\tformatter.interior(bracesOpen, bracesClose).prepend(Formatting.indent());\n\n\t\tthis.formatDirectives(node);\n\t}\n\n\tprivate formatEnumMember(node: EnumMember) {\n\t\tthis.formatDirectives(node);\n\t}\n\n\tprivate formatStruct(node: Struct) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"struct\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\t\tformatter.properties(\"name\").append(Formatting.oneSpace());\n\t\tformatter.keyword(\"with\").append(Formatting.oneSpace());\n\n\t\tnode.mixins.map((node) => {\n\t\t\tformatter.node(node).append(Formatting.oneSpace());\n\t\t});\n\n\t\tconst bracesOpen = formatter.keyword(\"{\");\n\t\tconst bracesClose = formatter.keyword(\"}\").prepend(Formatting.newLine());\n\n\t\tformatter.interior(bracesOpen, bracesClose).prepend(Formatting.indent());\n\n\t\tthis.formatDirectives(node);\n\t}\n\n\tprivate formatException(node: Exception) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"exception\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\t\tformatter.property(\"name\").append(Formatting.oneSpace());\n\n\t\tconst bracesOpen = formatter.keyword(\"{\");\n\t\tconst bracesClose = formatter.keyword(\"}\").prepend(Formatting.newLine());\n\n\t\tformatter.interior(bracesOpen, bracesClose).prepend(Formatting.indent());\n\n\t\tthis.formatDirectives(node);\n\t}\n\n\tprivate formatEndpoint(node: Endpoint) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"endpoint\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\t\tformatter.property(\"name\").append(Formatting.noSpace());\n\t\tformatter.keywords(\"(\").surround(Formatting.noSpace());\n\t\tformatter.keyword(\")\").prepend(Formatting.noSpace());\n\t\tformatter.keyword(\":\").append(Formatting.oneSpace()).prepend(Formatting.noSpace());\n\n\t\tthis.formatDirectives(node);\n\t}\n\n\tprivate formatDirective(node: Directive) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"directive\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\n\t\tformatter\n\t\t\t.keywords(\"on\", \"module\", \"scalar\", \"enum\", \"variant\", \"struct\", \"field\", \"exception\", \"endpoint\")\n\t\t\t.prepend(Formatting.oneSpace());\n\t\tformatter.keyword(\"(\").surround(Formatting.noSpace());\n\t\tformatter.keyword(\")\").prepend(Formatting.noSpace());\n\n\t\tnode.parameters.map((node, index) => {\n\t\t\tif (index !== 0) {\n\t\t\t\tformatter.node(node).prepend(Formatting.oneSpace());\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate formatDirectiveParameter(node: DirectiveParameter) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keywords(\":\", \"?\").surround(Formatting.noSpace());\n\t}\n\n\tprivate formatAlias(node: Alias) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"alias\").prepend(Formatting.noIndent()).append(Formatting.oneSpace());\n\t\tformatter.property(\"name\").append(Formatting.oneSpace());\n\t}\n\n\tprivate formatReferenceType(node: ReferenceType) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keywords(\"<\", \".\", \"[\").surround(Formatting.noSpace());\n\t\tformatter.keywords(\">\", \"]\").prepend(Formatting.noSpace());\n\n\t\tnode.arguments.map((node, index) => {\n\t\t\tif (index !== 0) {\n\t\t\t\tformatter.node(node).prepend(Formatting.oneSpace());\n\t\t\t}\n\t\t});\n\n\t\tnode.options.map((node, index) => {\n\t\t\tif (index !== 0) {\n\t\t\t\tformatter.node(node).prepend(Formatting.oneSpace());\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate formatReferenceTypeOption(node: ReferenceTypeOption) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\":\").surround(Formatting.noSpace());\n\t}\n\n\tprivate formatReferenceDirective(node: ReferenceDirective) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\n\t\tformatter.keyword(\"#\").append(Formatting.noSpace());\n\t\tformatter.keyword(\"(\").surround(Formatting.noSpace());\n\t\tformatter.keyword(\")\").prepend(Formatting.noSpace());\n\n\t\tnode.arguments.map((node, index) => {\n\t\t\tif (index !== 0) {\n\t\t\t\tformatter.node(node).prepend(Formatting.oneSpace());\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate formatReferenceDirectiveArgument(node: ReferenceDirectiveArgument) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\t\tformatter.keyword(\":\").surround(Formatting.noSpace());\n\t}\n\n\tprivate formatField(node: Field) {\n\t\tconst formatter = this.getNodeFormatter(node);\n\t\tconst siblings = node.$container.fields;\n\t\tconst max = Math.max(...siblings.map((node) => node.name.length));\n\n\t\tformatter.property(\"name\").append(Formatting.spaces(max + 1 - node.name.length));\n\t}\n\n\tprotected override format(node: AstNode): void {\n\t\tif (isModule(node)) this.formatModule(node);\n\t\tif (isImport(node)) this.formatImport(node);\n\t\tif (isImportMember(node)) this.formatImportMember(node);\n\t\tif (isScalar(node)) this.formatScalar(node);\n\t\tif (isScalarOption(node)) this.formatScalarOption(node);\n\t\tif (isEnum(node)) this.formatEnum(node);\n\t\tif (isEnumMember(node)) this.formatEnumMember(node);\n\t\tif (isStruct(node)) this.formatStruct(node);\n\t\tif (isException(node)) this.formatException(node);\n\t\tif (isEndpoint(node)) this.formatEndpoint(node);\n\t\tif (isDirective(node)) this.formatDirective(node);\n\t\tif (isDirectiveParameter(node)) this.formatDirectiveParameter(node);\n\t\tif (isAlias(node)) this.formatAlias(node);\n\t\tif (isReferenceType(node)) this.formatReferenceType(node);\n\t\tif (isReferenceTypeOption(node)) this.formatReferenceTypeOption(node);\n\t\tif (isReferenceDirective(node)) this.formatReferenceDirective(node);\n\t\tif (isReferenceDirectiveArgument(node)) this.formatReferenceDirectiveArgument(node);\n\t\tif (isField(node)) this.formatField(node);\n\t}\n}\n","import type { AstNode, CommentProvider, MaybePromise } from \"langium\";\nimport { AstNodeHoverProvider, type LangiumServices } from \"langium/lsp\";\nimport type { Hover, MarkupContent } from \"vscode-languageserver\";\n\nimport {\n\tisAlias,\n\tisDirective,\n\tisDirectiveParameter,\n\tisEndpoint,\n\tisEnum,\n\tisException,\n\tisImportMember,\n\tisModule,\n\tisScalar,\n\tisScalarOption,\n\tisStruct,\n} from \"../generated/ast.js\";\n\nexport class IprotoHoverProvider extends AstNodeHoverProvider {\n\tprivate commentProvider: CommentProvider;\n\n\tconstructor(services: LangiumServices) {\n\t\tsuper(services);\n\t\tthis.commentProvider = services.documentation.CommentProvider;\n\t}\n\n\tprotected override getAstNodeHoverContent(node: AstNode): MaybePromise<Hover | undefined> {\n\t\tif (isAlias(node)) {\n\t\t\treturn this.generateHover(`alias ${node.name}`, node);\n\t\t}\n\n\t\tif (isScalar(node)) {\n\t\t\tlet declaration = `scalar ${node.name}`;\n\n\t\t\tif (node.parameters.length > 0) {\n\t\t\t\tdeclaration += `<${node.parameters.map((param) => param.name).join(\", \")}>`;\n\t\t\t}\n\n\t\t\treturn this.generateHover(declaration, node);\n\t\t}\n\n\t\tif (isScalarOption(node)) {\n\t\t\treturn this.generateHover(`${node.name}:${node.type}`, node);\n\t\t}\n\n\t\tif (isEnum(node)) {\n\t\t\treturn this.generateHover(`enum ${node.name}`, node);\n\t\t}\n\n\t\tif (isStruct(node)) {\n\t\t\treturn this.generateHover(`struct ${node.name}`, node);\n\t\t}\n\n\t\tif (isEndpoint(node)) {\n\t\t\treturn this.generateHover(`endpoint ${node.name}`, node);\n\t\t}\n\n\t\tif (isDirective(node)) {\n\t\t\treturn this.generateHover(`directive ${node.name}`, node);\n\t\t}\n\n\t\tif (isDirectiveParameter(node)) {\n\t\t\treturn this.generateHover(`${node.name}${node.optional ? \"?\" : \"\"}:${node.type}`, node);\n\t\t}\n\n\t\tif (isModule(node)) {\n\t\t\treturn this.generateHover(`module ${node.name}`, node);\n\t\t}\n\n\t\tif (isException(node)) {\n\t\t\treturn this.generateHover(`exception ${node.name}`, node);\n\t\t}\n\n\t\tif (isImportMember(node)) {\n\t\t\tif (node.target.ref) {\n\t\t\t\treturn this.getAstNodeHoverContent(node.target.ref);\n\t\t\t}\n\t\t}\n\n\t\treturn this.generateHover(\"\", node);\n\t}\n\n\tprivate generateHover(declaration: string, node: AstNode): Hover {\n\t\tconst contents: MarkupContent = {\n\t\t\tkind: \"markdown\",\n\t\t\tvalue: \"\",\n\t\t};\n\n\t\tconst comment = this.commentProvider.getComment(node);\n\n\t\tif (comment) {\n\t\t\tcontents.value += comment.substring(2, comment.length - 2).trim();\n\t\t\tcontents.value += \"\\n\\n\";\n\t\t}\n\n\t\tif (declaration) {\n\t\t\tcontents.value += `\\`\\`\\`iproto\\n${declaration}\\n\\`\\`\\``;\n\t\t}\n\n\t\treturn { contents };\n\t}\n}\n","import type { AstNode } from \"langium\";\nimport { AbstractSemanticTokenProvider, type SemanticTokenAcceptor } from \"langium/lsp\";\nimport { SemanticTokenTypes } from \"vscode-languageserver\";\n\nimport {\n\tisAlias,\n\tisDirective,\n\tisEndpoint,\n\tisEnum,\n\tisException,\n\tisImport,\n\tisImportMember,\n\tisLiteralValue,\n\tisModule,\n\tisReferenceDirective,\n\tisReferenceType,\n\tisScalar,\n\tisStruct,\n} from \"../generated/ast.js\";\nimport type {\n\tAlias,\n\tDirective,\n\tEndpoint,\n\tEnum,\n\tException,\n\tImport,\n\tImportMember,\n\tLiteralValue,\n\tModule,\n\tReferenceDirective,\n\tReferenceType,\n\tScalar,\n\tStruct,\n} from \"../generated/ast.js\";\n\nexport class IprotoSemanticTokenProvider extends AbstractSemanticTokenProvider {\n\tprivate highlightModule(node: Module, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.namespace });\n\t}\n\n\tprivate highlightImport(node: Import, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"target\", type: SemanticTokenTypes.namespace });\n\t\tacceptor({ node, keyword: \"::\", type: SemanticTokenTypes.operator });\n\t}\n\n\tprivate highlightImportMember(node: ImportMember, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"target\", type: SemanticTokenTypes.variable });\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.type });\n\t}\n\n\tprivate highlightDirective(node: Directive, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.decorator });\n\t\tacceptor({ node, property: \"locations\", type: SemanticTokenTypes.macro });\n\n\t\tfor (const param of node.parameters) {\n\t\t\tacceptor({ node: param, property: \"name\", type: SemanticTokenTypes.parameter });\n\t\t\tacceptor({ node: param, property: \"type\", type: SemanticTokenTypes.macro });\n\t\t\tacceptor({ node: param, keyword: \"?\", type: SemanticTokenTypes.operator });\n\t\t\tacceptor({ node: param, keyword: \":\", type: SemanticTokenTypes.operator });\n\t\t}\n\t}\n\n\tprivate highlightScalar(node: Scalar, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.interface });\n\t\tacceptor({ node, keyword: \".\", type: SemanticTokenTypes.operator });\n\t\tfor (const option of node.options) {\n\t\t\tacceptor({ node: option, property: \"name\", type: SemanticTokenTypes.parameter });\n\t\t\tacceptor({ node: option, property: \"type\", type: SemanticTokenTypes.macro });\n\t\t\tacceptor({ node: option, keyword: \":\", type: SemanticTokenTypes.operator });\n\t\t}\n\t\tfor (const param of node.parameters) {\n\t\t\tacceptor({ node: param, property: \"name\", type: SemanticTokenTypes.type });\n\t\t}\n\t}\n\n\tprivate highlightEnum(node: Enum, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.enum });\n\n\t\tfor (const member of node.members) {\n\t\t\tacceptor({ node: member, property: \"name\", type: SemanticTokenTypes.enumMember });\n\t\t}\n\t}\n\n\tprivate highlightStruct(node: Struct, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.struct });\n\n\t\tfor (const property of node.fields) {\n\t\t\tacceptor({ node: property, property: \"name\", type: SemanticTokenTypes.property });\n\t\t}\n\t}\n\n\tprivate highlightAlias(node: Alias, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.type });\n\t}\n\n\tprivate highlightEndpoint(node: Endpoint, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.method });\n\t}\n\n\tprivate highlightReferenceType(node: ReferenceType, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"target\", type: SemanticTokenTypes.type });\n\n\t\tacceptor({ node: node, keyword: \".\", type: SemanticTokenTypes.operator });\n\n\t\tfor (const option of node.options) {\n\t\t\tacceptor({ node: option, property: \"target\", type: SemanticTokenTypes.parameter });\n\t\t\tacceptor({ node: option, keyword: \":\", type: SemanticTokenTypes.operator });\n\t\t}\n\t}\n\n\tprivate highlightReferenceDirective(node: ReferenceDirective, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"target\", type: SemanticTokenTypes.decorator });\n\t\tacceptor({ node, keyword: \"#\", type: SemanticTokenTypes.operator });\n\n\t\tfor (const argument of node.arguments) {\n\t\t\tacceptor({ node: argument, keyword: \":\", type: SemanticTokenTypes.operator });\n\t\t\tacceptor({ node: argument, property: \"target\", type: SemanticTokenTypes.parameter });\n\t\t}\n\t}\n\n\tprivate highlightLiteralValue(node: LiteralValue, acceptor: SemanticTokenAcceptor) {\n\t\tif (typeof node.value === \"boolean\") {\n\t\t\tacceptor({ node, property: \"value\", type: SemanticTokenTypes.keyword });\n\t\t}\n\t\tif (typeof node.value === \"number\") {\n\t\t\tacceptor({ node, property: \"value\", type: SemanticTokenTypes.number });\n\t\t}\n\t\tif (typeof node.value === \"string\") {\n\t\t\tacceptor({ node, property: \"value\", type: SemanticTokenTypes.string });\n\t\t}\n\t}\n\n\tprivate highlightException(node: Exception, acceptor: SemanticTokenAcceptor) {\n\t\tacceptor({ node, property: \"name\", type: SemanticTokenTypes.interface });\n\t}\n\n\tprotected override highlightElement(node: AstNode, acceptor: SemanticTokenAcceptor): void | undefined | \"prune\" {\n\t\tif (isAlias(node)) {\n\t\t\tthis.highlightAlias(node, acceptor);\n\t\t}\n\n\t\tif (isModule(node)) {\n\t\t\tthis.highlightModule(node, acceptor);\n\t\t}\n\n\t\tif (isImport(node)) {\n\t\t\tthis.highlightImport(node, acceptor);\n\t\t}\n\n\t\tif (isImportMember(node)) {\n\t\t\tthis.highlightImportMember(node, acceptor);\n\t\t}\n\n\t\tif (isDirective(node)) {\n\t\t\tthis.highlightDirective(node, acceptor);\n\t\t}\n\n\t\tif (isScalar(node)) {\n\t\t\tthis.highlightScalar(node, acceptor);\n\t\t}\n\n\t\tif (isEnum(node)) {\n\t\t\tthis.highlightEnum(node, acceptor);\n\t\t}\n\n\t\tif (isStruct(node)) {\n\t\t\tthis.highlightStruct(node, acceptor);\n\t\t}\n\n\t\tif (isEndpoint(node)) {\n\t\t\tthis.highlightEndpoint(node, acceptor);\n\t\t}\n\n\t\tif (isException(node)) {\n\t\t\tthis.highlightException(node, acceptor);\n\t\t}\n\n\t\tif (isReferenceType(node)) {\n\t\t\tthis.highlightReferenceType(node, acceptor);\n\t\t}\n\n\t\tif (isReferenceDirective(node)) {\n\t\t\tthis.highlightReferenceDirective(node, acceptor);\n\t\t}\n\n\t\tif (isLiteralValue(node)) {\n\t\t\tthis.highlightLiteralValue(node, acceptor);\n\t\t}\n\t}\n}\n","import {\n\ttype AstNodeDescription,\n\tAstUtils,\n\tCancellation,\n\tDefaultScopeComputation,\n\ttype LangiumDocument,\n} from \"langium\";\nimport { interruptAndCheck } from \"langium\";\nimport type { CancellationToken } from \"vscode-languageserver\";\n\nimport { isAlias, isDirective, isEndpoint, isEnum, isModule, isScalar, isStruct } from \"../generated/ast.js\";\n\nexport class IprotoScopeComputation extends DefaultScopeComputation {\n\toverride async computeExports(\n\t\tdocument: LangiumDocument,\n\t\tcancelToken?: CancellationToken,\n\t): Promise<AstNodeDescription[]> {\n\t\tconst descriptions: AstNodeDescription[] = [];\n\n\t\tfor (const node of AstUtils.streamAllContents(document.parseResult.value)) {\n\t\t\tawait interruptAndCheck(cancelToken || Cancellation.CancellationToken.None);\n\n\t\t\tif (\n\t\t\t\tisEnum(node) ||\n\t\t\t\tisStruct(node) ||\n\t\t\t\tisEndpoint(node) ||\n\t\t\t\tisScalar(node) ||\n\t\t\t\tisDirective(node) ||\n\t\t\t\tisModule(node) ||\n\t\t\t\tisAlias(node)\n\t\t\t) {\n\t\t\t\tconst name = this.nameProvider.getName(node);\n\n\t\t\t\tif (name) {\n\t\t\t\t\tdescriptions.push(this.descriptions.createDescription(node, name, document));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn descriptions;\n\t}\n}\n","import {\n\ttype AstNodeDescription,\n\tAstUtils,\n\tDefaultScopeProvider,\n\tEMPTY_SCOPE,\n\ttype ReferenceInfo,\n\ttype Scope,\n} from \"langium\";\n\nimport { BUILTIN_LIBRARY_URI } from \"../builtin/index.js\";\nimport {\n\tDirective,\n\ttype File,\n\ttype Import,\n\ttype ImportMember,\n\tModule,\n\ttype ReferenceDirective,\n\ttype ReferenceDirectiveArgument,\n\ttype ReferenceType,\n\ttype ReferenceTypeOption,\n\tType,\n\tisImport,\n\tisImportMember,\n\tisImportable,\n\tisReferenceDirective,\n\tisReferenceDirectiveArgument,\n\tisReferenceType,\n\tisReferenceTypeOption,\n\tisType,\n} from \"../generated/ast.js\";\n\nexport class IprotoScopeProvider extends DefaultScopeProvider {\n\tprivate getModuleScope() {\n\t\tconst modules = this.indexManager.allElements(Module).filter((mod) => {\n\t\t\tif (mod.documentUri.toString() === BUILTIN_LIBRARY_URI) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\treturn this.createScope(modules);\n\t}\n\n\tprivate getImportMemberScope(member: ImportMember) {\n\t\tconst container = member.$container;\n\n\t\tif (container.target.ref) {\n\t\t\tconst module = container.target.ref;\n\t\t\tconst descriptions: AstNodeDescription[] = [];\n\n\t\t\tfor (const decl of module.$container.declaraions) {\n\t\t\t\tif (isImportable(decl)) {\n\t\t\t\t\tdescriptions.push(this.descriptions.createDescription(decl, decl.name));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.createScope(descriptions);\n\t\t}\n\n\t\treturn EMPTY_SCOPE;\n\t}\n\n\tprivate getDirectiveScope(container: ReferenceDirective) {\n\t\tconst currentUri = AstUtils.getDocument<File>(container).uri.toString();\n\n\t\tconst uris = new Set([currentUri, BUILTIN_LIBRARY_URI]);\n\t\tconst descriptions = this.indexManager.allElements(Directive, uris).toArray();\n\n\t\tconst document = AstUtils.getDocument<File>(container);\n\n\t\tfor (const decl of document.parseResult.value.declaraions) {\n\t\t\tif (decl.$type === \"Import\") {\n\t\t\t\tfor (const member of decl.members) {\n\t\t\t\t\tif (member.target?.ref && member.target.ref.$type === \"Directive\") {\n\t\t\t\t\t\tif (member.name) {\n\t\t\t\t\t\t\tdescriptions.push(this.descriptions.createDescription(member, member.name));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdescriptions.push(this.descriptions.createDescription(member.target.ref, member.target.$refText));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.createScope(descriptions);\n\t}\n\n\tprivate getDirectiveArgumentScope(container: ReferenceDirectiveArgument) {\n\t\tconst reference = container.$container;\n\t\tconst directive = reference.target.ref;\n\n\t\tif (directive) {\n\t\t\treturn this.createScope(\n\t\t\t\tdirective.parameters.map((param) => {\n\t\t\t\t\treturn this.descriptions.createDescription(param, param.name);\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn EMPTY_SCOPE;\n\t}\n\n\tprivate getTypeScope(container: ReferenceType) {\n\t\tconst currentUri = AstUtils.getDocument<File>(container).uri.toString();\n\n\t\tconst uris = new Set([currentUri, BUILTIN_LIBRARY_URI]);\n\t\tconst descriptions = this.indexManager.allElements(Type, uris).toArray();\n\n\t\tconst document = AstUtils.getDocument<File>(container);\n\n\t\tfor (const decl of document.parseResult.value.declaraions) {\n\t\t\tif (decl.$type === \"Import\") {\n\t\t\t\tfor (const member of decl.members) {\n\t\t\t\t\tconst type = member.target?.ref;\n\t\t\t\t\tif (isType(type)) {\n\t\t\t\t\t\tif (member.name) {\n\t\t\t\t\t\t\tdescriptions.push(this.descriptions.createDescription(type, member.name));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdescriptions.push(this.descriptions.createDescription(type, member.target.$refText));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.createScope(descriptions);\n\t}\n\n\tprivate getScalarOptionScope(container: ReferenceTypeOption) {\n\t\tconst reference = container.$container;\n\t\tconst type = reference.target.ref;\n\n\t\tif (type && type.$type === \"Scalar\") {\n\t\t\treturn this.createScope(type.options.map((option) => this.descriptions.createDescription(option, option.name)));\n\t\t}\n\n\t\treturn EMPTY_SCOPE;\n\t}\n\n\toverride getScope(context: ReferenceInfo): Scope {\n\t\tif (isReferenceDirective(context.container)) {\n\t\t\tconst property = context.property as keyof ReferenceDirective;\n\n\t\t\tif (property === \"target\") {\n\t\t\t\treturn this.getDirectiveScope(context.container);\n\t\t\t}\n\t\t}\n\n\t\tif (isReferenceDirectiveArgument(context.container)) {\n\t\t\tconst property = context.property as keyof ReferenceDirectiveArgument;\n\n\t\t\tif (property === \"target\") {\n\t\t\t\treturn this.getDirectiveArgumentScope(context.container);\n\t\t\t}\n\t\t}\n\n\t\tif (isReferenceType(context.container)) {\n\t\t\tconst property = context.property as keyof ReferenceType;\n\n\t\t\tif (property === \"target\") {\n\t\t\t\treturn this.getTypeScope(context.container);\n\t\t\t}\n\t\t}\n\n\t\tif (isReferenceTypeOption(context.container)) {\n\t\t\tconst property = context.property as keyof ReferenceTypeOption;\n\n\t\t\tif (property === \"target\") {\n\t\t\t\treturn this.getScalarOptionScope(context.container);\n\t\t\t}\n\t\t}\n\n\t\tif (isImport(context.container)) {\n\t\t\tconst property = context.property as keyof Import;\n\n\t\t\tif (property === \"target\") {\n\t\t\t\treturn this.getModuleScope();\n\t\t\t}\n\t\t}\n\n\t\tif (isImportMember(context.container)) {\n\t\t\tconst property = context.property as keyof ImportMember;\n\n\t\t\tif (property === \"target\") {\n\t\t\t\treturn this.getImportMemberScope(context.container);\n\t\t\t}\n\t\t}\n\n\t\treturn EMPTY_SCOPE;\n\t}\n}\n","import { AstUtils, type MaybePromise, type ValidationAcceptor } from \"langium\";\nimport { RegExpParser } from \"regexpp\";\nimport type { ReferenceType, ReferenceTypeOption, Type } from \"../generated/ast.js\";\nimport { BUILTIN_LIBRARY_URI } from \"./index.js\";\n\nexport class IprotoBuiltinValidator {\n\tprivate validateStringOptions(node: ReferenceTypeOption, accept: ValidationAcceptor) {\n\t\tif (node.target.$refText === \"pattern\") {\n\t\t\ttry {\n\t\t\t\tnew RegExpParser({}).parsePattern(node.value?.value as string);\n\t\t\t} catch (e) {\n\t\t\t\t// @ts-ignore\n\t\t\t\taccept(\"error\", `${e?.message}`, { node });\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateReferenceTypeOption(node: ReferenceTypeOption, accept: ValidationAcceptor): MaybePromise<void> {\n\t\tconst target = node.target.ref;\n\n\t\tif (target) {\n\t\t\tconst documentUri = AstUtils.getDocument(target).uri.toString();\n\n\t\t\tif (documentUri === BUILTIN_LIBRARY_URI) {\n\t\t\t\tswitch (target.$container.name) {\n\t\t\t\t\tcase \"String\": {\n\t\t\t\t\t\tthis.validateStringOptions(node, accept);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateReferenceUnion(node: ReferenceType, accept: ValidationAcceptor) {\n\t\tfor (const ref of node.arguments) {\n\t\t\tconst target = ref.target.ref;\n\n\t\t\tif (target && target.$type !== \"Struct\") {\n\t\t\t\treturn accept(\"error\", \"Union only accepts struct types as parameters.\", { node: ref });\n\t\t\t}\n\t\t}\n\n\t\tconst argumentsSet = new Set<Type>();\n\n\t\tfor (const ref of node.arguments) {\n\t\t\tconst target = ref.target.ref;\n\n\t\t\tif (target) {\n\t\t\t\tif (argumentsSet.has(target)) {\n\t\t\t\t\treturn accept(\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\t`Union cannot have duplicate parameters, but '${target.name}' appears more than once.`,\n\t\t\t\t\t\t{ node: ref },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\targumentsSet.add(target);\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateReferenceType(node: ReferenceType, accept: ValidationAcceptor) {\n\t\tconst target = node.target.ref;\n\n\t\tif (target) {\n\t\t\tconst documentUri = AstUtils.getDocument(target).uri.toString();\n\n\t\t\tif (documentUri === BUILTIN_LIBRARY_URI) {\n\t\t\t\tif (target.$type === \"Scalar\" && target.name === \"Union\") {\n\t\t\t\t\tthis.validateReferenceUnion(node, accept);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import { Decimal } from \"decimal.js\";\nimport {\n\tAstUtils,\n\ttype IndexManager,\n\ttype MaybePromise,\n\ttype References,\n\ttype ValidationAcceptor,\n\ttype ValidationChecks,\n} from \"langium\";\nimport type { LangiumServices } from \"langium/lsp\";\nimport { BUILTIN_LIBRARY_URI } from \"../builtin/index.js\";\nimport { IprotoBuiltinValidator } from \"../builtin/validator.js\";\nimport {\n\ttype Alias,\n\ttype Declaration,\n\ttype Directive,\n\ttype DirectiveLocation,\n\ttype DirectiveParameter,\n\ttype Endpoint,\n\ttype Enum,\n\ttype EnumMember,\n\ttype Exception,\n\ttype Field,\n\ttype File,\n\ttype Import,\n\ttype ImportMember,\n\ttype IprotoAstType,\n\tModule,\n\ttype ReferenceDirective,\n\ttype ReferenceDirectiveArgument,\n\ttype ReferenceType,\n\ttype ReferenceTypeOption,\n\ttype Scalar,\n\ttype ScalarOption,\n\ttype ScalarParameter,\n\ttype Struct,\n} from \"../generated/ast.js\";\nimport type { IprotoServices } from \"../iproto-module.js\";\n\ntype IprotoValidationChecks = Required<ValidationChecks<IprotoAstType>>;\n\ntype IprotoValidation = {\n\t[K in keyof IprotoValidationChecks as `validate${K}`]?: Exclude<IprotoValidationChecks[K], any[]>;\n};\n\n// prettier-ignore\n// biome-ignore format: This block should maintain its current formatting\nconst MESSAGES = {\n\tAliasOnlyForScalars: () => \"Aliases can only be used for scalar types.\",\n\tMixinOnlyStruct: () => \"Only struct types can use mixins.\",\n\tOptionsOnlyStructField: () => \"Options can only be set on struct fields.\",\n\tShadowBuiltinDeclaration: (name: string) => `Cannot shadow built-in declaration '${name}'.`,\n\tDuplicateStructInheritance: () => \"A struct cannot appear multiple times in an inheritance chain.\",\n\tCircularInheritance: () => \"Circular inheritance detected.\",\n\tOptionsOnlyForScalars: () => \"Options can only be set on scalar types.\",\n\tParametersOnlyForScalarAndStruct: () => \"Type parameters can only be used with scalars and structs.\",\n\tDuplicateModule: (name: string) => `Module '${name}' is already defined.`,\n\tDuplicateIdentifier: (name: string) => `Identifier '${name}' is already defined.`,\n\tDuplicateImport: (name: string) => `Import '${name}' is already defined.`,\n\tDuplicateParameter: (name: string) => `Parameter '${name}' is already set.`,\n\tDuplicateOption: (name: string) => `Option '${name}' is already set.`,\n\tDuplicateDirectiveLocation: (name: string) => `Directive location '${name}' is already defined.`,\n\tCircularModuleReference: () => \"Circular module references are not allowed.\",\n\tInvalidDirectiveUsage: (directive: string, on: string) => `Directive '#${directive}' cannot be used on '${on}'.`,\n\tLiteralTypeMismatch: (expected: string) => `Type mismatch: expected '${expected}'.`,\n\tMissingParameters: (params: string[]) => `Missing required parameter(s): ${params.join(\", \")}.`,\n\tTypeParameterMismatch: (name: string, expected: number, received: number) => `Scalar type '${name}' expects ${expected} parameter(s), but ${received} were provided.`,\n\tVariadicTypeParameterMismatch: (name: string, min: number, received: number) => `Scalar type '${name}' requires at least ${min} parameter(s), but ${received} were provided.`,\n\tPrecisionLoss: (value: string) => `Possible precision loss or misinterpretation for value '${value}'.`,\n\tInvalidInteger: (value: string) => `Invalid integer '${value}': must be in the range [-2147483648, 2147483647].`,\n\tInputMustBeStruct: () => \"Input type must be a struct.\",\n\tOutputMustBeStruct: () => \"Output type must be a struct.\",\n};\n\nconst constantCase = (name: string) => {\n\treturn name.toUpperCase();\n};\n\nexport class IprotoValidator implements IprotoValidation {\n\tindexManager: IndexManager;\n\treferences: References;\n\tbuiltin: IprotoBuiltinValidator;\n\n\tconstructor(services: LangiumServices) {\n\t\tthis.indexManager = services.shared.workspace.IndexManager;\n\t\tthis.references = services.references.References;\n\t\tthis.builtin = new IprotoBuiltinValidator();\n\t}\n\n\tvalidateException(node: Exception, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 不能使用 options\n\t\tnode.fields.map((field) => {\n\t\t\tif (field.type.options.length > 0) {\n\t\t\t\taccept(\"error\", MESSAGES.OptionsOnlyStructField(), { node: field.type });\n\t\t\t}\n\t\t});\n\t\tthis.validateFields(node.fields, accept);\n\t}\n\n\tvalidateDirective(node: Directive, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t{\n\t\t\tconst visited: DirectiveLocation[] = [];\n\n\t\t\tfor (const element of node.locations) {\n\t\t\t\tif (visited.includes(element)) {\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateDirectiveLocation(element), { node });\n\t\t\t\t} else {\n\t\t\t\t\tvisited.push(element);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 参数名不能重复\n\t\t{\n\t\t\tconst parameters = new Map<string, DirectiveParameter>();\n\n\t\t\tfor (const param of node.parameters) {\n\t\t\t\tconst exists = parameters.get(constantCase(param.name));\n\n\t\t\t\tif (exists) {\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(param.name), { node: param });\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(param.name), { node: exists });\n\t\t\t\t} else {\n\t\t\t\t\tparameters.set(constantCase(param.name), param);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateEnum(node: Enum, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 成员不能重复\n\t\t{\n\t\t\tconst members = new Map<string, EnumMember>();\n\n\t\t\tfor (const member of node.members) {\n\t\t\t\tconst exists = members.get(constantCase(member.name));\n\n\t\t\t\tif (exists) {\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(member.name), { node: member });\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(member.name), { node: exists });\n\t\t\t\t} else {\n\t\t\t\t\tmembers.set(constantCase(member.name), member);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateEnumMember(node: EnumMember, accept: ValidationAcceptor): MaybePromise<void> {}\n\n\tvalidateImport(node: Import, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 不能循环依赖\n\t\t{\n\t\t\tconst visitedDependencies = new Set<Module>();\n\n\t\t\tconst collectDependencyModules = (module: Module) => {\n\t\t\t\tfor (const decl of module.$container.declaraions) {\n\t\t\t\t\tif (decl.$type === \"Import\" && decl.target.ref) {\n\t\t\t\t\t\tconst target = decl.target.ref;\n\n\t\t\t\t\t\tif (!visitedDependencies.has(target)) {\n\t\t\t\t\t\t\tvisitedDependencies.add(target);\n\t\t\t\t\t\t\tcollectDependencyModules(target);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst target = node.target.ref;\n\n\t\t\tif (target) {\n\t\t\t\tvisitedDependencies.add(target);\n\t\t\t\tcollectDependencyModules(target);\n\t\t\t}\n\n\t\t\tif (visitedDependencies.has(node.$container.module)) {\n\t\t\t\taccept(\"error\", MESSAGES.CircularModuleReference(), { node });\n\t\t\t}\n\t\t}\n\n\t\t// 不能重复导入\n\t\t{\n\t\t\tconst members = new Map<string, ImportMember>();\n\n\t\t\tfor (const member of node.members) {\n\t\t\t\tconst exists = members.get(member.target.$refText);\n\n\t\t\t\tif (exists) {\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateImport(member.target.$refText), { node: member });\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateImport(member.target.$refText), { node: exists });\n\t\t\t\t} else {\n\t\t\t\t\tmembers.set(member.target.$refText, member);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateModule(node: Module, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 模块名不能重复\n\t\t{\n\t\t\tconst modules = this.indexManager\n\t\t\t\t.allElements(Module)\n\t\t\t\t.toArray()\n\t\t\t\t.map((desc) => desc.node);\n\t\t\tconst visitedModules = new Map<string, Module>();\n\n\t\t\tfor (const element of modules) {\n\t\t\t\tif (element) {\n\t\t\t\t\tconst module = element as Module;\n\t\t\t\t\tconst uri = AstUtils.getDocument(module).uri.toString();\n\n\t\t\t\t\tif (uri !== BUILTIN_LIBRARY_URI) {\n\t\t\t\t\t\tconst exists = visitedModules.get(constantCase(module.name));\n\n\t\t\t\t\t\tif (exists) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateModule(module.name), { node: exists, property: \"name\" });\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateModule(module.name), { node: module, property: \"name\" });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvisitedModules.set(constantCase(module.name), module);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateReferenceDirective(node: ReferenceDirective, accept: ValidationAcceptor): MaybePromise<void> {\n\t\tconst target = node.target.ref;\n\n\t\tif (!target) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 判断指令是否可用\n\t\t{\n\t\t\tconst locations = target.locations;\n\n\t\t\tif (locations.length > 0) {\n\t\t\t\tconst name = target.name;\n\n\t\t\t\tswitch (node.$container.$type) {\n\t\t\t\t\tcase \"Endpoint\": {\n\t\t\t\t\t\tif (!locations.includes(\"endpoint\")) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidDirectiveUsage(name, node.$container.$type), { node });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"EnumMember\": {\n\t\t\t\t\t\tif (!locations.includes(\"variant\")) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidDirectiveUsage(name, node.$container.$type), { node });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Enum\": {\n\t\t\t\t\t\tif (!locations.includes(\"enum\")) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidDirectiveUsage(name, node.$container.$type), { node });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Exception\": {\n\t\t\t\t\t\tif (!locations.includes(\"exception\")) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidDirectiveUsage(name, node.$container.$type), { node });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Field\": {\n\t\t\t\t\t\tif (!locations.includes(\"field\")) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidDirectiveUsage(name, node.$container.$type), { node });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Module\": {\n\t\t\t\t\t\tif (!locations.includes(\"module\")) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidDirectiveUsage(name, node.$container.$type), { node });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Scalar\": {\n\t\t\t\t\t\tif (!locations.includes(\"scalar\")) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidDirectiveUsage(name, node.$container.$type), { node });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Struct\": {\n\t\t\t\t\t\tif (!locations.includes(\"struct\")) {\n\t\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidDirectiveUsage(name, node.$container.$type), { node });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 判断参数是否重复\n\t\t{\n\t\t\tconst args = new Map<DirectiveParameter, ReferenceDirectiveArgument>();\n\n\t\t\tfor (const argument of node.arguments) {\n\t\t\t\tconst target = argument.target.ref;\n\n\t\t\t\tif (target) {\n\t\t\t\t\tconst exists = args.get(target);\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateParameter(target.name), { node: argument, property: \"target\" });\n\t\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateParameter(target.name), { node: exists, property: \"target\" });\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs.set(target, argument);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 判断是否缺少必要的参数\n\t\t{\n\t\t\tconst target = node.target.ref;\n\n\t\t\tif (target) {\n\t\t\t\tconst requiredParameters = target.parameters.filter((param) => !param.optional).map((param) => param.name);\n\t\t\t\tconst requiredParametersSet = new Set(requiredParameters);\n\n\t\t\t\tnode.arguments.map((arg) => {\n\t\t\t\t\trequiredParametersSet.delete(arg.target.$refText);\n\t\t\t\t});\n\n\t\t\t\tif (requiredParametersSet.size > 0) {\n\t\t\t\t\taccept(\"error\", MESSAGES.MissingParameters([...requiredParametersSet]), { node, property: \"target\" });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateReferenceDirectiveArgument(node: ReferenceDirectiveArgument, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 验证参数类型是否正确\n\t\t{\n\t\t\tconst target = node.target.ref;\n\n\t\t\tif (target) {\n\t\t\t\tconst expect = target.type;\n\t\t\t\tconst got = node.value?.$type || \"BooleanLiteral\";\n\n\t\t\t\tif (expect === \"boolean\" && got !== \"BooleanLiteral\") {\n\t\t\t\t\taccept(\"error\", MESSAGES.LiteralTypeMismatch(expect), { node, property: \"value\" });\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"string\" && got !== \"StringLiteral\") {\n\t\t\t\t\taccept(\"error\", MESSAGES.LiteralTypeMismatch(expect), { node, property: \"value\" });\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"float\" && got !== \"NumberLiteral\") {\n\t\t\t\t\taccept(\"error\", MESSAGES.LiteralTypeMismatch(expect), { node, property: \"value\" });\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"float\" && got === \"NumberLiteral\") {\n\t\t\t\t\tlet will = false;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst decimal = new Decimal(node.value?.value as string);\n\t\t\t\t\t\tconst js = Number(node.value?.value as string);\n\t\t\t\t\t\twill = decimal.toString() !== js.toString();\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\twill = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (will) {\n\t\t\t\t\t\taccept(\"warning\", MESSAGES.PrecisionLoss(node.value?.value as string), { node });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"int\" && got !== \"NumberLiteral\") {\n\t\t\t\t\taccept(\"error\", MESSAGES.LiteralTypeMismatch(expect), { node, property: \"value\" });\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"int\" && got === \"NumberLiteral\") {\n\t\t\t\t\tconst decimal = Decimal(node.value?.value as string);\n\n\t\t\t\t\tif (!decimal.gte(-2147483648) || !decimal.lte(2147483647) || !decimal.isInteger()) {\n\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidInteger(decimal.toString()), { node, property: \"value\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateReferenceTypeOption(node: ReferenceTypeOption, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 验证选项值类型是否正确\n\t\t{\n\t\t\tconst target = node.target.ref;\n\n\t\t\tif (target) {\n\t\t\t\tconst expect = target.type;\n\t\t\t\tconst got = node.value?.$type || \"BooleanLiteral\";\n\n\t\t\t\tif (expect === \"boolean\" && got !== \"BooleanLiteral\") {\n\t\t\t\t\taccept(\"error\", MESSAGES.LiteralTypeMismatch(expect), { node, property: \"value\" });\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"string\" && got !== \"StringLiteral\") {\n\t\t\t\t\taccept(\"error\", MESSAGES.LiteralTypeMismatch(expect), { node, property: \"value\" });\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"float\" && got !== \"NumberLiteral\") {\n\t\t\t\t\taccept(\"error\", MESSAGES.LiteralTypeMismatch(expect), { node, property: \"value\" });\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"float\" && got === \"NumberLiteral\") {\n\t\t\t\t\tlet will = false;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst decimal = new Decimal(node.value?.value as string);\n\t\t\t\t\t\tconst js = Number(node.value?.value as string);\n\t\t\t\t\t\twill = decimal.toString() !== js.toString();\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\twill = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (will) {\n\t\t\t\t\t\taccept(\"warning\", MESSAGES.PrecisionLoss(node.value?.value as string), { node });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"int\" && got !== \"NumberLiteral\") {\n\t\t\t\t\taccept(\"error\", MESSAGES.LiteralTypeMismatch(expect), { node, property: \"value\" });\n\t\t\t\t}\n\n\t\t\t\tif (expect === \"int\" && got === \"NumberLiteral\") {\n\t\t\t\t\tconst decimal = Decimal(node.value?.value as string);\n\n\t\t\t\t\tif (!decimal.gte(-2147483648) || !decimal.lte(2147483647) || !decimal.isInteger()) {\n\t\t\t\t\t\taccept(\"error\", MESSAGES.InvalidInteger(decimal.toString()), { node, property: \"value\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.builtin.validateReferenceTypeOption(node, accept);\n\t}\n\n\tvalidateReferenceType(node: ReferenceType, accept: ValidationAcceptor): MaybePromise<void> {\n\t\tif (!node.target.ref) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst target = node.target.ref;\n\n\t\t// 验证类型参数数量是否匹配\n\t\tif (target.$type === \"Scalar\") {\n\t\t\tconst parametersLength = target?.parameters.length || 0;\n\t\t\tconst argumentsLength = node.arguments.length || 0;\n\n\t\t\tif (!target.ellipsis) {\n\t\t\t\tif (parametersLength !== argumentsLength) {\n\t\t\t\t\taccept(\"error\", MESSAGES.TypeParameterMismatch(target.name, parametersLength, argumentsLength), {\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tproperty: \"target\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (argumentsLength < parametersLength) {\n\t\t\t\t\taccept(\"error\", MESSAGES.VariadicTypeParameterMismatch(target.name, parametersLength, argumentsLength), {\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tproperty: \"target\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 仅可为 Scalar 设置引用选项\n\t\tif (node.options.length > 0 && target.$type !== \"Scalar\") {\n\t\t\taccept(\"error\", MESSAGES.OptionsOnlyForScalars(), { node, property: \"target\" });\n\t\t}\n\n\t\t// 仅可为 Scalar 和 Struct 设置类型参数\n\t\tif (node.arguments.length > 0) {\n\t\t\tif (target.$type !== \"Scalar\" && target.$type !== \"Struct\") {\n\t\t\t\taccept(\"error\", MESSAGES.ParametersOnlyForScalarAndStruct(), { node, property: \"target\" });\n\t\t\t}\n\t\t}\n\n\t\t// Scalar 选项不能重复设置\n\t\t{\n\t\t\tconst options = new Map<ScalarOption, ReferenceTypeOption>();\n\n\t\t\tfor (const option of node.options) {\n\t\t\t\tconst target = option.target.ref;\n\n\t\t\t\tif (target) {\n\t\t\t\t\tconst exists = options.get(target);\n\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateOption(target.name), { node: option, property: \"target\" });\n\t\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateOption(target.name), { node: exists, property: \"target\" });\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.set(target, option);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.builtin.validateReferenceType(node, accept);\n\t}\n\n\tvalidateScalar(node: Scalar, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 参数名不能重复\n\t\t{\n\t\t\tconst parameters = new Map<string, ScalarParameter>();\n\t\t\tfor (const param of node.parameters) {\n\t\t\t\tconst exists = parameters.get(constantCase(param.name));\n\n\t\t\t\tif (exists) {\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(param.name), { node: param });\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(param.name), { node: exists });\n\t\t\t\t} else {\n\t\t\t\t\tparameters.set(constantCase(param.name), param);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 选项名不能重复\n\t\t{\n\t\t\tconst options = new Map<string, ScalarOption>();\n\t\t\tfor (const option of node.options) {\n\t\t\t\tconst exists = options.get(constantCase(option.name));\n\n\t\t\t\tif (exists) {\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(option.name), { node: option, property: \"name\" });\n\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(option.name), { node: exists, property: \"name\" });\n\t\t\t\t} else {\n\t\t\t\t\toptions.set(constantCase(option.name), option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateStruct(node: Struct, accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 只能继承其他 Struct\n\t\tfor (const element of node.mixins) {\n\t\t\tif (element.target.ref && element.target.ref.$type !== \"Struct\") {\n\t\t\t\taccept(\"error\", MESSAGES.MixinOnlyStruct(), { node: element });\n\t\t\t}\n\t\t}\n\n\t\t// 在同一个结构体的继承中不能两次出现同一个结构体\n\t\t{\n\t\t\tconst visited = new Map<Struct, ReferenceType>();\n\n\t\t\tfor (const element of node.mixins) {\n\t\t\t\tif (element.target.ref && element.target.ref.$type === \"Struct\") {\n\t\t\t\t\tconst exists = visited.get(element.target.ref);\n\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateStructInheritance(), { node: element });\n\t\t\t\t\t\taccept(\"error\", MESSAGES.DuplicateStructInheritance(), { node: exists });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisited.set(element.target.ref, element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst inheritedStructs = new Set<Struct>();\n\n\t\tconst collectInheritedStruct = (struct: Struct) => {\n\t\t\tfor (const element of struct.mixins) {\n\t\t\t\tif (element.target.ref && element.target.ref.$type === \"Struct\") {\n\t\t\t\t\tconst target = element.target.ref;\n\t\t\t\t\tif (!inheritedStructs.has(target)) {\n\t\t\t\t\t\tinheritedStructs.add(target);\n\t\t\t\t\t\tcollectInheritedStruct(target);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tcollectInheritedStruct(node);\n\n\t\t// 不能在 Mixins 中循环引用\n\t\tif (inheritedStructs.has(node)) {\n\t\t\taccept(\"error\", MESSAGES.CircularInheritance(), { node, property: \"name\" });\n\t\t}\n\n\t\tthis.validateFields(node.fields, accept);\n\t}\n\n\tvalidateAlias(node: Alias, accept: ValidationAcceptor): MaybePromise<void> {\n\t\tconst type = node.type;\n\n\t\tif (type.target.ref && type.target.ref.$type !== \"Scalar\") {\n\t\t\taccept(\"error\", MESSAGES.AliasOnlyForScalars(), { node, property: \"type\" });\n\t\t}\n\t}\n\n\tvalidateEndpoint(node: Endpoint, accept: ValidationAcceptor): MaybePromise<void> {\n\t\tif (node.input) {\n\t\t\tconst target = node.input.target.ref;\n\n\t\t\tif (target?.$type !== \"Struct\") {\n\t\t\t\taccept(\"error\", MESSAGES.InputMustBeStruct(), { node, property: \"input\" });\n\t\t\t}\n\t\t}\n\n\t\tif (node.output) {\n\t\t\tconst target = node.output.target.ref;\n\n\t\t\tif (target?.$type !== \"Struct\") {\n\t\t\t\taccept(\"error\", MESSAGES.OutputMustBeStruct(), { node, property: \"output\" });\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateField(node: Field, accept: ValidationAcceptor): MaybePromise<void> {}\n\n\tvalidateFields(nodes: Field[], accept: ValidationAcceptor): MaybePromise<void> {\n\t\t// 字段不能重复\n\t\tconst fields = new Map<string, Field>();\n\n\t\tfor (const field of nodes) {\n\t\t\tconst exists = fields.get(constantCase(field.name));\n\n\t\t\tif (exists) {\n\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(field.name), { node: field });\n\t\t\t\taccept(\"error\", MESSAGES.DuplicateIdentifier(field.name), { node: exists });\n\t\t\t} else {\n\t\t\t\tfields.set(constantCase(field.name), field);\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateFile(node: File, accept: ValidationAcceptor): MaybePromise<void> {\n\t\tconst documentUri = AstUtils.getDocument(node).uri.toString();\n\n\t\tif (documentUri === BUILTIN_LIBRARY_URI) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 顶级声明标识符不能重复\n\t\t{\n\t\t\tconst visited = new Map<string, Declaration | ImportMember>();\n\t\t\tconst builtinDeclarations = new Map<string, Declaration>();\n\n\t\t\tfor (const decl of this.getBuiltinDeclarations()) {\n\t\t\t\tif (decl.$type !== \"Import\") {\n\t\t\t\t\tbuiltinDeclarations.set(constantCase(decl.name), decl);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst declarations: Array<Declaration> = node.declaraions;\n\t\t\tconst importMembers: Array<ImportMember> = [];\n\n\t\t\tfor (const decl of [...declarations]) {\n\t\t\t\tif (decl.$type === \"Import\") {\n\t\t\t\t\timportMembers.push(...decl.members);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const decl of [...declarations, ...importMembers]) {\n\t\t\t\tif (decl.$type === \"Import\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet name: string;\n\n\t\t\t\tif (decl.$type === \"ImportMember\") {\n\t\t\t\t\tname = decl.name || decl.target.$refText;\n\t\t\t\t} else {\n\t\t\t\t\tname = decl.name;\n\t\t\t\t}\n\n\t\t\t\tif (builtinDeclarations.has(constantCase(name))) {\n\t\t\t\t\taccept(\"error\", MESSAGES.ShadowBuiltinDeclaration(name), { node: decl, property: \"name\" });\n\t\t\t\t} else {\n\t\t\t\t\tconst exists = visited.get(constantCase(name));\n\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\tconst message = MESSAGES.DuplicateIdentifier(name);\n\n\t\t\t\t\t\tif (exists.$type === \"ImportMember\") {\n\t\t\t\t\t\t\taccept(\"error\", message, { node: exists, property: exists.name ? \"name\" : \"target\" });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\taccept(\"error\", message, { node: exists, property: \"name\" });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taccept(\"error\", message, { node: decl, property: \"name\" });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisited.set(constantCase(name), decl);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getBuiltinDeclarations() {\n\t\tconst descriptions = this.indexManager.allElements(Module, new Set([BUILTIN_LIBRARY_URI])).toArray();\n\n\t\tif (descriptions[0]?.node) {\n\t\t\tconst module = descriptions[0].node as Module;\n\t\t\tconst declaraions = module.$container.declaraions;\n\n\t\t\treturn declaraions;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tprotected checks(): IprotoValidationChecks {\n\t\treturn {\n\t\t\tAlias: this.validateAlias,\n\t\t\tBooleanLiteral: [],\n\t\t\tDeclaration: [],\n\t\t\tDirective: this.validateDirective,\n\t\t\tDirectiveParameter: [],\n\t\t\tEnum: this.validateEnum,\n\t\t\tEnumMember: this.validateEnumMember,\n\t\t\tImport: this.validateImport,\n\t\t\tImportMember: [],\n\t\t\tImportable: [],\n\t\t\tNumberLiteral: [],\n\t\t\tLiteralValue: [],\n\t\t\tModule: this.validateModule,\n\t\t\tReferenceDirective: this.validateReferenceDirective,\n\t\t\tReferenceDirectiveArgument: this.validateReferenceDirectiveArgument,\n\t\t\tReferenceTypeOption: this.validateReferenceTypeOption,\n\t\t\tReferenceType: this.validateReferenceType,\n\t\t\tScalar: this.validateScalar,\n\t\t\tScalarOption: [],\n\t\t\tScalarParameter: [],\n\t\t\tEndpoint: this.validateEndpoint,\n\t\t\tStringLiteral: [],\n\t\t\tStruct: this.validateStruct,\n\t\t\tField: this.validateField,\n\t\t\tType: [],\n\t\t\tAstNode: [],\n\t\t\tFile: this.validateFile,\n\t\t\tException: this.validateException,\n\t\t};\n\t}\n\n\tregister(services: IprotoServices) {\n\t\tconst registry = services.validation.ValidationRegistry;\n\t\tconst validator = services.validation.IprotoValidator;\n\n\t\tregistry.register(validator.checks(), validator);\n\t}\n\n\tstatic mergeValidationChecks(...validators: IprotoValidationChecks[]) {\n\t\tconst checks: {\n\t\t\t// biome-ignore lint/complexity/noBannedTypes: <explanation>\n\t\t\t[K in keyof IprotoValidationChecks]: Exclude<IprotoValidationChecks[K], Function>;\n\t\t} = {\n\t\t\tAlias: [],\n\t\t\tBooleanLiteral: [],\n\t\t\tDeclaration: [],\n\t\t\tDirective: [],\n\t\t\tDirectiveParameter: [],\n\t\t\tEnum: [],\n\t\t\tEnumMember: [],\n\t\t\tException: [],\n\t\t\tField: [],\n\t\t\tFile: [],\n\t\t\tImport: [],\n\t\t\tLiteralValue: [],\n\t\t\tNumberLiteral: [],\n\t\t\tModule: [],\n\t\t\tReferenceDirective: [],\n\t\t\tReferenceDirectiveArgument: [],\n\t\t\tReferenceType: [],\n\t\t\tReferenceTypeOption: [],\n\t\t\tScalar: [],\n\t\t\tScalarOption: [],\n\t\t\tScalarParameter: [],\n\t\t\tEndpoint: [],\n\t\t\tStringLiteral: [],\n\t\t\tStruct: [],\n\t\t\tType: [],\n\t\t\tAstNode: [],\n\t\t\tImportMember: [],\n\t\t\tImportable: [],\n\t\t};\n\n\t\tconst keys = Object.keys(checks) as Array<keyof IprotoValidationChecks>;\n\n\t\tfor (const validator of validators) {\n\t\t\tfor (const key of keys) {\n\t\t\t\tconst item = validator[key];\n\n\t\t\t\tif (item) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tchecks[key].push(...(Array.isArray(item) ? item : [item]));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn checks;\n\t}\n}\n","import {\n\ttype AstNode,\n\tDefaultWorkspaceManager,\n\ttype LangiumDocument,\n\ttype LangiumDocumentFactory,\n\tURI,\n\ttype WorkspaceFolder,\n} from \"langium\";\nimport type { LangiumSharedServices } from \"langium/lsp\";\n\nimport { BUILTIN_LIBRARY, BUILTIN_LIBRARY_URI } from \"../builtin/index.js\";\n\nexport class IprotoWorkspaceManager extends DefaultWorkspaceManager {\n\tprivate documentFactory: LangiumDocumentFactory;\n\n\tconstructor(services: LangiumSharedServices) {\n\t\tsuper(services);\n\t\tthis.documentFactory = services.workspace.LangiumDocumentFactory;\n\t}\n\n\tprotected override async loadAdditionalDocuments(\n\t\tfolders: WorkspaceFolder[],\n\t\tcollector: (document: LangiumDocument<AstNode>) => void,\n\t): Promise<void> {\n\t\tawait super.loadAdditionalDocuments(folders, collector);\n\t\tcollector(this.documentFactory.fromString(BUILTIN_LIBRARY.trim(), URI.parse(BUILTIN_LIBRARY_URI)));\n\t}\n}\n","import { type DeepPartial, type Module, inject } from \"langium\";\nimport {\n\ttype DefaultSharedModuleContext,\n\ttype LangiumServices,\n\ttype LangiumSharedServices,\n\ttype PartialLangiumServices,\n\tcreateDefaultModule,\n\tcreateDefaultSharedModule,\n} from \"langium/lsp\";\nimport { IprotoGeneratedModule, IprotoGeneratedSharedModule } from \"./generated/module.js\";\nimport { IprotoCompletionProvider } from \"./lsp/completion.js\";\nimport { IprotoFormatter } from \"./lsp/formatter.js\";\nimport { IprotoHoverProvider } from \"./lsp/hover.js\";\nimport { IprotoSemanticTokenProvider } from \"./lsp/semantic-token.js\";\nimport { IprotoScopeComputation } from \"./reference/scope-computation.js\";\nimport { IprotoScopeProvider } from \"./reference/scope-provider.js\";\nimport { IprotoValidator } from \"./validator/validator.js\";\nimport { IprotoWorkspaceManager } from \"./workspace/workspace-manager.js\";\n\nexport type IprotoAddedServices = {\n\tvalidation: {\n\t\tIprotoValidator: IprotoValidator;\n\t};\n};\nexport type IprotoServices = LangiumServices & IprotoAddedServices;\nexport type IprotoSharedServices = LangiumSharedServices;\n\nconst IprotoModule: Module<IprotoServices, PartialLangiumServices & IprotoAddedServices> = {\n\tvalidation: {\n\t\tIprotoValidator: (services) => new IprotoValidator(services),\n\t},\n\treferences: {\n\t\tScopeComputation: (services) => new IprotoScopeComputation(services),\n\t\tScopeProvider: (services) => new IprotoScopeProvider(services),\n\t},\n\tlsp: {\n\t\tSemanticTokenProvider: (services) => new IprotoSemanticTokenProvider(services),\n\t\tHoverProvider: (services) => new IprotoHoverProvider(services),\n\t\tCompletionProvider: (services) => new IprotoCompletionProvider(services),\n\t\tFormatter: (services) => new IprotoFormatter(services),\n\t},\n};\n\nconst IprotoSharedModule: Module<IprotoSharedServices, DeepPartial<IprotoSharedServices>> = {\n\tworkspace: {\n\t\tWorkspaceManager: (services) => new IprotoWorkspaceManager(services),\n\t},\n};\n\nexport class IprotoModuleBuilder {\n\tservices: IprotoServices;\n\tsharedServices: LangiumSharedServices;\n\n\tconstructor(context: DefaultSharedModuleContext) {\n\t\tconst defaultSharedServices = createDefaultSharedModule(context);\n\t\tconst sharedServices = inject(defaultSharedServices, ...this.getCustomSharedServices());\n\t\tconst defaultServices = createDefaultModule({ shared: sharedServices });\n\t\tconst services = inject(defaultServices, ...this.getCustomServices());\n\n\t\tthis.services = services;\n\t\tthis.sharedServices = sharedServices;\n\n\t\tthis.register();\n\n\t\tif (!context.connection) {\n\t\t\tsharedServices.workspace.ConfigurationProvider.initialized({});\n\t\t}\n\t}\n\n\tprivate getCustomServices() {\n\t\treturn [IprotoGeneratedModule, IprotoModule] as const;\n\t}\n\n\tprivate getCustomSharedServices() {\n\t\treturn [IprotoGeneratedSharedModule, IprotoSharedModule] as const;\n\t}\n\n\tprivate register() {\n\t\tthis.sharedServices.ServiceRegistry.register(this.services);\n\t\tthis.services.validation.IprotoValidator.register(this.services);\n\t}\n}\n","import path from \"node:path\";\n\nimport { globby } from \"globby\";\nimport { type AstNode, AstUtils, URI } from \"langium\";\nimport { NodeFileSystem } from \"langium/node\";\nimport { DiagnosticSeverity } from \"vscode-languageserver\";\nimport { BUILTIN_LIBRARY, BUILTIN_LIBRARY_URI } from \"../language/builtin/index.js\";\nimport type {\n\tAlias,\n\tDeclaration,\n\tFile,\n\tImport,\n\tModule,\n\tReferenceDirective,\n\tReferenceType,\n} from \"../language/generated/ast.js\";\nimport { IprotoModuleBuilder, type IprotoServices } from \"../language/iproto-module.js\";\n\nexport namespace Shape {\n\texport type LiteralValueType = \"boolean\" | \"int\" | \"float\" | \"string\";\n\n\texport type LiteralValue =\n\t\t| { type: \"boolean\"; value: boolean }\n\t\t| { type: \"string\"; value: string }\n\t\t| { type: \"int\"; value: number }\n\t\t| { type: \"float\"; value: number };\n\n\texport type Declaration = Directive | Enum | Exception | Scalar | Endpoint | Struct;\n\n\texport type DirectiveLocation =\n\t\t| \"endpoint\"\n\t\t| \"enum\"\n\t\t| \"exception\"\n\t\t| \"field\"\n\t\t| \"module\"\n\t\t| \"scalar\"\n\t\t| \"struct\"\n\t\t| \"variant\";\n\n\texport type Type = Enum | Scalar | Struct;\n\n\texport interface DirectiveParameter {\n\t\t$type: \"DirectiveParameter\";\n\t\tname: string;\n\t\toptional: boolean;\n\t\ttype: LiteralValueType;\n\t\tcomment: string;\n\t}\n\n\texport interface Directive {\n\t\t$type: \"Directive\";\n\t\tlocations: Array<DirectiveLocation>;\n\t\tname: string;\n\t\tparameters: Array<DirectiveParameter>;\n\t\tcomment: string;\n\t}\n\n\texport interface ScalarOption {\n\t\t$type: \"ScalarOption\";\n\t\tname: string;\n\t\ttype: LiteralValueType;\n\t\tcomment: string;\n\t}\n\n\texport interface Scalar {\n\t\t$type: \"Scalar\";\n\t\tdirectives: Array<ReferenceDirective>;\n\t\tname: string;\n\t\toptions: Array<ScalarOption>;\n\t\tparameters: Array<string>;\n\t\tcomment: string;\n\t}\n\n\texport interface Enum {\n\t\t$type: \"Enum\";\n\t\tdirectives: Array<ReferenceDirective>;\n\t\tmembers: Array<EnumMember>;\n\t\tname: string;\n\t\tcomment: string;\n\t}\n\n\texport interface EnumMember {\n\t\t$type: \"EnumMember\";\n\t\tdirectives: Array<ReferenceDirective>;\n\t\tname: string;\n\t\tcomment: string;\n\t}\n\n\texport interface Field {\n\t\t$type: \"Field\";\n\t\tdirectives: Array<ReferenceDirective>;\n\t\tname: string;\n\t\ttype: ReferenceType;\n\t\tcomment: string;\n\t}\n\n\texport interface Struct {\n\t\t$type: \"Struct\";\n\t\tdirectives: Array<ReferenceDirective>;\n\t\tmixins: Array<ReferenceType>;\n\t\tfields: Array<Field>;\n\t\tname: string;\n\t\tcomment: string;\n\t}\n\n\texport interface Exception {\n\t\t$type: \"Exception\";\n\t\tdirectives: Array<ReferenceDirective>;\n\t\tfields: Array<Field>;\n\t\tname: string;\n\t\tcomment: string;\n\t}\n\n\texport interface Endpoint {\n\t\t$type: \"Endpoint\";\n\t\tdirectives: Array<ReferenceDirective>;\n\t\tinput?: ReferenceType;\n\t\tname: string;\n\t\toutput?: ReferenceType;\n\t\tcomment: string;\n\t}\n\n\texport interface Module {\n\t\t$type: \"Module\";\n\t\tdirectives: Array<ReferenceDirective>;\n\t\tname: string;\n\t\tdeclarations: Array<Declaration>;\n\t\tcomment: string;\n\t}\n\n\texport interface ReferenceDirectiveArgument {\n\t\t$type: \"ReferenceDirectiveArgument\";\n\t\tname: string;\n\t\tvalue: LiteralValue;\n\t}\n\n\texport interface ReferenceDirective {\n\t\t$type: \"ReferenceDirective\";\n\t\t$target: string;\n\t\t$module: string;\n\t\t$name: string;\n\t\targuments: Record<string, LiteralValue>;\n\t}\n\n\texport interface ReferenceType {\n\t\t$type: \"ReferenceType\";\n\t\t$target: string;\n\t\t$kind: Type[\"$type\"];\n\t\t$module: string;\n\t\t$name: string;\n\t\targuments: Array<ReferenceType>;\n\t\toptions: Record<string, LiteralValue>;\n\t}\n\n\texport type Modules = Array<Module>;\n\n\texport type ReferenceStringOptions = {\n\t\tconst?: Extract<LiteralValue, { type: \"string\" }>;\n\t\tmax?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tmin?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tlength?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tnonempty?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tpattern?: Extract<LiteralValue, { type: \"string\" }>;\n\t\temail?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tuuid?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tprefix?: Extract<LiteralValue, { type: \"string\" }>;\n\t\tsuffix?: Extract<LiteralValue, { type: \"string\" }>;\n\t\turl?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tnanoid?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t};\n\n\texport type ReferenceFloatOptions = {\n\t\tconst?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tlt?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tgt?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tlte?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tgte?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tpositive?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tnonnegative?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tnegative?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tnonpositive?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t};\n\n\texport type ReferenceIntOptions = {\n\t\tconst?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tlt?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tgt?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tlte?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tgte?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tpositive?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tnonnegative?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tnegative?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t\tnonpositive?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t};\n\n\texport type ReferenceBooleanOptions = {\n\t\tconst?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t};\n\n\texport type ReferenceBinaryOptions = {\n\t\tmin?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tmin_kb?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tmin_mb?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tmax?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tmax_kb?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tmax_mb?: Extract<LiteralValue, { type: \"float\" }>;\n\t\tnonempty?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t};\n\n\texport type ReferenceListOptions = {\n\t\tmax?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tmin?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tlength?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tnonempty?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t};\n\n\texport type ReferenceDictionaryOptions = {\n\t\tmax?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tmin?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tsize?: Extract<LiteralValue, { type: \"int\" }>;\n\t\tnonempty?: Extract<LiteralValue, { type: \"boolean\" }>;\n\t};\n}\n\nexport type ShapeOptions = {\n\troot: string;\n};\n\nexport class Shape {\n\tprivate root: string;\n\tprivate services: IprotoServices;\n\n\tprivate ready: Promise<void>;\n\n\tconstructor(options: ShapeOptions) {\n\t\tthis.root = path.isAbsolute(options.root) ? options.root : path.resolve(process.cwd(), options.root);\n\t\tthis.services = new IprotoModuleBuilder(NodeFileSystem).services;\n\n\t\tthis.ready = this.init();\n\t}\n\n\tprivate async init() {\n\t\tconst workspaceDocumentsService = this.services.shared.workspace.LangiumDocuments;\n\t\tconst workspaceDocumentBuilder = this.services.shared.workspace.DocumentBuilder;\n\n\t\tconst extensions = this.services.LanguageMetaData.fileExtensions;\n\t\tconst patterns = extensions.map((ext) => `**/*${ext}`);\n\n\t\tconst files = await globby(patterns, { cwd: this.root });\n\n\t\tawait workspaceDocumentsService.createDocument(URI.parse(BUILTIN_LIBRARY_URI), BUILTIN_LIBRARY);\n\n\t\tfor (const file of files.map((file) => path.join(this.root, file))) {\n\t\t\tawait workspaceDocumentsService.getOrCreateDocument(URI.file(file));\n\t\t}\n\n\t\tawait workspaceDocumentBuilder.build(workspaceDocumentsService.all.toArray(), { validation: true });\n\t}\n\n\tprivate normalizeComment(node: AstNode) {\n\t\tconst content = this.services.documentation.CommentProvider.getComment(node);\n\t\tif (content) {\n\t\t\treturn content.slice(2, -2).trim();\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\tprivate generateModule(module: Module): Shape.Module {\n\t\tconst declarations: Shape.Declaration[] = [];\n\n\t\tfor (const element of module.$container.declaraions) {\n\t\t\tif (element.$type !== \"Import\" && element.$type !== \"Alias\") {\n\t\t\t\tconst shape = this.generateDeclaration(element);\n\n\t\t\t\tdeclarations.push(shape);\n\t\t\t}\n\t\t}\n\n\t\tconst currentDocumentUri = AstUtils.getDocument(module).uri.toString();\n\n\t\tconst name = BUILTIN_LIBRARY_URI === currentDocumentUri ? \"@\" : module.name;\n\n\t\treturn {\n\t\t\t$type: module.$type,\n\t\t\tname,\n\t\t\tdirectives: this.generateReferenceDirectives(module.directives),\n\t\t\tdeclarations,\n\t\t\tcomment: this.normalizeComment(module),\n\t\t};\n\t}\n\n\tprivate generateReferenceType(reference: ReferenceType): Shape.ReferenceType {\n\t\tif (!reference.target.ref) {\n\t\t\tthrow new Error(`Referenced type '${reference.target.$refText}' is missing its target ref.`);\n\t\t}\n\n\t\tconst target = reference.target.ref;\n\n\t\tif (target.$type === \"Alias\") {\n\t\t\treturn this.generateReferenceType(target.type);\n\t\t}\n\n\t\tconst options: Record<string, Shape.LiteralValue> = {};\n\n\t\tfor (const option of reference.options) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: <explanation>\n\t\t\tconst optionTarget = option.target.ref!;\n\n\t\t\tif (optionTarget.type === \"string\") {\n\t\t\t\toptions[option.target.$refText] = {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: String(option.value?.value),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (optionTarget.type === \"boolean\") {\n\t\t\t\toptions[option.target.$refText] = {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tvalue: Boolean(option.value?.value ?? true),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (optionTarget.type === \"int\" || optionTarget.type === \"float\") {\n\t\t\t\toptions[option.target.$refText] = {\n\t\t\t\t\ttype: optionTarget.type,\n\t\t\t\t\tvalue: Number(option.value?.value ?? true),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst currentDocumentUri = AstUtils.getDocument(target).uri.toString();\n\n\t\tif (BUILTIN_LIBRARY_URI === currentDocumentUri) {\n\t\t\tif (target.$type === \"Scalar\" && target.name === \"String\") {\n\t\t\t\tconst opts = options as Shape.ReferenceStringOptions;\n\n\t\t\t\tif (opts.pattern) {\n\t\t\t\t\topts.pattern.value = new RegExp(opts.pattern.value).source;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet module = \"\";\n\t\tlet name = \"\";\n\n\t\tif (BUILTIN_LIBRARY_URI === currentDocumentUri) {\n\t\t\tmodule = \"@\";\n\t\t\tname = target.name;\n\t\t} else {\n\t\t\tmodule = target.$container.module.name;\n\t\t\tname = target.name;\n\t\t}\n\n\t\treturn {\n\t\t\t$type: reference.$type,\n\t\t\t$target: `${module}::${name}`,\n\t\t\t$kind: target.$type,\n\t\t\t$module: module,\n\t\t\t$name: name,\n\t\t\toptions: { ...options },\n\t\t\targuments: reference.arguments.map((arg) => {\n\t\t\t\treturn this.generateReferenceType(arg);\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate generateReferenceDirectives(directives: ReferenceDirective[]): Shape.ReferenceDirective[] {\n\t\treturn directives.map((reference) => {\n\t\t\tif (!reference.target.ref) {\n\t\t\t\tthrow new Error(`Referenced directive '${reference.target.$refText}' is missing its target ref.`);\n\t\t\t}\n\n\t\t\tconst target = reference.target.ref;\n\t\t\tconst args: Record<string, Shape.LiteralValue> = {};\n\n\t\t\tfor (const argument of reference.arguments) {\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: <explanation>\n\t\t\t\tconst argumentTarget = argument.target.ref!;\n\n\t\t\t\tif (argumentTarget.type === \"string\") {\n\t\t\t\t\targs[argument.target.$refText] = {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: String(argument.value?.value),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (argumentTarget.type === \"boolean\") {\n\t\t\t\t\targs[argument.target.$refText] = {\n\t\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\t\tvalue: Boolean(argument.value?.value ?? true),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (argumentTarget.type === \"int\" || argumentTarget.type === \"float\") {\n\t\t\t\t\targs[argument.target.$refText] = {\n\t\t\t\t\t\ttype: argumentTarget.type,\n\t\t\t\t\t\tvalue: Number(argument.value?.value ?? true),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst currentDocumentUri = AstUtils.getDocument(target).uri.toString();\n\n\t\t\tlet module = \"\";\n\t\t\tlet name = \"\";\n\n\t\t\tif (BUILTIN_LIBRARY_URI === currentDocumentUri) {\n\t\t\t\tmodule = \"@\";\n\t\t\t\tname = target.name;\n\t\t\t} else {\n\t\t\t\tmodule = target.$container.module.name;\n\t\t\t\tname = target.name;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t$type: reference.$type,\n\t\t\t\t$target: `${module}::${name}`,\n\t\t\t\t$module: module,\n\t\t\t\t$name: name,\n\t\t\t\targuments: args,\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate generateDeclaration(declaration: Exclude<Declaration, Import | Alias>): Shape.Declaration {\n\t\tif (declaration.$type === \"Directive\") {\n\t\t\treturn {\n\t\t\t\t$type: declaration.$type,\n\t\t\t\tlocations: [...declaration.locations],\n\t\t\t\tname: declaration.name,\n\t\t\t\tparameters: declaration.parameters.map((param) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t$type: param.$type,\n\t\t\t\t\t\tname: param.name,\n\t\t\t\t\t\ttype: param.type,\n\t\t\t\t\t\toptional: param.optional,\n\t\t\t\t\t\tcomment: this.normalizeComment(param),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\tcomment: this.normalizeComment(declaration),\n\t\t\t};\n\t\t}\n\t\tif (declaration.$type === \"Enum\") {\n\t\t\treturn {\n\t\t\t\t$type: declaration.$type,\n\t\t\t\tdirectives: this.generateReferenceDirectives(declaration.directives),\n\t\t\t\tname: declaration.name,\n\t\t\t\tmembers: declaration.members.map((member) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t$type: member.$type,\n\t\t\t\t\t\tdirectives: this.generateReferenceDirectives(member.directives),\n\t\t\t\t\t\tname: member.name,\n\t\t\t\t\t\tcomment: this.normalizeComment(member),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\tcomment: this.normalizeComment(declaration),\n\t\t\t};\n\t\t}\n\t\tif (declaration.$type === \"Exception\") {\n\t\t\treturn {\n\t\t\t\t$type: declaration.$type,\n\t\t\t\tname: declaration.name,\n\t\t\t\tdirectives: this.generateReferenceDirectives(declaration.directives),\n\t\t\t\tfields: declaration.fields.map((field) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t$type: field.$type,\n\t\t\t\t\t\tname: field.name,\n\t\t\t\t\t\tdirectives: this.generateReferenceDirectives(field.directives),\n\t\t\t\t\t\ttype: this.generateReferenceType(field.type),\n\t\t\t\t\t\tcomment: this.normalizeComment(field),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\tcomment: this.normalizeComment(declaration),\n\t\t\t};\n\t\t}\n\t\tif (declaration.$type === \"Scalar\") {\n\t\t\treturn {\n\t\t\t\t$type: declaration.$type,\n\t\t\t\tdirectives: this.generateReferenceDirectives(declaration.directives),\n\t\t\t\tname: declaration.name,\n\t\t\t\toptions: declaration.options.map((option) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t$type: option.$type,\n\t\t\t\t\t\tname: option.name,\n\t\t\t\t\t\ttype: option.type,\n\t\t\t\t\t\tcomment: this.normalizeComment(option),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\tparameters: declaration.parameters.map((param) => param.name),\n\t\t\t\tcomment: this.normalizeComment(declaration),\n\t\t\t};\n\t\t}\n\t\tif (declaration.$type === \"Endpoint\") {\n\t\t\treturn {\n\t\t\t\t$type: declaration.$type,\n\t\t\t\tname: declaration.name,\n\t\t\t\tdirectives: this.generateReferenceDirectives(declaration.directives),\n\t\t\t\tinput: declaration.input ? this.generateReferenceType(declaration.input) : undefined,\n\t\t\t\toutput: declaration.output ? this.generateReferenceType(declaration.output) : undefined,\n\t\t\t\tcomment: this.normalizeComment(declaration),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t$type: declaration.$type,\n\t\t\tname: declaration.name,\n\t\t\tmixins: declaration.mixins.map((ext) => {\n\t\t\t\treturn this.generateReferenceType(ext);\n\t\t\t}),\n\t\t\tdirectives: this.generateReferenceDirectives(declaration.directives),\n\t\t\tfields: declaration.fields.map((field) => {\n\t\t\t\treturn {\n\t\t\t\t\t$type: field.$type,\n\t\t\t\t\tname: field.name,\n\t\t\t\t\ttype: this.generateReferenceType(field.type),\n\t\t\t\t\tdirectives: this.generateReferenceDirectives(field.directives),\n\t\t\t\t\tcomment: this.normalizeComment(field),\n\t\t\t\t};\n\t\t\t}),\n\t\t\tcomment: this.normalizeComment(declaration),\n\t\t};\n\t}\n\n\tasync generate() {\n\t\tawait this.ready;\n\n\t\tconst documents = this.services.shared.workspace.LangiumDocuments;\n\n\t\tconst modules: Shape.Modules = [];\n\n\t\tfor (const document of documents.all) {\n\t\t\tconst diagnostics = document.diagnostics ?? [];\n\t\t\tconst file = document.parseResult.value as File;\n\t\t\tconst errors = diagnostics.filter((e) => e.severity === DiagnosticSeverity.Error);\n\n\t\t\tif (errors.length > 0) {\n\t\t\t\tlet message = \"There are validation errors: \\n\";\n\n\t\t\t\tfor (const error of errors) {\n\t\t\t\t\tmessage += ` - ${document.uri.fsPath} [${error.range.start.line + 1}]: ${error.message}\\n`;\n\t\t\t\t}\n\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\n\t\t\tmodules.push(this.generateModule(file.module));\n\t\t}\n\n\t\treturn modules;\n\t}\n}\n"]}