44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
import {parser} from "./syntax.grammar"
|
|
import {LRLanguage, LanguageSupport, indentNodeProp, foldNodeProp, foldInside, delimitedIndent} from "@codemirror/language"
|
|
import {styleTags, tags as t} from "@codemirror/highlight"
|
|
|
|
export const GQLLanguage = LRLanguage.define({
|
|
parser: parser.configure({
|
|
props: [
|
|
indentNodeProp.add({
|
|
"SelectionSet FieldsDefinition ObjectValue SchemaDefinition RootTypeDef": delimitedIndent({ closing: "}", align: true }),
|
|
}),
|
|
foldNodeProp.add({
|
|
Application: foldInside,
|
|
"SelectionSet FieldsDefinition ObjectValue RootOperationTypeDefinition RootTypeDef": (node) => {
|
|
return {
|
|
from: node.from,
|
|
to: node.to
|
|
}
|
|
|
|
}
|
|
}),
|
|
styleTags({
|
|
Name: t.definition(t.variableName),
|
|
"OperationDefinition/Name": t.definition(t.function(t.variableName)),
|
|
OperationType: t.keyword,
|
|
BooleanValue: t.bool,
|
|
StringValue: t.string,
|
|
IntValue: t.number,
|
|
FloatValue: t.number,
|
|
NullValue: t.null,
|
|
ObjectValue: t.brace,
|
|
Comment: t.lineComment,
|
|
})
|
|
]
|
|
}),
|
|
languageData: {
|
|
commentTokens: { line: "#" },
|
|
closeBrackets: { brackets: ["(", "[", "{", '"', '"""'] }
|
|
}
|
|
})
|
|
|
|
export function GQL() {
|
|
return new LanguageSupport(GQLLanguage)
|
|
}
|