aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_cli/src')
-rw-r--r--mingling_cli/src/bin/cli.rs4
-rw-r--r--mingling_cli/src/config/cmd_cfg.rs2
-rw-r--r--mingling_cli/src/lib.rs6
-rw-r--r--mingling_cli/src/linter/cmd_explain.rs2
-rw-r--r--mingling_cli/src/linter/cmd_lint.rs2
-rw-r--r--mingling_cli/src/pkg_mgr/cmd_install.rs23
-rw-r--r--mingling_cli/src/pkg_mgr/cmd_pkg_disable.rs2
-rw-r--r--mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs2
-rw-r--r--mingling_cli/src/pkg_mgr/cmd_uninstall.rs2
-rw-r--r--mingling_cli/src/proj_mgr/cmd_class_add.rs2
10 files changed, 31 insertions, 16 deletions
diff --git a/mingling_cli/src/bin/cli.rs b/mingling_cli/src/bin/cli.rs
index f641749..d0c9e8b 100644
--- a/mingling_cli/src/bin/cli.rs
+++ b/mingling_cli/src/bin/cli.rs
@@ -10,8 +10,8 @@ async fn main() {
// Setups
program.with_setup(HelpFlagSetup::default());
- program.with_setup(ExitCodeSetup::default());
- program.with_setup(DirectoryEnvironmentSetup::default());
+ program.with_setup(ExitCodeSetup);
+ program.with_setup(DirectoryEnvironmentSetup);
program.with_setup(MinglingMetadataSetup);
program.with_setup(MlingConfigSetup);
diff --git a/mingling_cli/src/config/cmd_cfg.rs b/mingling_cli/src/config/cmd_cfg.rs
index 8baa4a1..cde7772 100644
--- a/mingling_cli/src/config/cmd_cfg.rs
+++ b/mingling_cli/src/config/cmd_cfg.rs
@@ -109,7 +109,7 @@ pub fn escape_config_value(input: &str) -> String {
}
#[completion(EntryCfg)]
-pub fn complete_config(_ctx: &ShellContext, config: &mut LazyRes<ResMlingConfig>) -> Suggest {
+pub fn complete_config(_ctx: ShellContext, config: &mut LazyRes<ResMlingConfig>) -> Suggest {
let config = config.get_ref();
let keys = config.get_hash_map().keys().cloned().collect::<Vec<_>>();
Suggest::from(keys).combine(suggest! {
diff --git a/mingling_cli/src/lib.rs b/mingling_cli/src/lib.rs
index e82300e..0b93f08 100644
--- a/mingling_cli/src/lib.rs
+++ b/mingling_cli/src/lib.rs
@@ -24,13 +24,17 @@ pub mod proj_mgr;
pub mod updater;
pub mod utils;
+// The `comp` feature makes `gen_program!()` generate completion scripts named after
+// the crate (`mingling-cli_comp.*`). Generate an additional set for the `mling` binary.
+mingling::macros::build_comp!("mling");
+
#[help]
pub fn help_global(_: EntryFallback) -> String {
format!("{}\n", include_str!("../help/help.txt").parse_color_code())
}
#[completion(EntryFallback)]
-pub fn complete_global(_ctx: &ShellContext) -> Suggest {
+pub fn complete_global(_ctx: ShellContext) -> Suggest {
suggest! {
HELP_FLAG: "Show help messages",
ARG_FEATURES.clone(): "List of features to enable",
diff --git a/mingling_cli/src/linter/cmd_explain.rs b/mingling_cli/src/linter/cmd_explain.rs
index 923e890..1d99c62 100644
--- a/mingling_cli/src/linter/cmd_explain.rs
+++ b/mingling_cli/src/linter/cmd_explain.rs
@@ -97,7 +97,7 @@ pub fn render_error_no_such_lint(
}
#[completion(EntryExplain)]
-pub fn complete_explain(ctx: &ShellContext, registry: &mut LazyRes<ResLintRegistry>) -> Suggest {
+pub fn complete_explain(ctx: ShellContext, registry: &mut LazyRes<ResLintRegistry>) -> Suggest {
let registry = registry.get_ref();
if ctx.previous_word != "explain" {
return Suggest::FileCompletion;
diff --git a/mingling_cli/src/linter/cmd_lint.rs b/mingling_cli/src/linter/cmd_lint.rs
index 7cab63a..b49605f 100644
--- a/mingling_cli/src/linter/cmd_lint.rs
+++ b/mingling_cli/src/linter/cmd_lint.rs
@@ -141,7 +141,7 @@ pub async fn handle_state_begin_linter(
}
#[completion(EntryLint)]
-pub fn complete_lint(ctx: &ShellContext) -> Suggest {
+pub fn complete_lint(ctx: ShellContext) -> Suggest {
if mingling::picker::parselib::build_possible_flags(
ParserStyle::global_style(),
&ARG_WITH_CHECKER.into_info(),
diff --git a/mingling_cli/src/pkg_mgr/cmd_install.rs b/mingling_cli/src/pkg_mgr/cmd_install.rs
index 8b2f3b7..0b552a6 100644
--- a/mingling_cli/src/pkg_mgr/cmd_install.rs
+++ b/mingling_cli/src/pkg_mgr/cmd_install.rs
@@ -34,6 +34,9 @@ pub struct StateInstallBuild {
pub workspace_root: PathBuf,
pub install_dir: PathBuf,
pub release_dir: PathBuf,
+ /// Directory holding Mingling's compile-time build outputs
+ /// (`{target_directory}/mingling/`), e.g. the completion scripts.
+ pub mingling_dir: PathBuf,
pub exe_suffix: &'static str,
pub enable: bool,
}
@@ -43,6 +46,9 @@ pub struct StateInstallBuild {
pub struct StateInstallCopy {
pub install_dir: PathBuf,
pub release_dir: PathBuf,
+ /// Directory holding Mingling's compile-time build outputs
+ /// (`{target_directory}/mingling/`), e.g. the completion scripts.
+ pub mingling_dir: PathBuf,
pub exe_suffix: &'static str,
pub installed: Vec<PathBuf>,
pub enable: bool,
@@ -95,6 +101,10 @@ pub fn install(
.target_directory
.join("release")
.into_std_path_buf(),
+ mingling_dir: metadata
+ .target_directory
+ .join("mingling")
+ .into_std_path_buf(),
exe_suffix: env::consts::EXE_SUFFIX,
enable: enable.bool(),
}
@@ -117,6 +127,7 @@ pub fn handle_state_install_build(state: StateInstallBuild) -> Next {
StateInstallCopy {
install_dir: state.install_dir,
release_dir: state.release_dir,
+ mingling_dir: state.mingling_dir,
exe_suffix: state.exe_suffix,
installed: vec![],
enable: state.enable,
@@ -159,13 +170,13 @@ pub fn handle_state_install_copy(
}
}
- // Completion scripts are generated into the build profile directory
- // (OUT_DIR/../../../), copy every one whose name contains `_comp`,
- // regardless of its suffix
- for entry in fs::read_dir(&state.release_dir).map_err(|e| {
+ // Completion scripts are generated into `{target_directory}/mingling/` at
+ // compile time (via `build_comp!()`); copy every one whose name contains
+ // `_comp`, regardless of its suffix.
+ for entry in fs::read_dir(&state.mingling_dir).map_err(|e| {
io::Error::new(
e.kind(),
- format!("failed to read {}: {e}", state.release_dir.display()),
+ format!("failed to read {}: {e}", state.mingling_dir.display()),
)
})? {
let entry = entry.map_err(|e| {
@@ -256,7 +267,7 @@ pub fn render_error_pkg_enable_failed(err: ErrorPkgEnableFailed) -> RenderResult
}
#[completion(EntryInstall)]
-pub fn complete_install(ctx: &ShellContext) -> Suggest {
+pub fn complete_install(ctx: ShellContext) -> Suggest {
if ctx.previous_word != "install" {
return Suggest::FileCompletion;
}
diff --git a/mingling_cli/src/pkg_mgr/cmd_pkg_disable.rs b/mingling_cli/src/pkg_mgr/cmd_pkg_disable.rs
index b4989eb..ea6997f 100644
--- a/mingling_cli/src/pkg_mgr/cmd_pkg_disable.rs
+++ b/mingling_cli/src/pkg_mgr/cmd_pkg_disable.rs
@@ -93,7 +93,7 @@ pub fn render_error_package_not_enabled(err: ErrorPackageNotEnabled) -> RenderRe
}
#[completion(EntryPkgDisable)]
-pub fn complete_pkg_disable(ctx: &ShellContext, packages_dir: &ResPackagesDir) -> Suggest {
+pub fn complete_pkg_disable(ctx: ShellContext, packages_dir: &ResPackagesDir) -> Suggest {
if ctx.previous_word != "pkg-disable" {
return Suggest::FileCompletion;
}
diff --git a/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs b/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs
index 1235cd3..377bd33 100644
--- a/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs
+++ b/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs
@@ -118,7 +118,7 @@ pub fn render_error_no_matching_version(err: ErrorNoMatchingVersion) -> RenderRe
}
#[completion(EntryPkgEnable)]
-pub fn complete_pkg_enable(ctx: &ShellContext, packages_dir: &ResPackagesDir) -> Suggest {
+pub fn complete_pkg_enable(ctx: ShellContext, packages_dir: &ResPackagesDir) -> Suggest {
if ctx.previous_word != "pkg-enable" {
return Suggest::FileCompletion;
}
diff --git a/mingling_cli/src/pkg_mgr/cmd_uninstall.rs b/mingling_cli/src/pkg_mgr/cmd_uninstall.rs
index 0c3886c..0c8781a 100644
--- a/mingling_cli/src/pkg_mgr/cmd_uninstall.rs
+++ b/mingling_cli/src/pkg_mgr/cmd_uninstall.rs
@@ -154,7 +154,7 @@ pub fn render_error_no_matching_packages(_: ErrorNoMatchingPackages) -> RenderRe
}
#[completion(EntryUninstall)]
-pub fn complete_uninstall(ctx: &ShellContext, packages_dir: &ResPackagesDir) -> Suggest {
+pub fn complete_uninstall(ctx: ShellContext, packages_dir: &ResPackagesDir) -> Suggest {
if ctx.previous_word != "uninstall" {
return Suggest::FileCompletion;
}
diff --git a/mingling_cli/src/proj_mgr/cmd_class_add.rs b/mingling_cli/src/proj_mgr/cmd_class_add.rs
index f9272a5..f42bbff 100644
--- a/mingling_cli/src/proj_mgr/cmd_class_add.rs
+++ b/mingling_cli/src/proj_mgr/cmd_class_add.rs
@@ -250,7 +250,7 @@ pub fn render_error_class_write_failed(err: ErrorClassWriteFailed) -> RenderResu
}
#[completion(EntryClassAdd)]
-pub fn complete_class_add(ctx: &ShellContext, cwd: &ResCurrentDir) -> Suggest {
+pub fn complete_class_add(ctx: ShellContext, cwd: &ResCurrentDir) -> Suggest {
if ctx.previous_word != "class-add" {
return Suggest::file_comp();
}