CodeClone 2.0.0b1: analiza zdrowia kodu Python z uwzględnieniem baseline
CodeClone 2.0.0b1 przechodzi od prostego detektora klonów do narzędzia kontroli strukturalnego stanu projektów Python w CI. Teraz kluczowe jest porównanie z baseline — oddziela historyczny dług techniczny od nowych regresji. Obsługuje ocenę zdrowia, wykrywanie nieużywanego kodu i wyniki strukturalne z deterministycznymi kontraktami dla pipeline'ów.
Baseline jako podstawa kontraktu CI
W wersji 2.0 baseline ewoluował do walidowanego obrazu stanu projektu. Oddziela znane problemy od nowych zmian, uczestniczy w gatingu metryk i działa przewidywalnie w trybie CI.
Kluczowe zasady:
- Walidacja według schematu z semantyką trust.
- Rozdzielenie znanych vs nowych problemów dla klonów, złożoności i innych metryk.
- Zapisanie aktualnego stanu jako baseline do blokowania nowych regresji w gałęzi main.
To pozwala wprowadzać quality gate bez blokowania całego projektu przez dług techniczny.
Ocena zdrowia: rozkładalna miara jakości
Nowa ocena zdrowia agreguje kilka sygnałów:
| Metryka | Opis |
|---------------|-------------------------------|
| Klonowanie | Strukturalne duplikowanie |
| Złożoność | Złożoność funkcji |
| Powiązanie | Połączenie modułów |
| Spójność | Wewnętrzna spójność |
| Nieużywany kod | Kod nie używany |
| Zależności | Cykle zależności |
| Pokrycie testów | Pokrycie testami |
Ocena rozszerza się na szczegóły: wkład kodu produkcyjnego vs testów, obszary problemowe. Podsumowanie w raporcie HTML pokazuje miarkę, karty KPI i wykres radarowy.
Nieużywany kod bez heurystyki
Detektor nieużywanego kodu uwzględnia specyfikę Pythona: hooki frameworków, odbicie (reflection), ładowanie wtyczek. Zamiast niejawnych wykluczeń — wstawki inline:
# codeclone: ignore[dead-code]
def handle_exception(exc: Exception) -> None:
...
lub
class Middleware: # codeclone: ignore[dead-code]
...
Wyłączenie lokalne wyłącza regułę, nie wpływa na inne analizy, elementy są widoczne w raportach, ale nie wpływają na ocenę zdrowia.
Wyniki strukturalne poza klonami
Dodano warstwę wczesnych sygnałów architektonicznych:
duplicated_branches— powtarzające się gałęzie.clone_guard_exit_divergence— rozbieżności w węzłach końcowych klonów.clone_cohort_drift— drenaż rodzin podobnych konstrukcji.
Core tworzy fakty w kanonicznym formacie JSON, UI je wizualizuje bez dodatkowych rysunków.
Formaty raportów z jednego źródła
Wszystkie wyniki to projekcje kanonicznego JSON:
- HTML z podsumowaniem, zestawieniem wykonanym, rozkładem źródeł.
- JSON do skryptów.
- Text/Markdown do logów.
- SARIF z
baselineState,%SRCROOT%, artefaktami do IDE/code-scanning.
Determinizm zapewniony stabilną sortowaniem i kanonizacją danych.
Zredukowane progi i wydajność
Progi zostały złagodzone dla większego zakresu analizy:
--min-locdla funkcji: 10 zamiast 15.- Mniej surowe bariery block/segment.
Cena: wzrost objętości analizy. Kompenowany optymalizacją cache contract i report contract.
Kontrakty pod kapotą
Ścisłe specyfikacje:
- Kontrakt baseline: schemat + semantyka.
- Kontrakt cache: przewidywalność.
- Kontrakt raportu: spójność formatów.
- Kod wyjścia CLI: jasna semantyka.
Minimalizuje awarie w pipeline'ach spowodowane ukrytymi zmianami.
Co ważne
- Baseline rozdziela dług od regresji do rzeczywistego gatingu w CI.
- Ocena zdrowia rozłożona na metryki z naciskiem na kod produkcyjny.
- Wstawki inline dla nieużywanego kodu utrzymują przejrzystość analizy.
- Wyniki strukturalne wykrywają problemy przed powstawaniem klonów.
- Gotowość do SARIF do integracji z GitHub Actions, Azure DevOps.
— Editorial Team
Brak komentarzy.