{
  "command": "code-ranker report . --git.branch=main --git.commit=62f87cc7a1e28d47d6f171d9f2feb73836f50235 --git.dirty-files=0 --git.origin=https://github.com/ffedoroff/code-ranker --output.html.path=site/index.html --output.json.path=site/report.json",
  "config_file": "/home/runner/work/code-ranker/code-ranker/code-ranker.toml",
  "generated_at": "2026-06-11T15:17:00.172034526Z",
  "git": {
    "branch": "main",
    "commit": "62f87cc7a1e28d47d6f171d9f2feb73836f50235",
    "dirty_files": 0,
    "origin": "https://github.com/ffedoroff/code-ranker"
  },
  "graphs": {
    "files": {
      "attribute_groups": {
        "complexity": {
          "description": "Code complexity metrics",
          "label": "Complexity"
        },
        "coupling": {
          "description": "Internal coupling (Henry-Kafura)",
          "label": "Coupling"
        },
        "halstead": {
          "description": "Halstead software metrics",
          "label": "Halstead"
        },
        "loc": {
          "description": "Lines of code breakdown",
          "label": "Lines of Code"
        },
        "maintainability": {
          "description": "Maintainability index",
          "label": "Maintainability"
        }
      },
      "cycle_kinds": {},
      "cycles": [],
      "edge_attributes": {
        "visibility": {
          "label": "Visibility",
          "value_type": "str"
        }
      },
      "edge_kinds": {
        "contains": {
          "description": "Module ownership — the parent declares the child module (`mod foo;` / `pub mod foo;`), so `foo.rs` (or `foo/mod.rs`) belongs to it.<br>This is the Rust module tree: structure, not a code dependency.<br>Kept in the data but not drawn on the main map, and excluded from fan-in / fan-out / HK / cycles.",
          "flow": false,
          "label": "contains"
        },
        "reexports": {
          "description": "Re-export (`pub use foo::Item;`) — re-publishes another file's item as part of this file's public API (the crate-root / prelude facade, e.g. `lib.rs` doing `pub use access_scope::AccessScope;`).<br>A facade, not a dependency: excluded from fan-in / fan-out / HK / cycles and not drawn on the main map, like `contains`.<br>A consumer's `use this_crate::Item` is attributed to the file that defines `Item`, so re-export hubs (`lib.rs` / `mod.rs`) collect no false coupling — the `pub use` is still recorded here so you can see what a file exposes.",
          "flow": false,
          "label": "reexport"
        },
        "uses": {
          "description": "Code dependency — this file references an item the target file defines.<br>Captured from `use path::Item;`, a qualified path (`crate::a::Item`, `other_crate::Item`), or a derive (`#[derive(serde::Serialize)]`).<br>The path resolves to the file that defines the item (following `pub use` re-exports), so the edge points at the definition, not a re-export hub.<br>This is the real dependency: it counts toward fan-in / fan-out, Henry-Kafura coupling and cycles.",
          "flow": true,
          "label": "uses"
        }
      },
      "edges": [
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/analyze.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/analyze.rs",
          "target": "ext:serde_json"
        },
        {
          "kind": "uses",
          "line": 5,
          "source": "{target}/crates/code-ranker-cli/src/analyze.rs",
          "target": "{target}/crates/code-ranker-cli/src/cli.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/analyze.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/mod.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/analyze.rs",
          "target": "{target}/crates/code-ranker-cli/src/pipeline.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-cli/src/analyze.rs",
          "target": "{target}/crates/code-ranker-graph/src/snapshot.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/analyze.rs",
          "target": "{target}/crates/code-ranker-viewer/src/lib.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/check.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/check.rs",
          "target": "ext:serde_json"
        },
        {
          "kind": "uses",
          "line": 5,
          "source": "{target}/crates/code-ranker-cli/src/check.rs",
          "target": "{target}/crates/code-ranker-cli/src/analyze.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/check.rs",
          "target": "{target}/crates/code-ranker-cli/src/cli.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/check.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/mod.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-cli/src/check.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/check.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/check.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/cli.rs",
          "target": "ext:clap"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "line": 8,
          "source": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "target": "ext:globset"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "target": "ext:serde_json"
        },
        {
          "kind": "uses",
          "line": 5,
          "source": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/model.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/log.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/config/load.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/config/load.rs",
          "target": "ext:toml"
        },
        {
          "kind": "uses",
          "line": 4,
          "source": "{target}/crates/code-ranker-cli/src/config/load.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/model.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/config/load.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/log.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/ignore.rs"
        },
        {
          "kind": "reexports",
          "line": 13,
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/load.rs"
        },
        {
          "kind": "reexports",
          "line": 14,
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/load.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/model.rs"
        },
        {
          "kind": "reexports",
          "line": 15,
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/model.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/rules.rs"
        },
        {
          "kind": "reexports",
          "line": 16,
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/rules.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/violations.rs"
        },
        {
          "kind": "reexports",
          "line": 17,
          "source": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "visibility": "public"
        },
        {
          "kind": "uses",
          "line": 4,
          "source": "{target}/crates/code-ranker-cli/src/config/model.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/config/model.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 4,
          "source": "{target}/crates/code-ranker-cli/src/config/rules.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/model.rs"
        },
        {
          "kind": "uses",
          "line": 5,
          "source": "{target}/crates/code-ranker-cli/src/config/rules.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/config/rules.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/config/rules.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 4,
          "source": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/ignore.rs"
        },
        {
          "kind": "uses",
          "line": 5,
          "source": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/model.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/rules.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "uses",
          "line": 8,
          "source": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 8,
          "source": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 1,
          "source": "{target}/crates/code-ranker-cli/src/git.rs",
          "target": "{target}/crates/code-ranker-graph/src/snapshot.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-cli/src/git.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/log.rs"
        },
        {
          "kind": "reexports",
          "line": 4,
          "source": "{target}/crates/code-ranker-cli/src/logger.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/log.rs",
          "visibility": "public"
        },
        {
          "kind": "uses",
          "line": 1,
          "source": "{target}/crates/code-ranker-cli/src/logger.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/log.rs"
        },
        {
          "kind": "uses",
          "line": 13,
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "line": 14,
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "ext:clap"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/analyze.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/check.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/check.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/cli.rs"
        },
        {
          "kind": "uses",
          "line": 16,
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/cli.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/mod.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/git.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/logger.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/logger.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/pipeline.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/plugin/mod.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/presets.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/recommend.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/report.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/main.rs",
          "target": "{target}/crates/code-ranker-cli/src/report.rs"
        },
        {
          "kind": "uses",
          "line": 8,
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-cli/src/cli.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/mod.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-cli/src/git.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-cli/src/logger.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-cli/src/plugin/mod.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-cli/src/presets.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-complexity/src/lib.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-graph/src/cycles.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-graph/src/finalize.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-graph/src/hk.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-graph/src/lib.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-graph/src/relativize.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-graph/src/snapshot.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-graph/src/stats.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 11,
          "source": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/plugin/mod.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/plugin/mod.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/plugin/mod.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/plugin/mod.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-cli/src/presets.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/recommend.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "line": 12,
          "source": "{target}/crates/code-ranker-cli/src/recommend.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "uses",
          "line": 13,
          "source": "{target}/crates/code-ranker-cli/src/recommend.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/recommend.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs"
        },
        {
          "kind": "uses",
          "line": 13,
          "source": "{target}/crates/code-ranker-cli/src/recommend.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "line": 13,
          "source": "{target}/crates/code-ranker-cli/src/recommend.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 13,
          "source": "{target}/crates/code-ranker-cli/src/recommend.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "line": 8,
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "ext:chrono"
        },
        {
          "kind": "uses",
          "line": 4,
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "{target}/crates/code-ranker-cli/src/analyze.rs"
        },
        {
          "kind": "uses",
          "line": 5,
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "{target}/crates/code-ranker-cli/src/cli.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "{target}/crates/code-ranker-cli/src/config/mod.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "{target}/crates/code-ranker-cli/src/logger.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "{target}/crates/code-ranker-cli/src/recommend.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "{target}/crates/code-ranker-graph/src/serialize.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "{target}/crates/code-ranker-graph/src/snapshot.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-cli/src/report.rs",
          "target": "{target}/crates/code-ranker-viewer/src/lib.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "target": "ext:proc-macro2"
        },
        {
          "kind": "uses",
          "line": 16,
          "source": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "target": "ext:rust-code-analysis-code-split"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "target": "ext:syn"
        },
        {
          "kind": "uses",
          "line": 10,
          "source": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 11,
          "source": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 11,
          "source": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 11,
          "source": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/attrs.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/attrs.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-graph/src/cycles.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/cycles.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/cycles.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-graph/src/cycles.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-graph/src/finalize.rs",
          "target": "{target}/crates/code-ranker-graph/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-graph/src/finalize.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/hk.rs",
          "target": "{target}/crates/code-ranker-graph/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 8,
          "source": "{target}/crates/code-ranker-graph/src/hk.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 8,
          "source": "{target}/crates/code-ranker-graph/src/hk.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-graph/src/hk.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 13,
          "source": "{target}/crates/code-ranker-graph/src/level_graph.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/level_graph.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/level_graph.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/level_graph.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/level_graph.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/attrs.rs"
        },
        {
          "kind": "reexports",
          "line": 22,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/attrs.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/cycles.rs"
        },
        {
          "kind": "reexports",
          "line": 23,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/cycles.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/finalize.rs"
        },
        {
          "kind": "reexports",
          "line": 24,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/finalize.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/hk.rs"
        },
        {
          "kind": "reexports",
          "line": 25,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/hk.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "reexports",
          "line": 26,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/relativize.rs"
        },
        {
          "kind": "reexports",
          "line": 27,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/relativize.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/serialize.rs"
        },
        {
          "kind": "reexports",
          "line": 28,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/serialize.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/snapshot.rs"
        },
        {
          "kind": "reexports",
          "line": 29,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/snapshot.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/stats.rs"
        },
        {
          "kind": "reexports",
          "line": 30,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/stats.rs",
          "visibility": "public"
        },
        {
          "kind": "uses",
          "line": 32,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 32,
          "source": "{target}/crates/code-ranker-graph/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-graph/src/relativize.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/relativize.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/relativize.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/relativize.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/relativize.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/serialize.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-graph/src/serialize.rs",
          "target": "ext:serde_json"
        },
        {
          "kind": "uses",
          "line": 11,
          "source": "{target}/crates/code-ranker-graph/src/snapshot.rs",
          "target": "ext:chrono"
        },
        {
          "kind": "uses",
          "line": 13,
          "source": "{target}/crates/code-ranker-graph/src/snapshot.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 10,
          "source": "{target}/crates/code-ranker-graph/src/snapshot.rs",
          "target": "{target}/crates/code-ranker-graph/src/level_graph.rs"
        },
        {
          "kind": "uses",
          "line": 12,
          "source": "{target}/crates/code-ranker-graph/src/snapshot.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-graph/src/stats.rs",
          "target": "{target}/crates/code-ranker-graph/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/stats.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-graph/src/stats.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 10,
          "source": "{target}/crates/code-ranker-plugin-api/src/attrs.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 8,
          "source": "{target}/crates/code-ranker-plugin-api/src/edge.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-plugin-api/src/edge.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-plugin-api/src/edge.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 12,
          "source": "{target}/crates/code-ranker-plugin-api/src/graph.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 10,
          "source": "{target}/crates/code-ranker-plugin-api/src/graph.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs"
        },
        {
          "kind": "uses",
          "line": 11,
          "source": "{target}/crates/code-ranker-plugin-api/src/graph.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 11,
          "source": "{target}/crates/code-ranker-plugin-api/src/level.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 10,
          "source": "{target}/crates/code-ranker-plugin-api/src/level.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "reexports",
          "line": 43,
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs"
        },
        {
          "kind": "reexports",
          "line": 44,
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "reexports",
          "line": 45,
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "reexports",
          "line": 46,
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/log.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "reexports",
          "line": 50,
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs",
          "visibility": "public"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "reexports",
          "line": 51,
          "source": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs",
          "visibility": "public"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-api/src/log.rs",
          "target": "ext:chrono"
        },
        {
          "kind": "uses",
          "line": 5,
          "source": "{target}/crates/code-ranker-plugin-api/src/node.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 4,
          "source": "{target}/crates/code-ranker-plugin-api/src/node.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 11,
          "source": "{target}/crates/code-ranker-plugin-api/src/plugin.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "line": 12,
          "source": "{target}/crates/code-ranker-plugin-api/src/plugin.rs",
          "target": "ext:serde"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-api/src/plugin.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 10,
          "source": "{target}/crates/code-ranker-plugin-api/src/plugin.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "ext:tree-sitter"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "ext:tree-sitter-javascript"
        },
        {
          "kind": "uses",
          "line": 20,
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "ext:walkdir"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/lib.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 9,
          "source": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "ext:tree-sitter"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "ext:tree-sitter-python"
        },
        {
          "kind": "uses",
          "line": 13,
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "ext:walkdir"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/lib.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "uses",
          "line": 3,
          "source": "{target}/crates/code-ranker-plugin-rust/src/crate_graph.rs",
          "target": "ext:cargo_metadata"
        },
        {
          "kind": "uses",
          "line": 1,
          "source": "{target}/crates/code-ranker-plugin-rust/src/crate_graph.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/ids.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/crate_graph.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/internal.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "ext:cargo_metadata"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "ext:which"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/attrs.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/edge.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/lib.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/log.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/node.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/crate_graph.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/crate_graph.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/ids.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/internal.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/internal.rs"
        },
        {
          "kind": "contains",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs"
        },
        {
          "kind": "uses",
          "line": 3,
          "source": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "line": 4,
          "source": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs",
          "target": "ext:cargo_metadata"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs",
          "target": "ext:proc-macro2"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs",
          "target": "ext:syn"
        },
        {
          "kind": "uses",
          "line": 1,
          "source": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/ids.rs"
        },
        {
          "kind": "uses",
          "line": 2,
          "source": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs",
          "target": "{target}/crates/code-ranker-plugin-rust/src/internal.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-plugin-typescript/src/lib.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-plugin-typescript/src/lib.rs",
          "target": "ext:tree-sitter-typescript"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-plugin-typescript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/graph.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-plugin-typescript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/level.rs"
        },
        {
          "kind": "uses",
          "line": 7,
          "source": "{target}/crates/code-ranker-plugin-typescript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-api/src/plugin.rs"
        },
        {
          "kind": "uses",
          "line": 12,
          "source": "{target}/crates/code-ranker-plugin-typescript/src/lib.rs",
          "target": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs"
        },
        {
          "kind": "uses",
          "line": 5,
          "source": "{target}/crates/code-ranker-viewer/src/lib.rs",
          "target": "ext:anyhow"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-viewer/src/lib.rs",
          "target": "ext:serde_json"
        },
        {
          "kind": "uses",
          "source": "{target}/crates/code-ranker-viewer/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/serialize.rs"
        },
        {
          "kind": "uses",
          "line": 6,
          "source": "{target}/crates/code-ranker-viewer/src/lib.rs",
          "target": "{target}/crates/code-ranker-graph/src/snapshot.rs"
        }
      ],
      "node_attributes": {
        "blank": {
          "description": "Empty or whitespace-only lines. In Rust, measured on production code only (inline `#[cfg(test)]` / `#[test]` tests are excluded, like `sloc`; their lines are `tloc`).",
          "group": "loc",
          "label": "Blank",
          "name": "Blank lines",
          "short": "Blank",
          "value_type": "int"
        },
        "bugs": {
          "calc": "effort ** (2/3) / 3000",
          "description": "Estimated delivered bugs — a rough predictor of defect density.",
          "direction": "lower_better",
          "formula": "effort^⅔ ÷ 3000",
          "group": "halstead",
          "label": "Bugs",
          "name": "Halstead bugs",
          "short": "H.bugs",
          "value_type": "float"
        },
        "cloc": {
          "description": "Comment-only lines (inline comments on code lines are not counted). In Rust, measured on production code only (inline `#[cfg(test)]` / `#[test]` tests are excluded, like `sloc`; their lines are `tloc`).",
          "group": "loc",
          "label": "Comments",
          "name": "Comment lines",
          "short": "Comments",
          "value_type": "int"
        },
        "crate": {
          "label": "Crate",
          "value_type": "str"
        },
        "cyclomatic": {
          "description": "Number of linearly independent paths through the code. Higher values indicate complex branching logic.",
          "direction": "lower_better",
          "formula": "branches + 1",
          "group": "complexity",
          "label": "Cyclomatic",
          "name": "Cyclomatic complexity",
          "short": "Cyclomatic",
          "value_type": "int"
        },
        "effort": {
          "description": "Mental effort to implement the algorithm.",
          "direction": "lower_better",
          "formula": "volume × difficulty",
          "group": "halstead",
          "label": "Effort",
          "name": "Halstead effort",
          "short": "H.effort",
          "value_type": "float"
        },
        "external": {
          "label": "External",
          "value_type": "bool"
        },
        "fan_in": {
          "description": "Number of nodes that depend on this one. High fan-in means broadly reused.",
          "group": "coupling",
          "label": "Fan-in",
          "name": "Fan-in",
          "short": "Fan-in",
          "value_type": "int"
        },
        "fan_out": {
          "description": "Number of nodes this one depends on. High fan-out means many dependencies. External-library edges are counted separately.",
          "group": "coupling",
          "label": "Fan-out",
          "name": "Fan-out",
          "short": "Fan-out",
          "thresholds": {
            "info": 8.0,
            "warning": 18.0
          },
          "value_type": "int"
        },
        "fan_out_external": {
          "description": "Number of distinct external libraries this node depends on.",
          "group": "coupling",
          "label": "Fan-out (external)",
          "value_type": "int"
        },
        "hk": {
          "abbreviate": true,
          "calc": "sloc * (fan_in * fan_out) ** 2",
          "description": "Henry–Kafura — combines unit size with incoming/outgoing coupling (internal edges only).",
          "direction": "lower_better",
          "formula": "sloc × (fan_in × fan_out)²",
          "group": "coupling",
          "label": "HK",
          "name": "Henry–Kafura",
          "short": "HK",
          "thresholds": {
            "info": 150000.0,
            "warning": 10000000.0
          },
          "value_type": "float"
        },
        "items": {
          "label": "Items",
          "thresholds": {
            "info": 20.0,
            "warning": 50.0
          },
          "value_type": "int"
        },
        "length": {
          "description": "Program length — total operator + operand occurrences.",
          "direction": "lower_better",
          "formula": "N₁ + N₂",
          "group": "halstead",
          "label": "Length",
          "name": "Halstead length",
          "short": "H.len",
          "value_type": "float"
        },
        "lloc": {
          "description": "Logical lines — counts statements, not physical lines. In Rust, measured on production code only (inline `#[cfg(test)]` / `#[test]` tests are excluded, like `sloc`; their lines are `tloc`).",
          "group": "loc",
          "label": "Logical",
          "name": "Logical lines",
          "short": "Logical",
          "value_type": "int"
        },
        "loc": {
          "label": "Lines",
          "value_type": "int"
        },
        "mi": {
          "description": "Maintainability Index (0–100, higher is more maintainable). Derived from Halstead volume, cyclomatic complexity, and SLOC.",
          "direction": "higher_better",
          "formula": "171 − 5.2·ln(volume) − 0.23·cyclomatic − 16.2·ln(sloc)",
          "group": "maintainability",
          "label": "MI",
          "name": "Maintainability index",
          "short": "MI",
          "value_type": "float"
        },
        "mi_sei": {
          "description": "SEI variant of the Maintainability Index — adds a bonus for comment density.",
          "direction": "higher_better",
          "formula": "MI + 50·sin(√(2.4 × comment-ratio))",
          "group": "maintainability",
          "label": "MI (SEI)",
          "name": "Maintainability (SEI)",
          "short": "MI SEI",
          "value_type": "float"
        },
        "path": {
          "label": "Path",
          "value_type": "str"
        },
        "sloc": {
          "description": "Source lines of code — lines with at least one non-whitespace, non-comment character. Blank and comment-only lines are not counted. In Rust, lines inside `#[cfg(test)]` / `#[test]` items are excluded too, so this counts production code only (unlike `loc`, the raw file line count).",
          "group": "loc",
          "label": "Source",
          "name": "Source lines",
          "short": "SLOC",
          "thresholds": {
            "info": 800.0,
            "warning": 3000.0
          },
          "value_type": "int"
        },
        "time": {
          "calc": "effort / 18",
          "description": "Estimated implementation time, in seconds.",
          "direction": "lower_better",
          "formula": "effort ÷ 18",
          "group": "halstead",
          "label": "Time",
          "name": "Halstead time, s",
          "short": "H.time(s)",
          "value_type": "float"
        },
        "tloc": {
          "description": "Test lines of code — the lines inside `#[cfg(test)]` / `#[test]` / `#[bench]` items (Rust), removed before the production metrics are measured. The complement of `sloc`: test code never inflates a file's size, HK, or complexity.",
          "group": "loc",
          "label": "Test",
          "name": "Test lines",
          "short": "TLOC",
          "value_type": "int"
        },
        "version": {
          "label": "Version",
          "value_type": "str"
        },
        "visibility": {
          "label": "Visibility",
          "value_type": "str"
        },
        "vocabulary": {
          "description": "Vocabulary — distinct operators + operands.",
          "direction": "lower_better",
          "formula": "η₁ + η₂",
          "group": "halstead",
          "label": "Vocabulary",
          "name": "Halstead vocabulary",
          "short": "H.vocab",
          "value_type": "float"
        },
        "volume": {
          "calc": "length * Math.log2(vocabulary)",
          "description": "Algorithm size in bits, from distinct operators and operands.",
          "direction": "lower_better",
          "formula": "length × log₂(vocabulary)",
          "group": "halstead",
          "label": "Volume",
          "name": "Halstead volume",
          "short": "H.vol",
          "value_type": "float"
        }
      },
      "node_kinds": {
        "external": {
          "external": true,
          "fill": "#f6e2c0",
          "label": "Library",
          "plural": "Libraries",
          "stroke": "#b3801f"
        },
        "file": {
          "fill": "#dbe9f4",
          "label": "File",
          "plural": "Files",
          "stroke": "#4d6f9c"
        }
      },
      "nodes": [
        {
          "external": true,
          "id": "ext:anyhow",
          "kind": "external",
          "name": "anyhow",
          "path": "{registry}/anyhow-1.0.102",
          "version": "1.0.102"
        },
        {
          "external": true,
          "id": "ext:cargo_metadata",
          "kind": "external",
          "name": "cargo_metadata",
          "path": "{registry}/cargo_metadata-0.18.1",
          "version": "0.18.1"
        },
        {
          "external": true,
          "id": "ext:chrono",
          "kind": "external",
          "name": "chrono",
          "path": "{registry}/chrono-0.4.44",
          "version": "0.4.44"
        },
        {
          "external": true,
          "id": "ext:clap",
          "kind": "external",
          "name": "clap",
          "path": "{registry}/clap-4.6.1",
          "version": "4.6.1"
        },
        {
          "external": true,
          "id": "ext:globset",
          "kind": "external",
          "name": "globset",
          "path": "{registry}/globset-0.4.18",
          "version": "0.4.18"
        },
        {
          "external": true,
          "id": "ext:proc-macro2",
          "kind": "external",
          "name": "proc-macro2",
          "path": "{registry}/proc-macro2-1.0.106",
          "version": "1.0.106"
        },
        {
          "external": true,
          "id": "ext:rust-code-analysis-code-split",
          "kind": "external",
          "name": "rust-code-analysis-code-split",
          "path": "{registry}/rust-code-analysis-code-split-0.0.26-cs.0",
          "version": "0.0.26-cs.0"
        },
        {
          "external": true,
          "id": "ext:serde",
          "kind": "external",
          "name": "serde",
          "path": "{registry}/serde-1.0.228",
          "version": "1.0.228"
        },
        {
          "external": true,
          "id": "ext:serde_json",
          "kind": "external",
          "name": "serde_json",
          "path": "{registry}/serde_json-1.0.149",
          "version": "1.0.149"
        },
        {
          "external": true,
          "id": "ext:syn",
          "kind": "external",
          "name": "syn",
          "path": "{registry}/syn-2.0.117",
          "version": "2.0.117"
        },
        {
          "external": true,
          "id": "ext:toml",
          "kind": "external",
          "name": "toml",
          "path": "{registry}/toml-1.1.2+spec-1.1.0",
          "version": "1.1.2+spec-1.1.0"
        },
        {
          "external": true,
          "id": "ext:tree-sitter",
          "kind": "external",
          "name": "tree-sitter",
          "path": "{registry}/tree-sitter-0.26.9",
          "version": "0.26.9"
        },
        {
          "external": true,
          "id": "ext:tree-sitter-javascript",
          "kind": "external",
          "name": "tree-sitter-javascript",
          "path": "{registry}/tree-sitter-javascript-0.25.0",
          "version": "0.25.0"
        },
        {
          "external": true,
          "id": "ext:tree-sitter-python",
          "kind": "external",
          "name": "tree-sitter-python",
          "path": "{registry}/tree-sitter-python-0.25.0",
          "version": "0.25.0"
        },
        {
          "external": true,
          "id": "ext:tree-sitter-typescript",
          "kind": "external",
          "name": "tree-sitter-typescript",
          "path": "{registry}/tree-sitter-typescript-0.23.2",
          "version": "0.23.2"
        },
        {
          "external": true,
          "id": "ext:walkdir",
          "kind": "external",
          "name": "walkdir",
          "path": "{registry}/walkdir-2.5.0",
          "version": "2.5.0"
        },
        {
          "external": true,
          "id": "ext:which",
          "kind": "external",
          "name": "which",
          "path": "{registry}/which-8.0.2",
          "version": "8.0.2"
        },
        {
          "blank": 11,
          "bugs": 0.687,
          "cloc": 21,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 93731.728,
          "fan_in": 2,
          "fan_out": 5,
          "fan_out_external": 2,
          "hk": 10500,
          "id": "{target}/crates/code-ranker-cli/src/analyze.rs",
          "items": 8,
          "kind": "file",
          "length": 556,
          "lloc": 25,
          "loc": 218,
          "mi": 40.664,
          "mi_sei": 14.928,
          "name": "analyze.rs",
          "sloc": 105,
          "time": 5207.318,
          "tloc": 81,
          "visibility": "private",
          "vocabulary": 109,
          "volume": 3763.11
        },
        {
          "blank": 24,
          "bugs": 2.434,
          "cloc": 52,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 624073.169,
          "fan_in": 1,
          "fan_out": 6,
          "fan_out_external": 2,
          "hk": 11664,
          "id": "{target}/crates/code-ranker-cli/src/check.rs",
          "items": 13,
          "kind": "file",
          "length": 1785,
          "lloc": 129,
          "loc": 457,
          "mi": 6.188,
          "mi_sei": -32.332,
          "name": "check.rs",
          "sloc": 324,
          "time": 34670.731,
          "tloc": 57,
          "visibility": "private",
          "vocabulary": 274,
          "volume": 14454.987
        },
        {
          "blank": 33,
          "bugs": 0.295,
          "cloc": 54,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 26395.704,
          "fan_in": 5,
          "fan_out_external": 1,
          "id": "{target}/crates/code-ranker-cli/src/cli.rs",
          "items": 4,
          "kind": "file",
          "length": 408,
          "loc": 177,
          "mi": 46.114,
          "mi_sei": 28.681,
          "name": "cli.rs",
          "sloc": 90,
          "time": 1466.428,
          "visibility": "private",
          "vocabulary": 77,
          "volume": 2556.848
        },
        {
          "blank": 14,
          "bugs": 1.124,
          "cloc": 12,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 195943.95,
          "fan_in": 1,
          "fan_out": 5,
          "fan_out_external": 3,
          "hk": 3450,
          "id": "{target}/crates/code-ranker-cli/src/config/ignore.rs",
          "items": 7,
          "kind": "file",
          "length": 821,
          "lloc": 49,
          "loc": 220,
          "mi": 32.663,
          "mi_sei": -3.547,
          "name": "ignore.rs",
          "sloc": 138,
          "time": 10885.775,
          "tloc": 56,
          "visibility": "public",
          "vocabulary": 144,
          "volume": 5886.508
        },
        {
          "blank": 26,
          "bugs": 1.733,
          "cloc": 3,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 375122.127,
          "fan_out": 2,
          "fan_out_external": 2,
          "id": "{target}/crates/code-ranker-cli/src/config/load.rs",
          "items": 14,
          "kind": "file",
          "length": 1356,
          "lloc": 76,
          "loc": 343,
          "mi": 10.571,
          "mi_sei": -40.875,
          "name": "load.rs",
          "sloc": 202,
          "time": 20840.118,
          "tloc": 112,
          "visibility": "public",
          "vocabulary": 164,
          "volume": 9976.84
        },
        {
          "blank": 2,
          "bugs": 0.0165,
          "cloc": 5,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 350.273,
          "fan_in": 4,
          "id": "{target}/crates/code-ranker-cli/src/config/mod.rs",
          "items": 5,
          "kind": "file",
          "length": 40,
          "loc": 17,
          "mi": 98.264,
          "mi_sei": 103.404,
          "name": "mod.rs",
          "sloc": 10,
          "time": 19.459,
          "visibility": "private",
          "vocabulary": 18,
          "volume": 166.797
        },
        {
          "blank": 18,
          "bugs": 1.202,
          "cloc": 15,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 216745.22,
          "fan_in": 4,
          "fan_out_external": 2,
          "id": "{target}/crates/code-ranker-cli/src/config/model.rs",
          "items": 17,
          "kind": "file",
          "length": 779,
          "lloc": 4,
          "loc": 256,
          "mi": 30.864,
          "mi_sei": -6.114,
          "name": "model.rs",
          "sloc": 165,
          "time": 12041.401,
          "tloc": 58,
          "visibility": "public",
          "vocabulary": 110,
          "volume": 5282.679
        },
        {
          "blank": 7,
          "bugs": 0.375,
          "cloc": 4,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 37797.664,
          "fan_in": 1,
          "fan_out": 4,
          "hk": 2000,
          "id": "{target}/crates/code-ranker-cli/src/config/rules.rs",
          "items": 6,
          "kind": "file",
          "length": 339,
          "lloc": 10,
          "loc": 157,
          "mi": 47.822,
          "mi_sei": 7.948,
          "name": "rules.rs",
          "sloc": 125,
          "time": 2099.87,
          "tloc": 21,
          "visibility": "public",
          "vocabulary": 100,
          "volume": 2252.267
        },
        {
          "blank": 14,
          "bugs": 1.416,
          "cloc": 13,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 276904.587,
          "fan_out": 6,
          "fan_out_external": 1,
          "id": "{target}/crates/code-ranker-cli/src/config/violations.rs",
          "items": 12,
          "kind": "file",
          "length": 960,
          "lloc": 50,
          "loc": 362,
          "mi": 27.008,
          "mi_sei": -14.779,
          "name": "violations.rs",
          "sloc": 209,
          "time": 15383.588,
          "tloc": 126,
          "visibility": "public",
          "vocabulary": 158,
          "volume": 7011.629
        },
        {
          "blank": 7,
          "bugs": 0.466,
          "cloc": 13,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 52314.128,
          "fan_in": 1,
          "fan_out": 2,
          "hk": 292,
          "id": "{target}/crates/code-ranker-cli/src/git.rs",
          "items": 6,
          "kind": "file",
          "length": 367,
          "lloc": 10,
          "loc": 145,
          "mi": 51.356,
          "mi_sei": 28.406,
          "name": "git.rs",
          "sloc": 73,
          "time": 2906.34,
          "tloc": 52,
          "visibility": "private",
          "vocabulary": 76,
          "volume": 2292.989
        },
        {
          "blank": 7,
          "bugs": 0.131,
          "cloc": 4,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 7871.722,
          "fan_in": 3,
          "fan_out": 1,
          "hk": 342,
          "id": "{target}/crates/code-ranker-cli/src/logger.rs",
          "items": 3,
          "kind": "file",
          "length": 128,
          "lloc": 3,
          "loc": 49,
          "mi": 72.188,
          "mi_sei": 50.675,
          "name": "logger.rs",
          "sloc": 38,
          "time": 437.317,
          "visibility": "private",
          "vocabulary": 40,
          "volume": 681.206
        },
        {
          "blank": 3,
          "bugs": 0.211,
          "cloc": 3,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 15946.268,
          "fan_out": 4,
          "fan_out_external": 2,
          "id": "{target}/crates/code-ranker-cli/src/main.rs",
          "items": 12,
          "kind": "file",
          "length": 226,
          "lloc": 7,
          "loc": 92,
          "mi": 58.621,
          "mi_sei": 23.288,
          "name": "main.rs",
          "sloc": 86,
          "time": 885.903,
          "visibility": "public",
          "vocabulary": 78,
          "volume": 1420.5
        },
        {
          "blank": 42,
          "bugs": 2.696,
          "cloc": 65,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 727578.62,
          "fan_in": 1,
          "fan_out": 20,
          "fan_out_external": 1,
          "hk": 150800,
          "id": "{target}/crates/code-ranker-cli/src/pipeline.rs",
          "items": 14,
          "kind": "file",
          "length": 2073,
          "lloc": 115,
          "loc": 554,
          "mi": 3.061,
          "mi_sei": -36.761,
          "name": "pipeline.rs",
          "sloc": 377,
          "time": 40421.034,
          "tloc": 70,
          "visibility": "private",
          "vocabulary": 260,
          "volume": 16630.368
        },
        {
          "blank": 8,
          "bugs": 0.526,
          "cloc": 12,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 62814.504,
          "fan_in": 1,
          "fan_out": 3,
          "fan_out_external": 1,
          "hk": 666,
          "id": "{target}/crates/code-ranker-cli/src/plugin/mod.rs",
          "items": 7,
          "kind": "file",
          "length": 402,
          "lloc": 7,
          "loc": 94,
          "mi": 50.939,
          "mi_sei": 26.618,
          "name": "mod.rs",
          "sloc": 74,
          "time": 3489.694,
          "visibility": "private",
          "vocabulary": 76,
          "volume": 2511.666
        },
        {
          "blank": 6,
          "bugs": 0.316,
          "cloc": 9,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 29258.108,
          "fan_in": 1,
          "fan_out": 1,
          "hk": 200,
          "id": "{target}/crates/code-ranker-cli/src/presets.rs",
          "items": 5,
          "kind": "file",
          "length": 359,
          "lloc": 1,
          "loc": 215,
          "mi": 42.152,
          "mi_sei": 1.307,
          "name": "presets.rs",
          "sloc": 200,
          "time": 1625.45,
          "visibility": "private",
          "vocabulary": 102,
          "volume": 2395.4
        },
        {
          "blank": 43,
          "bugs": 5.64,
          "cloc": 74,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 2201243.643,
          "fan_in": 1,
          "fan_out": 6,
          "fan_out_external": 1,
          "hk": 24696,
          "id": "{target}/crates/code-ranker-cli/src/recommend.rs",
          "items": 21,
          "kind": "file",
          "length": 3557,
          "lloc": 204,
          "loc": 1169,
          "mi": -30.386,
          "mi_sei": -79.369,
          "name": "recommend.rs",
          "sloc": 686,
          "time": 122291.313,
          "tloc": 366,
          "visibility": "private",
          "vocabulary": 299,
          "volume": 29252.773
        },
        {
          "blank": 24,
          "bugs": 1.612,
          "cloc": 42,
          "crate": "code-ranker (bin)",
          "cyclomatic": 1,
          "effort": 336350.207,
          "fan_in": 1,
          "fan_out": 8,
          "fan_out_external": 2,
          "hk": 14656,
          "id": "{target}/crates/code-ranker-cli/src/report.rs",
          "items": 13,
          "kind": "file",
          "length": 1216,
          "lloc": 77,
          "loc": 362,
          "mi": 15.844,
          "mi_sei": -18.327,
          "name": "report.rs",
          "sloc": 229,
          "time": 18686.122,
          "tloc": 67,
          "visibility": "private",
          "vocabulary": 176,
          "volume": 9070.668
        },
        {
          "blank": 16,
          "bugs": 2.589,
          "cloc": 50,
          "crate": "code-ranker-complexity",
          "cyclomatic": 1,
          "effort": 684517.134,
          "fan_in": 1,
          "fan_out": 5,
          "fan_out_external": 3,
          "hk": 10700,
          "id": "{target}/crates/code-ranker-complexity/src/lib.rs",
          "items": 11,
          "kind": "file",
          "length": 1716,
          "lloc": 74,
          "loc": 569,
          "mi": 9.18,
          "mi_sei": -33.605,
          "name": "lib.rs",
          "sloc": 428,
          "time": 38028.729,
          "tloc": 75,
          "visibility": "public",
          "vocabulary": 275,
          "volume": 13905.241
        },
        {
          "blank": 5,
          "bugs": 0.372,
          "cloc": 14,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 37431.601,
          "fan_in": 4,
          "fan_out": 2,
          "hk": 2176,
          "id": "{target}/crates/code-ranker-graph/src/attrs.rs",
          "items": 4,
          "kind": "file",
          "length": 219,
          "lloc": 10,
          "loc": 53,
          "mi": 65.951,
          "mi_sei": 56.709,
          "name": "attrs.rs",
          "sloc": 34,
          "time": 2079.533,
          "visibility": "public",
          "vocabulary": 61,
          "volume": 1298.831
        },
        {
          "blank": 15,
          "bugs": 1.618,
          "cloc": 19,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 338416.294,
          "fan_in": 1,
          "fan_out": 4,
          "hk": 2160,
          "id": "{target}/crates/code-ranker-graph/src/cycles.rs",
          "items": 8,
          "kind": "file",
          "length": 836,
          "lloc": 74,
          "loc": 319,
          "mi": 33.687,
          "mi_sei": 1.894,
          "name": "cycles.rs",
          "sloc": 135,
          "time": 18800.905,
          "tloc": 150,
          "visibility": "public",
          "vocabulary": 95,
          "volume": 5492.399
        },
        {
          "blank": 6,
          "bugs": 0.297,
          "cloc": 5,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 26716.325,
          "fan_in": 1,
          "fan_out": 2,
          "hk": 108,
          "id": "{target}/crates/code-ranker-graph/src/finalize.rs",
          "items": 2,
          "kind": "file",
          "length": 187,
          "lloc": 13,
          "loc": 79,
          "mi": 73.841,
          "mi_sei": 58.489,
          "name": "finalize.rs",
          "sloc": 27,
          "time": 1484.24,
          "tloc": 41,
          "visibility": "public",
          "vocabulary": 41,
          "volume": 1001.862
        },
        {
          "blank": 8,
          "bugs": 0.546,
          "cloc": 9,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 66301.958,
          "fan_in": 1,
          "fan_out": 4,
          "hk": 1056,
          "id": "{target}/crates/code-ranker-graph/src/hk.rs",
          "items": 3,
          "kind": "file",
          "length": 411,
          "lloc": 33,
          "loc": 146,
          "mi": 54.91,
          "mi_sei": 29.664,
          "name": "hk.rs",
          "sloc": 66,
          "time": 3683.442,
          "tloc": 63,
          "visibility": "public",
          "vocabulary": 63,
          "volume": 2456.662
        },
        {
          "blank": 4,
          "bugs": 0.0989,
          "cloc": 24,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 5115.604,
          "fan_in": 8,
          "fan_out": 4,
          "fan_out_external": 1,
          "hk": 39936,
          "id": "{target}/crates/code-ranker-graph/src/level_graph.rs",
          "items": 3,
          "kind": "file",
          "length": 153,
          "loc": 67,
          "mi": 67.993,
          "mi_sei": 62.492,
          "name": "level_graph.rs",
          "sloc": 39,
          "time": 284.2,
          "visibility": "public",
          "vocabulary": 35,
          "volume": 784.78
        },
        {
          "blank": 5,
          "bugs": 0.265,
          "cloc": 19,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 22478.33,
          "fan_in": 1,
          "fan_out": 2,
          "hk": 376,
          "id": "{target}/crates/code-ranker-graph/src/lib.rs",
          "items": 10,
          "kind": "file",
          "length": 268,
          "lloc": 3,
          "loc": 118,
          "mi": 54.429,
          "mi_sei": 32.146,
          "name": "lib.rs",
          "sloc": 94,
          "time": 1248.796,
          "visibility": "public",
          "vocabulary": 92,
          "volume": 1748.314
        },
        {
          "blank": 7,
          "bugs": 0.823,
          "cloc": 16,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 122698.908,
          "fan_in": 1,
          "fan_out": 5,
          "hk": 1975,
          "id": "{target}/crates/code-ranker-graph/src/relativize.rs",
          "items": 5,
          "kind": "file",
          "length": 485,
          "lloc": 43,
          "loc": 159,
          "mi": 48.538,
          "mi_sei": 25.886,
          "name": "relativize.rs",
          "sloc": 79,
          "time": 6816.606,
          "tloc": 58,
          "visibility": "public",
          "vocabulary": 78,
          "volume": 3048.42
        },
        {
          "blank": 5,
          "bugs": 0.391,
          "cloc": 9,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 40234.301,
          "fan_in": 2,
          "fan_out_external": 2,
          "id": "{target}/crates/code-ranker-graph/src/serialize.rs",
          "items": 4,
          "kind": "file",
          "length": 244,
          "lloc": 13,
          "loc": 57,
          "mi": 63.471,
          "mi_sei": 46.675,
          "name": "serialize.rs",
          "sloc": 43,
          "time": 2235.238,
          "visibility": "public",
          "vocabulary": 53,
          "volume": 1397.612
        },
        {
          "blank": 6,
          "bugs": 0.229,
          "cloc": 19,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 18007.689,
          "fan_in": 5,
          "fan_out": 2,
          "fan_out_external": 2,
          "hk": 7400,
          "id": "{target}/crates/code-ranker-graph/src/snapshot.rs",
          "items": 5,
          "kind": "file",
          "length": 234,
          "loc": 99,
          "mi": 58.45,
          "mi_sei": 40.319,
          "name": "snapshot.rs",
          "sloc": 74,
          "time": 1000.427,
          "visibility": "public",
          "vocabulary": 52,
          "volume": 1333.902
        },
        {
          "blank": 4,
          "bugs": 0.236,
          "cloc": 9,
          "crate": "code-ranker-graph",
          "cyclomatic": 1,
          "effort": 18940.824,
          "fan_in": 1,
          "fan_out": 3,
          "hk": 378,
          "id": "{target}/crates/code-ranker-graph/src/stats.rs",
          "items": 3,
          "kind": "file",
          "length": 173,
          "lloc": 8,
          "loc": 95,
          "mi": 67.957,
          "mi_sei": 52.58,
          "name": "stats.rs",
          "sloc": 42,
          "time": 1052.268,
          "tloc": 40,
          "visibility": "public",
          "vocabulary": 61,
          "volume": 1026.017
        },
        {
          "blank": 7,
          "bugs": 0.331,
          "cloc": 22,
          "crate": "code-ranker-plugin-api",
          "cyclomatic": 1,
          "effort": 31391.583,
          "fan_in": 20,
          "fan_out_external": 1,
          "id": "{target}/crates/code-ranker-plugin-api/src/attrs.rs",
          "items": 11,
          "kind": "file",
          "length": 220,
          "lloc": 1,
          "loc": 110,
          "mi": 55.908,
          "mi_sei": 42.474,
          "name": "attrs.rs",
          "sloc": 59,
          "time": 1743.976,
          "tloc": 22,
          "visibility": "public",
          "vocabulary": 42,
          "volume": 1186.309
        },
        {
          "blank": 2,
          "bugs": 0.0355,
          "cloc": 13,
          "crate": "code-ranker-plugin-api",
          "cyclomatic": 1,
          "effort": 1102.165,
          "fan_in": 7,
          "fan_out": 2,
          "fan_out_external": 1,
          "hk": 2548,
          "id": "{target}/crates/code-ranker-plugin-api/src/edge.rs",
          "items": 1,
          "kind": "file",
          "length": 42,
          "loc": 28,
          "mi": 89.578,
          "mi_sei": 97.144,
          "name": "edge.rs",
          "sloc": 13,
          "time": 61.231,
          "visibility": "public",
          "vocabulary": 22,
          "volume": 187.296
        },
        {
          "blank": 2,
          "bugs": 0.0219,
          "cloc": 8,
          "crate": "code-ranker-plugin-api",
          "cyclomatic": 1,
          "effort": 534.698,
          "fan_in": 14,
          "fan_out": 2,
          "fan_out_external": 1,
          "hk": 6272,
          "id": "{target}/crates/code-ranker-plugin-api/src/graph.rs",
          "items": 1,
          "kind": "file",
          "length": 31,
          "loc": 18,
          "mi": 98.664,
          "mi_sei": 109.68,
          "name": "graph.rs",
          "sloc": 8,
          "time": 29.705,
          "visibility": "public",
          "vocabulary": 18,
          "volume": 129.267
        },
        {
          "blank": 17,
          "bugs": 0.996,
          "cloc": 66,
          "crate": "code-ranker-plugin-api",
          "cyclomatic": 1,
          "effort": 163577.617,
          "fan_in": 11,
          "fan_out": 1,
          "fan_out_external": 1,
          "hk": 21296,
          "id": "{target}/crates/code-ranker-plugin-api/src/level.rs",
          "items": 16,
          "kind": "file",
          "length": 676,
          "lloc": 1,
          "loc": 259,
          "mi": 34.328,
          "mi_sei": 10.587,
          "name": "level.rs",
          "sloc": 176,
          "time": 9087.645,
          "visibility": "public",
          "vocabulary": 64,
          "volume": 4056
        },
        {
          "blank": 5,
          "bugs": 0.195,
          "cloc": 37,
          "crate": "code-ranker-plugin-api",
          "cyclomatic": 1,
          "effort": 14223.3,
          "fan_in": 3,
          "id": "{target}/crates/code-ranker-plugin-api/src/lib.rs",
          "items": 9,
          "kind": "file",
          "length": 219,
          "lloc": 1,
          "loc": 105,
          "mi": 57.2,
          "mi_sei": 46.997,
          "name": "lib.rs",
          "sloc": 63,
          "time": 790.183,
          "visibility": "public",
          "vocabulary": 72,
          "volume": 1351.213
        },
        {
          "blank": 6,
          "bugs": 0.121,
          "cloc": 17,
          "crate": "code-ranker-plugin-api",
          "cyclomatic": 1,
          "effort": 6961.508,
          "fan_in": 5,
          "fan_out_external": 1,
          "id": "{target}/crates/code-ranker-plugin-api/src/log.rs",
          "items": 5,
          "kind": "file",
          "length": 112,
          "lloc": 5,
          "loc": 43,
          "mi": 75.494,
          "mi_sei": 75.185,
          "name": "log.rs",
          "sloc": 20,
          "time": 386.75,
          "visibility": "public",
          "vocabulary": 39,
          "volume": 591.965
        },
        {
          "blank": 3,
          "bugs": 0.0316,
          "cloc": 13,
          "crate": "code-ranker-plugin-api",
          "cyclomatic": 1,
          "effort": 926.82,
          "fan_in": 17,
          "fan_out": 1,
          "fan_out_external": 1,
          "hk": 3757,
          "id": "{target}/crates/code-ranker-plugin-api/src/node.rs",
          "items": 2,
          "kind": "file",
          "length": 40,
          "loc": 29,
          "mi": 89.516,
          "mi_sei": 96.595,
          "name": "node.rs",
          "sloc": 13,
          "time": 51.49,
          "visibility": "public",
          "vocabulary": 19,
          "volume": 169.917
        },
        {
          "blank": 12,
          "bugs": 0.16,
          "cloc": 47,
          "crate": "code-ranker-plugin-api",
          "cyclomatic": 1,
          "effort": 10612.223,
          "fan_in": 9,
          "fan_out": 2,
          "fan_out_external": 2,
          "hk": 13932,
          "id": "{target}/crates/code-ranker-plugin-api/src/plugin.rs",
          "items": 4,
          "kind": "file",
          "length": 197,
          "loc": 102,
          "mi": 58.171,
          "mi_sei": 52.245,
          "name": "plugin.rs",
          "sloc": 43,
          "time": 589.567,
          "visibility": "public",
          "vocabulary": 52,
          "volume": 1122.986
        },
        {
          "blank": 52,
          "bugs": 2.819,
          "cloc": 73,
          "crate": "code-ranker-plugin-javascript",
          "cyclomatic": 1,
          "effort": 778027.2,
          "fan_in": 1,
          "fan_out": 7,
          "fan_out_external": 4,
          "hk": 19796,
          "id": "{target}/crates/code-ranker-plugin-javascript/src/lib.rs",
          "items": 21,
          "kind": "file",
          "length": 2085,
          "lloc": 112,
          "loc": 679,
          "mi": -11.051,
          "mi_sei": -51.195,
          "name": "lib.rs",
          "sloc": 404,
          "time": 43223.733,
          "tloc": 150,
          "visibility": "public",
          "vocabulary": 258,
          "volume": 16703.408
        },
        {
          "blank": 55,
          "bugs": 2.628,
          "cloc": 43,
          "crate": "code-ranker-plugin-python",
          "cyclomatic": 1,
          "effort": 700290.092,
          "fan_out": 7,
          "fan_out_external": 4,
          "id": "{target}/crates/code-ranker-plugin-python/src/lib.rs",
          "items": 18,
          "kind": "file",
          "length": 1831,
          "lloc": 103,
          "loc": 632,
          "mi": -0.219,
          "mi_sei": -43.218,
          "name": "lib.rs",
          "sloc": 361,
          "time": 38905.005,
          "tloc": 177,
          "visibility": "public",
          "vocabulary": 226,
          "volume": 14318.747
        },
        {
          "blank": 4,
          "bugs": 0.229,
          "crate": "code-ranker-plugin-rust",
          "cyclomatic": 1,
          "effort": 18105.462,
          "fan_in": 1,
          "fan_out": 2,
          "fan_out_external": 1,
          "hk": 168,
          "id": "{target}/crates/code-ranker-plugin-rust/src/crate_graph.rs",
          "items": 1,
          "kind": "file",
          "length": 181,
          "lloc": 12,
          "loc": 46,
          "mi": 71.706,
          "mi_sei": 28.361,
          "name": "crate_graph.rs",
          "sloc": 42,
          "time": 1005.859,
          "visibility": "private",
          "vocabulary": 45,
          "volume": 994.025
        },
        {
          "blank": 1,
          "bugs": 0.00971,
          "cloc": 4,
          "crate": "code-ranker-plugin-rust",
          "cyclomatic": 1,
          "effort": 157.404,
          "fan_in": 2,
          "id": "{target}/crates/code-ranker-plugin-rust/src/ids.rs",
          "items": 1,
          "kind": "file",
          "length": 13,
          "loc": 8,
          "mi": 117.061,
          "mi_sei": 137.843,
          "name": "ids.rs",
          "sloc": 3,
          "time": 8.744,
          "visibility": "private",
          "vocabulary": 11,
          "volume": 44.972
        },
        {
          "blank": 14,
          "bugs": 0.294,
          "cloc": 19,
          "crate": "code-ranker-plugin-rust",
          "cyclomatic": 1,
          "effort": 26236.007,
          "fan_in": 3,
          "id": "{target}/crates/code-ranker-plugin-rust/src/internal.rs",
          "items": 10,
          "kind": "file",
          "length": 257,
          "lloc": 3,
          "loc": 114,
          "mi": 53.226,
          "mi_sei": 32.07,
          "name": "internal.rs",
          "sloc": 81,
          "time": 1457.555,
          "visibility": "private",
          "vocabulary": 49,
          "volume": 1442.98
        },
        {
          "blank": 29,
          "bugs": 2.524,
          "cloc": 49,
          "crate": "code-ranker-plugin-rust",
          "cyclomatic": 1,
          "effort": 659151.534,
          "fan_out": 11,
          "fan_out_external": 3,
          "id": "{target}/crates/code-ranker-plugin-rust/src/lib.rs",
          "items": 12,
          "kind": "file",
          "length": 2063,
          "lloc": 105,
          "loc": 569,
          "mi": -1.356,
          "mi_sei": -47.25,
          "name": "lib.rs",
          "sloc": 494,
          "time": 36619.529,
          "visibility": "public",
          "vocabulary": 255,
          "volume": 16492.351
        },
        {
          "blank": 56,
          "bugs": 6.675,
          "cloc": 118,
          "crate": "code-ranker-plugin-rust",
          "cyclomatic": 1,
          "effort": 2833852.477,
          "fan_in": 1,
          "fan_out": 2,
          "fan_out_external": 4,
          "hk": 3632,
          "id": "{target}/crates/code-ranker-plugin-rust/src/module_graph.rs",
          "items": 39,
          "kind": "file",
          "length": 4099,
          "lloc": 240,
          "loc": 1492,
          "mi": -43.853,
          "mi_sei": -93.514,
          "name": "module_graph.rs",
          "sloc": 908,
          "time": 157436.248,
          "tloc": 410,
          "visibility": "private",
          "vocabulary": 326,
          "volume": 34221.436
        },
        {
          "blank": 10,
          "bugs": 0.206,
          "cloc": 9,
          "crate": "code-ranker-plugin-typescript",
          "cyclomatic": 1,
          "effort": 15443.913,
          "fan_out": 4,
          "fan_out_external": 2,
          "id": "{target}/crates/code-ranker-plugin-typescript/src/lib.rs",
          "items": 4,
          "kind": "file",
          "length": 186,
          "loc": 139,
          "mi": 65.95,
          "mi_sei": 49.321,
          "name": "lib.rs",
          "sloc": 39,
          "time": 857.995,
          "tloc": 81,
          "visibility": "public",
          "vocabulary": 65,
          "volume": 1120.16
        },
        {
          "blank": 5,
          "bugs": 0.931,
          "cloc": 18,
          "crate": "code-ranker-viewer",
          "cyclomatic": 1,
          "effort": 147736.808,
          "fan_in": 2,
          "fan_out": 2,
          "fan_out_external": 2,
          "hk": 2720,
          "id": "{target}/crates/code-ranker-viewer/src/lib.rs",
          "items": 33,
          "kind": "file",
          "length": 785,
          "lloc": 10,
          "loc": 193,
          "mi": 38.232,
          "mi_sei": 3.36,
          "name": "lib.rs",
          "sloc": 170,
          "time": 8207.6,
          "visibility": "public",
          "vocabulary": 155,
          "volume": 5711.757
        }
      ],
      "stats": {
        "blank": 14.444,
        "bugs": 1.034,
        "cloc": 26.136,
        "cyclomatic": 1,
        "effort": 268214.031,
        "fan_in": 3.82,
        "fan_out": 4.138,
        "hk": 11988.4,
        "length": 740.777,
        "mi": 53.443,
        "mi_sei": 46.061,
        "sloc": 157.533,
        "time": 14900.779,
        "tloc": 106.045,
        "vocabulary": 108.555,
        "volume": 5532.134
      },
      "ui": {
        "card_metrics": [
          "hk",
          "sloc"
        ],
        "columns": [
          "kind",
          "sloc",
          "hk",
          "fan_in",
          "fan_out",
          "volume",
          "bugs",
          "effort",
          "time",
          "length",
          "vocabulary",
          "cyclomatic",
          "mi",
          "mi_sei",
          "lloc",
          "cloc",
          "blank",
          "tloc"
        ],
        "default_sort": "hk",
        "grouping": {
          "key": "crate"
        },
        "size_metrics": [
          "loc",
          "hk"
        ],
        "sort_metrics": [
          "hk",
          "sloc",
          "fan_out",
          "fan_in",
          "cyclomatic",
          "items"
        ],
        "summary_metrics": [
          "cyclomatic",
          "sloc",
          "mi",
          "mi_sei",
          "volume",
          "bugs",
          "effort",
          "time",
          "length",
          "vocabulary",
          "fan_in",
          "fan_out",
          "hk",
          "lloc",
          "cloc",
          "blank",
          "tloc"
        ]
      }
    }
  },
  "plugin": "rust",
  "presets": [
    {
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/reduce-complexity.md",
      "id": "CPX",
      "label": "CPX",
      "prompt": "These modules are too complex and I want to reduce their complexity.\nReduce it by splitting large units into smaller single-responsibility ones,\nextracting repeated patterns into shared helpers, flattening deeply nested\ncontrol flow, and breaking large functions into focused helpers.",
      "sort_metric": "cognitive",
      "title": "CPX — Reduce Complexity"
    },
    {
      "connections": [
        "common"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/acyclic-dependencies-principle.md",
      "id": "ADP",
      "label": "ADP",
      "prompt": "The dependency graph between modules must form a DAG. When module A depends\non module B, no chain of dependencies should bring B back to A.\n\nIdentify any cycles in the modules below. For each cycle, propose a concrete\nrefactoring (extract a shared abstraction, invert a dependency, split a module)\nthat makes the graph acyclic without breaking existing functionality.\n\nWhen splitting a module to break a cycle, the new structure should:\n- Preserve existing API contracts\n- Minimise coupling in the new structure\n- Follow the Single Responsibility Principle\n- Not introduce new dependency cycles",
      "sort_metric": "cycle",
      "title": "ADP — Acyclic Dependencies Principle"
    },
    {
      "connections": [
        "in",
        "out"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/solid-single-responsibility.md",
      "id": "SRP",
      "label": "SRP",
      "prompt": "A module should have one reason to change — it should serve one actor\nand encapsulate one coherent set of decisions.\n\nFor each module below, identify whether it has more than one responsibility.\nPropose how to split responsibilities so each module changes for only one reason,\nand specify the new module boundaries.",
      "sort_metric": "sloc",
      "title": "SRP — Single Responsibility Principle"
    },
    {
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/solid-open-closed.md",
      "id": "OCP",
      "label": "OCP",
      "prompt": "A module should be open for extension but closed for modification: new behaviour\nshould be addable without editing existing, working code.\n\nFor each module below, identify extension points that currently require editing\nexisting code (e.g. growing match/switch/if-else chains). Propose an extension\nmechanism (polymorphism, strategy, plug-in registration) so new cases can be added\nwithout modifying these modules.",
      "sort_metric": "cyclomatic",
      "title": "OCP — Open/Closed Principle"
    },
    {
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/solid-liskov-substitution.md",
      "id": "LSP",
      "label": "LSP",
      "prompt": "Every implementation of an interface must honour its full contract — return-value\ninvariants, error/exception behaviour, side effects, and resource ownership — not\njust the method signatures. A subtype must be substitutable for its base without\nsurprising callers.\n\nIdentify the interface implementations in the modules below. For each, check it can\nreplace any other implementation of the same interface without breaking callers.\nFlag violations and propose fixes.",
      "sort_metric": "hk",
      "title": "LSP — Liskov Substitution Principle"
    },
    {
      "connections": [
        "in"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/solid-interface-segregation.md",
      "id": "ISP",
      "label": "ISP",
      "prompt": "Clients should not be forced to depend on methods they do not use. Prefer several\nsmall, focused interfaces over one wide interface.\n\nIdentify interfaces in the modules below that are wider than their consumers need.\nPropose how to split them into narrower interfaces so each consumer depends only on\nwhat it actually uses.",
      "sort_metric": "items",
      "title": "ISP — Interface Segregation Principle"
    },
    {
      "connections": [
        "common",
        "out"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/solid-dependency-inversion.md",
      "id": "DIP",
      "label": "DIP",
      "prompt": "High-level modules should not depend on low-level modules; both should depend on\nabstractions, and abstractions should not depend on details.\n\nFind places in the modules below where a high-level module depends directly on a\nconcrete low-level type. Propose an abstraction (interface) to invert each such\ndependency, and specify where the concrete implementation should be wired in.",
      "sort_metric": "fan_out",
      "title": "DIP — Dependency Inversion Principle"
    },
    {
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/dry.md",
      "id": "DRY",
      "label": "DRY",
      "prompt": "Every piece of knowledge must have a single authoritative representation.\nDRY is about knowledge duplication, not just code duplication.\n\nIdentify concepts, rules, or policies that are duplicated across the modules\nbelow. For each duplication, propose a canonical location and the refactoring\nneeded to consolidate it.",
      "sort_metric": "sloc",
      "title": "DRY — Don't Repeat Yourself"
    },
    {
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/kiss.md",
      "id": "KISS",
      "label": "KISS",
      "prompt": "When two designs solve the same problem, prefer the simpler one — fewer\nabstractions, fewer indirection layers, fewer moving parts.\n\nIdentify over-engineered or needlessly complex constructs in the modules below.\nFor each, describe the simpler alternative and estimate the risk of simplifying.",
      "sort_metric": "cognitive",
      "title": "KISS — Keep It Simple"
    },
    {
      "connections": [
        "common",
        "out"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/law-of-demeter.md",
      "id": "LoD",
      "label": "LoD",
      "prompt": "A method should only call methods on: itself, its direct fields,\nits parameters, and objects it constructs locally.\nAvoid `x.foo().bar().baz()` chains that traverse object graphs.\n\nIdentify method chains or deep field traversals in the modules below that\nviolate LoD. For each, propose a narrow accessor or a facade that exposes only\nwhat the caller needs, reducing coupling.",
      "sort_metric": "fan_out",
      "title": "Law of Demeter — Principle of Least Knowledge"
    },
    {
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/make-invalid-states-unrepresentable.md",
      "id": "MISU",
      "label": "MISU",
      "prompt": "Move correctness from runtime checks into the type system, so invalid states\ncannot be constructed and fail at compile time rather than at runtime.\n\nIdentify data structures or function signatures in the modules below where invalid\nstates are representable at runtime. For each, propose a type-level encoding\n(sum type / enum, newtype, typestate) that makes the invalid state unrepresentable\nby construction.",
      "sort_metric": "cyclomatic",
      "title": "MISU — Make Invalid States Unrepresentable"
    },
    {
      "connections": [
        "common"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/composition-over-inheritance.md",
      "id": "CoI",
      "label": "CoI",
      "prompt": "Build behaviour by composing small, focused pieces rather than through deep\ninheritance hierarchies.\n\nIdentify large types that accumulate behaviour in the modules below. Propose how to\ndecompose them into smaller composable parts, and show how consumers would assemble\nthe behaviour they need.",
      "sort_metric": "items",
      "title": "CoI — Composition Over Inheritance"
    },
    {
      "connections": [
        "out"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/yagni.md",
      "id": "YAGNI",
      "label": "YAGNI",
      "prompt": "Build for the problem you have now, not one you imagine you might have later.\nDon't add an abstraction, a generic parameter, or a public API for a hypothetical\nfuture use.\n\nIdentify abstractions, generics, or public APIs in the modules below that were\nadded speculatively. For each, assess whether multiple real callers use it today,\nand propose simplification if not.",
      "sort_metric": "sloc",
      "title": "YAGNI — You Aren't Gonna Need It"
    },
    {
      "connections": [
        "in",
        "out"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/henry-kafura-coupling.md",
      "id": "HK",
      "label": "HK",
      "prompt": "These modules carry heavy Henry-Kafura coupling — HK = sloc × (fan_in × fan_out)²,\nwhere sloc is the module's source lines of code (real code lines, excluding blanks\nand comment-only lines), fan_in is how many modules depend on it, and fan_out is how\nmany it depends on.\nA high score is a large module sitting on a busy crossroads of incoming and outgoing\ndependencies, so any change here ripples widely.\n\nFor each module below, lower the factor that dominates its HK: shrink the module by\nextracting cohesive pieces, or cut fan-in/fan-out by narrowing its public surface and\ndepending on fewer collaborators (introduce an abstraction, move a responsibility).\nKeep existing API contracts intact.",
      "sort_metric": "hk",
      "title": "HK — Henry-Kafura Coupling"
    },
    {
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/module-size.md",
      "id": "SLOC",
      "label": "SLOC",
      "prompt": "These are the largest modules by source lines of code. Size alone is not a defect, but\noversized files usually bundle several responsibilities and are hard to read, test and\nreview.\n\nFor each module below, identify the distinct responsibilities it holds and propose how\nto split it into smaller, cohesive modules — each with a single clear purpose — without\nchanging external behaviour.",
      "sort_metric": "sloc",
      "title": "SLOC — Module Size"
    },
    {
      "connections": [
        "in"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/fan-in-afferent-coupling.md",
      "id": "FANIN",
      "label": "FANIN",
      "prompt": "These modules have high fan-in: many other modules depend on them. They are\nload-bearing — a change here forces changes (or re-review) across every dependant, and\na bug here is widely felt.\n\nFor each module below, confirm its public surface is a stable, minimal contract. Narrow\nthe API to what callers actually need, split it if different callers use disjoint parts\n(see Interface Segregation), and stabilise the abstractions the rest of the codebase\nleans on.",
      "sort_metric": "fan_in",
      "title": "Fan-in — Afferent Coupling"
    },
    {
      "connections": [
        "out"
      ],
      "doc_url": "https://github.com/ffedoroff/code-ranker/blob/main/principles/rust/fan-out-efferent-coupling.md",
      "id": "FANOUT",
      "label": "FANOUT",
      "prompt": "These modules have high fan-out: they depend on many other modules. High efferent\ncoupling makes a module fragile (it breaks when any dependency changes) and hard to\ntest or reuse in isolation.\n\nFor each module below, reduce its direct dependencies: depend on abstractions rather\nthan concretes (see Dependency Inversion), collapse several fine-grained collaborators\nbehind one focused interface, and move logic that pulls in unrelated dependencies into\na more appropriate module.",
      "sort_metric": "fan_out",
      "title": "Fan-out — Efferent Coupling"
    }
  ],
  "roots": {
    "registry": "/home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f",
    "target": "/home/runner/work/code-ranker/code-ranker"
  },
  "schema_version": "2",
  "target": "/home/runner/work/code-ranker/code-ranker",
  "timings": [
    {
      "detail": "62 nodes from 45 files",
      "ms": 360,
      "stage": "rust"
    },
    {
      "detail": "45 nodes annotated",
      "ms": 1193,
      "stage": "complexity"
    },
    {
      "detail": "nodes=62 edges=262",
      "ms": 27,
      "stage": "projection"
    }
  ],
  "versions": {
    "code-ranker": "1.1.0",
    "rustc": "1.96.0"
  },
  "workspace": "/home/runner/work/code-ranker/code-ranker"
}
