bpo-40517: Implement syntax highlighting support for ASDL (#19928) · python/cpython@d60040b
1+import os
2+import sys
3+sys.path.append(os.path.abspath("../Parser/"))
4+5+from pygments.lexer import RegexLexer, bygroups, include, words
6+from pygments.token import (Comment, Generic, Keyword, Name, Operator,
7+Punctuation, Text)
8+9+from asdl import builtin_types
10+from sphinx.highlighting import lexers
11+12+class ASDLLexer(RegexLexer):
13+name = "ASDL"
14+aliases = ["asdl"]
15+filenames = ["*.asdl"]
16+_name = r"([^\W\d]\w*)"
17+_text_ws = r"(\s*)"
18+19+tokens = {
20+"ws": [
21+ (r"\n", Text),
22+ (r"\s+", Text),
23+ (r"--.*?$", Comment.Singleline),
24+ ],
25+"root": [
26+include("ws"),
27+ (
28+r"(module)" + _text_ws + _name,
29+bygroups(Keyword, Text, Name.Class),
30+ ),
31+ (
32+r"(\w+)(\*\s|\?\s|\s)(\w+)",
33+bygroups(Name.Variable, Generic.Strong, Name.Tag),
34+ ),
35+ (words(builtin_types), Keyword.Type),
36+ (r"attributes", Name.Builtin),
37+ (
38+_name + _text_ws + "(=)",
39+bygroups(Name.Variable, Text, Operator),
40+ ),
41+ (_name, Name.Function),
42+ (r"\|", Operator),
43+ (r"{|}|\(|\)", Punctuation),
44+ (r".", Text),
45+ ],
46+ }
47+48+49+def setup(app):
50+lexers["asdl"] = ASDLLexer()
51+return {'version': '1.0', 'parallel_read_safe': True}