LibCST
ufmt
LibCST | ufmt | |
---|---|---|
9 | 2 | |
1,417 | 92 | |
1.6% | - | |
8.5 | 7.9 | |
7 days ago | 4 days ago | |
Python | Python | |
GNU General Public License v3.0 or later | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
LibCST
- Show HN: Codemodder – A new codemod library for Java and Python
-
Package that graphs and exports jpeg of CST/AST?
LibCST: Seems to only show in terminal.
-
How to approach modifying source code programmatically?
While you can do this using ANTLR or any other lexing/parsing tool, it's honestly a bit of a pain. Whitespace and comments can go almost anywhere, even in the middle of expressions, so the grammar ends up becoming fairly messy. So, I'd recommend using a library that handles this for you, if at all possible. For example, if I wanted to code-mod Python I'd prob just use the LibCST library.
-
ruff is a fast Python linter written in Rust
I recommend https://github.com/Instagram/LibCST (which is currently implementing rust bindings)
-
How to handle line endings when writing files depending on OS?
I've been roughly copying some of the logic from the LibCST project. This struct in particular- https://github.com/Instagram/LibCST/blob/main/native/libcst/src/tokenizer/text_position/char_width.rs does a good job of normalizing the line endings of a str. The long way around you could mimic this construct, transform the str to normalized line endings, and then split on "\n" or make a somewhat more complicated transformer which turns a large str into a Vec (or Vec).
-
We're the core team behind the popular Python autoformatter: Black. AMA!
I myself am working on upgrading LibCST's parser engine to support the new syntax, and then am hoping we can rewrite Black's formatting rules in terms of LibCST's API. That's not a small amount of work, which is why we can't confidently say that's going to be the way forward.
-
Our Engineering Team Used Python's AST to Patch 100,000s of Lines of Code
Never used it but it appears that Facebook/Instagram have a format preserving CST library for Python: https://github.com/Instagram/LibCST
ufmt
-
Formatting Code with Black
Give µsort a try instead; it's focused on providing more safety when applying sorting to large codebases, and is designed to pair well with black out of the box:
https://usort.readthedocs.io
https://ufmt.omnilib.dev
-
We're the core team behind the popular Python autoformatter: Black. AMA!
After rolling out Black + isort (and later usort) to millions of lines of code, I prefer https://github.com/omnilib/ufmt
What are some alternatives?
RedBaron - Bottom-up approach to refactoring in python
black - The uncompromising Python code formatter
Bowler - Safe code refactoring for modern Python.
isort - A Python utility / library to sort imports.
intellij-blackconnect - IDEA plugin for using black[d] during Python development.
pasta - Library to refactor python code through AST manipulation.
autoflake - Removes unused imports and unused variables as reported by pyflakes
instaviz - Instant visualization of Python AST and Code Objects
awesome-python-code-formatters - A curated list of awesome Python code formatters
tbpatch - Token-based patch experiments
fastapi - FastAPI framework, high performance, easy to learn, fast to code, ready for production