[ty] Move `completion` function to the top

This is the main entry point to this module. It should be at the top.
This commit is contained in:
Andrew Gallant 2025-12-17 14:41:43 -05:00 committed by Andrew Gallant
parent bab3924833
commit 070e08a043
1 changed files with 63 additions and 63 deletions

View File

@ -23,6 +23,69 @@ use crate::importer::{ImportRequest, Importer};
use crate::symbols::QueryPattern;
use crate::{Db, all_symbols, signature_help};
pub fn completion<'db>(
db: &'db dyn Db,
settings: &CompletionSettings,
file: File,
offset: TextSize,
) -> Vec<Completion<'db>> {
let parsed = parsed_module(db, file).load(db);
let source = source_text(db, file);
let Some(context) = Context::new(db, file, &parsed, &source, offset) else {
return vec![];
};
let query = context
.cursor
.typed
.map(QueryPattern::fuzzy)
.unwrap_or_else(QueryPattern::matches_all_symbols);
let mut completions = Completions::new(db, context.collection_context(db), query);
match context.kind {
ContextKind::Import(ref import) => {
import.add_completions(db, file, &mut completions);
}
ContextKind::NonImport(ref non_import) => {
let model = SemanticModel::new(db, file);
let (semantic_completions, scoped) = match non_import.target {
CompletionTargetAst::ObjectDot { expr } => {
(model.attribute_completions(expr), None)
}
CompletionTargetAst::Scoped(scoped) => {
(model.scoped_completions(scoped.node), Some(scoped))
}
};
completions.extend(semantic_completions);
if scoped.is_some() {
add_keyword_completions(db, &mut completions);
}
if settings.auto_import {
if let Some(scoped) = scoped {
add_unimported_completions(
db,
file,
&parsed,
scoped,
|module_name: &ModuleName, symbol: &str| {
ImportRequest::import_from(module_name.as_str(), symbol)
},
&mut completions,
);
}
}
if let Some(arg_completions) =
detect_function_arg_completions(db, file, &parsed, offset)
{
completions.extend(arg_completions);
}
}
}
completions.into_completions()
}
/// A collection of completions built up from various sources.
struct Completions<'db> {
db: &'db dyn Db,
@ -873,69 +936,6 @@ enum Sort {
Lower,
}
pub fn completion<'db>(
db: &'db dyn Db,
settings: &CompletionSettings,
file: File,
offset: TextSize,
) -> Vec<Completion<'db>> {
let parsed = parsed_module(db, file).load(db);
let source = source_text(db, file);
let Some(context) = Context::new(db, file, &parsed, &source, offset) else {
return vec![];
};
let query = context
.cursor
.typed
.map(QueryPattern::fuzzy)
.unwrap_or_else(QueryPattern::matches_all_symbols);
let mut completions = Completions::new(db, context.collection_context(db), query);
match context.kind {
ContextKind::Import(ref import) => {
import.add_completions(db, file, &mut completions);
}
ContextKind::NonImport(ref non_import) => {
let model = SemanticModel::new(db, file);
let (semantic_completions, scoped) = match non_import.target {
CompletionTargetAst::ObjectDot { expr } => {
(model.attribute_completions(expr), None)
}
CompletionTargetAst::Scoped(scoped) => {
(model.scoped_completions(scoped.node), Some(scoped))
}
};
completions.extend(semantic_completions);
if scoped.is_some() {
add_keyword_completions(db, &mut completions);
}
if settings.auto_import {
if let Some(scoped) = scoped {
add_unimported_completions(
db,
file,
&parsed,
scoped,
|module_name: &ModuleName, symbol: &str| {
ImportRequest::import_from(module_name.as_str(), symbol)
},
&mut completions,
);
}
}
if let Some(arg_completions) =
detect_function_arg_completions(db, file, &parsed, offset)
{
completions.extend(arg_completions);
}
}
}
completions.into_completions()
}
/// Detect and construct completions for unset function arguments.
///
/// Suggestions are only provided if the cursor is currently inside a