[Code Quality] Мёртвый и избыточный код: двойная проверка пустого результата в cli.py, недостижимая ветка в xlsx.py #63

Closed
opened 2026-07-16 18:25:03 +07:00 by artem.kokos · 0 comments
Owner

Проблема

1. Избыточная проверка is None в CLI (redmine_reporter/cli.py:396-402):

if issue_hours is None:
    ...
    return 0
if not issue_hours:
    ...
    return 0

fetch_issues_with_spent_time() возвращает либо None (нет time entries), либо список (возможно пустой — если ни одна задача не вернулась из issue.filter). Оба случая полностью покрываются второй проверкой if not issue_hours; сообщения в обеих ветках идентичны. Первая ветка — мёртвый дубль.

2. Недостижимая ветка в XLSX (redmine_reporter/formatters/xlsx.py:41-45):

ws = wb.active
if ws is None:
    ws = wb.create_sheet("Report")

У новой openpyxl.Workbook() всегда есть активный лист («Sheet»), поэтому wb.active никогда не бывает None. Проверено экспериментом: Workbook().active is NoneFalse.

3. Мелочи (опционально, тем же PR):

  • Локальные импорты внутри функций (cli.py:524from datetime import datetime as dt_mod, а также в yaml_config.py, config.py) — вынести в шапку модулей, если нет осознанной причины для ленивого импорта.
  • except Exception без конкретики в нескольких местах — сузить типы исключений там, где это безопасно.

Рекомендации

  1. Объединить проверки в cli.py в одну if not issue_hours (текст сообщения сохранить).
  2. Убрать проверку ws is None в xlsx.py (либо заменить на assert с поясняющим комментарием).
  3. После изменений прогнать pytest (все 277 тестов должны остаться зелёными), ruff check, mypy.

Связанные места

  • redmine_reporter/cli.py:396-402, redmine_reporter/cli.py:524
  • redmine_reporter/formatters/xlsx.py:41-45

Критерии приёмки

  • Мёртвые ветки удалены, поведение не изменилось.
  • Все тесты, линтер и mypy зелёные.
## Проблема **1. Избыточная проверка `is None` в CLI** (`redmine_reporter/cli.py:396-402`): ```python if issue_hours is None: ... return 0 if not issue_hours: ... return 0 ``` `fetch_issues_with_spent_time()` возвращает либо `None` (нет time entries), либо список (возможно пустой — если ни одна задача не вернулась из `issue.filter`). Оба случая полностью покрываются второй проверкой `if not issue_hours`; сообщения в обеих ветках идентичны. Первая ветка — мёртвый дубль. **2. Недостижимая ветка в XLSX** (`redmine_reporter/formatters/xlsx.py:41-45`): ```python ws = wb.active if ws is None: ws = wb.create_sheet("Report") ``` У новой `openpyxl.Workbook()` всегда есть активный лист («Sheet»), поэтому `wb.active` никогда не бывает `None`. Проверено экспериментом: `Workbook().active is None` → `False`. **3. Мелочи (опционально, тем же PR):** - Локальные импорты внутри функций (`cli.py:524` — `from datetime import datetime as dt_mod`, а также в `yaml_config.py`, `config.py`) — вынести в шапку модулей, если нет осознанной причины для ленивого импорта. - `except Exception` без конкретики в нескольких местах — сузить типы исключений там, где это безопасно. ## Рекомендации 1. Объединить проверки в `cli.py` в одну `if not issue_hours` (текст сообщения сохранить). 2. Убрать проверку `ws is None` в `xlsx.py` (либо заменить на `assert` с поясняющим комментарием). 3. После изменений прогнать `pytest` (все 277 тестов должны остаться зелёными), `ruff check`, `mypy`. ## Связанные места - `redmine_reporter/cli.py:396-402`, `redmine_reporter/cli.py:524` - `redmine_reporter/formatters/xlsx.py:41-45` ## Критерии приёмки - [ ] Мёртвые ветки удалены, поведение не изменилось. - [ ] Все тесты, линтер и mypy зелёные.
artem.kokos added the refactoring label 2026-07-16 18:25:03 +07:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#63