1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
pub mod autocomplete_render;
pub mod autocomplete_state;
mod brace_tracker;
mod context;
pub mod insertion;
pub mod jq_functions;
mod result_analyzer;
mod scan_state;
pub use brace_tracker::BraceTracker;
pub use context::{
SuggestionContext, analyze_context, find_char_before_field_access, get_suggestions,
};
// JsonFieldType is part of public API for Suggestion struct
#[allow(unused_imports)]
pub use autocomplete_state::{
AutocompleteState, JsonFieldType, Suggestion, SuggestionType, update_suggestions_from_app,
};
pub use insertion::insert_suggestion_from_app;
use crate::query::ResultType;
/// Minimum characters required before showing autocomplete suggestions
/// Performance optimization to avoid showing suggestions for very short queries
pub const MIN_CHARS_FOR_AUTOCOMPLETE: usize = 1;
/// Update autocomplete suggestions based on query context
///
/// This function analyzes the current query and cursor position to generate
/// relevant autocomplete suggestions. It uses the cached result from the
/// last successful query execution to provide field suggestions.
///
/// # Arguments
/// * `autocomplete` - The autocomplete state to update
/// * `query` - The current query text
/// * `cursor_pos` - The cursor column position
/// * `result` - Optional unformatted result from last successful query
/// * `result_type` - Optional type of the result (Object, Array, etc.)
/// * `brace_tracker` - The brace tracker for context detection
pub fn update_suggestions(
autocomplete: &mut AutocompleteState,
query: &str,
cursor_pos: usize,
result: Option<&str>,
result_type: Option<ResultType>,
brace_tracker: &BraceTracker,
) {
// Performance optimization: only show autocomplete for non-empty queries
if query.trim().len() < MIN_CHARS_FOR_AUTOCOMPLETE {
autocomplete.hide();
return;
}
// Get suggestions based on unformatted query result (no ANSI codes)
let suggestions = get_suggestions(query, cursor_pos, result, result_type, brace_tracker);
// Update autocomplete state
autocomplete.update_suggestions(suggestions);
}