https://github.com/octoprint/codemods
Codemods based on LibCST
https://github.com/octoprint/codemods
python
Last synced: 6 months ago
JSON representation
Codemods based on LibCST
- Host: GitHub
- URL: https://github.com/octoprint/codemods
- Owner: OctoPrint
- Created: 2020-10-06T11:07:53.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2023-09-11T02:30:10.000Z (over 2 years ago)
- Last Synced: 2025-03-26T19:44:31.837Z (10 months ago)
- Topics: python
- Language: Python
- Size: 62.5 KB
- Stars: 7
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 👷♀️ OctoPrint codemods
Helpful codemods based on [LibCST](https://github.com/Instagram/LibCST/) created for use in OctoPrint development.
Provided as-is for documentational purposes.
## Setup
pip3 install .
## Usage
See
codemod_* --help
E.g.
```
$ codemod_not_in --help
usage: codemod_not_in [-h] [--before] [--after] [--dryrun] [--ignore IGNORE]
[--verbose] [--test]
bases [bases ...]
Converts 'not foo in bar' to 'foo not in bar' constructs.
positional arguments:
bases Files and directories (recursive) including python files to
be modified.
optional arguments:
-h, --help show this help message and exit
--before Write the CST of the original file to file.cst.before
--after Write the CST of the transformed file to file.cst.after
--dryrun Only perform a dry run without writing back the transformed
file
--ignore IGNORE Paths to ignore, add multiple as required
--verbose Generate output for all processed files, not juse for those
with replacements
--test Run in test mode: first path is input file, second path is
file with expected output.
```
To run in test mode, use `--test` and supply two files, input and expected output, e.g.:
```
$ codemod_not_in --test tests/input/not_in.py tests/expected/not_in.py
tests/input/not_in.py:4:0:
not foo in bar
✨ Test successful, contents identical
```
For running multiple codemods on the same inputs, it is recommended to use `codemod_batch`:
```
$ codemod_batch --check not_in --check remove_float_conversion tests/input/file.py
tests/input/not_in.py:4:0:
not foo in bar
tests/input/not_in.py: 1 replacements done
```
## pre-commit
This repository can be used with [pre-commit](https://pre-commit.com/).
```yaml
- repo: https://github.com/OctoPrint/codemods
rev: "0.6.3"
hooks:
- id: codemod_not_in
```
Additional arguments can also be specified:
```yaml
- repo: https://github.com/OctoPrint/codemods
rev: "0.6.3"
hooks:
- id: codemod_not_in
args: ["--ignore", "lib/vendor"]
```
If more than one command should be run, use the `batch` command for better performance:
```yaml
- repo: https://github.com/OctoPrint/codemods
rev: "0.6.3"
hooks:
- id: codemod_batch
args:
[
"--ignore",
"lib/vendor",
"--check",
"not_in",
"--check",
"remove_float_conversion"
]
```
## What codemods are available?
> 🛑 **Heads-up**
>
> Mods overlapping with [pyupgrade](https://github.com/asottile/pyupgrade) have been
> removed in version 0.6.0.
### `not_in`
Converts `not foo in bar` to `foo not in bar` constructs.
### `remove_builtins_imports`
Removes `from builtins import ...` and `import builtins`.
Use with Python 3 source only.
### `remove_float_conversion`
Removes unnecessary float conversions and `.0`s in division and multiplication.
Use with Python 3 source only, unless `from __future__ import division` is used.
## What code checks are available?
### `detect_past_builtins_imports`
Detects `from past... import ...` & `import past...`.
Use with Python 3 source only.
## Development
Checkout out the source. Install source and requirements, in editable mode:
```
pip install -e . -r requirements.txt
```
All existing tests can be run with `pytest`.
Individual tests can be run with `codemod_{codemod} --test tests/input/{codemod}.py tests/expected/{codemod}.py` (replacing `{codemod}` with the codemod to test).
When adding new codemods or checks, add implementation to `octoprint_codemods` (be sure to inherit from `octoprint_codemods.Codemod` or `octoprint_codemods.Codecheck` and implement `main` using `octoprint_codemods.runner`, see existing code).
`--before` and `--after` can be used to generated dumps of the CST before and after transformation. `--dryrun` helps to keep input unmodified during development.
## License
MIT