Skip to content

Version 2.2.0 — Terra cognita

Choose a tag to compare

@Technologicat Technologicat released this 16 Mar 11:02
· 170 commits to master since this release

2.2.0 (16 March 2026) — Terra cognita edition

Bug fixes

  • Deterministic edge ordering — all output writers now sort edges by (source, target), making output reproducible across runs. (#77, PR #78 — thanks @aurelg)
  • DOT identifier quoting — node IDs and subgraph names in DOT output are now double-quoted, so directory names containing dashes no longer produce invalid DOT files. (#71)
  • BrokenPipeError on piped outputpyan3 now resets SIGPIPE to the default handler. (#75)
  • Crash on lambda or comprehension as default argument — default value expressions are now visited in the enclosing scope. (#61)
  • Spurious cross-module edges from wildcard expansionexpand_unknowns() now checks import relationships before expanding wildcards. (#88)
  • get_module_name mangled paths with .py in directory names (PR #97 — thanks @CannedFish)
  • resolve_imports KeyError (PR #95, PR #97 — thanks @anetczuk, @CannedFish)

New features

  • --dot-ranksep — control rank separation in GraphViz output. (PR #74 — thanks @maciejczyzewski)
  • --graphviz-layout — select layout algorithm (dot, fdp, neato, sfdp, twopi, circo). (PR #74 — thanks @maciejczyzewski)
  • --direction — filter traversal: down, up, or both. (PR #95 — thanks @anetczuk)
  • __init__ modules omitted by default in modvis — use --init to include them. (#20)
  • Directory input — passing a directory auto-globs **/*.py. (#66)
  • --concentrate — merge bidirectional edges into double-headed arrows. (#21)
  • --paths-from / --paths-to — list call paths between two functions. (#12)
  • --depth — collapse the call graph to a maximum nesting level. (#80)

Housekeeping

  • CI linter migrated from flake8 to ruff.
  • Converted to f-strings throughout.
  • Resolved all ruff lint warnings.