| Crates.io | firedbg-rust-parser |
| lib.rs | firedbg-rust-parser |
| version | 1.0.0 |
| created_at | 2023-12-08 16:53:36.784585+00 |
| updated_at | 2023-12-08 16:53:36.784585+00 |
| description | FireDBG Source Parser for Rust |
| homepage | https://firedbg.sea-ql.org |
| repository | https://github.com/SeaQL/FireDBG.for.Rust |
| max_upload_size | |
| id | 1062235 |
| size | 203,662 |
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.
We will walk the Rust AST, syn::Item, and collect all forms of function / method:
syn::Item::Fnsyn::Item::Implsyn::Item::Traitsyn::Item::Implsyn::Item recursivelysyn::Item::ModA 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.
fn func() -> i32 {
/* ^-- Start of Breakable Span: (Line 1, Column 19) */
let mut i = 0;
/* ^-- End of Breakable Span: (Line 3, Column 5) */
for _ in (1..10) {
i += 1;
}
i
}
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).