@@ -23,6 +23,69 @@ use crate::importer::{ImportRequest, Importer};
2323use crate :: symbols:: QueryPattern ;
2424use crate :: { Db , all_symbols, signature_help} ;
2525
26+ pub fn completion < ' db > (
27+ db : & ' db dyn Db ,
28+ settings : & CompletionSettings ,
29+ file : File ,
30+ offset : TextSize ,
31+ ) -> Vec < Completion < ' db > > {
32+ let parsed = parsed_module ( db, file) . load ( db) ;
33+ let source = source_text ( db, file) ;
34+
35+ let Some ( context) = Context :: new ( db, file, & parsed, & source, offset) else {
36+ return vec ! [ ] ;
37+ } ;
38+ let query = context
39+ . cursor
40+ . typed
41+ . map ( QueryPattern :: fuzzy)
42+ . unwrap_or_else ( QueryPattern :: matches_all_symbols) ;
43+ let mut completions = Completions :: new ( db, context. collection_context ( db) , query) ;
44+ match context. kind {
45+ ContextKind :: Import ( ref import) => {
46+ import. add_completions ( db, file, & mut completions) ;
47+ }
48+ ContextKind :: NonImport ( ref non_import) => {
49+ let model = SemanticModel :: new ( db, file) ;
50+ let ( semantic_completions, scoped) = match non_import. target {
51+ CompletionTargetAst :: ObjectDot { expr } => {
52+ ( model. attribute_completions ( expr) , None )
53+ }
54+ CompletionTargetAst :: Scoped ( scoped) => {
55+ ( model. scoped_completions ( scoped. node ) , Some ( scoped) )
56+ }
57+ } ;
58+
59+ completions. extend ( semantic_completions) ;
60+ if scoped. is_some ( ) {
61+ add_keyword_completions ( db, & mut completions) ;
62+ }
63+ if settings. auto_import {
64+ if let Some ( scoped) = scoped {
65+ add_unimported_completions (
66+ db,
67+ file,
68+ & parsed,
69+ scoped,
70+ |module_name : & ModuleName , symbol : & str | {
71+ ImportRequest :: import_from ( module_name. as_str ( ) , symbol)
72+ } ,
73+ & mut completions,
74+ ) ;
75+ }
76+ }
77+
78+ if let Some ( arg_completions) =
79+ detect_function_arg_completions ( db, file, & parsed, offset)
80+ {
81+ completions. extend ( arg_completions) ;
82+ }
83+ }
84+ }
85+
86+ completions. into_completions ( )
87+ }
88+
2689/// A collection of completions built up from various sources.
2790struct Completions < ' db > {
2891 db : & ' db dyn Db ,
@@ -873,69 +936,6 @@ enum Sort {
873936 Lower ,
874937}
875938
876- pub fn completion < ' db > (
877- db : & ' db dyn Db ,
878- settings : & CompletionSettings ,
879- file : File ,
880- offset : TextSize ,
881- ) -> Vec < Completion < ' db > > {
882- let parsed = parsed_module ( db, file) . load ( db) ;
883- let source = source_text ( db, file) ;
884-
885- let Some ( context) = Context :: new ( db, file, & parsed, & source, offset) else {
886- return vec ! [ ] ;
887- } ;
888- let query = context
889- . cursor
890- . typed
891- . map ( QueryPattern :: fuzzy)
892- . unwrap_or_else ( QueryPattern :: matches_all_symbols) ;
893- let mut completions = Completions :: new ( db, context. collection_context ( db) , query) ;
894- match context. kind {
895- ContextKind :: Import ( ref import) => {
896- import. add_completions ( db, file, & mut completions) ;
897- }
898- ContextKind :: NonImport ( ref non_import) => {
899- let model = SemanticModel :: new ( db, file) ;
900- let ( semantic_completions, scoped) = match non_import. target {
901- CompletionTargetAst :: ObjectDot { expr } => {
902- ( model. attribute_completions ( expr) , None )
903- }
904- CompletionTargetAst :: Scoped ( scoped) => {
905- ( model. scoped_completions ( scoped. node ) , Some ( scoped) )
906- }
907- } ;
908-
909- completions. extend ( semantic_completions) ;
910- if scoped. is_some ( ) {
911- add_keyword_completions ( db, & mut completions) ;
912- }
913- if settings. auto_import {
914- if let Some ( scoped) = scoped {
915- add_unimported_completions (
916- db,
917- file,
918- & parsed,
919- scoped,
920- |module_name : & ModuleName , symbol : & str | {
921- ImportRequest :: import_from ( module_name. as_str ( ) , symbol)
922- } ,
923- & mut completions,
924- ) ;
925- }
926- }
927-
928- if let Some ( arg_completions) =
929- detect_function_arg_completions ( db, file, & parsed, offset)
930- {
931- completions. extend ( arg_completions) ;
932- }
933- }
934- }
935-
936- completions. into_completions ( )
937- }
938-
939939/// Detect and construct completions for unset function arguments.
940940///
941941/// Suggestions are only provided if the cursor is currently inside a
0 commit comments