google / pasta

Library to refactor python code through AST manipulation.
Apache License 2.0
341 stars 40 forks source link

Failed to recognize import with parentheses #16

Closed williamjamir closed 6 years ago

williamjamir commented 6 years ago

Hi Nick,

Running google-pasta with python 2.7 against a file that has an import with parentheses throws a pasta.base.annotate.AnnotationError:

I'm using Python 2.7

(test_pasta) λ python --version
Python 2.7.12

With the following script:

import pasta
from pasta.augment import rename

path = r'test.py'

with open(path) as file:
    tree = pasta.parse(file.read())

On the test.py file:

from test2 import (test2)
print(test2.ID)

Error:

pasta.base.annotate.AnnotationError: Expected 'test2' but found '('
line 1: from test2 import (test2)

Full stack trace:

Traceback (most recent call last):
  File "script.py", line 10, in <module>
    tree = pasta.parse(file.read())
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\__init__.py", line 25, in parse
    annotator.visit(t)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 1038, in visit
    super(AstAnnotator, self).visit(node)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 115, in visit
    super(BaseVisitor, self).visit(node)
  File "W:\william\envs\test_pasta\lib\ast.py", line 241, in visit
    return visitor(node)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 79, in wrapped
    f(self, node, *args, **kwargs)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 162, in visit_Module
    self.generic_visit(node)
  File "W:\william\envs\test_pasta\lib\ast.py", line 249, in generic_visit
    self.visit(item)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 1038, in visit
    super(AstAnnotator, self).visit(node)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 115, in visit
    super(BaseVisitor, self).visit(node)
  File "W:\william\envs\test_pasta\lib\ast.py", line 241, in visit
    return visitor(node)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 43, in wrapped
    f(self, node, *args, **kwargs)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 545, in visit_ImportFrom
    self.visit(alias)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 1038, in visit
    super(AstAnnotator, self).visit(node)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 115, in visit
    super(BaseVisitor, self).visit(node)
  File "W:\william\envs\test_pasta\lib\ast.py", line 241, in visit
    return visitor(node)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 43, in wrapped
    f(self, node, *args, **kwargs)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 910, in visit_alias
    default=node.name)
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 1148, in attr
    attr_parts.append(self.token(attr_val))
  File "W:\william\envs\test_pasta\lib\site-packages\pasta\base\annotate.py", line 1088, in token
    token_val, token.src, token.start[0], token.line))

cc @nicoddemus