fix(lint): remove FBT001/FBT002/FBT003 and ARG001/ARG002 from global ignores

FBT001/FBT002 fixes:
- Make boolean params keyword-only with *, syntax in:
  - stockfish_analysis/analyze_chess_game.py: pov_white
  - lichess_bot/main.py: decline_correspondence
  - screen_locker/screen_lock.py: demo_mode
- Update call sites to use keyword arguments

ARG001/ARG002 fixes:
- Prefix unused params with underscore:
  - extractLinks/main.py: tag -> _tag
  - lichess_bot/lichess_api.py: game_id -> _game_id
  - lichess_bot/tests/conftest.py: config -> _config

FBT003 per-file ignores (external API calls):
- PYTHON/keyboardCoop/main.py: pygame.font.render
- PYTHON/screen_locker/screen_lock.py: tkinter API
- poker-modifier-app/poker_modifier_app.py: tkinter API
This commit is contained in:
Krzysztof kuhy Rudnicki 2025-11-30 16:23:16 +01:00
parent 9576b20d6c
commit 4da77b6cfe
7 changed files with 16 additions and 12 deletions

View File

@ -25,7 +25,7 @@ class _HrefParser(HTMLParser):
self.hrefs: list[str] = []
def handle_starttag( # type: ignore[override]
self, tag: str, attrs: list[tuple[str, str | None]]
self, _tag: str, attrs: list[tuple[str, str | None]]
) -> None:
"""Collect href attributes from start tags."""
for k, v in attrs:

View File

@ -176,7 +176,7 @@ class LichessAPI:
r = self._request("POST", url, timeout=30)
r.raise_for_status()
def get_game_state(self, game_id: str) -> dict | None:
def get_game_state(self, _game_id: str) -> dict | None:
"""Deprecated: use stream_game_events in a persistent loop."""
return None

View File

@ -17,7 +17,7 @@ from PYTHON.lichess_bot.lichess_api import LichessAPI
from PYTHON.lichess_bot.utils import backoff_sleep, get_and_increment_version
def run_bot(log_level: str = "INFO", decline_correspondence: bool = False) -> None:
def run_bot(log_level: str = "INFO", *, decline_correspondence: bool = False) -> None:
"""Start the bot and listen for incoming events."""
logging.basicConfig(
level=getattr(logging, log_level.upper(), logging.INFO),
@ -465,7 +465,7 @@ def main() -> None:
help="Decline correspondence challenges",
)
args = parser.parse_args()
run_bot(args.log_level, args.decline_correspondence)
run_bot(args.log_level, decline_correspondence=args.decline_correspondence)
if __name__ == "__main__":

View File

@ -11,7 +11,7 @@ if ROOT not in sys.path:
sys.path.insert(0, ROOT)
def pytest_ignore_collect(collection_path: Path, config: pytest.Config) -> bool | None:
def pytest_ignore_collect(collection_path: Path, _config: pytest.Config) -> bool | None:
"""Ignore per-game blunder test files; keep only the unified one.
This lets us keep historical files in the repo without collecting them.

View File

@ -26,7 +26,7 @@ MAX_WEIGHT_KG = 500
class ScreenLocker:
"""Screen locker that requires workout logging to unlock."""
def __init__(self, demo_mode: bool = True) -> None:
def __init__(self, *, demo_mode: bool = True) -> None:
"""Initialize screen locker with optional demo mode."""
# Set up log file path
script_dir = os.path.dirname(os.path.abspath(__file__))

View File

@ -86,7 +86,7 @@ def extract_pgn_text(raw: str) -> str | None:
def score_to_cp(
score: chess.engine.PovScore, pov_white: bool
score: chess.engine.PovScore, *, pov_white: bool
) -> tuple[int | None, int | None]:
"""Return tuple (cp, mate_in) from a PovScore for the given POV color.

View File

@ -39,11 +39,6 @@ ignore = [
"BLE001", # Blind except - will fix critical ones manually
"S603", # subprocess without shell - known pattern
"S607", # start-process with partial path - acceptable
"FBT001", # Boolean positional arg - common pattern
"FBT002", # Boolean default value - common pattern
"FBT003", # Boolean positional value - common pattern
"ARG001", # Unused function argument - often needed for API compatibility
"ARG002", # Unused method argument - often needed for API compatibility
"N803", # invalid-argument-name - chess notation uses uppercase
"N999", # invalid-module-name - PYTHON folder name
"LOG015", # root-logger-call - common in scripts
@ -99,6 +94,15 @@ unfixable = []
"PYTHON/randomize_numbers/random_digits.py" = [
"PERF203", # Try-except needed for parsing user input in loop
]
"PYTHON/keyboardCoop/main.py" = [
"FBT003", # Boolean positional values in pygame API calls (e.g., font.render)
]
"PYTHON/screen_locker/screen_lock.py" = [
"FBT003", # Boolean positional values in tkinter API calls
]
"poker-modifier-app/poker_modifier_app.py" = [
"FBT003", # Boolean positional values in tkinter API calls
]
[tool.ruff.lint.pydocstyle]
convention = "google" # Use Google docstring convention