-
-
Notifications
You must be signed in to change notification settings - Fork 31.8k
Tokenizer produces different output on Windows on py312 for ends of files #105017
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
Comments
CC: @mgmacias95 |
#105022 fixes the issue of the additional NL token at the end of the file on Windows, but there are still differences on Windows between what the tokenizer produced on 3.11 and what it produces on #105022. On 3.11 on Windows:
Using #105022:
Note that the same tokens are emitted now as were emitted on 3.11, but the end-column coordinate is off by one for each NEWLINE token. (I'm still seeing loads of flake8-pyi test failures even using #105022, and I'm presuming this is the cause?) |
Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
…ythonGH-105022) (cherry picked from commit 86d8f48) Co-authored-by: Marta Gómez Macías <mgmacias@google.com> Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
@AlexWaygood can you check again with the new PR (#105030)? |
Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
…thonGH-105030) (cherry picked from commit 96fff35) Co-authored-by: Marta Gómez Macías <mgmacias@google.com> Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
Will check either this evening or tomorrow |
Well, I have good news and bad news. The good news is that, on Windows, the tokenize module appears to now be producing exactly the same output on The bad news is that the spurious pycodestyle W391 errors discussed in PyCQA/pycodestyle#1142 still haven't gone away, even using CPython Regardless, the original bug reported here has definitely been fixed, so I'll close this for now, and I'll open a new issue once I've done some more investigation into what might be causing the spurious W391 errors and (hopefully) found a minimal repro that doesn't involve third-party code. Thanks @pablogsal and @mgmacias95 for all your hard work on this! |
I've tried to investigate, but I can't immediately figure out what might be causing these W391 errors. I suspect it'll need somebody more familiar with pycodestyle's architecture and/or the tokenize module to figure out whether this is, in fact, a CPython bug at all -- and if it is, to produce a minimal repro that doesn't depend on pycodestyle. |
Bug report
If you copy and paste the following code into a
repro.py
file and runpython -m tokenize
on it on a Windows machine, the output is different on 3.12/3.13 compared to what it was on 3.11 (the file ends with a single newline):On Python 3.11, on Windows, the output is this:
On Python 3.13 (@ 6e62eb2) on Windows, however, the output is this:
There appear to be two changes here:
\n
values, whereas on Python 3.11 they all had\r\n
valuesAs discussed in PyCQA/pycodestyle#1142, this appears to be Windows-specific, and may be the cause of a large number of spurious W391 errors from the pycodestyle linting tool. (W391 dictates that there should be one, and only one, newline at the end of a file.) The pycodestyle tool is included in flake8, meaning that test failures in pycodestyle can cause test failures for other flake8 plugins. (All tests for the flake8-pyi plugin, for example, currently fail on Python 3.13 on Windows.)
Your environment
Linked PRs
The text was updated successfully, but these errors were encountered: