diff --git a/CHANGELOG.md b/CHANGELOG.md index e3c5ca3..189b447 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ * add progress Spinners * improve handling of strg C in edit mode +* add `--package` to features ## 0.11.1 diff --git a/src/edit/display.rs b/src/edit/display.rs index 78b30e2..44821e8 100644 --- a/src/edit/display.rs +++ b/src/edit/display.rs @@ -50,6 +50,16 @@ impl Display { }) } + pub fn set_selected_package(&mut self, package_name: String) -> Result<()> { + self.package_selector.selected_index = self + .package_selector + .get_index(&package_name) + .context(format!("no package with name '{}' found", package_name))?; + self.select_selected_package()?; + + Ok(()) + } + fn select_selected_package(&mut self) -> Result<()> { self.state = DisplayState::Dep; @@ -64,19 +74,15 @@ impl Display { } pub fn set_selected_dep(&mut self, dep_name: String) -> Result<()> { - match self - .document - .get_package(self.package_selector.get_selected()?.name())? - .get_dep_index(&dep_name) - { - Ok(index) => { - self.dep_selector.selected_index = index; + self.dep_selector.selected_index = + self.dep_selector.get_index(&dep_name).context(format!( + "no dependency with name '{}' found in package '{}'", + dep_name, + self.package_selector.get_selected()?.name() + ))?; - self.select_selected_dep()?; - Ok(()) - } - Err(err) => Err(err), - } + self.select_selected_dep()?; + Ok(()) } fn select_selected_dep(&mut self) -> Result<()> { diff --git a/src/edit/filter_view/mod.rs b/src/edit/filter_view/mod.rs index 1a988ea..4c9288e 100644 --- a/src/edit/filter_view/mod.rs +++ b/src/edit/filter_view/mod.rs @@ -37,6 +37,10 @@ impl FilterView { .context("nothing selected") } + pub fn get_index(&self, name: &str) -> Option { + self.data.iter().position(|item| item.name() == name) + } + pub fn has_data(&self) -> bool { !self.data.is_empty() } diff --git a/src/main.rs b/src/main.rs index f6f579c..ab2b6d3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,9 @@ struct FeaturesArgs { #[arg(long = "generate", value_enum)] generator: Option, + #[arg(long, short)] + package: Option, + #[arg(long, short)] dependency: Option, @@ -100,6 +103,10 @@ fn run(args: FeaturesArgs) -> Result<()> { } else { let mut display = Display::new()?; + if let Some(name) = args.package { + display.set_selected_package(name)? + } + if let Some(name) = args.dependency { display.set_selected_dep(name)? } diff --git a/src/project/package.rs b/src/project/package.rs index 44682f9..9264e2c 100644 --- a/src/project/package.rs +++ b/src/project/package.rs @@ -1,5 +1,5 @@ use crate::project::dependency::Dependency; -use color_eyre::eyre::{bail, eyre}; +use color_eyre::eyre::bail; pub struct Package { pub dependencies: Vec, @@ -22,16 +22,6 @@ impl Package { } } - pub fn get_dep_index(&self, name: &String) -> color_eyre::Result { - Ok(self - .dependencies - .iter() - .enumerate() - .find(|(_, dep)| dep.get_name() == *name) - .ok_or(eyre!("dependency \"{}\" could not be found", name))? - .0) - } - pub fn get_dep_mut(&mut self, name: &str) -> color_eyre::Result<&mut Dependency> { let dep = self .dependencies