Skip to content

Commit 5bba2b3

Browse files
lmarlowkassio
authored andcommitted
elixirDocString's own their ends. (#232)
This prevents doc tests leaking past the end of the docstring. Fixes #230
1 parent 1a7c7e4 commit 5bba2b3

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

spec/syntax/doc_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,21 @@
8484
expect(ex).to include_elixir_syntax('elixirDocTest', '2, 4, 6')
8585
end
8686

87+
it 'doctest finishes when not followed by blank line' do
88+
ex = <<~'EOF'
89+
@doc """
90+
doctest
91+
92+
iex> 1 + 2
93+
3
94+
"""
95+
def some_fun(x), do: x
96+
EOF
97+
expect(ex).to include_elixir_syntax('elixirDocString', 'doctest')
98+
expect(ex).to include_elixir_syntax('elixirDocTest', '1 + 2')
99+
expect(ex).to include_elixir_syntax('elixirDefine', 'def')
100+
end
101+
87102
it 'doc with inline code' do
88103
ex = <<~'EOF'
89104
@doc """

syntax/elixir.vim

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\
127127
syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S\[" end="\]" skip="\\\\\|\\\]" contains=@elixirDocStringContained fold
128128
syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~S(" end=")" skip="\\\\\|\\)" contains=@elixirDocStringContained fold
129129
syn region elixirDocString matchgroup=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@markdown,@Spell
130-
syn region elixirDocString matchgroup=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+\z1+ contains=@elixirDocStringContained fold
131-
syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+\z1+ skip=+\\'+ contains=@elixirDocStringContained fold
132-
syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+\z1+ skip=+\\"+ contains=@elixirDocStringContained fold
130+
syn region elixirDocString matchgroup=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+\z1+ contains=@elixirDocStringContained fold keepend
131+
syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+\z1+ skip=+\\'+ contains=@elixirDocStringContained fold keepend
132+
syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+\z1+ skip=+\\"+ contains=@elixirDocStringContained fold keepend
133133

134134
" Defines
135135
syn match elixirDefine '\<def\>\(:\)\@!' nextgroup=elixirFunctionDeclaration skipwhite skipnl

0 commit comments

Comments
 (0)