FireDBG Source Parser for Rust
Based on syn
.
firedbg-rust-parser
is a Rust source code parser. It can parse a Rust source file, walk the abstract syntax tree of Rust, then produce a list of breakpoints for the debugger to pause the program at the beginning of every function call.
Walking the AST
We will walk the Rust AST, syn::Item
, and collect all forms of function / method:
- Free standalone function,
syn::Item::Fn
- Impl function,
syn::Item::Impl
- Trait default function,
syn::Item::Trait
- Impl trait function,
syn::Item::Impl
- Nested function, walking the
syn::Item
recursively - Function defined inside inline module,
syn::Item::Mod
Breakable Span
A span is a region of source code, denoted by a ranged line and column number tuple, along with macro expansion information. It allows the debugger to set a breakpoint at the correct location. The debugger will set the breakpoint either at the start or the end of the breakable span.
Ideas
The current implementation is rudimentary, but we get exactly what we need. We considered embedding Rust Analyzer, for a few advantages: 1) to get the fully-qualified type names 2) to traverse the static call graph. The problem is resource usage: we'd end up running the compiler frontend thrice (by cargo, by language server, by firedbg).