From 8cbc78f34d44a965b940cfbc931040389671d1b4 Mon Sep 17 00:00:00 2001 From: Aram Drevekenin Date: Fri, 14 Oct 2022 13:22:32 +0200 Subject: fix(layouts): error on mixed cwd and pane children --- zellij-utils/src/input/unit/layout_test.rs | 14 ++++++++++++++ zellij-utils/src/kdl/kdl_layout_parser.rs | 7 ++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/zellij-utils/src/input/unit/layout_test.rs b/zellij-utils/src/input/unit/layout_test.rs index 88939e167..82a221e2e 100644 --- a/zellij-utils/src/input/unit/layout_test.rs +++ b/zellij-utils/src/input/unit/layout_test.rs @@ -1098,6 +1098,20 @@ fn error_on_mixed_command_and_child_panes() { assert!(layout.is_err(), "error provided"); } +#[test] +fn error_on_mixed_cwd_and_child_panes() { + let kdl_layout = r#" + layout { + pane cwd="/tmp" { + pane + pane + } + } + "#; + let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None); + assert!(layout.is_err(), "error provided"); +} + #[test] fn error_on_bare_args_without_command() { let kdl_layout = r#" diff --git a/zellij-utils/src/kdl/kdl_layout_parser.rs b/zellij-utils/src/kdl/kdl_layout_parser.rs index b8f60d8a0..d7df58890 100644 --- a/zellij-utils/src/kdl/kdl_layout_parser.rs +++ b/zellij-utils/src/kdl/kdl_layout_parser.rs @@ -622,6 +622,8 @@ impl<'a> KdlLayoutParser<'a> { kdl_get_bool_property_or_child_value_with_error!(kdl_node, "borderless").is_some(); let has_focus_prop = kdl_get_bool_property_or_child_value_with_error!(kdl_node, "focus").is_some(); + let has_cwd_prop = + kdl_get_string_property_or_child_value_with_error!(kdl_node, "cwd").is_some(); let has_non_cwd_run_prop = self .parse_command_or_plugin_block(kdl_node)? .map(|r| match r { @@ -631,7 +633,7 @@ impl<'a> KdlLayoutParser<'a> { .unwrap_or(false); let has_nested_nodes_or_children_block = self.has_child_panes_tabs_or_templates(kdl_node); if has_nested_nodes_or_children_block - && (has_borderless_prop || has_focus_prop || has_non_cwd_run_prop) + && (has_borderless_prop || has_focus_prop || has_non_cwd_run_prop || has_cwd_prop) { let mut offending_nodes = vec![]; if has_borderless_prop { @@ -643,6 +645,9 @@ impl<'a> KdlLayoutParser<'a> { if has_non_cwd_run_prop { offending_nodes.push("command/plugin"); } + if has_cwd_prop { + offending_nodes.push("cwd"); + } Err(ConfigError::new_kdl_error( format!( "Cannot have both properties ({}) and nested children", -- cgit v1.2.3