devscout-rs 0.9.0

Fast code index for C# and TypeScript codebases -- map, find, refs, impact from the CLI.
docs.rs failed to build devscout-rs-0.9.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: devscout-rs-0.8.0

devscout

crates.io CI license

A code index for C#, TypeScript and Rust repositories. Build it once, then ask who references a symbol, what a change can break, and which tests reach it. Every answer row names the source line and the rule that produced it.

devscout parses the repository with tree-sitter and writes a graph of definitions and references next to it. Queries read that graph. Indexing and queries never run your build and never touch the network.

What it answers

Question Command
Where is Order defined, and which files are about orders? devscout find Order
Who references this type or member? devscout refs IOrderRepository
Show the declaration and everything that points at it devscout read OrderService.Place
What can break if I change this file or symbol? devscout impact src/OrderRepository.cs
Which tests reach this symbol? devscout tests OrderService

Add --json for a versioned, machine-readable answer (JSON output). Every command and flag: CLI reference.

Install

cargo install devscout-rs --locked   # installs the `devscout` binary

Signed binaries for Linux, macOS and Windows are on the releases page. Verify a download, or build from source as Install describes.

Quickstart

Run these from the root of any repository with C#, TypeScript or Rust in it. The output below comes from a small sample of three C# files and eleven TypeScript and JavaScript files:

$ devscout init --no-hooks
devscout initialized at ...
languages: ...
hooks: skipped (--no-hooks)
map: mapped 14 files under . (preserved 0 agent purposes, downgraded 0 changed, 14 new, 0 removed, 14 ast signatures); graph rebuilt in ... (24 defs, 4 edges)

$ devscout refs IOrderRepository
Shop.Data.IOrderRepository  (interface)  1 inbound (showing 1)
def: src/IOrderRepository.cs:3
inbound:
  inherits (1):
    src/OrderRepository.cs:3  inherits  public class OrderRepository : IOrderRepository
  uses-type (0):
  uses-member (0):
next: devscout tests Shop.Data.IOrderRepository | devscout impact src/IOrderRepository.cs

$ devscout impact src/OrderRepository.cs --hops 2
impact: src/OrderRepository.cs  (file, seed files: src/OrderRepository.cs)  hops<=2  1 files (showing 1)
affected files: 1  shown: 1  dropped: 0
file  hops  via  top-symbols
src/OrderController.cs  1  3  OrderRepository
next: devscout refs Shop.Data.OrderRepository

A resolved refs, read, impact or tests answer in text or --compact mode opens with the full count before any cap applies (1 inbound (showing 1)), and a text answer from those verbs or from find ends with a next: line naming the cheapest verb worth running — omitted when nothing is left to suggest — so a long answer tells you both what you are not seeing and where to go next. Under --json the totals arrive as table fields and the suggestions as a next array; find has no --json shape.

Run devscout map after edits; only changed files are re-parsed. An ambiguous name lists every candidate, and --pick N chooses one (Concepts).

Language support

C# (.cs) is the complete story: definitions, inheritance, type and member references, implementations registered through dependency injection, and candidate message-bus routes, with optional compiler-verified enrichment (Compiler facts). Which constructs produce facts is catalogued in C# constructs, and the targets the compiler-fact path is qualified on in .NET targets.

TypeScript and JavaScript (.ts, .tsx, .mts, .cts, .js, .jsx, .mjs, .cjs) are indexed for find and file purposes and graphed with imports (tsconfig paths and re-export barrels), calls, JSX usage and dispatch. refs, read, impact and tests read those edges for TypeScript and JavaScript alike; JavaScript query quality is not measured.

Rust (.rs) is indexed and graphed through path resolution: modules, use scope, calls, type uses, trait impls and #[test] functions, with no method-call typing (Rust constructs).

Every known gap, one line each: Limitations.

When to use it, and when not

  • Use devscout for name-level and reachability questions: implementations of an interface, callers of a member through a base type, the blast radius of a file.
  • Use rg to find a distinctive string. It is as correct and faster there; the benchmarks publish where each tool wins.
  • Candidates are labelled. Heuristic rows carry a tier; message-bus rows are possible routes, not verified ones. --no-guess and --no-bus remove them.
  • No silent guessing. An ambiguous name lists every candidate, and an empty answer is reported as empty.

Agent hooks

Optional. devscout init without --no-hooks backs up the agent settings file (~/.claude/settings.json), then adds two PostToolUse hooks that replace a repeated file read with a one-line marker. The index works the same without them. What they do and how to remove them.

Documentation

I want to Read
Find the right page Documentation map
Understand the graph, edges, tiers and seeds Concepts
Look up a command, flag or variable Reference
Enrich C# with compiler-verified facts Compiler facts
Connect impact across repositories Cross-repo impact
Upgrade from an earlier version Upgrading
Fix a stale, empty or ambiguous answer Troubleshooting
See the evidence behind accuracy claims Benchmarks
Contribute CONTRIBUTING.md, ARCHITECTURE.md

Project status

devscout is pre-1.0 and follows semantic versioning; releases are cut from v* tags, and a minor release may change the artifact layout (Upgrading). Changes: CHANGELOG.md. Security reports: SECURITY.md. How the project is run: GOVERNANCE.md, MAINTAINERS.md and the Code of Conduct.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.