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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions