Skip to content

Commit cb0ebac

Browse files
Merge pull request #5764 from dotty-staging/improve-unicdode-printing
Improve printing of encoded unicode chars
2 parents decdff4 + d9491d0 commit cb0ebac

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

compiler/src/dotty/tools/dotc/interactive/Completion.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,7 @@ object Completion {
152152
nameToSymbols.map { case (name, symbols) =>
153153
val typesFirst = symbols.sortWith((s1, s2) => s1.isType && !s2.isType)
154154
val desc = description(typesFirst)
155-
val label = NameTransformer.decodeIllegalChars(name.toString)
156-
Completion(label, desc, typesFirst)
155+
Completion(name.show, desc, typesFirst)
157156
}
158157
}
159158

compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import scala.tasty.util.Chars.isOperatorPart
2424
import transform.TypeUtils._
2525

2626
import language.implicitConversions
27-
import dotty.tools.dotc.util.SourcePosition
27+
import dotty.tools.dotc.util.{NameTransformer, SourcePosition}
2828
import dotty.tools.dotc.ast.untpd.{MemberDef, Modifiers, PackageDef, RefTree, Template, TypeDef, ValOrDefDef}
2929

3030
class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
@@ -75,7 +75,7 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
7575
}.toCommonFlags
7676

7777
override def nameString(name: Name): String =
78-
if (ctx.settings.YdebugNames.value) name.debugString else name.toString
78+
if (ctx.settings.YdebugNames.value) name.debugString else NameTransformer.decodeIllegalChars(name.toString)
7979

8080
override protected def simpleNameString(sym: Symbol): String =
8181
nameString(if (ctx.property(XprintMode).isEmpty) sym.originalName else sym.name)

compiler/src/dotty/tools/dotc/util/NameTransformer.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,12 @@ object NameTransformer {
6262
var i = 0
6363
while (i < name.length) {
6464
if (i < name.length - 5 && name(i) == '$' && name(i + 1) == 'u') {
65-
sb.append(Integer.valueOf(name.substring(i + 2, i + 6), 16).toChar)
65+
val numbers = name.substring(i + 2, i + 6)
66+
try sb.append(Integer.valueOf(name.substring(i + 2, i + 6), 16).toChar)
67+
catch {
68+
case _: java.lang.NumberFormatException =>
69+
sb.append("$u").append(numbers)
70+
}
6671
i += 6
6772
} else {
6873
sb.append(name(i))
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
scala> type →
2+
3+
scala> def bar: → = ???
4+
def bar: →
5+
6+
scala> type `🤪`
7+
8+
scala> def baz: `🤪` = ???
9+
def baz: 🤪

language-server/test/dotty/tools/languageserver/HoverTest.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,4 +188,16 @@ class HoverTest {
188188
.hover(m1 to m2, hoverContent("Int(1)"))
189189
.hover(m3 to m4, hoverContent("Int(1) @annot1 @annot2 @annot3 @annot4 @annot5"))
190190
}
191+
192+
@Test def unicodeChar: Unit = {
193+
code"""object Test {
194+
| type →
195+
| type `🤪`
196+
| def ${m1}bar${m2}: → = ???
197+
| def ${m3}baz${m4}: `🤪` = ???
198+
|}""".withSource
199+
.hover(m1 to m2, hoverContent("Test.→"))
200+
.hover(m3 to m4, hoverContent("Test.🤪"))
201+
202+
}
191203
}

0 commit comments

Comments
 (0)