From 96a9805ecb75aac2adde7568d26b3e3b3ffc19af Mon Sep 17 00:00:00 2001 From: Chris Rose Date: Fri, 12 Jan 2024 11:23:26 -0800 Subject: [PATCH] Add `ruff-isort` formatter (#279) `ruff` doesn't run isort as part of its format, so to maintain parity with the sort rules that black/isort offer, this is the ruff isort. --------- Co-authored-by: Radon Rosborough --- CHANGELOG.md | 2 ++ apheleia-formatters.el | 6 +++++ test/formatters/installers/ruff-isort.bash | 2 ++ test/formatters/samplecode/ruff-isort/in.py | 20 +++++++++++++++ test/formatters/samplecode/ruff-isort/out.py | 26 ++++++++++++++++++++ 5 files changed, 56 insertions(+) create mode 100644 test/formatters/installers/ruff-isort.bash create mode 100644 test/formatters/samplecode/ruff-isort/in.py create mode 100644 test/formatters/samplecode/ruff-isort/out.py diff --git a/CHANGELOG.md b/CHANGELOG.md index d0e7a56..33e52b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ The format is based on [Keep a Changelog]. for JSON ([#257]). * [`robotidy`](https://robotidy.readthedocs.io) for Robot Framework files ([#263]). +* [`ruff-isort`](https://github.com/astral-sh/ruff) for [Python](https://python.org) imports using ruff ([#279]). * [denofmt](https://docs.deno.com/runtime/manual/tools/formatter) for js, jsx, ts, tsx, json, jsonc, md files. ([#264]) * [docformatter](https://github.com/PyCQA/docformatter) for Python docstrings ([#267]) @@ -51,6 +52,7 @@ The format is based on [Keep a Changelog]. [#271]: https://github.com/radian-software/apheleia/pull/271 [#274]: https://github.com/radian-software/apheleia/issues/274 [#275]: https://github.com/radian-software/apheleia/pull/275 +[#279]: https://github.com/radian-software/apheleia/pull/279 ## 4.0 (released 2023-11-23) ### Breaking changes diff --git a/apheleia-formatters.el b/apheleia-formatters.el index a9c08b4..0e56ae8 100644 --- a/apheleia-formatters.el +++ b/apheleia-formatters.el @@ -167,6 +167,12 @@ (apheleia-formatters-fill-column "--line-length") "--stdin-filename" filepath "-")) + (ruff-isort . ("ruff" "check" + "-n" + "--select" "I" + "--fix" "--fix-only" + "--stdin-filename" filepath + "-")) (shfmt . ("shfmt" "-filename" filepath "-ln" (cl-case (bound-and-true-p sh-shell) diff --git a/test/formatters/installers/ruff-isort.bash b/test/formatters/installers/ruff-isort.bash new file mode 100644 index 0000000..9f5bf1a --- /dev/null +++ b/test/formatters/installers/ruff-isort.bash @@ -0,0 +1,2 @@ +apt-get install -y python3-pip +pip install ruff diff --git a/test/formatters/samplecode/ruff-isort/in.py b/test/formatters/samplecode/ruff-isort/in.py new file mode 100644 index 0000000..5bd6f7f --- /dev/null +++ b/test/formatters/samplecode/ruff-isort/in.py @@ -0,0 +1,20 @@ +from my_lib import Object + +import os + +from my_lib import Object3 + +from my_lib import Object2 + +import sys + +from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14 + +import sys + +from __future__ import absolute_import + +from third_party import lib3 + +print("Hey") +print("yo") diff --git a/test/formatters/samplecode/ruff-isort/out.py b/test/formatters/samplecode/ruff-isort/out.py new file mode 100644 index 0000000..f1d5c1c --- /dev/null +++ b/test/formatters/samplecode/ruff-isort/out.py @@ -0,0 +1,26 @@ +from __future__ import absolute_import + +import os +import sys + +from my_lib import Object, Object2, Object3 +from third_party import ( + lib1, + lib2, + lib3, + lib4, + lib5, + lib6, + lib7, + lib8, + lib9, + lib10, + lib11, + lib12, + lib13, + lib14, + lib15, +) + +print("Hey") +print("yo")