iproto
Version:
904 lines (889 loc) • 99.9 kB
JavaScript
import path from 'node:path';
import { globby } from 'globby';
import { URI, AbstractAstReflection, AstUtils, inject, loadGrammarFromJson, DefaultScopeProvider, EMPTY_SCOPE, DefaultScopeComputation, interruptAndCheck, Cancellation, DefaultWorkspaceManager } from 'langium';
import { NodeFileSystem } from 'langium/node';
import { DiagnosticSeverity, CompletionItemKind, SemanticTokenTypes } from 'vscode-languageserver';
import { createDefaultSharedModule, createDefaultModule, AbstractFormatter, Formatting, DefaultCompletionProvider, AstNodeHoverProvider, AbstractSemanticTokenProvider } from 'langium/lsp';
import { Decimal } from 'decimal.js';
import { RegExpParser } from 'regexpp';
var __defProp = Object.defineProperty;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var BUILTIN_LIBRARY = `
module Builtin
scalar Float.[
const:float
lt:float
gt:float
lte:float
gte:float
positive: boolean
nonnegative: boolean
negative: boolean
nonpositive: boolean
]
scalar Int.[
const:int
lt:int
gt:int
lte:int
gte:int
positive: boolean
nonnegative: boolean
negative: boolean
nonpositive: boolean
]
scalar String.[
const:string
max:int
min:int
length:int
nonempty:boolean
pattern:string
email:boolean
uuid:boolean
prefix:string
suffix:string
url:boolean
nanoid:boolean
]
scalar Boolean.[
const:boolean
]
scalar Binary.[
min:int
min_kb:float
min_mb:float
max:int
max_kb:float
max_mb:float
nonempty:boolean
]
scalar Time
scalar List<T>.[
max:int
min:int
length:int
nonempty:boolean
]
scalar Dictionary<T>.[
max:int
min:int
size:int
nonempty:boolean
]
scalar Union<A B ...>
directive Deprecated(reason?:string)
directive Optional on field
directive Relaxed on struct exception
directive Incremental on enum
`;
var BUILTIN_LIBRARY_URI = URI.parse("iproto:///builtin.iproto").toString();
var Declaration = "Declaration";
function isDeclaration(item) {
return reflection.isInstance(item, Declaration);
}
var Importable = "Importable";
function isImportable(item) {
return reflection.isInstance(item, Importable);
}
var LiteralValue = "LiteralValue";
function isLiteralValue(item) {
return reflection.isInstance(item, LiteralValue);
}
var Type = "Type";
function isType(item) {
return reflection.isInstance(item, Type);
}
var Alias = "Alias";
function isAlias(item) {
return reflection.isInstance(item, Alias);
}
var BooleanLiteral = "BooleanLiteral";
var Directive = "Directive";
function isDirective(item) {
return reflection.isInstance(item, Directive);
}
var DirectiveParameter = "DirectiveParameter";
function isDirectiveParameter(item) {
return reflection.isInstance(item, DirectiveParameter);
}
var Endpoint = "Endpoint";
function isEndpoint(item) {
return reflection.isInstance(item, Endpoint);
}
var Enum = "Enum";
function isEnum(item) {
return reflection.isInstance(item, Enum);
}
var EnumMember = "EnumMember";
function isEnumMember(item) {
return reflection.isInstance(item, EnumMember);
}
var Exception = "Exception";
function isException(item) {
return reflection.isInstance(item, Exception);
}
var Field = "Field";
function isField(item) {
return reflection.isInstance(item, Field);
}
var File = "File";
var Import = "Import";
function isImport(item) {
return reflection.isInstance(item, Import);
}
var ImportMember = "ImportMember";
function isImportMember(item) {
return reflection.isInstance(item, ImportMember);
}
var Module = "Module";
function isModule(item) {
return reflection.isInstance(item, Module);
}
var NumberLiteral = "NumberLiteral";
var ReferenceDirective = "ReferenceDirective";
function isReferenceDirective(item) {
return reflection.isInstance(item, ReferenceDirective);
}
var ReferenceDirectiveArgument = "ReferenceDirectiveArgument";
function isReferenceDirectiveArgument(item) {
return reflection.isInstance(item, ReferenceDirectiveArgument);
}
var ReferenceType = "ReferenceType";
function isReferenceType(item) {
return reflection.isInstance(item, ReferenceType);
}
var ReferenceTypeOption = "ReferenceTypeOption";
function isReferenceTypeOption(item) {
return reflection.isInstance(item, ReferenceTypeOption);
}
var Scalar = "Scalar";
function isScalar(item) {
return reflection.isInstance(item, Scalar);
}
var ScalarOption = "ScalarOption";
function isScalarOption(item) {
return reflection.isInstance(item, ScalarOption);
}
var ScalarParameter = "ScalarParameter";
var StringLiteral = "StringLiteral";
var Struct = "Struct";
function isStruct(item) {
return reflection.isInstance(item, Struct);
}
var IprotoAstReflection = class extends AbstractAstReflection {
getAllTypes() {
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];
}
computeIsSubtype(subtype, supertype) {
switch (subtype) {
case Alias:
case Enum:
case Scalar:
case Struct: {
return this.isSubtype(Declaration, supertype) || this.isSubtype(Type, supertype);
}
case BooleanLiteral:
case NumberLiteral:
case StringLiteral: {
return this.isSubtype(LiteralValue, supertype);
}
case Directive: {
return this.isSubtype(Declaration, supertype) || this.isSubtype(Importable, supertype);
}
case Endpoint:
case Exception:
case Import: {
return this.isSubtype(Declaration, supertype);
}
case Type: {
return this.isSubtype(Importable, supertype);
}
default: {
return false;
}
}
}
getReferenceType(refInfo) {
const referenceId = `${refInfo.container.$type}:${refInfo.property}`;
switch (referenceId) {
case "Import:target": {
return Module;
}
case "ImportMember:target": {
return Importable;
}
case "ReferenceDirective:target": {
return Directive;
}
case "ReferenceDirectiveArgument:target": {
return DirectiveParameter;
}
case "ReferenceType:target": {
return Type;
}
case "ReferenceTypeOption:target": {
return ScalarOption;
}
default: {
throw new Error(`${referenceId} is not a valid reference id.`);
}
}
}
getTypeMetaData(type) {
switch (type) {
case Alias: {
return {
name: Alias,
properties: [
{ name: "name" },
{ name: "type" }
]
};
}
case BooleanLiteral: {
return {
name: BooleanLiteral,
properties: [
{ name: "value", defaultValue: false }
]
};
}
case Directive: {
return {
name: Directive,
properties: [
{ name: "locations", defaultValue: [] },
{ name: "name" },
{ name: "parameters", defaultValue: [] }
]
};
}
case DirectiveParameter: {
return {
name: DirectiveParameter,
properties: [
{ name: "name" },
{ name: "optional", defaultValue: false },
{ name: "type" }
]
};
}
case Endpoint: {
return {
name: Endpoint,
properties: [
{ name: "directives", defaultValue: [] },
{ name: "input" },
{ name: "name" },
{ name: "output" }
]
};
}
case Enum: {
return {
name: Enum,
properties: [
{ name: "directives", defaultValue: [] },
{ name: "members", defaultValue: [] },
{ name: "name" }
]
};
}
case EnumMember: {
return {
name: EnumMember,
properties: [
{ name: "directives", defaultValue: [] },
{ name: "name" }
]
};
}
case Exception: {
return {
name: Exception,
properties: [
{ name: "directives", defaultValue: [] },
{ name: "fields", defaultValue: [] },
{ name: "name" }
]
};
}
case Field: {
return {
name: Field,
properties: [
{ name: "directives", defaultValue: [] },
{ name: "name" },
{ name: "type" }
]
};
}
case File: {
return {
name: File,
properties: [
{ name: "declaraions", defaultValue: [] },
{ name: "module" }
]
};
}
case Import: {
return {
name: Import,
properties: [
{ name: "members", defaultValue: [] },
{ name: "target" }
]
};
}
case ImportMember: {
return {
name: ImportMember,
properties: [
{ name: "name" },
{ name: "target" }
]
};
}
case Module: {
return {
name: Module,
properties: [
{ name: "directives", defaultValue: [] },
{ name: "name" }
]
};
}
case NumberLiteral: {
return {
name: NumberLiteral,
properties: [
{ name: "value" }
]
};
}
case ReferenceDirective: {
return {
name: ReferenceDirective,
properties: [
{ name: "arguments", defaultValue: [] },
{ name: "target" }
]
};
}
case ReferenceDirectiveArgument: {
return {
name: ReferenceDirectiveArgument,
properties: [
{ name: "target" },
{ name: "value" }
]
};
}
case ReferenceType: {
return {
name: ReferenceType,
properties: [
{ name: "arguments", defaultValue: [] },
{ name: "options", defaultValue: [] },
{ name: "target" }
]
};
}
case ReferenceTypeOption: {
return {
name: ReferenceTypeOption,
properties: [
{ name: "target" },
{ name: "value" }
]
};
}
case Scalar: {
return {
name: Scalar,
properties: [
{ name: "directives", defaultValue: [] },
{ name: "ellipsis", defaultValue: false },
{ name: "name" },
{ name: "options", defaultValue: [] },
{ name: "parameters", defaultValue: [] }
]
};
}
case ScalarOption: {
return {
name: ScalarOption,
properties: [
{ name: "name" },
{ name: "type" }
]
};
}
case ScalarParameter: {
return {
name: ScalarParameter,
properties: [
{ name: "name" }
]
};
}
case StringLiteral: {
return {
name: StringLiteral,
properties: [
{ name: "value" }
]
};
}
case Struct: {
return {
name: Struct,
properties: [
{ name: "directives", defaultValue: [] },
{ name: "fields", defaultValue: [] },
{ name: "mixins", defaultValue: [] },
{ name: "name" }
]
};
}
default: {
return {
name: type,
properties: []
};
}
}
}
};
var reflection = new IprotoAstReflection();
var loadedIprotoGrammar;
var IprotoGrammar = () => loadedIprotoGrammar != null ? 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":[]}');
// src/language/generated/module.ts
var IprotoLanguageMetaData = {
languageId: "iproto",
fileExtensions: [".iproto"],
caseInsensitive: false,
mode: "production"
};
var IprotoGeneratedSharedModule = {
AstReflection: () => new IprotoAstReflection()
};
var IprotoGeneratedModule = {
Grammar: () => IprotoGrammar(),
LanguageMetaData: () => IprotoLanguageMetaData,
parser: {}
};
var IprotoCompletionProvider = class extends DefaultCompletionProvider {
constructor(services) {
super(services);
this.commentProvider = services.documentation.CommentProvider;
this.completionOptions = {
triggerCharacters: [":", "#", "<"]
};
}
completionForReferenceTypeOption(context, next, acceptor) {
const node = context.node;
if (isReferenceTypeOption(node)) {
const property = "target";
const refInfo = {
reference: {
$refText: ""
},
container: node,
property
};
for (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {
if (isScalarOption(element.node)) {
let insertText = element.node.name;
if (element.node.type === "int" || element.node.type === "float") {
insertText += ":0";
}
if (element.node.type === "string") {
insertText += `:""`;
}
if (element.node.type === "boolean") {
insertText += ":true";
}
acceptor(context, {
label: element.name,
labelDetails: {
description: `${element.node.type}`
},
kind: CompletionItemKind.Field,
documentation: this.formatComment(element.node),
insertText
});
}
}
return;
}
}
completionForReferenceDirective(context, next, acceptor) {
const node = context.node;
if (isReferenceDirective(node)) {
const property = "target";
const refInfo = {
reference: {
$refText: ""
},
container: node,
property
};
for (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {
if (isDirective(element.node)) {
acceptor(context, {
label: element.name,
labelDetails: {
description: `on ${element.node.locations.join(" | ").trim()}`
},
kind: CompletionItemKind.Field,
documentation: this.formatComment(element.node)
});
}
}
return;
}
}
completionForReferenceDirectiveArgument(context, next, acceptor) {
const node = context.node;
if (isReferenceDirectiveArgument(node)) {
const property = "target";
const refInfo = {
reference: {
$refText: ""
},
container: node,
property
};
for (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {
if (isDirectiveParameter(element.node)) {
let insertText = element.node.name;
if (element.node.type === "int" || element.node.type === "float") {
insertText += ":0";
}
if (element.node.type === "string") {
insertText += `:""`;
}
if (element.node.type === "boolean") {
insertText += ":true";
}
acceptor(context, {
label: element.name,
labelDetails: {
description: `${element.node.type}${element.node.optional ? "?" : ""}`
},
kind: CompletionItemKind.Field,
documentation: this.formatComment(element.node),
insertText
});
}
}
return;
}
}
completionForReferenceType(context, next, acceptor) {
const node = context.node;
if (isReferenceType(node)) {
const property = "target";
const refInfo = {
reference: {
$refText: ""
},
container: node,
property
};
for (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {
if (isType(element.node)) {
acceptor(context, {
label: element.name,
labelDetails: {
description: element.node.$type
},
kind: CompletionItemKind.Field,
documentation: this.formatComment(element.node)
});
}
}
return;
}
}
completionForImport(context, next, acceptor) {
const node = context.node;
if (isImport(node)) {
const property = "target";
const refInfo = {
reference: {
$refText: ""
},
container: node,
property
};
for (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {
if (isModule(element.node)) {
acceptor(context, {
label: element.name,
labelDetails: {
description: element.node.$type
},
kind: CompletionItemKind.Field,
documentation: this.formatComment(element.node)
});
}
}
return;
}
}
completionForImportMember(context, next, acceptor) {
const node = context.node;
if (isImportMember(node)) {
const property = "target";
const refInfo = {
reference: {
$refText: ""
},
container: node,
property
};
for (const element of this.scopeProvider.getScope(refInfo).getAllElements()) {
if (isImportable(element.node)) {
acceptor(context, {
label: element.name,
labelDetails: {
description: element.node.$type
},
kind: CompletionItemKind.Field,
documentation: this.formatComment(element.node)
});
}
}
return;
}
}
formatComment(node) {
const contents = {
kind: "markdown",
value: ""
};
this.documentationProvider.getDocumentation(node);
const comment = this.commentProvider.getComment(node);
if (comment) {
return {
kind: "markdown",
value: comment.substring(2, comment.length - 2).trim()
};
}
return contents;
}
completionForCrossReference(context, next, acceptor) {
const node = context.node;
if (!node) {
return super.completionForCrossReference(context, next, acceptor);
}
if (isReferenceTypeOption(node)) {
this.completionForReferenceTypeOption(context, next, acceptor);
} else if (isReferenceDirective(node)) {
this.completionForReferenceDirective(context, next, acceptor);
} else if (isReferenceDirectiveArgument(node)) {
this.completionForReferenceDirectiveArgument(context, next, acceptor);
} else if (isReferenceType(node)) {
this.completionForReferenceType(context, next, acceptor);
} else if (isImport(node)) {
this.completionForImport(context, next, acceptor);
} else if (isImportMember(node)) {
this.completionForImportMember(context, next, acceptor);
}
}
completionForKeyword(context, keyword, acceptor) {
if (isDeclaration(context.node)) {
for (const keyword2 of ["use", "directive", "scalar", "enum", "struct", "service", "exception", "alias"]) {
acceptor(context, {
label: keyword2,
kind: CompletionItemKind.Keyword
});
}
return;
}
return super.completionForKeyword(context, keyword, acceptor);
}
completionFor(context, next, acceptor) {
return super.completionFor(context, next, acceptor);
}
};
var IprotoFormatter = class extends AbstractFormatter {
constructor(services) {
super();
this.grammarConfig = () => services.parser.GrammarConfig;
}
formatDirectives(node) {
const formatter = this.getNodeFormatter(node);
node.directives.map((directive, index) => {
if (index !== 0) {
formatter.node(directive).prepend(Formatting.oneSpace());
} else {
formatter.node(directive).prepend(Formatting.noIndent());
}
});
}
formatModule(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("module").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.property("name").append(Formatting.newLines(2));
this.formatDirectives(node);
}
formatImport(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("use").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.property("target").append(Formatting.noSpace());
formatter.keyword("::").surround(Formatting.noSpace());
formatter.keyword("{").append(Formatting.oneSpace());
formatter.keyword("}").prepend(Formatting.oneSpace());
formatter.nodes(...node.members).surround(Formatting.oneSpace());
}
formatImportMember(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("as").surround(Formatting.oneSpace());
}
formatScalar(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("scalar").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.keywords("<", ".", "[").surround(Formatting.noSpace());
formatter.keywords(">", "]").prepend(Formatting.noSpace());
formatter.keyword("...").prepend(Formatting.oneSpace());
node.parameters.map((node2, index) => {
if (index !== 0) {
formatter.node(node2).prepend(Formatting.oneSpace());
}
});
node.options.map((node2, index) => {
if (index !== 0) {
formatter.node(node2).prepend(Formatting.oneSpace());
}
});
this.formatDirectives(node);
}
formatScalarOption(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword(":").surround(Formatting.noSpace());
}
formatEnum(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("enum").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.property("name").append(Formatting.oneSpace());
const bracesOpen = formatter.keyword("{");
const bracesClose = formatter.keyword("}").prepend(Formatting.newLine());
formatter.interior(bracesOpen, bracesClose).prepend(Formatting.indent());
this.formatDirectives(node);
}
formatEnumMember(node) {
this.formatDirectives(node);
}
formatStruct(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("struct").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.properties("name").append(Formatting.oneSpace());
formatter.keyword("with").append(Formatting.oneSpace());
node.mixins.map((node2) => {
formatter.node(node2).append(Formatting.oneSpace());
});
const bracesOpen = formatter.keyword("{");
const bracesClose = formatter.keyword("}").prepend(Formatting.newLine());
formatter.interior(bracesOpen, bracesClose).prepend(Formatting.indent());
this.formatDirectives(node);
}
formatException(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("exception").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.property("name").append(Formatting.oneSpace());
const bracesOpen = formatter.keyword("{");
const bracesClose = formatter.keyword("}").prepend(Formatting.newLine());
formatter.interior(bracesOpen, bracesClose).prepend(Formatting.indent());
this.formatDirectives(node);
}
formatEndpoint(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("endpoint").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.property("name").append(Formatting.noSpace());
formatter.keywords("(").surround(Formatting.noSpace());
formatter.keyword(")").prepend(Formatting.noSpace());
formatter.keyword(":").append(Formatting.oneSpace()).prepend(Formatting.noSpace());
this.formatDirectives(node);
}
formatDirective(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("directive").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.keywords("on", "module", "scalar", "enum", "variant", "struct", "field", "exception", "endpoint").prepend(Formatting.oneSpace());
formatter.keyword("(").surround(Formatting.noSpace());
formatter.keyword(")").prepend(Formatting.noSpace());
node.parameters.map((node2, index) => {
if (index !== 0) {
formatter.node(node2).prepend(Formatting.oneSpace());
}
});
}
formatDirectiveParameter(node) {
const formatter = this.getNodeFormatter(node);
formatter.keywords(":", "?").surround(Formatting.noSpace());
}
formatAlias(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("alias").prepend(Formatting.noIndent()).append(Formatting.oneSpace());
formatter.property("name").append(Formatting.oneSpace());
}
formatReferenceType(node) {
const formatter = this.getNodeFormatter(node);
formatter.keywords("<", ".", "[").surround(Formatting.noSpace());
formatter.keywords(">", "]").prepend(Formatting.noSpace());
node.arguments.map((node2, index) => {
if (index !== 0) {
formatter.node(node2).prepend(Formatting.oneSpace());
}
});
node.options.map((node2, index) => {
if (index !== 0) {
formatter.node(node2).prepend(Formatting.oneSpace());
}
});
}
formatReferenceTypeOption(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword(":").surround(Formatting.noSpace());
}
formatReferenceDirective(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword("#").append(Formatting.noSpace());
formatter.keyword("(").surround(Formatting.noSpace());
formatter.keyword(")").prepend(Formatting.noSpace());
node.arguments.map((node2, index) => {
if (index !== 0) {
formatter.node(node2).prepend(Formatting.oneSpace());
}
});
}
formatReferenceDirectiveArgument(node) {
const formatter = this.getNodeFormatter(node);
formatter.keyword(":").surround(Formatting.noSpace());
}
formatField(node) {
const formatter = this.getNodeFormatter(node);
const siblings = node.$container.fields;
const max = Math.max(...siblings.map((node2) => node2.name.length));
formatter.property("name").append(Formatting.spaces(max + 1 - node.name.length));
}
format(node) {
if (isModule