11use crate :: instruction_generator:: test_utils:: generate_instructions_str_with_types;
2- use crate :: instruction_generator:: { generate_instructions, InstructionGeneratorResult } ;
2+ use crate :: instruction_generator:: {
3+ generate_instructions, unwrap_linter_context, InstructionGeneratorResult ,
4+ } ;
35use crate :: interpreter:: interpreter:: Interpreter ;
46use crate :: interpreter:: interpreter_trait:: InterpreterTrait ;
57use crate :: interpreter:: read_input:: ReadInputSource ;
68use crate :: interpreter:: screen:: { CrossTermScreen , HeadlessScreen } ;
79use crate :: interpreter:: write_printer:: WritePrinter ;
810use crate :: interpreter:: Stdlib ;
911use crate :: RuntimeErrorPos ;
10- use rusty_linter;
11- use rusty_linter:: { lint, HasUserDefinedTypes } ;
12- use rusty_parser:: parse_main_file;
12+ use rusty_linter:: lint;
13+ use rusty_parser:: { parse_main_file, UserDefinedTypes } ;
1314use std:: collections:: HashMap ;
1415use std:: fs:: File ;
1516use std:: io:: Read ;
@@ -30,15 +31,15 @@ impl<S> MockInterpreterTrait for S where
3031{
3132}
3233
33- fn mock_interpreter_for_user_defined_types < U : HasUserDefinedTypes > (
34- user_defined_types_holder : U ,
34+ fn mock_interpreter_for_user_defined_types (
35+ user_defined_types : UserDefinedTypes ,
3536) -> impl MockInterpreterTrait {
3637 let stdlib = MockStdlib :: default ( ) ;
37- mock_interpreter_for_user_defined_types_stdlib ( user_defined_types_holder , stdlib)
38+ mock_interpreter_for_user_defined_types_stdlib ( user_defined_types , stdlib)
3839}
3940
40- fn mock_interpreter_for_user_defined_types_stdlib < U : HasUserDefinedTypes > (
41- user_defined_types_holder : U ,
41+ fn mock_interpreter_for_user_defined_types_stdlib (
42+ user_defined_types : UserDefinedTypes ,
4243 stdlib : MockStdlib ,
4344) -> impl MockInterpreterTrait {
4445 let stdin = ReadInputSource :: new ( MockStdin { stdin : vec ! [ ] } ) ;
@@ -54,7 +55,7 @@ fn mock_interpreter_for_user_defined_types_stdlib<U: HasUserDefinedTypes>(
5455 stdout,
5556 lpt1,
5657 HeadlessScreen { } ,
57- user_defined_types_holder ,
58+ user_defined_types ,
5859 )
5960 } else {
6061 Interpreter :: new (
@@ -63,20 +64,20 @@ fn mock_interpreter_for_user_defined_types_stdlib<U: HasUserDefinedTypes>(
6364 stdout,
6465 lpt1,
6566 CrossTermScreen :: default ( ) ,
66- user_defined_types_holder ,
67+ user_defined_types ,
6768 )
6869 }
6970}
7071
7172pub fn mock_interpreter_for_input (
7273 input : & str ,
7374) -> ( InstructionGeneratorResult , impl MockInterpreterTrait ) {
74- let ( instruction_generator_result, user_defined_types_holder ) =
75+ let ( instruction_generator_result, user_defined_types ) =
7576 generate_instructions_str_with_types ( input) ;
7677 // println!("{:#?}", instruction_generator_result.instructions);
7778 (
7879 instruction_generator_result,
79- mock_interpreter_for_user_defined_types ( user_defined_types_holder ) ,
80+ mock_interpreter_for_user_defined_types ( user_defined_types ) ,
8081 )
8182}
8283
@@ -96,12 +97,12 @@ pub fn interpret_err(input: &str) -> RuntimeErrorPos {
9697}
9798
9899pub fn interpret_with_raw_input ( input : & str , raw_input : & str ) -> impl MockInterpreterTrait {
99- let ( instruction_generator_result, user_defined_types_holder ) =
100+ let ( instruction_generator_result, user_defined_types ) =
100101 generate_instructions_str_with_types ( input) ;
101102 // for i in instructions.iter() {
102103 // println!("{:?}", i.as_ref());
103104 // }
104- let mut interpreter = mock_interpreter_for_user_defined_types ( user_defined_types_holder ) ;
105+ let mut interpreter = mock_interpreter_for_user_defined_types ( user_defined_types ) ;
105106 if !raw_input. is_empty ( ) {
106107 interpreter. stdin ( ) . add_next_input ( raw_input) ;
107108 }
@@ -112,11 +113,11 @@ pub fn interpret_with_raw_input(input: &str, raw_input: &str) -> impl MockInterp
112113}
113114
114115pub fn interpret_with_env ( input : & str , stdlib : MockStdlib ) -> impl MockInterpreterTrait {
115- let ( instruction_generator_result, user_defined_types_holder ) =
116+ let ( instruction_generator_result, user_defined_types ) =
116117 generate_instructions_str_with_types ( input) ;
117118 // println!("{:#?}", instructions);
118119 let mut interpreter =
119- mock_interpreter_for_user_defined_types_stdlib ( user_defined_types_holder , stdlib) ;
120+ mock_interpreter_for_user_defined_types_stdlib ( user_defined_types , stdlib) ;
120121 interpreter
121122 . interpret ( instruction_generator_result)
122123 . map ( |_| interpreter)
@@ -127,8 +128,9 @@ pub fn interpret_file(filename: &str) -> Result<impl MockInterpreterTrait, Runti
127128 let file_path = format ! ( "../fixtures/{}" , filename) ;
128129 let f = File :: open ( file_path) . expect ( "Could not read bas file" ) ;
129130 let program = parse_main_file ( f) . unwrap ( ) ;
130- let ( linted_program, user_defined_types) = lint ( program) . unwrap ( ) ;
131- let instruction_generator_result = generate_instructions ( linted_program) ;
131+ let ( linted_program, linter_context) = lint ( program) . unwrap ( ) ;
132+ let ( linter_names, user_defined_types) = unwrap_linter_context ( linter_context) ;
133+ let instruction_generator_result = generate_instructions ( linted_program, linter_names) ;
132134 let mut interpreter = mock_interpreter_for_user_defined_types ( user_defined_types) ;
133135 interpreter
134136 . interpret ( instruction_generator_result)
@@ -142,8 +144,9 @@ pub fn interpret_file_with_raw_input(
142144 let file_path = format ! ( "../fixtures/{}" , filename) ;
143145 let f = File :: open ( file_path) . expect ( "Could not read bas file" ) ;
144146 let program = parse_main_file ( f) . unwrap ( ) ;
145- let ( linted_program, user_defined_types) = lint ( program) . unwrap ( ) ;
146- let instruction_generator_result = generate_instructions ( linted_program) ;
147+ let ( linted_program, linter_context) = lint ( program) . unwrap ( ) ;
148+ let ( linter_names, user_defined_types) = unwrap_linter_context ( linter_context) ;
149+ let instruction_generator_result = generate_instructions ( linted_program, linter_names) ;
147150 let mut interpreter = mock_interpreter_for_user_defined_types ( user_defined_types) ;
148151 if !raw_input. is_empty ( ) {
149152 interpreter. stdin ( ) . add_next_input ( raw_input) ;
0 commit comments