@@ -110,22 +110,23 @@ object HoverProvider:
110
110
if symbol.name == nme.selectDynamic || symbol.name == nme.applyDynamic =>
111
111
fallbackToDynamics(path, printer, contentType)
112
112
case symbolTpes @ ((symbol, tpe, None ) :: _) =>
113
- val exprTpw = tpe.widenTermRefExpr.deepDealias
113
+ val exprTpw = dealiased( tpe.widenTermRefExpr)
114
114
val hoverString =
115
115
tpw match
116
116
// https://github.com/scala/scala3/issues/8891
117
117
case tpw : ImportType =>
118
118
printer.hoverSymbol(symbol, symbol.paramRef)
119
119
case _ =>
120
- val (tpe , sym) =
120
+ val (innerTpe , sym) =
121
121
if symbol.isType then (symbol.typeRef, symbol)
122
122
else enclosing.head.seenFrom(symbol)
123
123
124
124
val finalTpe =
125
- if tpe != NoType then tpe
125
+ if tpe.isNamedTupleType then tpe.widenTermRefExpr
126
+ else if innerTpe != NoType then innerTpe
126
127
else tpw
127
128
128
- printer.hoverSymbol(sym, finalTpe.deepDealias )
129
+ printer.hoverSymbol(sym, dealiased( finalTpe) )
129
130
end match
130
131
end hoverString
131
132
@@ -134,7 +135,7 @@ object HoverProvider:
134
135
.map(_.docstring())
135
136
.mkString(" \n " )
136
137
137
- val expresionTypeOpt =
138
+ val expresionTypeOpt =
138
139
if symbol.name == StdNames .nme.??? then
139
140
InferExpectedType (search, driver, params).infer()
140
141
else printer.expressionType(exprTpw)
@@ -161,7 +162,7 @@ object HoverProvider:
161
162
ju.Optional .empty().nn
162
163
end match
163
164
case (_, tpe, Some (namedTupleArg)) :: _ =>
164
- val exprTpw = tpe.widenTermRefExpr.deepDealias
165
+ val exprTpw = dealiased( tpe.widenTermRefExpr)
165
166
printer.expressionType(exprTpw) match
166
167
case Some (tpe) =>
167
168
ju.Optional .of(
@@ -179,6 +180,8 @@ object HoverProvider:
179
180
end if
180
181
end hover
181
182
183
+ private def dealiased (tpe : Type )(using Context ): Type = if tpe.isNamedTupleType then tpe.deepDealias.simplified else tpe.deepDealias
184
+
182
185
extension (pos : SourcePosition )
183
186
private def isPoint : Boolean = pos.start == pos.end
184
187
@@ -194,7 +197,7 @@ object HoverProvider:
194
197
val resultType =
195
198
rest match
196
199
case Select (_, asInstanceOf ) :: TypeApply (_, List (tpe)) :: _ if asInstanceOf == nme.asInstanceOfPM =>
197
- tpe.tpe.widenTermRefExpr.deepDealias
200
+ dealiased( tpe.tpe.widenTermRefExpr)
198
201
case _ if n == nme.selectDynamic => tpe.resultType
199
202
case _ => tpe
200
203
@@ -220,9 +223,9 @@ object HoverProvider:
220
223
findRefinement(parent)
221
224
case _ => None
222
225
223
- val refTpe = sel.typeOpt.widen.deepDealias match
226
+ val refTpe = dealiased( sel.typeOpt.widen) match
224
227
case r : RefinedType => Some (r)
225
- case t : (TermRef | TypeProxy ) => Some (t.termSymbol.info.deepDealias )
228
+ case t : (TermRef | TypeProxy ) => Some (dealiased( t.termSymbol.info) )
226
229
case _ => None
227
230
228
231
refTpe.flatMap(findRefinement).asJava
0 commit comments