From 1cfd15111ebc5caa30daaab43acce1eaa3aa8198 Mon Sep 17 00:00:00 2001 From: Lee Marlow Date: Thu, 1 Dec 2016 16:51:29 -0700 Subject: [PATCH] `elixirDocString`'s own their ends. This prevents doc tests leaking past the end of the docstring. Fixes #230 --- spec/syntax/doc_spec.rb | 15 +++++++++++++++ syntax/elixir.vim | 6 +++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/spec/syntax/doc_spec.rb b/spec/syntax/doc_spec.rb index 4ecda1d3..c66b7906 100644 --- a/spec/syntax/doc_spec.rb +++ b/spec/syntax/doc_spec.rb @@ -84,6 +84,21 @@ expect(ex).to include_elixir_syntax('elixirDocTest', '2, 4, 6') end + it 'doctest 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 396e56a4..9c140e61 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -127,9 +127,9 @@ syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\ 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=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+\z1+ contains=@elixirDocStringContained fold -syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+\z1+ skip=+\\'+ contains=@elixirDocStringContained fold -syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+\z1+ skip=+\\"+ contains=@elixirDocStringContained fold +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 " Defines syn match elixirDefine '\\(:\)\@!' nextgroup=elixirFunctionDeclaration skipwhite skipnl