second commit
This commit is contained in:
176
env/lib/python3.11/site-packages/pygments/lexers/graphql.py
vendored
Normal file
176
env/lib/python3.11/site-packages/pygments/lexers/graphql.py
vendored
Normal file
@ -0,0 +1,176 @@
|
||||
"""
|
||||
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")),
|
||||
],
|
||||
}
|
Reference in New Issue
Block a user