Open pauldraper opened 9 years ago
I just ran into the same issue with HtmlFormat. Here's a simple reproduction:
@{(new play.twirl.api.Html("<foo>")): play.twirl.api.HtmlFormat.Appendable}
@{(new play.twirl.api.Html("<foo>") {}): play.twirl.api.HtmlFormat.Appendable}
renders as:
<foo>
<foo>
This makes it impossible to implement any meaningful subclasses of Html
for custom rendering.
It's not clear to me why it doesn't pick the correct static overload in the first place but at least the dynamic version should behave the same (i.e. allows subtypes).
This is a custom format that escapes
|
asbar
.src/main/scala/example/Example.scala
src/main/twirl/example/my.ex
The result of
example.ex.my("bar")
isbar bar bar
instead of| bar |
.The template text is unexpectedly being escaped. This is because the runtime type is not
Example
and https://github.com/playframework/twirl/blob/master/api/src/main/scala/play/twirl/api/BaseScalaTemplate.scala#L20.This could be improved to be
T
or a subtype, instead of onlyT
.(More generally, I feel like the runtime type branching in
BaseScalaTemplate
could be eliminated.)