1pub(crate) mod command;
2pub(crate) mod completer;
3pub(crate) mod engine;
4pub(crate) mod flag;
5pub(crate) mod matchers;
6pub(crate) mod path;
7pub(crate) mod variable;
8
9use nu_engine::EvaluationContext;
10use nu_protocol::{SignatureRegistry, VariableRegistry};
11
12use matchers::Matcher;
13
14pub use completer::NuCompleter;
15
16#[derive(Debug, Eq, PartialEq)]
17pub struct Suggestion {
18 pub display: String,
19 pub replacement: String,
20}
21
22impl Suggestion {
23 fn new(display: impl Into<String>, replacement: impl Into<String>) -> Self {
24 Self {
25 display: display.into(),
26 replacement: replacement.into(),
27 }
28 }
29}
30
31pub trait CompletionContext {
32 fn signature_registry(&self) -> &dyn SignatureRegistry;
33 fn scope(&self) -> &dyn nu_parser::ParserScope;
34 fn source(&self) -> &EvaluationContext;
35 fn variable_registry(&self) -> &dyn VariableRegistry;
36}
37
38pub trait Completer<Context: CompletionContext> {
39 fn complete(&self, ctx: &Context, partial: &str, matcher: &dyn Matcher) -> Vec<Suggestion>;
40}