@@ -90,29 +90,22 @@ object Completion:
9090
9191 val completionSymbolKind : Mode =
9292 path match
93- case untpd.Ident (_) :: untpd.Import (_, _) :: _ => Mode .ImportOrExport
94- case untpd.Ident (_) :: (_ : untpd.ImportSelector ) :: _ => Mode .ImportOrExport
95- case untpd.Literal (Constants .Constant (_ : String )) :: _ => Mode .Term // literal completions
93+ case GenericImportSelector (sel) =>
94+ if sel.imported.span.contains(pos.span) then Mode .ImportOrExport // import scala.@@
95+ else if sel.isGiven && sel.bound.span.contains(pos.span) then Mode .ImportOrExport
96+ else Mode .None // import scala.{util => u@@}
97+ case GenericImportOrExport (_) => Mode .ImportOrExport | Mode .Scope // import TrieMa@@
98+ case untpd.Literal (Constants .Constant (_ : String )) :: _ => Mode .Term | Mode .Scope // literal completions
9699 case (ref : untpd.RefTree ) :: _ =>
97- if (ref.name.isTermName) Mode .Term
98- else if (ref.name.isTypeName) Mode .Type
99- else Mode .None
100+ val maybeSelectMembers = if ref.isInstanceOf [untpd.Select ] then Mode .Member else Mode .Scope
100101
101- case ( sel : untpd. ImportSelector ) :: _ =>
102- if sel.imported.span.contains(pos.span) then Mode .ImportOrExport
103- else Mode .None // Can't help completing the renaming
102+ if (ref.name.isTermName) Mode . Term | maybeSelectMembers
103+ else if (ref.name.isTypeName) Mode .Type | maybeSelectMembers
104+ else Mode .None
104105
105- case (_ : untpd.ImportOrExport ) :: _ => Mode .ImportOrExport
106106 case _ => Mode .None
107107
108- val completionKind : Mode =
109- path match
110- case Nil | (_ : untpd.PackageDef ) :: _ => Mode .None
111- case untpd.Ident (_) :: (_ : untpd.ImportSelector ) :: _ => Mode .Member
112- case (_ : untpd.Select ) :: _ => Mode .Member
113- case _ => Mode .Scope
114-
115- completionSymbolKind | completionKind
108+ completionSymbolKind
116109
117110 /** When dealing with <errors> in varios palces we check to see if they are
118111 * due to incomplete backticks. If so, we ensure we get the full prefix
@@ -141,18 +134,11 @@ object Completion:
141134 i + 1
142135
143136 path match
144- case (sel : untpd.ImportSelector ) :: _ =>
145- completionPrefix(sel.imported :: Nil , pos)
146-
147- case untpd.Ident (_) :: (sel : untpd.ImportSelector ) :: _ if ! sel.isGiven =>
148- if sel.isWildcard then pos.source.content()(pos.point - 1 ).toString
137+ case GenericImportSelector (sel) =>
138+ if sel.isGiven then completionPrefix(sel.bound :: Nil , pos)
139+ else if sel.isWildcard then pos.source.content()(pos.point - 1 ).toString
149140 else completionPrefix(sel.imported :: Nil , pos)
150141
151- case (tree : untpd.ImportOrExport ) :: _ =>
152- tree.selectors.find(_.span.contains(pos.span)).map: selector =>
153- completionPrefix(selector :: Nil , pos)
154- .getOrElse(" " )
155-
156142 // Foo.`se<TAB> will result in Select(Ident(Foo), <error>)
157143 case (select : untpd.Select ) :: _ if select.name == nme.ERROR =>
158144 checkBacktickPrefix(select.source.content(), select.nameSpan.start, select.span.end)
@@ -169,6 +155,20 @@ object Completion:
169155
170156 end completionPrefix
171157
158+ private object GenericImportSelector :
159+ def unapply (path : List [untpd.Tree ]): Option [untpd.ImportSelector ] =
160+ path match
161+ case untpd.Ident (_) :: (sel : untpd.ImportSelector ) :: _ => Some (sel)
162+ case (sel : untpd.ImportSelector ) :: _ => Some (sel)
163+ case _ => None
164+
165+ private object GenericImportOrExport :
166+ def unapply (path : List [untpd.Tree ]): Option [untpd.ImportOrExport ] =
167+ path match
168+ case untpd.Ident (_) :: (importOrExport : untpd.ImportOrExport ) :: _ => Some (importOrExport)
169+ case (importOrExport : untpd.ImportOrExport ) :: _ => Some (importOrExport)
170+ case _ => None
171+
172172 /** Inspect `path` to determine the offset where the completion result should be inserted. */
173173 def completionOffset (untpdPath : List [untpd.Tree ]): Int =
174174 untpdPath match
@@ -211,7 +211,6 @@ object Completion:
211211 case tpd.Select (qual, _) :: _ if qual.typeOpt.hasSimpleKind => completer.selectionCompletions(qual)
212212 case tpd.Select (qual, _) :: _ => Map .empty
213213 case (tree : tpd.ImportOrExport ) :: _ => completer.directMemberCompletions(tree.expr)
214- case (_ : untpd.ImportSelector ) :: tpd.Import (expr, _) :: _ => completer.directMemberCompletions(expr)
215214 case _ => completer.scopeCompletions
216215
217216 interactiv.println(i """ completion info with pos = $pos,
0 commit comments