Anonymous avatar Anonymous committed 6623ef5

patchedast: supporting class decorators

Comments (0)

Files changed (2)

rope/refactor/patchedast.py

 
     def _ClassDef(self, node):
         children = []
+        if getattr(node, 'decorator_list', None):
+            for decorator in node.decorator_list:
+                children.append('@')
+                children.append(decorator)
         children.extend(['class', node.name])
         if node.bases:
             children.append('(')

ropetest/refactor/patchedasttest.py

             ['@', '', 'Name', '\n', 'def', ' ', 'f', '', '(', '', 'arguments',
              '', ')', '', ':', '\n    ', 'Pass'])
 
+    @testutils.only_for('2.6')
+    def test_decorators_for_classes(self):
+        source = '@d\nclass C(object):\n    pass\n'
+        ast = patchedast.get_patched_ast(source, True)
+        checker = _ResultChecker(self, ast)
+        checker.check_region('ClassDef', 0, len(source) - 1)
+        checker.check_children(
+            'ClassDef',
+            ['@', '', 'Name', '\n', 'class', ' ', 'C', '', '(', '', 'Name',
+             '', ')', '', ':', '\n    ', 'Pass'])
+
     def test_both_varargs_and_kwargs(self):
         source = 'def f(*args, **kwds):\n    pass\n'
         ast = patchedast.get_patched_ast(source, True)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.