From 6595c0659891235946ffa995e91cabe383a6caa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20=C5=BD=C3=A1dn=C3=ADk?= Date: Sat, 2 Oct 2021 03:42:35 +0300 Subject: [PATCH] Relax panic into error Convert the panic when declaration cannot find predeclaration into an error. This error is already covered and reported in the predeclaration phase. --- crates/nu-parser/src/parse_keywords.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/crates/nu-parser/src/parse_keywords.rs b/crates/nu-parser/src/parse_keywords.rs index 6eb40daad0..033a21e738 100644 --- a/crates/nu-parser/src/parse_keywords.rs +++ b/crates/nu-parser/src/parse_keywords.rs @@ -101,15 +101,20 @@ pub fn parse_def( if let (Some(name), Some(mut signature), Some(block_id)) = (&name, signature, block_id) { - let decl_id = working_set - .find_decl(name.as_bytes()) - .expect("internal error: predeclaration failed to add definition"); + if let Some(decl_id) = working_set.find_decl(name.as_bytes()) { + let declaration = working_set.get_decl_mut(decl_id); - let declaration = working_set.get_decl_mut(decl_id); + signature.name = name.clone(); - signature.name = name.clone(); - - *declaration = signature.into_block_command(block_id); + *declaration = signature.into_block_command(block_id); + } else { + error = error.or_else(|| { + Some(ParseError::UnknownState( + "Could not define hidden command".into(), + spans[1], + )) + }); + }; } } else { let err_span = Span {