4
4
def parse_buffer (buffer , mode = "exec" , flags = [], version = None , engine = None ):
5
5
"""
6
6
Like :meth:`parse`, but accepts a :class:`source.Buffer` instead of
7
- source and filename."""
7
+ source and filename, and returns comments as well.
8
+
9
+ :see: :meth:`parse`
10
+ :return: (:class:`ast.AST`, list of :class:`source.Comment`)
11
+ Abstract syntax tree and comments
12
+ """
8
13
9
14
if version is None :
10
15
version = sys .version_info [0 :2 ]
@@ -20,11 +25,11 @@ def parse_buffer(buffer, mode="exec", flags=[], version=None, engine=None):
20
25
parser .add_flags (flags )
21
26
22
27
if mode == "exec" :
23
- return parser .file_input ()
28
+ return parser .file_input (), lexer . comments
24
29
elif mode == "single" :
25
- return parser .single_input ()
30
+ return parser .single_input (), lexer . comments
26
31
elif mode == "eval" :
27
- return parser .eval_input ()
32
+ return parser .eval_input (), lexer . comments
28
33
29
34
def parse (source , filename = "<unknown>" , mode = "exec" ,
30
35
flags = [], version = None , engine = None ):
@@ -49,6 +54,7 @@ def parse(source, filename="<unknown>", mode="exec",
49
54
:raise: :class:`diagnostic.Error`
50
55
if the source code is not well-formed
51
56
"""
52
- return parse_buffer (pythonparser .source .Buffer (source , filename ),
53
- mode , flags , version , engine )
57
+ ast , comments = parse_buffer (pythonparser .source .Buffer (source , filename ),
58
+ mode , flags , version , engine )
59
+ return ast
54
60
0 commit comments