diff --git a/spec/syntax/doc_spec.rb b/spec/syntax/doc_spec.rb index e310245a..1aa6c4b2 100644 --- a/spec/syntax/doc_spec.rb +++ b/spec/syntax/doc_spec.rb @@ -35,6 +35,17 @@ expect(ex).to include_elixir_syntax('elixirDocString', 'foo') end + it 'doc with sigil_S triple double-quoted multiline content with parentheses' do + ex = <<~'EOF' + @doc(~S""" + foo + """) + EOF + expect(ex).to include_elixir_syntax('elixirVariable', 'doc') + expect(ex).to include_elixir_syntax('elixirSigilDelimiter', 'S"""') + expect(ex).to include_elixir_syntax('elixirSigil', 'foo') + end + it 'doc with sigil_S triple single-quoted multiline content' do ex = <<~'EOF' @doc ~S''' @@ -46,6 +57,17 @@ expect(ex).to include_elixir_syntax('elixirDocString', 'foo') end + it 'doc with sigil_S triple single-quoted multiline content with parentheses' do + ex = <<~'EOF' + @doc(~S''' + foo + ''') + EOF + expect(ex).to include_elixir_syntax('elixirVariable', 'doc') + expect(ex).to include_elixir_syntax('elixirSigilDelimiter', "S'''") + expect(ex).to include_elixir_syntax('elixirSigil', 'foo') + end + it 'doc with triple single-quoted multiline content is not a doc string' do ex = <<~'EOF' @doc ''' diff --git a/spec/syntax/sigil_spec.rb b/spec/syntax/sigil_spec.rb index 8d96f37c..6ef7f9da 100644 --- a/spec/syntax/sigil_spec.rb +++ b/spec/syntax/sigil_spec.rb @@ -10,6 +10,20 @@ expect('def f(~s(")), do: true').not_to include_elixir_syntax('elixirSigilDelimiter', '"') end + it 'as function argument multiline content' do + ex = <<~'EOF' + f( + ~S""" + foo + """, + bar + ) + EOF + + expect(ex).to include_elixir_syntax('elixirSigilDelimiter', 'S"""') + expect(ex).to include_elixir_syntax('elixirSigil', 'foo') + end + describe 'upper case' do it 'string' do expect('~S(string)').to include_elixir_syntax('elixirSigilDelimiter', 'S') diff --git a/syntax/elixir.vim b/syntax/elixir.vim index fceaee13..b3666b31 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -103,8 +103,8 @@ syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l(" syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l\/" end="\/" skip="\\\\\|\\\/" contains=@elixirStringContained,elixirRegexEscapePunctuation fold " Sigils surrounded with heredoc -syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z("""\)+ end=+^\s*\zs\z1\s*$+ skip=+\\"+ fold -syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z('''\)+ end=+^\s*\zs\z1\s*$+ skip=+\\'+ fold +syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z("""\)+ end=+^\s*\z1+ skip=+\\"+ fold +syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z('''\)+ end=+^\s*\z1+ skip=+\\'+ fold " Documentation if exists('g:elixir_use_markdown_for_docs') && g:elixir_use_markdown_for_docs