diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 05398bb..d0b93d3 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,42 +1,43 @@
 repos:
   - repo: https://github.com/pre-commit/pre-commit-hooks
     rev: v4.1.0
     hooks:
       - id: trailing-whitespace
       - id: check-json
       - id: check-yaml
 
   - repo: https://gitlab.com/pycqa/flake8
     rev: 4.0.1
     hooks:
       - id: flake8
+        additional_dependencies: [flake8-bugbear==22.3.23]
 
   - repo: https://github.com/codespell-project/codespell
     rev: v2.1.0
     hooks:
       - id: codespell
         name: Check source code spelling
         stages: [commit]
       - id: codespell
         name: Check commit message spelling
         stages: [commit-msg]
 
   - repo: local
     hooks:
       - id: mypy
         name: mypy
         entry: mypy
         args: [swh]
         pass_filenames: false
         language: system
         types: [python]
 
   - repo: https://github.com/PyCQA/isort
     rev: 5.10.1
     hooks:
       - id: isort
 
   - repo: https://github.com/python/black
-    rev: 19.10b0
+    rev: 22.3.0
     hooks:
       - id: black
diff --git a/setup.cfg b/setup.cfg
index 8d79b7e..2c446b4 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,8 @@
 [flake8]
 # E203: whitespaces before ':' <https://github.com/psf/black/issues/315>
 # E231: missing whitespace after ','
+# E501: line too long, use B950 warning from flake8-bugbear instead
 # W503: line break before binary operator <https://github.com/psf/black/issues/52>
-ignore = E203,E231,W503
+select = C,E,F,W,B950
+ignore = E203,E231,E501,W503
 max-line-length = 88
diff --git a/tox.ini b/tox.ini
index 47d1062..b9438e6 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,74 +1,75 @@
 [tox]
 envlist=black,flake8,mypy,py3
 
 [testenv]
 extras =
   testing
 deps =
   pytest-cov
   swh.scheduler[testing] >= 0.5.0
   dev: pdbpp
 commands =
   pytest --cov={envsitepackagesdir}/swh/loader/svn \
       {envsitepackagesdir}/swh/loader/svn \
       --cov-branch  {posargs}
 
 [testenv:black]
 skip_install = true
 deps =
-  black==19.10b0
+  black==22.3.0
 commands =
   {envpython} -m black --check swh
 
 [testenv:flake8]
 skip_install = true
 deps =
-  flake8
+  flake8==4.0.1
+  flake8-bugbear==22.3.23
 commands =
   {envpython} -m flake8
 
 [testenv:mypy]
 extras =
   testing
 deps =
   mypy==0.920
 commands =
   mypy swh
 
 # build documentation outside swh-environment using the current
 # git HEAD of swh-docs, is executed on CI for each diff to prevent
 # breaking doc build
 [testenv:sphinx]
 whitelist_externals = make
 usedevelop = true
 extras =
   testing
 deps =
   # fetch and install swh-docs in develop mode
   -e git+https://forge.softwareheritage.org/source/swh-docs#egg=swh.docs
 
 setenv =
   SWH_PACKAGE_DOC_TOX_BUILD = 1
   # turn warnings into errors
   SPHINXOPTS = -W
 commands =
   make -I ../.tox/sphinx/src/swh-docs/swh/ -C docs
 
 
 # build documentation only inside swh-environment using local state
 # of swh-docs package
 [testenv:sphinx-dev]
 whitelist_externals = make
 usedevelop = true
 extras =
   testing
 deps =
   # install swh-docs in develop mode
   -e ../swh-docs
 
 setenv =
   SWH_PACKAGE_DOC_TOX_BUILD = 1
   # turn warnings into errors
   SPHINXOPTS = -W
 commands =
   make -I ../.tox/sphinx-dev/src/swh-docs/swh/ -C docs