diff --git a/pyproject.toml b/pyproject.toml
index 3281441534..37b9ab3a77 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -40,6 +40,46 @@ target-version = ['py37', 'py38', 'py39', 'py310']
# https://black.readthedocs.io/en/stable/usage_and_configuration/file_collection_and_discovery.html#gitignore
# Use `extend-exclude` if you want to exclude something in addition to this.
+[tool.ruff]
+line-length = 88
+
+# See https://github.com/charliermarsh/ruff/#pycodestyle
+# for error codes. The ones we ignore are:
+# E731: do not assign a lambda expression, use a def
+# E501: Line too long (black enforces this for us)
+#
+# See https://github.com/charliermarsh/ruff/#pyflakes
+# F401: unused import
+# F811: Redefinition of unused
+# F821: Undefined name
+#
+# flake8-bugbear compatible checks. Its error codes are described at
+# https://github.com/charliermarsh/ruff/#flake8-bugbear
+# B019: Use of functools.lru_cache or functools.cache on methods can lead to memory leaks
+# B023: Functions defined inside a loop must not use variables redefined in the loop
+# B024: Abstract base class with no abstract method.
+ignore = [
+ "B019",
+ "B023",
+ "B024",
+ "E501",
+ "E731",
+ "F401",
+ "F811",
+ "F821",
+]
+select = [
+ # pycodestyle checks.
+ "E",
+ "W",
+ # pyflakes checks.
+ "F",
+ # flake8-bugbear checks.
+ "B0",
+ # flake8-comprehensions checks.
+ "C4",
+]
+
[tool.isort]
line_length = 88
sections = ["FUTURE", "STDLIB", "THIRDPARTY", "TWISTED", "FIRSTPARTY", "TESTS", "LOCALFOLDER"]
@@ -274,12 +314,10 @@ all = [
]
[tool.poetry.dev-dependencies]
-## We pin black so that our tests don't start failing on new releases.
+# We pin black so that our tests don't start failing on new releases.
isort = ">=5.10.1"
black = ">=22.3.0"
-flake8-comprehensions = "*"
-flake8-bugbear = ">=21.3.2"
-flake8 = "*"
+ruff = "0.0.189"
# Typechecking
mypy = "*"
|