Skip to content

Commit 84b249c

Browse files
committed
fix(completion): completions.external.enable config option not respected
1 parent 3030608 commit 84b249c

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

crates/nu-cli/src/completions/completer.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,9 +486,10 @@ impl NuCompleter {
486486
externals: bool,
487487
strip: bool,
488488
) -> Vec<SemanticSuggestion> {
489+
let config = self.engine_state.get_config();
489490
let mut command_completions = CommandCompletion {
490491
internals,
491-
externals,
492+
externals: !internals || (externals && config.completions.external.enable),
492493
};
493494
let (new_span, prefix) = strip_placeholder_if_any(working_set, &span, strip);
494495
let ctx = Context::new(working_set, new_span, prefix, offset);

crates/nu-cli/tests/completions/mod.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use nu_cli::NuCompleter;
1010
use nu_engine::eval_block;
1111
use nu_parser::parse;
1212
use nu_path::expand_tilde;
13-
use nu_protocol::{debugger::WithoutDebug, engine::StateWorkingSet, PipelineData};
13+
use nu_protocol::{debugger::WithoutDebug, engine::StateWorkingSet, Config, PipelineData};
1414
use reedline::{Completer, Suggestion};
1515
use rstest::{fixture, rstest};
1616
use support::{
@@ -367,7 +367,7 @@ export def say [
367367

368368
/// External command only if starts with `^`
369369
#[test]
370-
fn external_commands_only() {
370+
fn external_commands() {
371371
let engine = new_external_engine();
372372
let mut completer = NuCompleter::new(
373373
Arc::new(engine),
@@ -390,6 +390,34 @@ fn external_commands_only() {
390390
match_suggestions(&expected, &suggestions);
391391
}
392392

393+
/// Disable external commands except for those start with `^`
394+
#[test]
395+
fn external_commands_disabled() {
396+
let mut engine = new_external_engine();
397+
398+
let mut config = Config::default();
399+
config.completions.external.enable = false;
400+
engine.set_config(config);
401+
402+
let stack = nu_protocol::engine::Stack::new();
403+
let mut completer = NuCompleter::new(Arc::new(engine), Arc::new(stack));
404+
let completion_str = "ls; ^sleep";
405+
let suggestions = completer.complete(completion_str, completion_str.len());
406+
#[cfg(windows)]
407+
let expected: Vec<_> = vec!["sleep.exe"];
408+
#[cfg(not(windows))]
409+
let expected: Vec<_> = vec!["sleep"];
410+
match_suggestions(&expected, &suggestions);
411+
412+
let completion_str = "sleep";
413+
let suggestions = completer.complete(completion_str, completion_str.len());
414+
#[cfg(windows)]
415+
let expected: Vec<_> = vec!["sleep"];
416+
#[cfg(not(windows))]
417+
let expected: Vec<_> = vec!["sleep"];
418+
match_suggestions(&expected, &suggestions);
419+
}
420+
393421
/// Which completes both internals and externals
394422
#[test]
395423
fn which_command_completions() {

0 commit comments

Comments
 (0)