diff --git a/spec/syntax/doc_spec.rb b/spec/syntax/doc_spec.rb index bc6766ad..9ff09491 100644 --- a/spec/syntax/doc_spec.rb +++ b/spec/syntax/doc_spec.rb @@ -82,6 +82,23 @@ expect(ex).not_to include_elixir_syntax('elixirDocString', 'foo') end + it 'doc with multiline escaped' do + ex = <<~'EOF' + @doc """ + foo + ``` + @xxx \""" + bar + \""" + ``` + baz + """ + EOF + expect(ex).to include_elixir_syntax('elixirDocString', 'foo') + expect(ex).to include_elixir_syntax('elixirDocString', 'bar') + expect(ex).to include_elixir_syntax('elixirDocString', 'baz') + end + it 'doc skip interpolation' do ex = <<~'EOF' @doc """ @@ -129,7 +146,7 @@ def some_fun(x), do: x it 'with double quote' do ex = <<~'EOF' - @doc " + @doc " doctest iex> \"bob\" @@ -144,7 +161,7 @@ def some_fun(x), do: x it 'with sigil_S' do ex = <<~'EOF' - @doc ~S( + @doc ~S( doctest iex> to_string("bob"\) @@ -159,7 +176,7 @@ def some_fun(x), do: x it 'with sigil_s' do ex = <<~'EOF' - @doc ~s( + @doc ~s( doctest iex> to_string("bob"\) @@ -188,13 +205,13 @@ def some_fun(x), do: x after(:each) { VIM.command("let g:elixir_use_markdown_for_docs = 0") } it 'doc with inline code' do - ex = <<~'EOF' - @doc """ - doc with inline code `List.wrap([])` - """ - EOF - expect(ex).to include_elixir_syntax('elixirDocString', 'inline') - expect(ex).to include_elixir_syntax('markdownCode', 'wrap') + ex = <<~'EOF' + @doc """ + doc with inline code `List.wrap([])` + """ + EOF + expect(ex).to include_elixir_syntax('elixirDocString', 'inline') + expect(ex).to include_elixir_syntax('markdownCode', 'wrap') end end end diff --git a/syntax/elixir.vim b/syntax/elixir.vim index 0d9ead52..f405dcce 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -118,14 +118,14 @@ else endif syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]\z(/\|\"\|'\||\)" end="\z1" skip="\\\\\|\\\z1" contains=@elixirDocStringContained fold keepend -syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]{" end="}" skip="\\\\\|\\}" contains=@elixirDocStringContained fold keepend -syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]<" end=">" skip="\\\\\|\\>" contains=@elixirDocStringContained fold keepend -syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]\[" end="\]" skip="\\\\\|\\\]" contains=@elixirDocStringContained fold keepend -syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss](" end=")" skip="\\\\\|\\)" contains=@elixirDocStringContained fold keepend -syn region elixirDocString matchgroup=elixirDocStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirDocStringContained keepend -syn region elixirDocString matchgroup=elixirDocStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+\z1+ contains=@elixirDocStringContained fold keepend -syn region elixirDocString matchgroup=elixirDocSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+\z1+ skip=+\\'+ contains=@elixirDocStringContained fold keepend -syn region elixirDocString matchgroup=elixirDocSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+\z1+ skip=+\\"+ contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]{" end="}" skip="\\\\\|\\}" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]<" end=">" skip="\\\\\|\\>" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]\[" end="\]" skip="\\\\\|\\\]" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss](" end=")" skip="\\\\\|\\)" contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirDocStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirDocStringContained keepend +syn region elixirDocString matchgroup=elixirDocStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+^\s*\z1+ contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirDocSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+^\s*\z1+ contains=@elixirDocStringContained fold keepend +syn region elixirDocString matchgroup=elixirDocSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+^\s*\z1+ contains=@elixirDocStringContained fold keepend " Defines syn match elixirDefine '\\(:\)\@!' nextgroup=elixirFunctionDeclaration skipwhite skipnl