[PATCH v2 03/14] Add ruff import checks to b4 CI

Tamir Duberstein <[email protected]>
Newsgroups org.kernel.linux.tools
Message-ID <[email protected]>
Run ruff as part of the b4 CI check script and enable import sorting in
Ruff so import ordering regressions show up in the review UI.

Keep Ruff as a subprocess and document the related upstream API
limitation.

Signed-off-by: Tamir Duberstein <[email protected]>
---
 ci.sh                      | 1 +
 pyproject.toml             | 4 ++--
 src/liblore/__init__.py    | 1 -
 src/liblore/node.py        | 3 +--
 src/liblore/utils.py       | 3 +--
 tests/conftest.py          | 3 +--
 tests/test_auth_headers.py | 1 -
 tests/test_email_utils.py  | 1 -
 tests/test_formatting.py   | 3 +--
 tests/test_mbox.py         | 4 +---
 tests/test_node.py         | 1 -
 11 files changed, 8 insertions(+), 17 deletions(-)

diff --git a/ci.sh b/ci.sh
index 1e8ccb3..3001db2 100755
--- a/ci.sh
+++ b/ci.sh
@@ -2,5 +2,6 @@
 
 set -eu
 
+uv run ruff check
 uv run mypy .
 uv run pytest --durations=0
diff --git a/pyproject.toml b/pyproject.toml
index 7c9e1da..38be519 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -57,5 +57,5 @@ strict = true
 module = "authheaders"
 ignore_missing_imports = true
 
-[tool.ruff]
-target-version = "py39"
+[tool.ruff.lint]
+extend-select = ["I"]
diff --git a/src/liblore/__init__.py b/src/liblore/__init__.py
index ff4314a..1ffaaeb 100644
--- a/src/liblore/__init__.py
+++ b/src/liblore/__init__.py
@@ -3,7 +3,6 @@
 """liblore — shared library for public-inbox / lore.kernel.org access."""
 import email.charset
 import email.policy
-
 from email.message import EmailMessage
 
 __version__ = '0.7.1'
diff --git a/src/liblore/node.py b/src/liblore/node.py
index 5fb6343..66da1d7 100644
--- a/src/liblore/node.py
+++ b/src/liblore/node.py
@@ -15,11 +15,10 @@ import time
 import types
 import urllib.parse
 from datetime import datetime, timezone
+from email.message import EmailMessage
 
 import requests
 
-from email.message import EmailMessage
-
 from liblore import LibloreError, RemoteError
 from liblore.utils import (
     get_strict_thread,
diff --git a/src/liblore/utils.py b/src/liblore/utils.py
index 8d485da..e8926c6 100644
--- a/src/liblore/utils.py
+++ b/src/liblore/utils.py
@@ -3,7 +3,6 @@
 """Message parsing, email utilities, threading, and mbox splitting."""
 from __future__ import annotations
 
-from collections.abc import Sequence
 import datetime
 import email.header
 import email.parser
@@ -14,7 +13,7 @@ import logging
 import re
 import textwrap
 import urllib.parse
-
+from collections.abc import Sequence
 from email.message import EmailMessage
 
 from liblore import emlpolicy
diff --git a/tests/conftest.py b/tests/conftest.py
index b84fc35..ec8ec80 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -4,12 +4,11 @@ from __future__ import annotations
 
 import email.utils
 import textwrap
+from email.message import EmailMessage
 from typing import Protocol
 
 import pytest
 
-from email.message import EmailMessage
-
 from liblore import emlpolicy
 
 
diff --git a/tests/test_auth_headers.py b/tests/test_auth_headers.py
index 9edf4cd..9097048 100644
--- a/tests/test_auth_headers.py
+++ b/tests/test_auth_headers.py
@@ -13,7 +13,6 @@ import pytest
 from liblore import LibloreError
 from liblore.node import LoreNode
 
-
 # =====================================================================
 # Import-time validation
 # =====================================================================
diff --git a/tests/test_email_utils.py b/tests/test_email_utils.py
index ad8775f..74216d4 100644
--- a/tests/test_email_utils.py
+++ b/tests/test_email_utils.py
@@ -16,7 +16,6 @@ from liblore.utils import (
 )
 
 
-
 class TestMsgGetSubject:
     def test_plain_subject(self, make_msg: MsgFactory) -> None:
         msg = make_msg(subject='Just a plain subject')
diff --git a/tests/test_formatting.py b/tests/test_formatting.py
index a13593e..cb3cf80 100644
--- a/tests/test_formatting.py
+++ b/tests/test_formatting.py
@@ -2,10 +2,9 @@
 """Tests for email formatting and thread minimization."""
 from __future__ import annotations
 
-import pytest
-
 from email.message import EmailMessage
 
+import pytest
 from conftest import MsgFactory
 
 from liblore.utils import (
diff --git a/tests/test_mbox.py b/tests/test_mbox.py
index 3815e3f..9bc2271 100644
--- a/tests/test_mbox.py
+++ b/tests/test_mbox.py
@@ -3,9 +3,9 @@
 from __future__ import annotations
 
 import textwrap
-
 from email.message import EmailMessage
 
+from liblore import emlpolicy
 from liblore.utils import (
     get_clean_msgid,
     get_preferred_duplicate,
@@ -15,8 +15,6 @@ from liblore.utils import (
     split_mbox_as_bytes,
 )
 
-from liblore import emlpolicy
-
 
 class TestSplitMbox:
     def test_splits_two_messages(self, sample_mbox: bytes) -> None:
diff --git a/tests/test_node.py b/tests/test_node.py
index c2e7bf3..54d76d8 100644
--- a/tests/test_node.py
+++ b/tests/test_node.py
@@ -14,7 +14,6 @@ import requests
 from liblore import RemoteError
 from liblore.node import LoreNode
 
-
 # =====================================================================
 # Session management
 # =====================================================================

-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.