ast-demangle

crates.io docs .github/workflows/ci.yml

Parses mangled names and produces structured results.

Example:

```rust use astdemangle::rustv0::display::Style; use astdemangle::rustv0::{Identifier, Path, Symbol};

let mangledname = "RNvNtCs6GSVXm7oiwY5regex4utf811decodeutf8.llvm.1119170478327948870"; let (symbol, suffix) = Symbol::parsefromstr(mangled_name).unwrap();

// The suffix is returned. assert_eq!(suffix, ".llvm.1119170478327948870");

// The default style for displaying is the long format. asserteq!(format!("{}", symbol), "regex[4df147058689a776]::utf8::decodeutf8");

// To omit the crate hash, use the alternate display format. asserteq!(format!("{:#}", symbol), "regex::utf8::decodeutf8");

// Use Symbol::display and Style to specify the display style explicitly.

asserteq!(format!("{}", symbol.display(Style::Short)), "decodeutf8"); asserteq!(format!("{}", symbol.display(Style::Normal)), "regex::utf8::decodeutf8");

asserteq!( format!("{}", symbol.display(Style::Long)), "regex[4df147058689a776]::utf8::decodeutf8" );

// You can access the structure of the demangled symbol.

asserteq!( symbol, Symbol { version: None, path: Path::Nested { namespace: b'v', path: Path::Nested { namespace: b't', path: Path::CrateRoot(Identifier { disambiguator: 0x4df147058689a776, name: "regex".into() }) .into(), name: Identifier { disambiguator: 0, name: "utf8".into() } } .into(), name: Identifier { disambiguator: 0, name: "decodeutf8".into() } } .into(), instantiatingcrate: None } ); ```