"" "
pygments.lexers.graphql
~~~~~~~~~~~~~~~~~~~~~~~
Lexer for GraphQL, an open-source data query and manipulation
language for APIs.
More information:
https://graphql.org/
:copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"" "
from pygments.lexer import RegexLexer, words, include, bygroups, default
from pygments.token import (Comment, Keyword, Name, Number, Punctuation, String,
Whitespace)
__all__ = ["GraphQLLexer" ]
OPERATION_TYPES = ("query" , "mutation" , "subscription" )
BUILTIN_TYPES = ("Int" , "Float" , "String" , "Boolean" , "ID" )
BOOLEAN_VALUES = ("true" , "false" , "null" )
KEYWORDS = (
"type" ,
"schema" ,
"extend" ,
"enum" ,
"scalar" ,
"implements" ,
"interface" ,
"union" ,
"input" ,
"directive" ,
"QUERY" ,
"MUTATION" ,
"SUBSCRIPTION" ,
"FIELD" ,
"FRAGMENT_DEFINITION" ,
"FRAGMENT_SPREAD" ,
"INLINE_FRAGMENT" ,
"SCHEMA" ,
"SCALAR" ,
"OBJECT" ,
"FIELD_DEFINITION" ,
"ARGUMENT_DEFINITION" ,
"INTERFACE" ,
"UNION" ,
"ENUM" ,
"ENUM_VALUE" ,
"INPUT_OBJECT" ,
"INPUT_FIELD_DEFINITION" ,
)
class GraphQLLexer(RegexLexer):
"" "
Lexer for GraphQL syntax
"" "
name = "GraphQL"
aliases = ["graphql" ]
filenames = ["*.graphql" ]
url = "https://graphql.org "
version_added = '2.16'
tokens = {
"ignored_tokens" : [
(r"\s+" , Whitespace), # Whitespaces
(r"#.*$", Comment),
("," , Punctuation), # Insignificant commas
],
"value" : [
include("ignored_tokens" ),
(r"-?\d+(?![.eE])" , Number.Integer, "#pop"),
(
r"-?\d+(\.\d+)?([eE][+-]?\d+)?" ,
Number.Float,
"#pop",
),
(r'"' , String, ("#pop", "string")),
(words(BOOLEAN_VALUES, suffix=r"\b" ), Name.Builtin, "#pop"),
(r"\$[a-zA-Z_]\w*" , Name.Variable, "#pop"),
(r"[a-zA-Z_]\w*" , Name.Constant, "#pop"),
(r"\[" , Punctuation, ("#pop", "list_value")),
(r"\{" , Punctuation, ("#pop", "object_value")),
],
"list_value" : [
include("ignored_tokens" ),
("]" , Punctuation, "#pop"),
default("value" ),
],
"object_value" : [
include("ignored_tokens" ),
(r"[a-zA-Z_]\w*" , Name),
(r":" , Punctuation, "value" ),
(r"\}" , Punctuation, "#pop"),
],
"string" : [
(r'\\(["\\/bfnrt]|u[a-fA-F0-9]{4})' , String.Escape),
(r'[^\\"\n]+' , String), # all other characters
(r'"' , String, "#pop"),
],
"root" : [
include("ignored_tokens" ),
(words(OPERATION_TYPES, suffix=r"\b" ), Keyword, "operation" ),
(words(KEYWORDS, suffix=r"\b" ), Keyword),
(r"\{" , Punctuation, "selection_set" ),
(r"fragment\b" , Keyword, "fragment_definition" ),
],
"operation" : [
include("ignored_tokens" ),
(r"[a-zA-Z_]\w*" , Name.Function),
(r"\(" , Punctuation, "variable_definition" ),
(r"\{" , Punctuation, ("#pop", "selection_set")),
],
"variable_definition" : [
include("ignored_tokens" ),
(r"\$[a-zA-Z_]\w*" , Name.Variable),
(r"[\]!]" , Punctuation),
(r":" , Punctuation, "type" ),
(r"=" , Punctuation, "value" ),
(r"\)" , Punctuation, "#pop"),
],
"type" : [
include("ignored_tokens" ),
(r"\[" , Punctuation),
(words(BUILTIN_TYPES, suffix=r"\b" ), Name.Builtin, "#pop"),
(r"[a-zA-Z_]\w*" , Name.Class , "#pop"),
],
"selection_set" : [
include("ignored_tokens" ),
(r"([a-zA-Z_]\w*)(\s*)(:)" , bygroups(Name.Label, Whitespace, Punctuation)),
(r"[a-zA-Z_]\w*" , Name), # Field
(
r"(\.\.\.)(\s+)(on)\b" ,
bygroups(Punctuation, Whitespace, Keyword),
"inline_fragment" ,
),
(r"\.\.\." , Punctuation, "fragment_spread" ),
(r"\(" , Punctuation, "arguments" ),
(r"@[a-zA-Z_]\w*" , Name.Decorator, "directive" ),
(r"\{" , Punctuation, "selection_set" ),
(r"\}" , Punctuation, "#pop"),
],
"directive" : [
include("ignored_tokens" ),
(r"\(" , Punctuation, ("#pop", "arguments")),
],
"arguments" : [
include("ignored_tokens" ),
(r"[a-zA-Z_]\w*" , Name),
(r":" , Punctuation, "value" ),
(r"\)" , Punctuation, "#pop"),
],
# Fragments
"fragment_definition" : [
include("ignored_tokens" ),
(r"[\]!]" , Punctuation), # For NamedType
(r"on\b" , Keyword, "type" ),
(r"[a-zA-Z_]\w*" , Name.Function),
(r"@[a-zA-Z_]\w*" , Name.Decorator, "directive" ),
(r"\{" , Punctuation, ("#pop", "selection_set")),
],
"fragment_spread" : [
include("ignored_tokens" ),
(r"@[a-zA-Z_]\w*" , Name.Decorator, "directive" ),
(r"[a-zA-Z_]\w*" , Name, "#pop"), # Fragment name
],
"inline_fragment" : [
include("ignored_tokens" ),
(r"[a-zA-Z_]\w*" , Name.Class ), # Type condition
(r"@[a-zA-Z_]\w*" , Name.Decorator, "directive" ),
(r"\{" , Punctuation, ("#pop", "selection_set")),
],
}
quality 73%
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland