Skip to content

Commit

Permalink
[ #426 ] char and escape
Browse files Browse the repository at this point in the history
  • Loading branch information
zxj5470 committed Sep 22, 2019
1 parent 3b76171 commit a933970
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 6 deletions.
9 changes: 8 additions & 1 deletion .editorconfig
Expand Up @@ -17,4 +17,11 @@ indent_style=space

[*.jl]
indent_size = 4
indent_style = space
indent_style = space

[unicode-list.txt]
charset=utf-8
end_of_line=lf

[*.flex]
end_of_line=lf
2 changes: 1 addition & 1 deletion grammar/julia-lexer.flex
Expand Up @@ -93,7 +93,7 @@ SIMPLE_SYMBOL={VALID_CHAR}({VALID_CHAR}|[\d\!])*
VALID_CHAR=[a-zA-Z_\U0000A0-\U10ffff]

STRING_UNICODE=\\((u{HEXDIGIT}{4})|(x{HEXDIGIT}{2}))
CHAR_LITERAL='([^\\\'\x00-\x1F\x7F]|\\[^\x00-\x1F\x7F]+)'
CHAR_LITERAL='([^\\\'\x00-\x1F\x7F]|[a-zA-Z_\u0000A0-\u10ffff])+'
STRING_ESCAPE=\\[^]

DIGIT=[\d_]
Expand Down
10 changes: 6 additions & 4 deletions src/org/ice1000/julia/lang/action/julia-edit-actions.kt
Expand Up @@ -61,7 +61,7 @@ class JuliaUnicodeInputAction : JuliaAction(
private val unicodeList: List<LookupElementBuilder> by lazy {
JuliaUnicodeInputAction::class.java.classLoader.getResource(unicodeFile)
.readText()
.split('\n')
.lines()
.mapNotNull { str ->
if (str.isBlank()) return@mapNotNull null
val (a, b) = str.split(' ')
Expand Down Expand Up @@ -123,13 +123,15 @@ class JuliaUnicodeInputAction : JuliaAction(
override fun onClosed(event: LightweightWindowEvent) {
CommandProcessor.getInstance().executeCommand(project, {
if (null != editor) ApplicationManager.getApplication().runWriteAction {
editor.document.insertString(editor.caretModel.offset, field.text.let {
val inserted = field.text
.let {
when (it) {
"''", "\"\"" -> it.replaceFirst(it[0], '\\')
else -> it.replace("\'", "\\'").replace("\"", "\\'")
}
})
editor.caretModel.moveCaretRelatively(field.text.length, 0, false, false, true)
}
editor.document.insertString(editor.caretModel.offset, inserted)
editor.caretModel.moveCaretRelatively(inserted.length, 0, false, false, true)
}
}, null, null)
}
Expand Down
1 change: 1 addition & 0 deletions test/org/ice1000/julia/lang/julia-parsing-test.kt
Expand Up @@ -56,6 +56,7 @@ class JuliaParsingTest : ParsingTestCase("", JULIA_EXTENSION,
// TODO 373
fun testParseIssue373() = doTest(true)
fun testParseIssue379() = doTest(true)
fun testParseIssue426() = doTest(true)
fun testParseEnd() = doTest(true)
fun testParseEolAfterComma() = doTest(true)
fun testParseEolAfterWhere() = doTest(true)
Expand Down
3 changes: 3 additions & 0 deletions testData/parsing/ParseIssue426.jl
@@ -0,0 +1,3 @@
map(a, split(s, '\n'))
map(a, split(s, '\n'), ',')
map(a, split(s, '\n')), ',') # wrong syntax
67 changes: 67 additions & 0 deletions testData/parsing/ParseIssue426.txt
@@ -0,0 +1,67 @@
FILE
JuliaStatementsImpl(STATEMENTS)
JuliaApplyFunctionOpImpl(APPLY_FUNCTION_OP)
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('map')
PsiElement(LEFT_BRACKET)('(')
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('a')
PsiElement(COMMA_SYM)(',')
JuliaApplyFunctionOpImpl(APPLY_FUNCTION_OP)
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('split')
PsiElement(LEFT_BRACKET)('(')
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('s')
PsiElement(COMMA_SYM)(',')
JuliaCharLitImpl(CHAR_LIT)
PsiElement(CHAR_LITERAL)(''\n'')
PsiElement(RIGHT_BRACKET)(')')
PsiElement(RIGHT_BRACKET)(')')
PsiElement(EOL)('\n')
JuliaApplyFunctionOpImpl(APPLY_FUNCTION_OP)
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('map')
PsiElement(LEFT_BRACKET)('(')
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('a')
PsiElement(COMMA_SYM)(',')
JuliaApplyFunctionOpImpl(APPLY_FUNCTION_OP)
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('split')
PsiElement(LEFT_BRACKET)('(')
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('s')
PsiElement(COMMA_SYM)(',')
JuliaCharLitImpl(CHAR_LIT)
PsiElement(CHAR_LITERAL)(''\n'')
PsiElement(RIGHT_BRACKET)(')')
PsiElement(COMMA_SYM)(',')
JuliaCharLitImpl(CHAR_LIT)
PsiElement(CHAR_LITERAL)('','')
PsiElement(RIGHT_BRACKET)(')')
PsiElement(EOL)('\n')
JuliaApplyFunctionOpImpl(APPLY_FUNCTION_OP)
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('map')
PsiElement(LEFT_BRACKET)('(')
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('a')
PsiElement(COMMA_SYM)(',')
JuliaApplyFunctionOpImpl(APPLY_FUNCTION_OP)
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('split')
PsiElement(LEFT_BRACKET)('(')
JuliaSymbolImpl(SYMBOL)
PsiElement(SYM)('s')
PsiElement(COMMA_SYM)(',')
JuliaCharLitImpl(CHAR_LIT)
PsiElement(CHAR_LITERAL)(''\n'')
PsiElement(RIGHT_BRACKET)(')')
PsiElement(RIGHT_BRACKET)(')')
PsiElement(COMMA_SYM)(',')
JuliaCharLitImpl(CHAR_LIT)
PsiElement(CHAR_LITERAL)('','')
PsiErrorElement:<assign level operator>, <bitwise level operator>, <comparison level operator>, <multiply level operator>, <pipe level operator>, <plus level operator>, AND_SYM, BLOCK_COMMENT_START, COMMA_SYM, EOL, LEFT_BRACKET, LEFT_B_BRACKET, LINE_COMMENT, OR_SYM or SEMICOLON_SYM expected, got ')'
PsiElement(RIGHT_BRACKET)(')')
PsiComment(LINE_COMMENT)('# wrong syntax')

0 comments on commit a933970

Please sign in to comment.