diff --git a/spec/syntax/doc_spec.rb b/spec/syntax/doc_spec.rb index c66b7906..2d057542 100644 --- a/spec/syntax/doc_spec.rb +++ b/spec/syntax/doc_spec.rb @@ -99,6 +99,22 @@ def some_fun(x), do: x expect(ex).to include_elixir_syntax('elixirDefine', 'def') end + it 'doctest defined with sigil finishes when not followed by blank line' do + ex = <<~'EOF' + @doc ~{ + doctest + + iex> 1 + 2 + 3 + + } + def some_fun(x), do: x + EOF + expect(ex).to include_elixir_syntax('elixirDocString', 'doctest') + expect(ex).to include_elixir_syntax('elixirDocTest', '1 + 2') + expect(ex).to include_elixir_syntax('elixirDefine', 'def') + end + it 'doc with inline code' do ex = <<~'EOF' @doc """ diff --git a/syntax/elixir.vim b/syntax/elixir.vim index 9c140e61..7a6b9aa5 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -121,12 +121,12 @@ else syn region elixirDocTest start="^\s*\%(iex\|\.\.\.\)\%((\d*)\)\?>\s" end="^\s*$" contained endif -syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S\z(/\|\"\|'\||\){1}" end="\z1" skip="\\\\\|\\\z1" contains=@elixirDocStringContained fold -syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S{" end="}" skip="\\\\\|\\}" contains=@elixirDocStringContained fold -syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S<" end=">" skip="\\\\\|\\>" contains=@elixirDocStringContained fold -syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S\[" end="\]" skip="\\\\\|\\\]" contains=@elixirDocStringContained fold -syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S(" end=")" skip="\\\\\|\\)" contains=@elixirDocStringContained fold -syn region elixirDocString matchgroup=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@markdown,@Spell +syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S\z(/\|\"\|'\||\){1}" end="\z1" skip="\\\\\|\\\z1" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S{" end="}" skip="\\\\\|\\}" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S<" end=">" skip="\\\\\|\\>" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S\[" end="\]" skip="\\\\\|\\\]" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S(" end=")" skip="\\\\\|\\)" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@markdown,@Spell keepend syn region elixirDocString matchgroup=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+\z1+ contains=@elixirDocStringContained fold keepend syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+\z1+ skip=+\\'+ contains=@elixirDocStringContained fold keepend syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+\z1+ skip=+\\"+ contains=@elixirDocStringContained fold keepend