@@ -3,8 +3,6 @@ use ruff_python_ast::statement_visitor::{StatementVisitor, walk_body, walk_stmt}
33use ruff_python_ast:: { Expr , Stmt } ;
44use ruff_python_parser:: parse_module;
55use ruff_source_file:: { LineIndex , SourceCode } ;
6- use std:: fs;
7- use std:: path:: Path ;
86
97#[ derive( Debug , PartialEq , Eq , Clone ) ]
108pub 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
526523from b import c
527524from d import (e)
528525from f import *" ,
526+ "some_filename.py" ,
529527 )
530528 . unwrap ( ) ;
531529 assert_eq ! (
@@ -552,6 +550,7 @@ if TYPE_CHECKING:
552550from d import (e)
553551if TYPE_CHECKING:
554552 from f import *" ,
553+ "some_filename.py" ,
555554 )
556555 . unwrap ( ) ;
557556 assert_eq ! (
0 commit comments