Skip to content

Commit fbab531

Browse files
liskinjbodah
authored andcommitted
syntax: Allow escaping of doc heredocs (elixir-editors#489)
* syntax: Align matches in elixirDocString Broken since cec4aad. * test: retab spec/syntax/doc_spec.rb * syntax: Allow escaping of doc heredocs Use the same end pattern as normal heredocs. Fixes elixir-editors#469
1 parent d51d5f7 commit fbab531

File tree

2 files changed

+35
-18
lines changed

2 files changed

+35
-18
lines changed

spec/syntax/doc_spec.rb

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,23 @@
8282
expect(ex).not_to include_elixir_syntax('elixirDocString', 'foo')
8383
end
8484

85+
it 'doc with multiline escaped' do
86+
ex = <<~'EOF'
87+
@doc """
88+
foo
89+
```
90+
@xxx \"""
91+
bar
92+
\"""
93+
```
94+
baz
95+
"""
96+
EOF
97+
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
98+
expect(ex).to include_elixir_syntax('elixirDocString', 'bar')
99+
expect(ex).to include_elixir_syntax('elixirDocString', 'baz')
100+
end
101+
85102
it 'doc skip interpolation' do
86103
ex = <<~'EOF'
87104
@doc """
@@ -129,7 +146,7 @@ def some_fun(x), do: x
129146

130147
it 'with double quote' do
131148
ex = <<~'EOF'
132-
@doc "
149+
@doc "
133150
doctest
134151
135152
iex> \"bob\"
@@ -144,7 +161,7 @@ def some_fun(x), do: x
144161

145162
it 'with sigil_S' do
146163
ex = <<~'EOF'
147-
@doc ~S(
164+
@doc ~S(
148165
doctest
149166
150167
iex> to_string("bob"\)
@@ -159,7 +176,7 @@ def some_fun(x), do: x
159176

160177
it 'with sigil_s' do
161178
ex = <<~'EOF'
162-
@doc ~s(
179+
@doc ~s(
163180
doctest
164181
165182
iex> to_string("bob"\)
@@ -188,13 +205,13 @@ def some_fun(x), do: x
188205
after(:each) { VIM.command("let g:elixir_use_markdown_for_docs = 0") }
189206

190207
it 'doc with inline code' do
191-
ex = <<~'EOF'
192-
@doc """
193-
doc with inline code `List.wrap([])`
194-
"""
195-
EOF
196-
expect(ex).to include_elixir_syntax('elixirDocString', 'inline')
197-
expect(ex).to include_elixir_syntax('markdownCode', 'wrap')
208+
ex = <<~'EOF'
209+
@doc """
210+
doc with inline code `List.wrap([])`
211+
"""
212+
EOF
213+
expect(ex).to include_elixir_syntax('elixirDocString', 'inline')
214+
expect(ex).to include_elixir_syntax('markdownCode', 'wrap')
198215
end
199216
end
200217
end

syntax/elixir.vim

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,14 +118,14 @@ else
118118
endif
119119

120120
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]\z(/\|\"\|'\||\)" end="\z1" skip="\\\\\|\\\z1" contains=@elixirDocStringContained fold keepend
121-
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]{" end="}" skip="\\\\\|\\}" contains=@elixirDocStringContained fold keepend
122-
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]<" end=">" skip="\\\\\|\\>" contains=@elixirDocStringContained fold keepend
123-
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]\[" end="\]" skip="\\\\\|\\\]" contains=@elixirDocStringContained fold keepend
124-
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss](" end=")" skip="\\\\\|\\)" contains=@elixirDocStringContained fold keepend
125-
syn region elixirDocString matchgroup=elixirDocStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirDocStringContained keepend
126-
syn region elixirDocString matchgroup=elixirDocStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+\z1+ contains=@elixirDocStringContained fold keepend
127-
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+\z1+ skip=+\\'+ contains=@elixirDocStringContained fold keepend
128-
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+\z1+ skip=+\\"+ contains=@elixirDocStringContained fold keepend
121+
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]{" end="}" skip="\\\\\|\\}" contains=@elixirDocStringContained fold keepend
122+
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]<" end=">" skip="\\\\\|\\>" contains=@elixirDocStringContained fold keepend
123+
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]\[" end="\]" skip="\\\\\|\\\]" contains=@elixirDocStringContained fold keepend
124+
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss](" end=")" skip="\\\\\|\\)" contains=@elixirDocStringContained fold keepend
125+
syn region elixirDocString matchgroup=elixirDocStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirDocStringContained keepend
126+
syn region elixirDocString matchgroup=elixirDocStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+^\s*\z1+ contains=@elixirDocStringContained fold keepend
127+
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+^\s*\z1+ contains=@elixirDocStringContained fold keepend
128+
syn region elixirDocString matchgroup=elixirDocSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+^\s*\z1+ contains=@elixirDocStringContained fold keepend
129129

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

0 commit comments

Comments
 (0)