Skip to content

Commit 98c0304

Browse files
liskinjbodah
authored andcommitted
syntax: Highlight dots in aliases as aliases
It's confusing that "defmodule Foo.Bar" was highlighted differently than "Foo.Bar.fun". Unify the two.
1 parent c5d6345 commit 98c0304

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed

spec/syntax/alias_spec.rb

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55
describe 'Alias syntax' do
66
it 'colorize only module alias' do
7-
expect(<<~EOF).to include_elixir_syntax('elixirAlias', 'Enum')
8-
Enum.empty?(...)
9-
EOF
7+
str = "Enum.empty?(...)"
8+
expect(str).to include_elixir_syntax('elixirAlias', 'Enum')
9+
expect(str).to include_elixir_syntax('elixirOperator', '\.')
10+
expect(str).to include_elixir_syntax('elixirId', 'empty?')
1011
end
1112

1213
it 'colorize the module alias even if it starts with `!`' do
@@ -33,4 +34,15 @@
3334
expect(str).to include_elixir_syntax('elixirAlias', '3')
3435
expect(str).to include_elixir_syntax('elixirAlias', 'Manager')
3536
end
37+
38+
it 'colorize dots in module alias' do
39+
str = "Foo.Bar.Baz.fun(...)"
40+
expect(str).to include_elixir_syntax('elixirAlias', 'Foo')
41+
expect(str).to include_elixir_syntax('elixirAlias', '\.\(Bar\)\@=')
42+
expect(str).to include_elixir_syntax('elixirAlias', 'Bar')
43+
expect(str).to include_elixir_syntax('elixirAlias', '\.\(Baz\)\@=')
44+
expect(str).to include_elixir_syntax('elixirAlias', 'Baz')
45+
expect(str).to include_elixir_syntax('elixirOperator', '\.\(fun\)\@=')
46+
expect(str).to include_elixir_syntax('elixirId', 'fun')
47+
end
3648
end

spec/syntax/defmodule_spec.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
end
1111

1212
it 'defines module name as elixirModuleDeclaration' do
13-
expect(<<~EOF).to include_elixir_syntax('elixirModuleDeclaration', 'HelloPhoenix.HelloController')
14-
defmodule HelloPhoenix.HelloController do
15-
EOF
13+
str = "defmodule HelloPhoenix.HelloController do"
14+
expect(str).to include_elixir_syntax('elixirModuleDeclaration', 'HelloPhoenix')
15+
expect(str).to include_elixir_syntax('elixirModuleDeclaration', '\.')
16+
expect(str).to include_elixir_syntax('elixirModuleDeclaration', 'HelloController')
1617
end
1718

1819
it 'does not define module name as elixirAlias' do

syntax/elixir.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ syn match elixirOperator '\.\.\|\.'
3939
syn match elixirOperator "\^\^\^\|\^"
4040
syn match elixirOperator '\\\\\|::\|\*\|/\|\~\~\~\|@'
4141

42-
syn match elixirAlias '\([a-z]\)\@<![A-Z]\w*'
42+
syn match elixirAlias '\([a-z]\)\@<![A-Z]\w*\%(\.[A-Z]\w*\)*'
4343

4444
syn match elixirAtom '\(:\)\@<!:\%([a-zA-Z_]\w*\%([?!]\|=[>=]\@!\)\?\|<>\|===\?\|>=\?\|<=\?\)'
4545
syn match elixirAtom '\(:\)\@<!:\%(<=>\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)'

0 commit comments

Comments
 (0)