diff --git a/rust/kcl-lib/src/errors.rs b/rust/kcl-lib/src/errors.rs index d8865e735..64c0c40cb 100644 --- a/rust/kcl-lib/src/errors.rs +++ b/rust/kcl-lib/src/errors.rs @@ -217,10 +217,13 @@ impl IntoDiagnostic for KclErrorWithOutputs { fn to_lsp_diagnostics(&self, code: &str) -> Vec { let message = self.error.get_message(); let source_ranges = self.error.source_ranges(); + println!("self: {:?}", self); source_ranges .into_iter() .map(|source_range| { + println!("source_range: {:?}", source_range); + println!("filenames: {:?}", self.filenames); let source = self .source_files .get(&source_range.module_id()) diff --git a/rust/kcl-lib/src/execution/mod.rs b/rust/kcl-lib/src/execution/mod.rs index 53c0b8e2a..a4709fca9 100644 --- a/rust/kcl-lib/src/execution/mod.rs +++ b/rust/kcl-lib/src/execution/mod.rs @@ -722,16 +722,52 @@ impl ExecutorContext { exec_state: &mut ExecState, preserve_mem: bool, ) -> Result<(EnvironmentRef, Option), KclErrorWithOutputs> { + exec_state.add_root_module_contents(program); self.prepare_mem(exec_state).await?; let mut universe = std::collections::HashMap::new(); + let default_planes = self.engine.get_default_planes().read().await.clone(); crate::walk::import_universe(self, &program.ast, &mut universe, exec_state) .await - .map_err(KclErrorWithOutputs::no_outputs)?; + .map_err(|err| { + let module_id_to_module_path: IndexMap = exec_state + .global + .path_to_source_id + .iter() + .map(|(k, v)| ((*v), k.clone())) + .collect(); + + KclErrorWithOutputs::new( + err, + exec_state.global.operations.clone(), + exec_state.global.artifact_commands.clone(), + exec_state.global.artifact_graph.clone(), + module_id_to_module_path, + exec_state.global.id_to_source.clone(), + default_planes.clone(), + ) + })?; for modules in crate::walk::import_graph(&universe, self) - .map_err(KclErrorWithOutputs::no_outputs)? + .map_err(|err| { + let module_id_to_module_path: IndexMap = exec_state + .global + .path_to_source_id + .iter() + .map(|(k, v)| ((*v), k.clone())) + .collect(); + + KclErrorWithOutputs::new( + err, + exec_state.global.operations.clone(), + exec_state.global.artifact_commands.clone(), + exec_state.global.artifact_graph.clone(), + module_id_to_module_path, + exec_state.global.id_to_source.clone(), + default_planes.clone(), + ) + })? .into_iter() { #[cfg(not(target_arch = "wasm32"))] @@ -818,7 +854,6 @@ impl ExecutorContext { .iter() .map(|(k, v)| ((*v), k.clone())) .collect(); - let default_planes = self.engine.get_default_planes().read().await.clone(); return Err(KclErrorWithOutputs::new( e, @@ -845,8 +880,6 @@ impl ExecutorContext { exec_state: &mut ExecState, preserve_mem: bool, ) -> Result<(EnvironmentRef, Option), KclErrorWithOutputs> { - exec_state.add_root_module_contents(program); - let _stats = crate::log::LogPerfStats::new("Interpretation"); // Re-apply the settings, in case the cache was busted.