pub struct CompletionProvider { /* private fields */ }Expand description
Completion provider
Implementations§
Source§impl CompletionProvider
impl CompletionProvider
Sourcepub fn new_with_index(
ast: &Node,
workspace_index: Option<Arc<WorkspaceIndex>>,
) -> CompletionProvider
pub fn new_with_index( ast: &Node, workspace_index: Option<Arc<WorkspaceIndex>>, ) -> CompletionProvider
Create a new completion provider from parsed AST for Perl script analysis
§Arguments
ast- Parsed AST from Perl script content during LSP Parse stageworkspace_index- Optional workspace-wide symbol index for cross-file completion
§Returns
A configured completion provider ready for Perl parsing workflow analysis
§Examples
use perl_parser_core::Parser;
use perl_lsp_completion::CompletionProvider;
let mut parser = Parser::new("my $var = 42; sub hello { print $var; }");
let ast = parser.parse()?;
let provider = CompletionProvider::new_with_index(&ast, None);
// Provider ready for Perl script completion analysisArguments: ast, workspace_index.
Sourcepub fn new_with_index_and_source(
ast: &Node,
source: &str,
workspace_index: Option<Arc<WorkspaceIndex>>,
) -> CompletionProvider
pub fn new_with_index_and_source( ast: &Node, source: &str, workspace_index: Option<Arc<WorkspaceIndex>>, ) -> CompletionProvider
Create a new completion provider from parsed AST and source with workspace integration
Constructs a completion provider with full workspace symbol information for comprehensive completion suggestions during Perl script editing within the LSP workflow. Integrates local AST symbols with workspace-wide indexing.
§Arguments
ast- Parsed AST containing local scope symbols and structuresource- Original source code for position-based context analysisworkspace_index- Optional workspace symbol index for cross-file completions
§Returns
A configured completion provider ready for LSP completion requests with both local and workspace symbol coverage for Perl script development.
§Examples
use perl_parser_core::Parser;
use perl_lsp_completion::CompletionProvider;
use perl_workspace_index::workspace_index::WorkspaceIndex;
use std::sync::Arc;
let script = "package EmailProcessor; sub filter_spam { my $var; }";
let mut parser = Parser::new(script);
let ast = parser.parse()?;
let workspace_idx = Arc::new(WorkspaceIndex::new());
let provider = CompletionProvider::new_with_index_and_source(
&ast, script, Some(workspace_idx)
);
// Provider ready for cross-file Perl script completionsArguments: ast, source, workspace_index.
Returns: A configured completion provider.
Example: CompletionProvider::new_with_index_and_source(&ast, source, None).
Sourcepub fn new(ast: &Node) -> CompletionProvider
pub fn new(ast: &Node) -> CompletionProvider
Create a new completion provider from parsed AST without workspace context
Constructs a basic completion provider using only local scope symbols from provided AST. Suitable for simple Perl script editing without cross-file dependencies in LSP workflow.
§Arguments
ast- Parsed AST containing local symbols for completion
§Returns
A completion provider configured for local-only completions without workspace symbol integration.
§Examples
use perl_parser_core::Parser;
use perl_lsp_completion::CompletionProvider;
let script = "my $email_count = 0; my $";
let mut parser = Parser::new(script);
let ast = parser.parse()?;
let provider = CompletionProvider::new(&ast);
// Provider ready for local variable completionsArguments: ast.
Returns: A completion provider configured for local-only symbols.
Sourcepub fn get_completions_with_path(
&self,
source: &str,
position: usize,
filepath: Option<&str>,
) -> Vec<CompletionItem>
pub fn get_completions_with_path( &self, source: &str, position: usize, filepath: Option<&str>, ) -> Vec<CompletionItem>
Get completions at a given position with optional filepath for enhanced context
Provides completion suggestions based on cursor position within Perl script source code. Uses filepath context to enable enhanced completions for test files and specific Perl parsing patterns within LSP workflows.
§Arguments
source- Email script source code for analysisposition- Byte offset cursor position for completionfilepath- Optional file path for context-aware completion enhancement
§Returns
Vector of completion items sorted by relevance for current context, including local variables, functions, and workspace symbols when available.
§Examples
use perl_parser_core::Parser;
use perl_lsp_completion::CompletionProvider;
let script = "my $var = 42; sub hello { print $var; }";
let mut parser = Parser::new(script);
let ast = parser.parse()?;
let provider = CompletionProvider::new(&ast);
let completions = provider.get_completions_with_path(
script, script.len(), Some("/path/to/data_processor.pl")
);
assert!(!completions.is_empty());See also Self::get_completions_with_path_cancellable for cancellation support
and Self::get_completions for simple completions without filepath context.
Arguments: source, position, filepath.
Returns: A list of completion items for the current context.
Example: provider.get_completions_with_path(source, pos, Some(path)).
Sourcepub fn get_completions_with_path_cancellable(
&self,
source: &str,
position: usize,
filepath: Option<&str>,
is_cancelled: &dyn Fn() -> bool,
) -> Vec<CompletionItem>
pub fn get_completions_with_path_cancellable( &self, source: &str, position: usize, filepath: Option<&str>, is_cancelled: &dyn Fn() -> bool, ) -> Vec<CompletionItem>
Get completions at a given position with cancellation support for responsive editing
Provides completion suggestions with cancellation capability for responsive Perl script editing during large workspace operations. Optimized for large-scale LSP environments where completion requests may need to be interrupted for better user experience.
§Arguments
source- Email script source code for completion analysisposition- Byte offset cursor position within the sourcefilepath- Optional file path for enhanced context detectionis_cancelled- Cancellation callback for responsive completion
§Returns
Vector of completion items or empty vector if operation was cancelled, sorted by relevance for optimal Perl script development experience.
§Performance
- Respects cancellation for operations exceeding typical response times
- Optimized for large Perl script files in large Perl codebase processing workflows
- Provides partial results when possible before cancellation
§Examples
use perl_parser_core::Parser;
use perl_lsp_completion::CompletionProvider;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
let script = "package EmailHandler; sub process_emails { }";
let mut parser = Parser::new(script);
let ast = parser.parse()?;
let provider = CompletionProvider::new(&ast);
let cancelled = Arc::new(AtomicBool::new(false));
let cancel_fn = || cancelled.load(Ordering::Relaxed);
let completions = provider.get_completions_with_path_cancellable(
script, script.len(), Some("email_handler.pl"), &cancel_fn
);Arguments: source, position, filepath, is_cancelled.
Returns: A list of completion items or an empty list when cancelled.
Example: provider.get_completions_with_path_cancellable(source, pos, None, &|| false).
Sourcepub fn get_completions(
&self,
source: &str,
position: usize,
) -> Vec<CompletionItem>
pub fn get_completions( &self, source: &str, position: usize, ) -> Vec<CompletionItem>
Get completions at a given position for Perl script development
Provides basic completion suggestions at specified cursor position within Perl script source code. This is the primary interface for LSP completion requests during Perl parsing workflow development.
§Arguments
source- Email script source code for completion analysisposition- Byte offset cursor position where completions are requested
§Returns
Vector of completion items including local variables, functions, keywords, and built-in Perl constructs relevant to Perl parsing workflows.
§Examples
use perl_parser_core::Parser;
use perl_lsp_completion::CompletionProvider;
let script = "my $email_count = scalar(@emails); $email_c";
let mut parser = Parser::new(script);
let ast = parser.parse()?;
let provider = CompletionProvider::new(&ast);
let completions = provider.get_completions(script, script.len());
// Should include completion for $email_count variable
assert!(completions.iter().any(|c| c.label.contains("email_count")));See also Self::get_completions_with_path for enhanced context-aware completions.
Arguments: source, position.
Returns: A list of completion items for the current context.
Example: provider.get_completions(source, pos).