Skip to content

Commit 59f725d

Browse files
Elixir: Added defdelagate keyword and highlighting for function/module names (#2709)
1 parent 7296270 commit 59f725d

File tree

4 files changed

+50
-5
lines changed

4 files changed

+50
-5
lines changed

components/prism-elixir.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ Prism.languages.elixir = {
5555
alias: 'variable'
5656
},
5757
'number': /\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,
58-
'keyword': /\b(?:after|alias|and|case|catch|cond|def(?:callback|exception|impl|module|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|require|rescue|try|unless|use|when)\b/,
58+
'keyword': /\b(?:after|alias|and|case|catch|cond|def(?:callback|exception|impl|module|p|protocol|struct|delegate)?|do|else|end|fn|for|if|import|not|or|require|rescue|try|unless|use|when)\b/,
5959
'boolean': /\b(?:true|false|nil)\b/,
6060
'operator': [
6161
/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,
@@ -73,6 +73,18 @@ Prism.languages.elixir = {
7373
'punctuation': /<<|>>|[.,%\[\]{}()]/
7474
};
7575

76+
Prism.languages.insertBefore('elixir', 'keyword', {
77+
'module': {
78+
pattern: /\b(defmodule\s)[A-Z][\w.\\]+/,
79+
lookbehind: true,
80+
alias: 'class-name'
81+
},
82+
'function': {
83+
pattern: /\b(defp?\s)[\w.\\]+/,
84+
lookbehind: true
85+
}
86+
});
87+
7688
Prism.languages.elixir.string.forEach(function(o) {
7789
o.inside = {
7890
'interpolation': {

components/prism-elixir.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/languages/elixir/keyword_feature.test

+7-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ catch cond def
33
defcallback
44
defexception
55
defimpl defmodule
6-
defp defprotocol
6+
defp
7+
defprotocol
8+
defdelegate
79
defstruct do else
810
end fn for if
911
import not or
@@ -18,7 +20,9 @@ unless use when
1820
["keyword", "defcallback"],
1921
["keyword", "defexception"],
2022
["keyword", "defimpl"], ["keyword", "defmodule"],
21-
["keyword", "defp"], ["keyword", "defprotocol"],
23+
["keyword", "defp"],
24+
["keyword", "defprotocol"],
25+
["keyword", "defdelegate"],
2226
["keyword", "defstruct"], ["keyword", "do"], ["keyword", "else"],
2327
["keyword", "end"], ["keyword", "fn"], ["keyword", "for"], ["keyword", "if"],
2428
["keyword", "import"], ["keyword", "not"], ["keyword", "or"],
@@ -28,4 +32,4 @@ unless use when
2832

2933
----------------------------------------------------
3034

31-
Checks for all keywords.
35+
Checks for all keywords.
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
defmodule Math do
2+
def sum(a, b) do
3+
a + b
4+
end
5+
end
6+
7+
----------------------------------------------------
8+
9+
[
10+
["keyword", "defmodule"], ["module", "Math"], ["keyword", "do"],
11+
12+
["keyword", "def"],
13+
["function", "sum"],
14+
["punctuation", "("],
15+
"a",
16+
["punctuation", ","],
17+
" b",
18+
["punctuation", ")"],
19+
["keyword", "do"],
20+
21+
"\n a ", ["operator", "+"], " b\n ",
22+
23+
["keyword", "end"],
24+
["keyword", "end"]
25+
]
26+
27+
----------------------------------------------------
28+
29+
Checks for all keywords.

0 commit comments

Comments
 (0)