diff options
author | Marion <marion.zepf@gmail.com> | 2013-08-30 09:05:20 (GMT) |
---|---|---|
committer | Marion <marion.zepf@gmail.com> | 2013-08-30 09:05:20 (GMT) |
commit | fab6f98e251a6ef0e290a550060da6dadaed5a73 (patch) | |
tree | e9dea14799c86834436303ae75ecfc51c5972f28 /util | |
parent | 40fae3be9951049e919a9583a64aad8cfac154f8 (diff) |
Primitive for 'comment' block and Comment AST class to make it exportable
- Primitive object for the 'comment' block using the new Primitive.comment
function.
- Special handling of Primitives using Primitive.comment during export.
- New util.ast_extensions module containing extensions to the built-in `ast`
module. Currently it contains the Comment class for inline comments.
- New visit_Comment method in util.codegen to serialize inline comments.
Diffstat (limited to 'util')
-rw-r--r-- | util/ast_extensions.py | 41 | ||||
-rw-r--r-- | util/codegen.py | 5 |
2 files changed, 46 insertions, 0 deletions
diff --git a/util/ast_extensions.py b/util/ast_extensions.py new file mode 100644 index 0000000..ac29421 --- /dev/null +++ b/util/ast_extensions.py @@ -0,0 +1,41 @@ +#Copyright (c) 2013 Marion Zepf + +#Permission is hereby granted, free of charge, to any person obtaining a copy +#of this software and associated documentation files (the "Software"), to deal +#in the Software without restriction, including without limitation the rights +#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +#copies of the Software, and to permit persons to whom the Software is +#furnished to do so, subject to the following conditions: + +#The above copyright notice and this permission notice shall be included in +#all copies or substantial portions of the Software. + +#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +#THE SOFTWARE. + + +""" Extend the `ast` module to include comments """ + +import ast + + +class Comment(ast.stmt): + """ An inline comment, starting with a hashtag (#). + Extends the Python abstract grammar by the following: + stmt = Comment(string text) | ... """ + + _fields = ('text') + + def __init__(self, text="", lineno=1, col_offset=0): + """ text -- the textual content of the comment, i.e. everything + directly following the hashtag until the next newline """ + self.text = text + self.lineno = lineno + self.col_offset = col_offset + + diff --git a/util/codegen.py b/util/codegen.py index ead6dd0..1bcc42f 100644 --- a/util/codegen.py +++ b/util/codegen.py @@ -35,6 +35,7 @@ Modified by Marion Zepf. """ from ast import * +from ast_extensions import Comment def to_source(node, indent_with=' ' * 4, add_line_information=False): @@ -356,6 +357,10 @@ class SourceGenerator(NodeVisitor): self.write(', ') self.visit(node.tback) + def visit_Comment(self, node): + self.newline(node) + self.write('#' + str(node.text)) + # Expressions def visit_Attribute(self, node): |