summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/lexers/graphql.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/graphql.py')
-rw-r--r--venv/lib/python3.11/site-packages/pygments/lexers/graphql.py177
1 files changed, 177 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/graphql.py b/venv/lib/python3.11/site-packages/pygments/lexers/graphql.py
new file mode 100644
index 0000000..b17e4a6
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/pygments/lexers/graphql.py
@@ -0,0 +1,177 @@
+"""
+ pygments.lexers.graphql
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ Lexer for GraphQL, an open-source data query and manipulation
+ language for APIs.
+
+ More information:
+ https://graphql.org/
+
+ :copyright: Copyright 2006-2023 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
+
+ .. versionadded:: 2.16
+ """
+ name = "GraphQL"
+ aliases = ["graphql"]
+ filenames = ["*.graphql"]
+ url = "https://graphql.org"
+
+ 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")),
+ ],
+ }