Escape default text arguments in suggestions database (#9010)

Changelog:
- fix: escape default text arguments in suggestions database
This commit is contained in:
Dmitry Bushev 2024-02-09 12:57:25 +00:00 committed by GitHub
parent 26aa27c9ad
commit 200a494242
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 12 deletions

View File

@ -10,7 +10,6 @@ import org.enso.compiler.core.ir.{
Expression,
Function,
IdentifiedLocation,
Literal,
Location,
Name,
Type
@ -575,7 +574,7 @@ final class SuggestionBuilder[A: IndexedSource](
reprType = selfType.toString,
isSuspended = suspended,
hasDefault = defaultValue.isDefined,
defaultValue = defaultValue.flatMap(buildDefaultValue)
defaultValue = defaultValue.map(buildDefaultValue)
)
go(vtail, targs, acc :+ thisArg)
}
@ -640,7 +639,7 @@ final class SuggestionBuilder[A: IndexedSource](
reprType = buildTypeArgumentName(targ),
isSuspended = varg.suspended,
hasDefault = varg.defaultValue.isDefined,
defaultValue = varg.defaultValue.flatMap(buildDefaultValue),
defaultValue = varg.defaultValue.map(buildDefaultValue),
tagValues = buildTagValues(targ)
)
@ -712,7 +711,7 @@ final class SuggestionBuilder[A: IndexedSource](
reprType = Any,
isSuspended = arg.suspended,
hasDefault = arg.defaultValue.isDefined,
defaultValue = arg.defaultValue.flatMap(buildDefaultValue)
defaultValue = arg.defaultValue.map(buildDefaultValue)
)
}
}
@ -730,13 +729,11 @@ final class SuggestionBuilder[A: IndexedSource](
* @param expr the argument expression
* @return the argument default value
*/
private def buildDefaultValue(expr: IR): Option[String] =
private def buildDefaultValue(expr: IR): String =
expr match {
case Literal.Number(_, value, _, _, _) => Some(value)
case Literal.Text(text, _, _, _) => Some(text)
case Application.Prefix(name, path, _, _, _, _) =>
Some(path.map(_.value.showCode()).mkString(".") + "." + name.showCode())
case other => Some(other.showCode())
path.map(_.value.showCode()).mkString(".") + "." + name.showCode()
case other => other.showCode()
}
/** Build scope from the location. */

View File

@ -220,7 +220,7 @@ object Literal {
/** @inheritdoc */
override def toString: String =
s"""
|Literal.String(
|Literal.Text(
|text = $text,
|location = $location,
|passData = ${this.showPassData},

View File

@ -381,7 +381,7 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers {
"build method with default arguments" in {
val code = """foo (a = 0) = a + 1"""
val code = """foo (a = 0) (b = "bar") (c = x.y) = a + b + c"""
val module = code.preprocessModule
build(code, module) shouldEqual Tree.Root(
@ -394,7 +394,23 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers {
name = "foo",
arguments = Seq(
Suggestion
.Argument("a", SuggestionBuilder.Any, false, true, Some("0"))
.Argument("a", SuggestionBuilder.Any, false, true, Some("0")),
Suggestion
.Argument(
"b",
SuggestionBuilder.Any,
false,
true,
Some("\"bar\"")
),
Suggestion
.Argument(
"c",
SuggestionBuilder.Any,
false,
true,
Some("x.y")
)
),
selfType = "Unnamed.Test",
returnType = SuggestionBuilder.Any,