Skip to content

Code quality analysis: httpie/cli static recon findings — definition.py (956 lines), 17% doc coverage #1826

@atomadictech

Description

@atomadictech

Overview

I ran ASS-ADE (pure static analysis, no LLM, < 2 seconds) on httpie and found a few things worth flagging. Opened a companion PR (#1825) with the full reports — sharing the findings here as an issue so they can be tracked and discussed independently of the PR.

Top findings

1. httpie/cli/definition.py — 956 lines, mixed responsibilities

This file combines:

  • Constant/enum declarations (belongs in constants.py)
  • Argument group builder functions (could be groups.py)
  • Top-level ParserSpec composition (the actual "definition")

At 956 lines, it's hard to navigate and test each responsibility in isolation. Splitting it into 2-3 files with a single responsibility each wouldn't change any public API.

2. Documentation coverage — 17%

Only 189 of 1,107 public callables have docstrings. The files with the most external call surface and no docs:

  • httpie/cli/argtypes.py (275 lines, type converters)
  • httpie/cli/options.py (249 lines, ParserSpec / Qualifiers)

3. Circular imports in output/

Two import cycles detected:

  • client.py → context.py → output/utils.py (possible false positive — worth verifying)
  • Self-referential import in output/formatters/xml.py

4. 66 untested modules

Most are in docs/, extras/, and tooling scripts — not the core library. The ratio for the core httpie/ package itself is better.

Recon summary

Files: 265 (135 source)
Circular deps: 2
Doc coverage: 17% (189/1107)
Untested modules: 66
Tier violations: 3 files spanning multiple layers

Tool

ASS-ADEass-ade recon <path>. Runs locally in about 1.5 seconds, no external calls. The full RECON_REPORT.md is in the companion PR.

No action required — just sharing in case any of this is useful for future work. Happy to run a follow-up analysis on a specific module if it would help.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions