From 345cdef113871450016827270c4d914eecac287a Mon Sep 17 00:00:00 2001 From: WindSoilder Date: Wed, 3 May 2023 19:08:54 +0800 Subject: [PATCH] Fix overlay's help message lead to internal error (#9087) --- crates/nu-parser/src/parse_keywords.rs | 10 ++++++++++ tests/overlays/mod.rs | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/crates/nu-parser/src/parse_keywords.rs b/crates/nu-parser/src/parse_keywords.rs index 444edfc9ea..d394bdf786 100644 --- a/crates/nu-parser/src/parse_keywords.rs +++ b/crates/nu-parser/src/parse_keywords.rs @@ -102,6 +102,16 @@ pub fn parse_keyword( { // Apply parse keyword side effects let cmd = working_set.get_decl(call.decl_id); + // check help flag first. + if call.named_iter().any(|(flag, _, _)| flag.item == "help") { + let call_span = call.span(); + return Pipeline::from_vec(vec![Expression { + expr: Expr::Call(call), + span: call_span, + ty: Type::Any, + custom_completion: None, + }]); + } match cmd.name() { "overlay hide" => parse_overlay_hide(working_set, call), diff --git a/tests/overlays/mod.rs b/tests/overlays/mod.rs index 088263bc34..0579f9c3fc 100644 --- a/tests/overlays/mod.rs +++ b/tests/overlays/mod.rs @@ -1312,3 +1312,13 @@ fn alias_overlay_new() { assert_eq!(actual.out, "eggs"); assert_eq!(actual_repl.out, "eggs"); } + +#[test] +fn overlay_help_no_error() { + let actual = nu!(cwd: ".", "overlay hide -h"); + assert!(actual.err.is_empty()); + let actual = nu!(cwd: ".", "overlay new -h"); + assert!(actual.err.is_empty()); + let actual = nu!(cwd: ".", "overlay use -h"); + assert!(actual.err.is_empty()); +}