Comments (6)
Hah, turns out the Windows debug binary overflows the stack when parsing relatively complex files (like the generated code in libcst itself). Release build works fine (which is why you couldn't repro 😄 ). There's no feedback from the OS/Python when this happens:
(libcst) PS C:\Users\zsolz\projects\libcst\libcst\testing> python
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import libcst as cst
>>> f = open("utils.py").read()
>>> cst.parse_module(f)
(libcst) PS C:\Users\zsolz\projects\libcst\libcst\testing>
(I had to run the rust test binary -in debug mode- directly to observe the stack overflow).
Thanks again, this is not an issue in ufmt/usort.
from ufmt.
I can't replicate this error on either Python 3.8.6 or 3.9.9. What version of Windows are you testing on? Do you still see this error if you upgrade ufmt to 1.3.1post1? Can you provide a paste of pip list
?
from ufmt.
This is Windows 10, Python 3.9.5, and here's the output of pip list
: https://gist.github.com/zsol/4d1ade439bb96693da50c3be1e205cdc
It happens with ufmt 1.3.1post1 too. I can try different python versions a bit later. Just plain black
works fine
from ufmt.
Hmm, I still can't replicate this, even with 3.9.5 and installing libcst from the same rev listed in your gist. I even tried installing rustc, rebuilding libcst, and setting LIBCST_PARSER_TYPE=native, and was still able to ufmt --debug format libcst/
without an error. I am running this via git-bash, but I really hope that's not a determining factor in this. 😅
from ufmt.
My only thought is that something is causing the rust parser in libcst to segfault in a child process (or otherwise abort without raising an exception). If there's a specific file that triggers this behavior, you could try something like this to run usort in the parent process and hopefully get some better segfault/debugging out of it:
from usort import usort_file
from pathlib import Path
result = usort_file(Path("libcst/__init__.py"))
print(result.error)
from ufmt.
My only thought is that something is causing the rust parser in libcst to segfault in a child process (or otherwise abort without raising an exception).
Yeah this seems plausible, because I can no longer reproduce the issue if I disable the rust parser. I'll poke around, thanks for the tips!
from ufmt.
Related Issues (20)
- Project root detection logic leads to configuration duplication in some circumstances HOT 1
- (vscode) Unnecessary new lines are added indefinitely to docstring for class fields HOT 5
- "IndexError: list index out of range" when parsing line with ; HOT 3
- How does one format stdin? HOT 2
- Importing version from __version__.py makes building conda-forge packages awkward HOT 2
- ufmt reports syntax error on correct structural pattern matching expression
- Ufmt ignore paths aren't rooted to project root
- Add API to format existing tree object
- pre-commit + excludes prevent people from committing code HOT 3
- Add contributor guide
- Drop support for 3.7 HOT 1
- Start formatting files while still walking paths
- VSCode, TypeGuard, and TypeVar throw error HOT 4
- Doesn't respect Black's policy to ignore `fmt: off` or `fmt:skip` sections HOT 1
- ufmt_file sends wrong path to ufmt config factory HOT 1
- Syntax errors don't print the name of the file HOT 1
- Missing deps HOT 1
- List index out of range when formatting empty files
- <STDIN> is not a resolvable path on Windows
- Black output
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ufmt.