Skip to content

Commit ad4b188

Browse files
committed
Remove ImportScanner from Rust
1 parent b11612e commit ad4b188

File tree

5 files changed

+377
-375
lines changed

5 files changed

+377
-375
lines changed

rust/src/errors.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pub enum GrimpError {
2020

2121
#[error("Error parsing python code (line {line_number}, text {text}).")]
2222
ParseError {
23+
module_filename: String,
2324
line_number: usize,
2425
text: String,
2526
#[source]

rust/src/import_parsing.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ use ruff_python_ast::statement_visitor::{StatementVisitor, walk_body, walk_stmt}
33
use ruff_python_ast::{Expr, Stmt};
44
use ruff_python_parser::parse_module;
55
use ruff_source_file::{LineIndex, SourceCode};
6-
use std::fs;
7-
use std::path::Path;
86

97
#[derive(Debug, PartialEq, Eq, Clone)]
108
pub struct ImportedObject {
@@ -30,12 +28,10 @@ impl ImportedObject {
3028
}
3129
}
3230

33-
pub fn parse_imports(path: &Path) -> GrimpResult<Vec<ImportedObject>> {
34-
let code = fs::read_to_string(path).expect("failed to read file");
35-
parse_imports_from_code(&code)
36-
}
37-
38-
pub fn parse_imports_from_code(code: &str) -> GrimpResult<Vec<ImportedObject>> {
31+
pub fn parse_imports_from_code(
32+
code: &str,
33+
module_filename: &str,
34+
) -> GrimpResult<Vec<ImportedObject>> {
3935
let line_index = LineIndex::from_source_text(code);
4036
let source_code = SourceCode::new(code, &line_index);
4137

@@ -46,6 +42,7 @@ pub fn parse_imports_from_code(code: &str) -> GrimpResult<Vec<ImportedObject>> {
4642
let line_number = location_index.get();
4743
let text = source_code.line_text(location_index).trim();
4844
Err(GrimpError::ParseError {
45+
module_filename: module_filename.to_string(),
4946
line_number,
5047
text: text.to_owned(),
5148
parse_error: e,
@@ -157,13 +154,13 @@ mod tests {
157154

158155
#[test]
159156
fn test_parse_empty_string() {
160-
let imports = parse_imports_from_code("").unwrap();
157+
let imports = parse_imports_from_code("", "some_filename.py").unwrap();
161158
assert!(imports.is_empty());
162159
}
163160

164161
fn parse_and_check(case: (&str, &[&str])) {
165162
let (code, expected_imports) = case;
166-
let imports = parse_imports_from_code(code).unwrap();
163+
let imports = parse_imports_from_code(code, "some_filename.py").unwrap();
167164
assert_eq!(
168165
expected_imports,
169166
imports.into_iter().map(|i| i.name).collect::<Vec<_>>()
@@ -172,7 +169,7 @@ mod tests {
172169

173170
fn parse_and_check_with_typechecking_only(case: (&str, &[(&str, bool)])) {
174171
let (code, expected_imports) = case;
175-
let imports = parse_imports_from_code(code).unwrap();
172+
let imports = parse_imports_from_code(code, "some_filename.py").unwrap();
176173
assert_eq!(
177174
expected_imports
178175
.iter()
@@ -526,6 +523,7 @@ import a
526523
from b import c
527524
from d import (e)
528525
from f import *",
526+
"some_filename.py",
529527
)
530528
.unwrap();
531529
assert_eq!(
@@ -552,6 +550,7 @@ if TYPE_CHECKING:
552550
from d import (e)
553551
if TYPE_CHECKING:
554552
from f import *",
553+
"some_filename.py",
555554
)
556555
.unwrap();
557556
assert_eq!(

0 commit comments

Comments
 (0)