help generate_docs | flatten crashes nushell (#3099)

* fix case where parent_name was {nu, term} and possibly others in the future by doing an extra test first to see if if the *parent_name key actually exists in cmap

* update with help generate_docs testing
This commit is contained in:
Michael Angerman 2021-02-26 12:05:22 -08:00 committed by GitHub
parent 596608aa0c
commit 6b2327f231
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 4 deletions

View File

@ -0,0 +1,31 @@
use nu_test_support::{nu, pipeline};
#[test]
fn help_commands_count() {
let actual = nu!(
cwd: ".", pipeline(
r#"
help commands | count
"#
));
let output = actual.out;
let output_int: i32 = output.parse().unwrap();
let is_positive = output_int.is_positive();
assert!(is_positive);
}
#[test]
fn help_generate_docs_count() {
let actual = nu!(
cwd: ".", pipeline(
r#"
help generate_docs | flatten | count
"#
));
let output = actual.out;
let output_int: i32 = output.parse().unwrap();
let is_positive = output_int.is_positive();
assert!(is_positive);
}

View File

@ -22,6 +22,7 @@ mod get;
mod group_by; mod group_by;
mod hash_; mod hash_;
mod headers; mod headers;
mod help;
mod histogram; mod histogram;
mod insert; mod insert;
mod into_int; mod into_int;

View File

@ -67,10 +67,12 @@ pub fn generate_docs(scope: &Scope) -> Value {
if name.contains(' ') { if name.contains(' ') {
let split_name = name.split_whitespace().collect_vec(); let split_name = name.split_whitespace().collect_vec();
let parent_name = split_name.first().expect("Expected a parent command name"); let parent_name = split_name.first().expect("Expected a parent command name");
let sub_names = cmap if cmap.contains_key(*parent_name) {
.get_mut(*parent_name) let sub_names = cmap
.expect("Expected a entry for parent"); .get_mut(*parent_name)
sub_names.push(name.to_owned()); .expect("Expected a entry for parent");
sub_names.push(name.to_owned());
}
} else { } else {
cmap.insert(name.to_owned(), Vec::new()); cmap.insert(name.to_owned(), Vec::new());
}; };