LibCST
A concrete syntax tree parser and serializer library for Python that preserves many aspects of Python's abstract syntax tree (by Instagram)
lib3to6
Build universally compatible python packages from a substantial subset of Python 3.8. (by mbarkhau)
LibCST | lib3to6 | |
---|---|---|
9 | 3 | |
1,428 | 19 | |
2.4% | - | |
8.5 | 0.0 | |
3 days ago | almost 2 years ago | |
Python | Python | |
GNU General Public License v3.0 or later | MIT License |
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
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.
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
Posts with mentions or reviews of LibCST.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2024-01-23.
- 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
lib3to6
Posts with mentions or reviews of lib3to6.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2021-06-07.
- Our Engineering Team Used Python's AST to Patch 100,000s of Lines of Code
-
Pip has dropped support for Python 2
Since the Python2->3 migration discussion is being had again here, I'd just like to advertise my compatibility library that can help with migrating old projects: https://github.com/mbarkhau/lib3to6
What are some alternatives?
When comparing LibCST and lib3to6 you can also consider the following projects:
RedBaron - Bottom-up approach to refactoring in python
Bowler - Safe code refactoring for modern Python.
black - The uncompromising Python code formatter
tbpatch - Token-based patch experiments
pasta - Library to refactor python code through AST manipulation.
CPython - The Python programming language
ufmt - Safe, atomic formatting with black and µsort
motioneye - A web frontend for the motion daemon.
instaviz - Instant visualization of Python AST and Code Objects
pip - The Python package installer