Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

Crash with simple f-string #640

Open
kasium opened this issue Apr 24, 2023 · 7 comments · May be fixed by #653
Open

Crash with simple f-string #640

kasium opened this issue Apr 24, 2023 · 7 comments · May be fixed by #653

Comments

@kasium
Copy link
Contributor

kasium commented Apr 24, 2023

Pydocstyle crashes with the below code:

Code: f"bar {123}"
Traceback:

  File "venv/bin/pydocstyle", line 8, in <module>
    sys.exit(main())
  File "venv/lib/python3.7/site-packages/pydocstyle/cli.py", line 79, in main
    sys.exit(run_pydocstyle())
  File "venv/lib/python3.7/site-packages/pydocstyle/cli.py", line 54, in run_pydocstyle
    ignore_self_only_init=ignore_self_only_init,
  File "venv/lib/python3.7/site-packages/pydocstyle/checker.py", line 1171, in check
    ignore_self_only_init,
  File "venv/lib/python3.7/site-packages/pydocstyle/checker.py", line 159, in check_source
    self, definition, definition.docstring
  File "venv/lib/python3.7/site-packages/pydocstyle/checker.py", line 244, in check_docstring_empty
    if docstring and is_blank(ast.literal_eval(docstring)):
  File "/root/.pyenv/versions/3.7.2/lib/python3.7/ast.py", line 91, in literal_eval
    return _convert(node_or_string)
  File "/root/.pyenv/versions/3.7.2/lib/python3.7/ast.py", line 90, in _convert
    return _convert_signed_num(node)
  File "/root/.pyenv/versions/3.7.2/lib/python3.7/ast.py", line 63, in _convert_signed_num
    return _convert_num(node)
  File "/root/.pyenv/versions/3.7.2/lib/python3.7/ast.py", line 55, in _convert_num
    raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.JoinedStr object at 0x7f296ff35a20>

Python 3.7.2
Pydocstyle: 6.3.0

@sigmavirus24
Copy link
Member

Is that the only code in the file? Pydocstyle works fine with f strings on all of my projects.

Further, the error is coming from the standard-library ast parsing library. That means it's not valid python and it wouldn't run anyway so this falls under the principle of

"Garbage in, garbage out"

@kasium
Copy link
Contributor Author

kasium commented Apr 24, 2023

@sigmavirus24 I drilled it down to that code. And python foo.py returns no error, so it's valid python. You are right, it's from the stdlib but it seems that pydocstyle passes something wrong to literal_eval

@kasium
Copy link
Contributor Author

kasium commented Jul 30, 2023

@sigmavirus24 the issue is in pydocstyle/checker.py check_docstring_empty. It passes the whole code to ast.literal_eval which is not valid, because literal_eval cannot handled f-strings. I'm happy to open a PR if you want

@sigmavirus24
Copy link
Member

@kasium you misunderstand me. f-strings cannot be documentation strings. Docstrings must be string literals. In other words, pydocstyle has every right - when it encounters something that appears to be a docstring - to attempt to use ast.literal_eval.

A file that has a string and only a string in it, would appear to have a docstring. That docstring being an f-string means that it's a garbage file since f-strings cannot be docstrings.

I think it makes sense that we attempt to catch this and report an error but I don't think the tool is doing anything other than exposing an exception to the user.

@kasium
Copy link
Contributor Author

kasium commented Aug 4, 2023

@sigmavirus24 I just found #381. Not sure about the process but I'm willing to pick it up since there is no progress since 2020.
I guess a new PR makes sense, right?

@sigmavirus24
Copy link
Member

@kasium yes, I think that does make sense. There is some significant review there though about a better way to implement that, so don't feel too attached to what's there if it turns out to slow you down

@kasium
Copy link
Contributor Author

kasium commented Aug 4, 2023

Okay, let me read it and create a new PR to start with a fresh base. Thanks for your timely answers !

kasium added a commit to kasium/pydocstyle that referenced this issue Sep 13, 2023
@kasium kasium linked a pull request Sep 13, 2023 that will close this issue
2 tasks
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants