From 1e552c6c3d417d0fad265ab133a0668919516fa8 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Mon, 15 Apr 2019 12:19:56 +0200 Subject: [PATCH 1/3] syntax: Align matches in elixirDocString Broken since cec4aad4a587650ab9fcd50f9d2a17e91bf648da. --- syntax/elixir.vim | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/syntax/elixir.vim b/syntax/elixir.vim index 0d9ead52..9a10039e 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=+\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 " Defines syn match elixirDefine '\\(:\)\@!' nextgroup=elixirFunctionDeclaration skipwhite skipnl From c55138cb0cdb0c8b343d544e46d088b3bf0d6e9c Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Wed, 17 Apr 2019 00:03:59 +0200 Subject: [PATCH 2/3] test: retab spec/syntax/doc_spec.rb --- spec/syntax/doc_spec.rb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/spec/syntax/doc_spec.rb b/spec/syntax/doc_spec.rb index bc6766ad..58b47cea 100644 --- a/spec/syntax/doc_spec.rb +++ b/spec/syntax/doc_spec.rb @@ -129,7 +129,7 @@ def some_fun(x), do: x it 'with double quote' do ex = <<~'EOF' - @doc " + @doc " doctest iex> \"bob\" @@ -144,7 +144,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 +159,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 +188,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 From c2abac23158455c6c81608c78ba1265fa8fa2733 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Wed, 17 Apr 2019 00:25:36 +0200 Subject: [PATCH 3/3] syntax: Allow escaping of doc heredocs Use the same end pattern as normal heredocs. Fixes #469 --- spec/syntax/doc_spec.rb | 17 +++++++++++++++++ syntax/elixir.vim | 6 +++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/spec/syntax/doc_spec.rb b/spec/syntax/doc_spec.rb index 58b47cea..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 """ diff --git a/syntax/elixir.vim b/syntax/elixir.vim index 9a10039e..f405dcce 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -123,9 +123,9 @@ syn region elixirDocString matchgroup=elixirDocSigilDelimiter start="\%(@\w*doc 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=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