Skip to content

Commit a4991c9

Browse files
Bryan Endersjbodah
Bryan Enders
authored andcommitted
Syntax: Add doc delimiters (#470)
Why --- I want to be able to differentiate between ordinary delimiters and those used for docs How --- * Add doc syntax specs * Add **elixirDocSigilDelimiter** group * Add **elixirDocStringDelimiter** group * Link **elixirDocStringDelimiter** and **elixirDocStringDelimiter** to **elixirStringDelimiter** and **elixirSigilDelimiter** to preserve existing behavior
1 parent b92fc03 commit a4991c9

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

spec/syntax/doc_spec.rb

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55
describe 'documentation syntax' do
66
describe 'string' do
77
it 'doc in double quotes' do
8-
expect('@doc "foo"').to include_elixir_syntax('elixirDocString', 'foo')
8+
ex = '@doc "foo"'
9+
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
10+
expect(ex).to include_elixir_syntax('elixirDocStringDelimiter', '"')
911
end
1012

1113
it 'doc in sigil_S' do
12-
expect('@doc ~S(foo)').to include_elixir_syntax('elixirDocString', 'foo')
14+
ex = '@doc ~S(foo)'
15+
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
16+
expect(ex).to include_elixir_syntax('elixirDocSigilDelimiter', 'S')
1317
end
1418
end
1519

@@ -22,6 +26,7 @@
2226
EOF
2327
expect(ex).to include_elixir_syntax('elixirVariable', 'doc')
2428
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
29+
expect(ex).to include_elixir_syntax('elixirDocStringDelimiter', '"""')
2530
end
2631

2732
it 'doc with sigil_S triple double-quoted multiline content' do
@@ -31,7 +36,7 @@
3136
"""
3237
EOF
3338
expect(ex).to include_elixir_syntax('elixirVariable', 'doc')
34-
expect(ex).to include_elixir_syntax('elixirSigilDelimiter', 'S"""')
39+
expect(ex).to include_elixir_syntax('elixirDocSigilDelimiter', 'S"""')
3540
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
3641
end
3742

@@ -42,8 +47,8 @@
4247
""")
4348
EOF
4449
expect(ex).to include_elixir_syntax('elixirVariable', 'doc')
45-
expect(ex).to include_elixir_syntax('elixirSigilDelimiter', 'S"""')
46-
expect(ex).to include_elixir_syntax('elixirSigil', 'foo')
50+
expect(ex).to include_elixir_syntax('elixirDocSigilDelimiter', 'S"""')
51+
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
4752
end
4853

4954
it 'doc with sigil_S triple single-quoted multiline content' do
@@ -53,7 +58,7 @@
5358
'''
5459
EOF
5560
expect(ex).to include_elixir_syntax('elixirVariable', 'doc')
56-
expect(ex).to include_elixir_syntax('elixirSigilDelimiter', "S'''")
61+
expect(ex).to include_elixir_syntax('elixirDocSigilDelimiter', "S'''")
5762
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
5863
end
5964

@@ -64,8 +69,8 @@
6469
''')
6570
EOF
6671
expect(ex).to include_elixir_syntax('elixirVariable', 'doc')
67-
expect(ex).to include_elixir_syntax('elixirSigilDelimiter', "S'''")
68-
expect(ex).to include_elixir_syntax('elixirSigil', 'foo')
72+
expect(ex).to include_elixir_syntax('elixirDocSigilDelimiter', "S'''")
73+
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
6974
end
7075

7176
it 'doc with triple single-quoted multiline content is not a doc string' do
@@ -83,9 +88,9 @@
8388
foo #{bar}
8489
"""
8590
EOF
86-
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
87-
expect(ex).to include_elixir_syntax('elixirStringDelimiter', '"""')
88-
expect(ex).to include_elixir_syntax('elixirInterpolation', 'bar')
91+
expect(ex).to include_elixir_syntax('elixirDocString', 'foo')
92+
expect(ex).to include_elixir_syntax('elixirDocStringDelimiter', '"""')
93+
expect(ex).to include_elixir_syntax('elixirInterpolation', 'bar')
8994
end
9095

9196
it 'doc with doctest' do

syntax/elixir.vim

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,15 @@ else
117117
syn region elixirDocTest start="^\s*\%(iex\|\.\.\.\)\%((\d*)\)\?>\s" end="^\s*$" contained
118118
endif
119119

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

130130
" Defines
131131
syn match elixirDefine '\<def\>\(:\)\@!' nextgroup=elixirFunctionDeclaration skipwhite skipnl
@@ -209,6 +209,8 @@ hi def link elixirRegexQuantifier elixirSpecial
209209
hi def link elixirSpecial Special
210210
hi def link elixirString String
211211
hi def link elixirSigil String
212+
hi def link elixirDocStringDelimiter elixirStringDelimiter
213+
hi def link elixirDocSigilDelimiter elixirSigilDelimiter
212214
hi def link elixirStringDelimiter Delimiter
213215
hi def link elixirRegexDelimiter Delimiter
214216
hi def link elixirInterpolationDelimiter Delimiter

0 commit comments

Comments
 (0)