Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] "AttributeError: 'Call' object has no attribute 'id'" when running on a specific decorator #19

Open
ElPicador opened this issue Aug 27, 2024 · 0 comments

Comments

@ElPicador
Copy link

Summary

I'm trying to use deadcode on our code base, and it crashes. I managed to reduce the error to a few lines, and find the cultprit:

@Class().function()
def a():
    return "42"

Explanation

It fails on the decorator @Class().function(), on deadcode/visitor/utils.py:63, in get_decorator_name
Indeed in this case the variable decorator doesn't have an id attribute. It's a ast.Call.

I managed to fix it by changing the line with:

    if hasattr(decorator, "id"):
        parts.append(decorator.id)  # type: ignore
    else:
        parts.append(decorator.func.id)

But I'm unsure if it's the right fix 🤷

More details

  • I'm using deadcode 2.4.1
  • python 3.11.7
  • I'm on macos
  • the full stacktrace is:
Traceback (most recent call last):
  File "/path/to/code/backend/.venv/bin/deadcode", line 8, in <module>
    sys.exit(print_main())
             ^^^^^^^^^^^^
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/cli.py", line 41, in print_main
    if result := main():
                 ^^^^^^
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/cli.py", line 26, in main
    unused_names = find_unused_names(filenames=filenames, args=args)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/actions/find_unused_names.py", line 13, in find_unused_names
    dead_code_visitor.visit_abstract_syntax_trees()
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/visitor/dead_code_visitor.py", line 106, in visit_abstract_syntax_trees
    self.visit(node)
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/visitor/dead_code_visitor.py", line 503, in visit
    self.visit(item)
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/visitor/dead_code_visitor.py", line 469, in visit
    visitor(node)
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/visitor/dead_code_visitor.py", line 387, in visit_FunctionDef
    decorator_names = [utils.get_decorator_name(decorator) for decorator in node.decorator_list]  # type: ignore
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/visitor/dead_code_visitor.py", line 387, in <listcomp>
    decorator_names = [utils.get_decorator_name(decorator) for decorator in node.decorator_list]  # type: ignore
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/path/to/code/backend/.venv/lib/python3.11/site-packages/deadcode/visitor/utils.py", line 66, in get_decorator_name
    parts.append(decorator.id)  # type: ignore
                 ^^^^^^^^^^^^
AttributeError: 'Call' object has no attribute 'id'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant