pyimportparse

Crates.iopyimportparse
lib.rspyimportparse
version0.2.3
created_at2025-04-17 17:45:16.015486+00
updated_at2025-05-03 06:43:18.4377+00
descriptionA rust crate to parse python imports
homepage
repositoryhttps://github.com/Peter554/pyimportparse/
max_upload_size
id1638205
size42,328
Peter Byfield (Peter554)

documentation

https://docs.rs/pyimportparse/latest/pyimportparse/

README

pyimportparse

A rust crate to parse python imports (while ignoring the rest of the code).

Motivation:

Use with care. I've run the parser over the Django codebase and the results suggest that all imports were successfully parsed. However, there could still be cases where the parser does not behave correctly.

use pyimportparse::{parse_imports, Import};

let code = r#"
import a
from b import c
from .d import (e, f)
from ..g import *

if TYPE_CHECKING:
    import h

def foo():
    import i
"#;
    
let imports = parse_imports(&code).unwrap();
    
assert_eq!(vec![
    // (imported_object, line_number, typechecking_only)
    Import::new("a".to_owned(), 2, false),
    Import::new("b.c".to_owned(), 3, false),
    Import::new(".d.e".to_owned(), 4, false),
    Import::new(".d.f".to_owned(), 4, false),
    Import::new("..g.*".to_owned(), 5, false),
    Import::new("h".to_owned(), 8, true),
    Import::new("i".to_owned(), 11, false),
], imports);




Commit count: 39

cargo fmt