mirror of
https://github.com/astral-sh/ruff
synced 2026-01-21 05:20:49 -05:00
## Summary I'm trying to reduce code complexity for [RustPython](https://github.com/RustPython/RustPython), we have this file:056795eed4/compiler/codegen/src/unparse.rswhich can be replaced entirely by `ruff_python_codegen::Generator`. Unfortunately we can not create an instance of `Generator` easily, because `Indentation` is not exported atcda376afe0/crates/ruff_python_codegen/src/lib.rs (L3)I have managed to bypass this restriction by doing: ```rust let contents = r"x = 1"; let module = ruff_python_parser::parse_module(contents).unwrap(); let stylist = ruff_python_codegen::Stylist::from_tokens(module.tokens(), contents); stylist.indentation() ``` But ideally I'd rather use: ```rust ruff_python_codegen::Indentation::default() ```
16 lines
512 B
Rust
16 lines
512 B
Rust
pub use generator::Generator;
|
|
use ruff_python_parser::{ParseError, parse_module};
|
|
pub use stylist::{Indentation, Stylist};
|
|
|
|
mod generator;
|
|
mod stylist;
|
|
|
|
/// Run round-trip source code generation on a given Python code.
|
|
pub fn round_trip(code: &str) -> Result<String, ParseError> {
|
|
let parsed = parse_module(code)?;
|
|
let stylist = Stylist::from_tokens(parsed.tokens(), code);
|
|
let mut generator: Generator = (&stylist).into();
|
|
generator.unparse_suite(parsed.suite());
|
|
Ok(generator.generate())
|
|
}
|