52 lines
1.4 KiB
JavaScript
52 lines
1.4 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)
|
|
}
|