Support quotes at the end of a raw string

Fix for KT-4650 Can't use double quote at the end of the raw string

#KT-4650 Fixed
This commit is contained in:
Andrey Breslav
2014-03-06 14:27:46 +04:00
parent 3cd1af3ba1
commit 2a0ccb95b1
8 changed files with 538 additions and 324 deletions
@@ -0,0 +1,28 @@
class P(val actual: String, val expected: String)
fun array(vararg s: P) = s
fun box() : String {
val data = array(
P("""""", ""),
P(""""""", "\""),
P("""""""", "\"\""),
P(""""""""", "\"\"\""),
P("""""""""", "\"\"\"\""),
P("""" """, "\" "),
P(""""" """, "\"\" "),
P(""" """", " \""),
P(""" """"", " \"\""),
P(""" """""", " \"\"\""),
P(""" """"""", " \"\"\"\""),
P(""" """""""", " \"\"\"\"\""),
P("""" """", "\" \""),
P(""""" """"", "\"\" \"\"")
)
for (i in 0..data.size-1) {
val p = data[i]
if (p.actual != p.expected) return "Fail at #$i. actual='${p.actual}', expected='${p.expected}'"
}
return "OK"
}
@@ -0,0 +1,19 @@
fun foo() {
""""""
"""""""
""""""""
"""""""""
""""""""""
"""" """
""""" """
""" """"
""" """""
""" """"""
""" """""""
""" """"""""
"""" """"
""""" """""
}
@@ -0,0 +1,123 @@
JetFile: RawStringsWithManyQuotes.kt
PACKAGE_DIRECTIVE
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('""""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('""""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"""""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('"')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)(' ')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('""')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')