Add basic panic handling
Dependencies
- [2]
WFWTKCJNCreate initial Visual Studio Code extension - [3]
72K45XKDRefactor inline credit to improve hover messages
Change contents
- replacement in extensions/vscode/src/vscode_sys/macros/object/function/setter.rs at line 30
> + 'static,>+ std::panic::RefUnwindSafe+ 'static, - edit in extensions/vscode/src/vscode_sys/macros/object/function/setter.rs at line 41
// TODO: error handling - edit in extensions/vscode/src/vscode_sys/macros/object/function/setter.rs at line 42
let returned_result =function_callback(function_context.env, $($function_argument_name),*)?; - replacement in extensions/vscode/src/vscode_sys/macros/object/function/setter.rs at line 43
$function_create_owned_return_type(returned_result)let function_return_value = match std::panic::catch_unwind(|| function_callback(function_context.env, $($function_argument_name),*)) {Ok(function_result) => function_result?,Err(panic_payload) => {tracing::error!(message = "Function panic",event_handler = $function_js_name,?panic_payload);return Err(napi::Error::from_reason("Function panic"));}};$function_create_owned_return_type(function_return_value) - replacement in extensions/vscode/src/vscode_sys/macros/interface_builder.rs at line 44
> + 'static,>+ std::panic::RefUnwindSafe+ 'static, - edit in extensions/vscode/src/vscode_sys/macros/event_handler.rs at line 15
+ std::panic::RefUnwindSafe - replacement in extensions/vscode/src/vscode_sys/macros/event_handler.rs at line 39
message = "Invalid arguments",message = "Invalid arguments provided to event handler", - replacement in extensions/vscode/src/vscode_sys/macros/event_handler.rs at line 43
return Ok(());return Err(napi::Error::from_reason("Invalid arguments provided to event handler",)); - replacement in extensions/vscode/src/vscode_sys/macros/event_handler.rs at line 50
if let Err(error) = handler(function_context.env, event) {tracing::error!(message = "Handler exited unsuccessfully",event_handler = $function_js_name,?error);}match std::panic::catch_unwind(|| handler(function_context.env, event)) {Ok(handler_result) => match handler_result {Ok(result) => Ok(result),Err(error) => {tracing::error!(message = "Event handler returned an error",event_handler = $function_js_name,?error); - replacement in extensions/vscode/src/vscode_sys/macros/event_handler.rs at line 60
Ok(())Err(napi::Error::from_reason("Event handler returned an error"))}},Err(panic_payload) => {tracing::error!(message = "Event handler panicked",event_handler = $function_js_name,?panic_payload);Err(napi::Error::from_reason("Event handler panicked"))}} - edit in extensions/vscode/src/vscode_sys/log.rs at line 191
std::panic::set_hook(Box::new(|panic_hook_info| {tracing::error!(message = "Extension panic", %panic_hook_info);})); - edit in extensions/vscode/src/lib.rs at line 4
// TODO: panic handler - edit in extensions/vscode/src/lib.rs at line 157
let mut program_state = ExtensionState::get()?; - edit in extensions/vscode/src/lib.rs at line 164
let mut program_state = ExtensionState::get()?; - edit in extensions/vscode/src/lib.rs at line 221
let program_state = ExtensionState::get()?; - edit in extensions/vscode/src/lib.rs at line 222
- edit in extensions/vscode/src/lib.rs at line 230
let program_state = ExtensionState::get()?; - edit in .cargo/config.toml at line 3[2.279498]
# Cranelift doesn't support unwinding, so make sure to use LLVM as the codegen backend# TODO: remove this workaround once unwinding is stable on Linux:# https://github.com/rust-lang/rustc_codegen_cranelift/issues/1567[unstable]codegen-backend = true[profile.dev]codegen-backend = "llvm"