diff --git a/crates/cairo-lang-compiler/src/lib.rs b/crates/cairo-lang-compiler/src/lib.rs index 5655c57266c..7289e865f1f 100644 --- a/crates/cairo-lang-compiler/src/lib.rs +++ b/crates/cairo-lang-compiler/src/lib.rs @@ -46,13 +46,17 @@ pub struct CompilerConfig<'a> { /// Replaces Sierra IDs with human-readable ones. pub replace_ids: bool, - /// Adds a mapping used by [cairo-profiler](https://github.com/software-mansion/cairo-profiler) to - /// [cairo_lang_sierra::debug_info::Annotations] in [cairo_lang_sierra::debug_info::DebugInfo]. + /// Adds a mapping used by [cairo-profiler](https://github.com/software-mansion/cairo-profiler) + /// to [Annotations] in [DebugInfo]. pub add_statements_functions: bool, - /// Adds a mapping used by [cairo-coverage](https://github.com/software-mansion/cairo-coverage) to - /// [cairo_lang_sierra::debug_info::Annotations] in [cairo_lang_sierra::debug_info::DebugInfo]. + /// Adds a mapping used by [cairo-coverage](https://github.com/software-mansion/cairo-coverage) + /// to [Annotations] in [DebugInfo]. pub add_statements_code_locations: bool, + + /// Adds a mapping used by [cairo-debugger](https://github.com/software-mansion-labs/cairo-debugger) + /// to [Annotations] in [DebugInfo] in the compiled tests. + pub add_functions_debug_info: bool, } /// Compiles a Cairo project at the given path. @@ -346,6 +350,12 @@ pub fn compile_prepared_db_program_artifact_for_functions<'db>( )) }; + if compiler_config.add_functions_debug_info { + annotations.extend(Annotations::from( + sierra_program_with_debug.debug_info.functions_info.extract_serializable_debug_info(db), + )) + } + let debug_info = DebugInfo { type_names: Default::default(), libfunc_names: Default::default(), diff --git a/crates/cairo-lang-starknet/src/compile.rs b/crates/cairo-lang-starknet/src/compile.rs index 156850575bc..20707d24266 100644 --- a/crates/cairo-lang-starknet/src/compile.rs +++ b/crates/cairo-lang-starknet/src/compile.rs @@ -167,6 +167,12 @@ fn compile_contract_with_prepared_and_checked_db<'db>( annotations.extend(Annotations::from(statements_functions)) }; + if compiler_config.add_functions_debug_info { + annotations.extend(Annotations::from( + debug_info.functions_info.extract_serializable_debug_info(db), + )) + } + let abi_builder: Option> = AbiBuilder::from_submodule(db, contract.submodule_id, Default::default()).ok(); let finalized_abi = diff --git a/crates/cairo-lang-starknet/src/test_utils.rs b/crates/cairo-lang-starknet/src/test_utils.rs index df3157985a7..ed2f6e34664 100644 --- a/crates/cairo-lang-starknet/src/test_utils.rs +++ b/crates/cairo-lang-starknet/src/test_utils.rs @@ -84,6 +84,7 @@ pub fn get_test_contract(example_file_name: &str) -> ContractClass { diagnostics_reporter, add_statements_functions: false, add_statements_code_locations: false, + add_functions_debug_info: false, }, ) .expect("compile_path failed") diff --git a/crates/cairo-lang-test-plugin/src/lib.rs b/crates/cairo-lang-test-plugin/src/lib.rs index e06f9e0a26d..71de23c2fb9 100644 --- a/crates/cairo-lang-test-plugin/src/lib.rs +++ b/crates/cairo-lang-test-plugin/src/lib.rs @@ -65,13 +65,17 @@ pub struct TestsCompilationConfig<'db> { /// If not defined, test crates will be searched. pub executable_crate_ids: Option>>, - /// Adds a mapping used by [cairo-profiler](https://github.com/software-mansion/cairo-profiler) to - /// [Annotations] in [DebugInfo] in the compiled tests. + /// Adds a mapping used by [cairo-profiler](https://github.com/software-mansion/cairo-profiler) + /// to [Annotations] in [DebugInfo] in the compiled tests. pub add_statements_functions: bool, - /// Adds a mapping used by [cairo-coverage](https://github.com/software-mansion/cairo-coverage) to - /// [Annotations] in [DebugInfo] in the compiled tests. + /// Adds a mapping used by [cairo-coverage](https://github.com/software-mansion/cairo-coverage) + /// to [Annotations] in [DebugInfo] in the compiled tests. pub add_statements_code_locations: bool, + + /// Adds a mapping used by [cairo-debugger](https://github.com/software-mansion-labs/cairo-debugger) + /// to [Annotations] in [DebugInfo] in the compiled tests. + pub add_functions_debug_info: bool, } /// Runs Cairo compiler. @@ -172,6 +176,12 @@ pub fn compile_test_prepared_db<'db>( )) } + if tests_compilation_config.add_functions_debug_info { + annotations.extend(Annotations::from( + debug_info.functions_info.extract_serializable_debug_info(db), + )) + } + let executables = collect_executables(db, executable_functions, &sierra_program); let named_tests = all_tests .into_iter() diff --git a/crates/cairo-lang-test-runner/src/lib.rs b/crates/cairo-lang-test-runner/src/lib.rs index a9e38055929..2d4cc8d05f9 100644 --- a/crates/cairo-lang-test-runner/src/lib.rs +++ b/crates/cairo-lang-test-runner/src/lib.rs @@ -75,6 +75,7 @@ impl<'db> TestRunner<'db> { contract_declarations: None, contract_crate_ids: None, executable_crate_ids: None, + add_functions_debug_info: false, }, )?; Ok(Self { compiler, config, custom_hint_processor_factory: None }) diff --git a/crates/cairo-lang-test-runner/src/test.rs b/crates/cairo-lang-test-runner/src/test.rs index 04896f6cf88..fa748572cfd 100644 --- a/crates/cairo-lang-test-runner/src/test.rs +++ b/crates/cairo-lang-test-runner/src/test.rs @@ -21,6 +21,7 @@ fn test_compiled_serialization() { starknet: true, add_statements_functions: false, add_statements_code_locations: false, + add_functions_debug_info: false, contract_declarations: None, contract_crate_ids: None, executable_crate_ids: None,