LibCST
nagini
LibCST | nagini | |
---|---|---|
9 | 1 | |
1,428 | 215 | |
2.4% | - | |
8.5 | 8.4 | |
3 days ago | 7 days ago | |
Python | Python | |
GNU General Public License v3.0 or later | Mozilla Public License 2.0 |
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
nagini
-
Show HN: Codemodder – A new codemod library for Java and Python
https://en.wikipedia.org/wiki/Semgrep links to OWASP Source Code Analysis Tools: https://owasp.org/www-community/Source_Code_Analysis_Tools
But what's static analysis or dynamic analysis source code analysis without Formal Verification?
"Nagini: A Static Verifier for Python": https://pm.inf.ethz.ch/publications/EilersMueller18.pdf https://github.com/marcoeilers/nagini :
> However, there is currently virtually no tool support for reasoning about Python programs beyond type safety.
> We present Nagini, a sound verifier for statically-typed, concurrent Python
What are some alternatives?
RedBaron - Bottom-up approach to refactoring in python
Bowler - Safe code refactoring for modern Python.
black - The uncompromising Python code formatter
pasta - Library to refactor python code through AST manipulation.
ufmt - Safe, atomic formatting with black and µsort
instaviz - Instant visualization of Python AST and Code Objects
tbpatch - Token-based patch experiments
ruff - An extremely fast Python linter and code formatter, written in Rust.
lib3to6 - Build universally compatible python packages from a substantial subset of Python 3.8.
fastapi - FastAPI framework, high performance, easy to learn, fast to code, ready for production
intellij-blackconnect - IDEA plugin for using black[d] during Python development.