From dbd046fb882284bd7926f15ab1e612468318dd3a Mon Sep 17 00:00:00 2001 From: Amirali Esmaeili Date: Sat, 22 Jan 2022 13:42:55 +0330 Subject: [PATCH] Support escape seq in backtick strings --- .../rescript-project/src/escapeSyntax.res | 27 +++++++++++++++++++ syntax/rescript.vim | 13 +++++---- 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 examples/rescript-project/src/escapeSyntax.res diff --git a/examples/rescript-project/src/escapeSyntax.res b/examples/rescript-project/src/escapeSyntax.res new file mode 100644 index 0000000..6bd1f9f --- /dev/null +++ b/examples/rescript-project/src/escapeSyntax.res @@ -0,0 +1,27 @@ +let a = "abc" + +let str = "aaa\"bbb" + +Js.log(` \` ccc ${a} ddd `) + +Js.log(`a = ${a}`) + +Js.log(``) + +Js.log(`\``) + +Js.log(`first line\nsecond line`) + +Js.log(`first line\r\nsecond line`) + +Js.log(` +multi line +\` +multi line +`) + +let b = 34 + +let parser = %raw(` +adsfadsfzz +`) diff --git a/syntax/rescript.vim b/syntax/rescript.vim index ca2ac6c..2e0ab5c 100644 --- a/syntax/rescript.vim +++ b/syntax/rescript.vim @@ -79,14 +79,16 @@ syntax match resAttribute "\v\@([a-zA-z][A-Za-z0-9_']*)(\.([a-zA-z])[A-Za-z0-9_' " String syntax match resUnicodeChar "\v\\u[A-Fa-f0-9]\{4}" contained -syntax match resEscapedChar "\v\\[\\"'ntbrf]" contained -syntax region resString start="\v\"" end="\v\"" contains=resEscapedQuote,resEscapedChar,resUnicodeChar +syntax match resStringEscapeSeq "\v\\[\\"ntbrf]" contained +syntax match resInterpolatedStringEscapeSeq "\v\\[\\`ntbrf]" contained + +syntax region resString start="\v\"" end="\v\"" contains=resStringEscapeSeq,resUnicodeChar " Interpolation syntax match resInterpolationVariable "\v\$[a-z_][A-Za-z0-0_'$]*" contained syntax region resInterpolationBlock matchgroup=resInterpolationDelimiters start="\v\$\{" end="\v\}" contained contains=TOP -syntax region resString start="\v`" end="\v`" contains=resInterpolationBlock -syntax region resString start="\v[a-z]`" end="\v`" contains=resInterpolationBlock,resInterpolationVariable +syntax region resString start="\v`" end="\v`" contains=resInterpolationBlock,resInterpolatedStringEscapeSeq +syntax region resString start="\v[a-z]`" end="\v`" contains=resInterpolationBlock,resInterpolationVariable,resInterpolatedStringEscapeSeq " Polymorphic variants syntax match resPolyVariant "\v#[A-za-z][A-Za-z0-9_'$]*" @@ -109,7 +111,8 @@ highlight default link resModuleOrVariant Function highlight default link resPolyVariant Function highlight default link resModuleChain Macro highlight default link resUnicodeChar Character -highlight default link resEscapedChar Character +highlight default link resStringEscapeSeq Character +highlight default link resInterpolatedStringEscapeSeq Character highlight default link resString String highlight default link resInterpolationDelimiters Macro highlight default link resInterpolationVariable Macro