[Python-checkins] bpo-40517: Implement syntax highlighting support for ASDL (#19928)

Batuhan Taskaya webhook-mailer at python.org
Wed May 6 01:24:49 EDT 2020


https://github.com/python/cpython/commit/d60040ba226bd2e3b6f58d074015aa2499dc1cb8
commit: d60040ba226bd2e3b6f58d074015aa2499dc1cb8
branch: master
author: Batuhan Taskaya <batuhanosmantaskaya at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-05-05T22:24:39-07:00
summary:

bpo-40517: Implement syntax highlighting support for ASDL (#19928)

files:
A Doc/tools/extensions/asdl_highlight.py
M Doc/conf.py
M Doc/library/ast.rst

diff --git a/Doc/conf.py b/Doc/conf.py
index 32db34344a70a..12d74ea24ce4a 100644
--- a/Doc/conf.py
+++ b/Doc/conf.py
@@ -14,7 +14,8 @@
 # ---------------------
 
 extensions = ['sphinx.ext.coverage', 'sphinx.ext.doctest',
-              'pyspecific', 'c_annotations', 'escape4chm']
+              'pyspecific', 'c_annotations', 'escape4chm',
+              'asdl_highlight']
 
 
 doctest_global_setup = '''
diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst
index fc04114949c0c..6c6ad01b842c8 100644
--- a/Doc/library/ast.rst
+++ b/Doc/library/ast.rst
@@ -35,7 +35,7 @@ Abstract Grammar
 The abstract grammar is currently defined as follows:
 
 .. literalinclude:: ../../Parser/Python.asdl
-   :language: none
+   :language: asdl
 
 
 Node classes
diff --git a/Doc/tools/extensions/asdl_highlight.py b/Doc/tools/extensions/asdl_highlight.py
new file mode 100644
index 0000000000000..9b003e9905c56
--- /dev/null
+++ b/Doc/tools/extensions/asdl_highlight.py
@@ -0,0 +1,51 @@
+import os
+import sys
+sys.path.append(os.path.abspath("../Parser/"))
+
+from pygments.lexer import RegexLexer, bygroups, include, words
+from pygments.token import (Comment, Generic, Keyword, Name, Operator,
+                            Punctuation, Text)
+
+from asdl import builtin_types
+from sphinx.highlighting import lexers
+
+class ASDLLexer(RegexLexer):
+    name = "ASDL"
+    aliases = ["asdl"]
+    filenames = ["*.asdl"]
+    _name = r"([^\W\d]\w*)"
+    _text_ws = r"(\s*)"
+
+    tokens = {
+        "ws": [
+            (r"\n", Text),
+            (r"\s+", Text),
+            (r"--.*?$", Comment.Singleline),
+        ],
+        "root": [
+            include("ws"),
+            (
+                r"(module)" + _text_ws + _name,
+                bygroups(Keyword, Text, Name.Class),
+            ),
+            (
+                r"(\w+)(\*\s|\?\s|\s)(\w+)",
+                bygroups(Name.Variable, Generic.Strong, Name.Tag),
+            ),
+            (words(builtin_types), Keyword.Type),
+            (r"attributes", Name.Builtin),
+            (
+                _name + _text_ws + "(=)",
+                bygroups(Name.Variable, Text, Operator),
+            ),
+            (_name, Name.Function),
+            (r"\|", Operator),
+            (r"{|}|\(|\)", Punctuation),
+            (r".", Text),
+        ],
+    }
+
+
+def setup(app):
+    lexers["asdl"] = ASDLLexer()
+    return {'version': '1.0', 'parallel_read_safe': True}



More information about the Python-checkins mailing list