diff --git a/README.md b/README.md
index 60f7288f..f39d69d0 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,7 @@ This leads to some minor differences in how they are used in rules_lint.
| Language | Formatter | Linter(s) |
| ------------------------- | --------------------- | ---------------- |
-| Python | [Black] | [flake8], [ruff] |
+| Python | [ruff] | [flake8], [ruff] |
| Java | [google-java-format] | [pmd] |
| Kotlin | [ktfmt] | |
| JavaScript/TypeScript/TSX | [Prettier] | [ESLint] |
@@ -63,7 +63,6 @@ This leads to some minor differences in how they are used in rules_lint.
[prettier]: https://prettier.io
[google-java-format]: https://github.com/google/google-java-format
-[black]: https://pypi.org/project/black/
[flake8]: https://flake8.pycqa.org/en/latest/index.html
[pmd]: https://docs.pmd-code.org/latest/index.html
[buf lint]: https://buf.build/docs/lint/overview
diff --git a/docs/format.md b/docs/format.md
index 6b6b4256..4628572a 100644
--- a/docs/format.md
+++ b/docs/format.md
@@ -54,7 +54,7 @@ Produces an executable that aggregates the supplied formatter binaries
| javascript | a binary target that runs prettier | Label | optional | None
|
| jsonnet | a binary target that runs jsonnetfmt | Label | optional | None
|
| kotlin | a binary target that runs ktfmt | Label | optional | None
|
-| python | a binary target that runs black | Label | optional | None
|
+| python | a binary target that runs ruff | Label | optional | None
|
| starlark | a binary target that runs buildifier | Label | optional | None
|
| swift | a binary target that runs swiftformat | Label | optional | None
|
| terraform | a binary target that runs terraform | Label | optional | None
|
diff --git a/docs/formatting.md b/docs/formatting.md
index 1d1a31cf..497cccf5 100644
--- a/docs/formatting.md
+++ b/docs/formatting.md
@@ -15,7 +15,7 @@ load("@aspect_rules_lint//format:defs.bzl", "multi_formatter_binary")
multi_formatter_binary(
name = "format",
# register languages, e.g.
- # python = "@pip_black//:rules_python_wheel_entry_point_black",
+ # python = "//:ruff",
)
```
diff --git a/docs/ruff.md b/docs/ruff.md
index 69051992..45221fdf 100644
--- a/docs/ruff.md
+++ b/docs/ruff.md
@@ -29,7 +29,7 @@ A repository macro used from WORKSPACE to fetch ruff binaries
| Name | Description | Default Value |
| :------------- | :------------- | :------------- |
-| version | a version of ruff that we have mirrored, e.g. v0.1.0
| "v0.1.0"
|
+| version | a version of ruff that we have mirrored, e.g. v0.1.0
| "v0.1.2"
|
diff --git a/example/BUILD.bazel b/example/BUILD.bazel
index a9395cd2..778d12d7 100644
--- a/example/BUILD.bazel
+++ b/example/BUILD.bazel
@@ -50,17 +50,5 @@ java_binary(
runtime_deps = ["@net_sourceforge_pmd"],
)
-# We can test that it works with:
-# bazel run :ruff -- help
-native_binary(
- name = "ruff",
- src = select({
- "@platforms//os:osx": "@ruff_aarch64-apple-darwin//:ruff",
- "//conditions:default": "@ruff_x86_64-unknown-linux-gnu//:ruff",
- }),
- out = "ruff",
- visibility = ["//visibility:public"],
-)
-
# bazel run :shellcheck -- --help
shellcheck_binary(name = "shellcheck")
diff --git a/example/requirements.in b/example/requirements.in
index 4e92b9de..39304807 100644
--- a/example/requirements.in
+++ b/example/requirements.in
@@ -1,2 +1 @@
-black
flake8
diff --git a/example/requirements.txt b/example/requirements.txt
index 1b9f501b..629326b6 100644
--- a/example/requirements.txt
+++ b/example/requirements.txt
@@ -4,34 +4,6 @@
#
# bazel run //:requirements.update
#
-black==23.9.1 \
- --hash=sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f \
- --hash=sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7 \
- --hash=sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100 \
- --hash=sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573 \
- --hash=sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d \
- --hash=sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f \
- --hash=sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9 \
- --hash=sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300 \
- --hash=sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948 \
- --hash=sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325 \
- --hash=sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9 \
- --hash=sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71 \
- --hash=sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186 \
- --hash=sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f \
- --hash=sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe \
- --hash=sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855 \
- --hash=sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80 \
- --hash=sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393 \
- --hash=sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c \
- --hash=sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204 \
- --hash=sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377 \
- --hash=sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301
- # via -r requirements.in
-click==8.1.7 \
- --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
- --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
- # via black
flake8==6.1.0 \
--hash=sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23 \
--hash=sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5
@@ -40,22 +12,6 @@ mccabe==0.7.0 \
--hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \
--hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e
# via flake8
-mypy-extensions==1.0.0 \
- --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \
- --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782
- # via black
-packaging==23.2 \
- --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \
- --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7
- # via black
-pathspec==0.11.2 \
- --hash=sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20 \
- --hash=sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3
- # via black
-platformdirs==3.11.0 \
- --hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \
- --hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e
- # via black
pycodestyle==2.11.0 \
--hash=sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0 \
--hash=sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8
@@ -64,11 +20,3 @@ pyflakes==3.1.0 \
--hash=sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774 \
--hash=sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc
# via flake8
-tomli==2.0.1 \
- --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
- --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
- # via black
-typing-extensions==4.8.0 \
- --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
- --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
- # via black
diff --git a/example/tools/BUILD b/example/tools/BUILD
index 4e111661..d05d0a24 100644
--- a/example/tools/BUILD
+++ b/example/tools/BUILD
@@ -29,10 +29,14 @@ alias(
}),
)
-# bazel run :black -- --help
-py_console_script_binary(
- name = "black",
- pkg = "@pip//black:pkg",
+alias(
+ name = "ruff",
+ actual = select({
+ "@bazel_tools//src/conditions:linux_x86_64": "@ruff_x86_64-unknown-linux-gnu//:ruff",
+ "@bazel_tools//src/conditions:linux_aarch64": "@ruff_aarch64-unknown-linux-gnu//:ruff",
+ "@bazel_tools//src/conditions:darwin_arm64": "@ruff_aarch64-apple-darwin//:ruff",
+ "@bazel_tools//src/conditions:darwin_x86_64": "@ruff_x86_64-apple-darwin//:ruff",
+ }),
)
prettier.prettier_binary(
@@ -77,7 +81,7 @@ multi_formatter_binary(
javascript = ":prettier",
jsonnet = ":jsonnetfmt",
kotlin = ":ktfmt",
- python = ":black",
+ python = ":ruff",
starlark = "@buildifier_prebuilt//:buildifier",
swift = ":swiftformat",
terraform = ":terraform",
diff --git a/example/tools/lint.bzl b/example/tools/lint.bzl
index e4f6382f..876b9f6d 100644
--- a/example/tools/lint.bzl
+++ b/example/tools/lint.bzl
@@ -34,7 +34,7 @@ pmd = pmd_aspect(
pmd_test = make_lint_test(aspect = pmd)
ruff = ruff_aspect(
- binary = "@@//:ruff",
+ binary = "@@//tools:ruff",
config = "@@//:.ruff.toml",
)
diff --git a/format/private/format.sh b/format/private/format.sh
index 93d637bd..dab317c1 100755
--- a/format/private/format.sh
+++ b/format/private/format.sh
@@ -49,7 +49,7 @@ case "$mode" in
check)
swiftmode="--lint"
prettiermode="--check"
- blackmode="--check"
+ ruffmode="format --check"
javamode="--set-exit-if-changed --dry-run"
ktmode="--set-exit-if-changed --dry-run"
gofmtmode="-l"
@@ -61,7 +61,7 @@ case "$mode" in
fix)
swiftmode=""
prettiermode="--write"
- blackmode=""
+ ruffmode="format"
javamode="--replace"
ktmode=""
gofmtmode="-w"
@@ -100,10 +100,10 @@ if [ "$#" -eq 0 ]; then
else
files=$(find "$@" -name '*.py' -or -name '*.pyi')
fi
-bin=$(rlocation {{black}})
+bin=$(rlocation {{ruff}})
if [ -n "$files" ] && [ -n "$bin" ]; then
- echo "Running black..."
- echo "$files" | tr \\n \\0 | xargs -0 $bin $blackmode
+ echo "Running ruff..."
+ echo "$files" | tr \\n \\0 | xargs -0 $bin $ruffmode
fi
if [ "$#" -eq 0 ]; then
diff --git a/format/private/formatter_binary.bzl b/format/private/formatter_binary.bzl
index 506a835b..cb070ce2 100644
--- a/format/private/formatter_binary.bzl
+++ b/format/private/formatter_binary.bzl
@@ -4,7 +4,7 @@ load("@aspect_bazel_lib//lib:paths.bzl", "to_rlocation_path")
_attrs = {
"javascript": attr.label(doc = "a binary target that runs prettier", executable = True, cfg = "exec", allow_files = True),
- "python": attr.label(doc = "a binary target that runs black", executable = True, cfg = "exec", allow_files = True),
+ "python": attr.label(doc = "a binary target that runs ruff", executable = True, cfg = "exec", allow_files = True),
"starlark": attr.label(doc = "a binary target that runs buildifier", executable = True, cfg = "exec", allow_files = True),
"jsonnet": attr.label(doc = "a binary target that runs jsonnetfmt", executable = True, cfg = "exec", allow_files = True),
"terraform": attr.label(doc = "a binary target that runs terraform", executable = True, cfg = "exec", allow_files = True),
@@ -20,7 +20,7 @@ def _formatter_binary_impl(ctx):
# We need to fill in the rlocation paths in the shell script
substitutions = {}
tools = {
- "black": ctx.attr.python,
+ "ruff": ctx.attr.python,
"buildifier": ctx.attr.starlark,
"jsonnetfmt": ctx.attr.jsonnet,
"terraform": ctx.attr.terraform,
diff --git a/lint/ruff.bzl b/lint/ruff.bzl
index 54d07e16..92da19ce 100644
--- a/lint/ruff.bzl
+++ b/lint/ruff.bzl
@@ -98,42 +98,42 @@ def ruff_aspect(binary, config):
# Generated by running ./mirror_ruff.sh
RUFF_VERSIONS = {
- "v0.1.0": {
- "aarch64-apple-darwin": "2e4e91d65d9453705753c0a80d773e2e613f07db7ba75b94edd12eef0e8e268d",
- "aarch64-pc-windows-msvc": "a2f66624f000c30c0768ddf2ca55c7437181fdcf937ead004cb7ef8504da2fd5",
- "aarch64-unknown-linux-gnu": "63bf7d3eec474d4ee32fac3fd396f6fabb992328eb3fdc22f68ca3c7bdfcb8ee",
- "aarch64-unknown-linux-musl": "fba0010be960178866c98c987ab5b6c639c68ccc8f062fc6287c4076ed13b42a",
- "armv7-unknown-linux-gnueabihf": "a888123359edb40d08d406ed00c9d378ec1c8a033352ae8dd88fef59fe25f354",
- "armv7-unknown-linux-musleabihf": "94ca8c41c8e4c7a75305beb75bd2f594b428228fbcc335607f69695c8a6efdf5",
- "i686-pc-windows-msvc": "2c9e7dde93a1d2d458f03c98dbf4c0de1630d1a41a82bbaf6d91d4ffe7114523",
- "i686-unknown-linux-gnu": "582fdf2c2fe63be823a4bb6078a88c7e3e13b4146ee94df523a06224cd417d06",
- "i686-unknown-linux-musl": "c6e281540dc628b789aee96cd31c219025b32430edb2544f5e75ddcf44d95e61",
- "powerpc64-unknown-linux-gnu": "d4f4f4e8675879e01086667319955a5a36d0183fe8a86227f658f5fb01936bb1",
- "powerpc64le-unknown-linux-gnu": "076cc6973de196d05673f6671f68ee4110e1475fc8cb2cbbae09aad688ed7c82",
- "s390x-unknown-linux-gnu": "31061944ad922b7aa2cc4f7fae5a4a29abb72d5ee64538f0297eec5f20fcc4dd",
- "x86_64-apple-darwin": "f7d89c2f6b9b62ffd8f1ec0f5f9344a338acf560971b8a1ba22a2a65c94d1920",
- "x86_64-pc-windows-msvc": "a6974efb00ff6b162927691e616b45223195444a1fc28886ded8faca825312be",
- "x86_64-unknown-linux-gnu": "4d669faf7d0964cde56589ad626f45a27ca41f2c91671b3a5aafb5d1c7bcd2e1",
- "x86_64-unknown-linux-musl": "867bf01477096ae8a2b20758e189fe8fa8f0b53a6b8d090066724bc37d6df61e",
- },
- "v0.0.292": {
- "aarch64-apple-darwin": "70807eaab0f081ba0fd17fde56e860faa7bfb4a938bcadd829eb96d648eca8ac",
- "aarch64-pc-windows-msvc": "bbdf4aa474899196290734f45dabebc4faf796039367125c171ec017f7bcfa85",
- "aarch64-unknown-linux-gnu": "08b842e3cfe3c60e50ff0ebc07cf099b8fd0d881e3d40bd89b3a6d7722a058e2",
- "aarch64-unknown-linux-musl": "7dd8e7aacfb7217bd672efec59aa55711fad36b149181d6eb23468fab3f74c40",
- "armv7-unknown-linux-gnueabihf": "476c62c7a844fac476311f34ccdf194e9d77059d098352459490783825e293e7",
- "armv7-unknown-linux-musleabihf": "a28175dfe75d38f54c39df92f16c4ba4ff84a4e5a9b81351c91246ab0f6af1f4",
- "i686-pc-windows-msvc": "3dec6513e8bcbbee8a57c868acd808eb1bccd9e00b07e35c1ba70ff78fb84224",
- "i686-unknown-linux-gnu": "a7f47a1d8d599208743bfe9f4f3a96ebb65771d5923e0e68b0394c1c41bb66c0",
- "i686-unknown-linux-musl": "d7185d63840cae1a89bc63747d90f958e415bd5798a2996004481ebbd4a935bf",
- "powerpc64-unknown-linux-gnu": "7b6aa52afb3a28257825a544b0a23b1675d70c5ff9fde12dce4721c28a0e9980",
- "powerpc64le-unknown-linux-gnu": "cbf3454356b6245c8afadc7b2f02fe442c3f40c0cae7db7987f784a4559b2bee",
- "s390x-unknown-linux-gnu": "0dc6c8bd253d1f7d7fd887c9cf557c57d581989003d0bbef640d55236164f8a6",
- "x86_64-apple-darwin": "d9123a94d7d0fce2140acd7cb86f83e2b24b29d031b3a84956238e5ce2d15f42",
- "x86_64-pc-windows-msvc": "76f1fd5b40a9325a7638f0a5d1d260aa7c10b9d63456ab6d8345afa68db907fe",
- "x86_64-unknown-linux-gnu": "39a488a2e21d3bca379ba6ee2ec5cf2d641d578efb4b16c27c90272138dfa37d",
- "x86_64-unknown-linux-musl": "bb43ca7bb678bc995abbdfa005dfdd084061851c53e9c8cea9813478326eca50",
+ "v0.1.2": {
+ "aarch64-apple-darwin": "99a245e703c1d95afc9b0c2e00bd47bca6ac5c17e6cc046e58bf3f70d6536330",
+ "aarch64-pc-windows-msvc": "644390067887b8b0f1bff2805211de6bd006c97ce259760260b27da5356a7db6",
+ "aarch64-unknown-linux-gnu": "fef09ce9591c72efd1ef4ce2b0956f1edba21328e29ad865e795d16186a20a06",
+ "aarch64-unknown-linux-musl": "a96338c7e96228531a0c2cef39ebe17a215fca3346e2352a00b9f88bc25d5197",
+ "armv7-unknown-linux-gnueabihf": "a15894de509ae15eeb48d0121e08536b1b8f16855d88cccb61ecab0c9f4e537d",
+ "armv7-unknown-linux-musleabihf": "1c6bf703c489d60ae1db402508d1527292411d9c4fac5d43cf79f08e444e6167",
+ "i686-pc-windows-msvc": "aca5b93beac3a76edd7c2ea55f0e09672d2d7f85fcf5c9f4f65c252db643b5b4",
+ "i686-unknown-linux-gnu": "fa42d9559589cee38f8ac34c48ce3f9981d204fa2be48fa72945e9c1f026db8c",
+ "i686-unknown-linux-musl": "f84d9770205f3b0387ba74dbc62a47f2b234f52fc58ec0e9b8ceb0697035a6cf",
+ "powerpc64-unknown-linux-gnu": "b8731842d1d762538a8d41e49853cac4b06b827b0f762bd08e951eb47ec2129c",
+ "powerpc64le-unknown-linux-gnu": "36015e708b571465e12ecb655e8165e51ee1d7295800484b94ab21e04c2b17b1",
+ "s390x-unknown-linux-gnu": "592fc30494bf63ddb510ac929233a6fa44488273099e064fcf91efc10a3c49ab",
+ "x86_64-apple-darwin": "cb339e9684043dae3cf530bca22f532198b9f151b01812f701ed0b85fec95b0a",
+ "x86_64-pc-windows-msvc": "5e515c69653469736e76848f401d9f72b4396d8b7be2be77f748109e04542d26",
+ "x86_64-unknown-linux-gnu": "cab189b03ed0d882d45691d6cb4a7843e9d8389ba4e2e43cb4616a46ae69545b",
+ "x86_64-unknown-linux-musl": "368594d2e96a8a7e14fc610259f1c0a29fab4a84cd061a9373ce415c742df04e"
},
+ "v0.1.1": {
+ "aarch64-apple-darwin": "e2444e4c7bda7133a0c47a368993be55f7bbe3c3a68d14be83dca480fe624c5e",
+ "aarch64-pc-windows-msvc": "8eb1f83b0e3c9ddd818176fc26065b87b7cb119764c84b109c70d12dff283d21",
+ "aarch64-unknown-linux-gnu": "2d56dd602aa62e5e8185971e19c77d6df1e9f14a9190176d8f8212dcde827dde",
+ "aarch64-unknown-linux-musl": "ee1117ea3e4c32c92f598592c946bb941cca437cc0ce62bd4e86ea889a081e29",
+ "armv7-unknown-linux-gnueabihf": "f0f0b4db10954496149ddb7b6a9d7c16418f386210f3da2823904bde713ba369",
+ "armv7-unknown-linux-musleabihf": "894e6f0c5f8a8830fcddf38afa81960fb902211082ef7a1aec00637a2c6e2710",
+ "i686-pc-windows-msvc": "a6d5601c9704790409a3540d6dc6cc2a955b234f07df9553e5b4555f9b8ac7e5",
+ "i686-unknown-linux-gnu": "9617cd3a921f9d65be973482fae5b888e9e1a9617e779d7d47f3d5f2cdb5c332",
+ "i686-unknown-linux-musl": "55d574637179362a2ddf10125d0386054a0cfb3daef0943e9082a87a1a3424e6",
+ "powerpc64-unknown-linux-gnu": "143b227ace509cb0a2e2411a5675935d67910f7a280f35931e112e137dc3b894",
+ "powerpc64le-unknown-linux-gnu": "94158cc4d4208b29962a6be2245fa391ce158673c4e8c8baa5e9f592c080dc29",
+ "s390x-unknown-linux-gnu": "22dcfb5338e546713b86acc1c25d0c11bb72175df652bbd0ad58082c4e273b8b",
+ "x86_64-apple-darwin": "da0e3156387a419db6c123fd7d009d7f6153dfb631a17e7aa1551f4d6aec5c7a",
+ "x86_64-pc-windows-msvc": "080877770e3494637a01cca05e88ed9a5a450f6129b90053e7f3014ce761f178",
+ "x86_64-unknown-linux-gnu": "0f70840c8c10ac8013f734e76977494311b7264a12782bc95be5f9d2e1414176",
+ "x86_64-unknown-linux-musl": "2b5555abb21598969be862a05101f35079ff6c72466d74eb22f9a1c773d646d0"
+ }
}
def fetch_ruff(version = RUFF_VERSIONS.keys()[0]):