forked from aniani/vim
runtime(java): Recognise string templates (#14150)
As this is encouraged in the referenced JEPs, "to visually distinguish a string template from a string literal, and a text block template from a text block", the default colours for java\%[Debug]StrTempl are made distinct from java\%[Debug]String. According to §3.2 Lexical Translations (JLS, c. 1996 or any more recent version), line terminators, white space, and comments are discarded before tokens are accepted. Since a template expression comprises a template processor, a dot, and a template, it may be visually appealing to break up its head across a few lines whenever its tail already spans multiple lines. Curiously, no allowance for it is made in the distributed tests for OpenJDK 21; the proposed regexp patterns take in consideration a line terminator and white space after a dot. References: https://openjdk.org/jeps/430 (Preview) https://openjdk.org/jeps/459 (Second Preview) https://openjdk.org/jeps/465 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
class StringTests
|
||||
class StringTests // JDK 21+ (--enable-preview --release 21).
|
||||
{
|
||||
static {
|
||||
String s1 = "A quick brown fox jumps over the lazy dog";
|
||||
@@ -40,5 +40,65 @@ class StringTests
|
||||
""\"""\u005c\u0022
|
||||
""\"""\""
|
||||
""\"""\""\"""");
|
||||
|
||||
System.out.println(STR."""
|
||||
"
|
||||
\{"\"\""}
|
||||
\{"\"\""}\{"\u005c\u0022"}
|
||||
\{"\"\""}\{"\u005c\u0022"}"
|
||||
\{"\"\""}\"\{"\u005c\u0022\u005c\u0022"}
|
||||
\{"\"\""}\"\{"\"\""}\{"\u005c\u0022"}
|
||||
\{"\"\""}\"\{"\"\""}\""
|
||||
\{"\"\""}\"\{"\"\""}\""\""""); // JDK 21+.
|
||||
|
||||
String woof = "Woof", dog = "dog", fox = "fox";
|
||||
|
||||
String s6 = STR
|
||||
."A quick brown \{fox} jumps over the lazy \{dog}";
|
||||
String s7 = STR.process(StringTemplate.RAW
|
||||
."\"\{woof}\s!\"");
|
||||
String s8 = STR."""
|
||||
A\s\
|
||||
quick \
|
||||
brown\s\
|
||||
\{fox} \
|
||||
jumps\s\
|
||||
over \
|
||||
the\s\
|
||||
lazy \
|
||||
\{dog}""";
|
||||
String s9 = STR.process(StringTemplate.RAW
|
||||
.
|
||||
"""
|
||||
"\{woof}\s!\"""");
|
||||
String s10 = java.util.FormatProcessor.FMT
|
||||
. "%-14s\{"A\s" + STR . "quick" + "brown"}%s\{fox} "
|
||||
+ java.util.FormatProcessor.FMT
|
||||
. "%-20s\{"jumps\sover the\s"
|
||||
+ STR . "lazy"}%s\{dog}";
|
||||
String s11 = STR."""
|
||||
\"\{ // A nested comment.
|
||||
(new java.util.function.Function<String, String>() {
|
||||
public String apply(String bay) { return bay; };
|
||||
}).apply(woof)
|
||||
}\s!\"""";
|
||||
String s12 = java.util.FormatProcessor.FMT
|
||||
."""
|
||||
%-14s\{STR."""
|
||||
A\s\
|
||||
\{ "quick" } \
|
||||
brown"""}\
|
||||
%s\{ fox } \
|
||||
%-20s\{STR."""
|
||||
jumps\s\
|
||||
over \
|
||||
the\s\
|
||||
\{ "lazy" } """}\
|
||||
%s\{ dog }""";
|
||||
String s13 = STR
|
||||
."\"\{ /* A nested comment. */
|
||||
((java.util.function.Function<String, String>) bay -> bay)
|
||||
.apply(woof)
|
||||
}\s!\"";
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user