albertas / deadcode

Find and fix unused Python code using command line.
GNU Affero General Public License v3.0
72 stars 3 forks source link

[bug] AttributeError: 'alias' object has no attribute 'lineno' #15

Open MartinCastroAlvarez opened 1 month ago

MartinCastroAlvarez commented 1 month ago

I am getting this error when I try to run this command on a directory within Django with just a bunch of Python files with subdirectories.

>>> deadcode .

Traceback (most recent call last):
  File "/Users/myuser/env3/bin/deadcode", line 8, in <module>
    sys.exit(main())
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/cli.py", line 20, in main
    unused_names = find_unused_names(filenames=filenames, args=args)
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/actions/find_unused_names.py", line 13, in find_unused_names
    dead_code_visitor.visit_abstract_syntax_trees()
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/visitor/dead_code_visitor.py", line 106, in visit_abstract_syntax_trees
    self.visit(node)
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/visitor/dead_code_visitor.py", line 503, in visit
    self.visit(item)
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/visitor/dead_code_visitor.py", line 469, in visit
    visitor(node)
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/visitor/dead_code_visitor.py", line 418, in visit_ImportFrom
    self._add_aliases(node)
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/visitor/dead_code_visitor.py", line 187, in _add_aliases
    self._define(
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/visitor/dead_code_visitor.py", line 259, in _define
    first_lineno = lines.get_first_line_number(first_node)
  File "/Users/myuser/env3/lib/python3.9/site-packages/deadcode/visitor/lines.py", line 82, in get_first_line_number
    return node.lineno
AttributeError: 'alias' object has no attribute 'lineno'
albertas commented 1 month ago

deadcode only works with python3.10+ at the moment, because lower Python versions have limited core ast package implementation.

I see two options, how it would be possible to deal with this issue: