From 29899c401b9ed9d4fe4bc8b8b46a518c16bd6e3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aziz=20K=C3=B6ksal?= Date: Tue, 19 Mar 2019 23:29:08 +0100 Subject: [PATCH 1/7] Elixir: also apply syntax to files with elixirc and iex in hashbang. --- Elixir.sublime-syntax | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Elixir.sublime-syntax b/Elixir.sublime-syntax index bdb8ac08..43507f2d 100644 --- a/Elixir.sublime-syntax +++ b/Elixir.sublime-syntax @@ -5,7 +5,7 @@ name: Elixir file_extensions: - ex - exs -first_line_match: ^#!/.*\belixir +first_line_match: ^#!/.*\b(?:elixirc?|iex) scope: source.elixir variables: From 47b1f89efb526c88c69b29c999799a973168ca58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aziz=20K=C3=B6ksal?= Date: Tue, 19 Mar 2019 23:35:47 +0100 Subject: [PATCH 2/7] Elixir: fix: module names can only have ASCII letters. --- Elixir.sublime-syntax | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Elixir.sublime-syntax b/Elixir.sublime-syntax index 43507f2d..f7bb85b5 100644 --- a/Elixir.sublime-syntax +++ b/Elixir.sublime-syntax @@ -9,7 +9,7 @@ first_line_match: ^#!/.*\b(?:elixirc?|iex) scope: source.elixir variables: - module_name: '\b[A-Z]\w*\b' + module_name: '\b[A-Z][a-zA-Z0-9_]*\b' contexts: main: From 099085a1031cabadf77043d55651850879706632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aziz=20K=C3=B6ksal?= Date: Tue, 19 Mar 2019 23:37:26 +0100 Subject: [PATCH 3/7] Elixir: fix: don't highlight as module name if used as map/kwlist key. --- Elixir.sublime-syntax | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Elixir.sublime-syntax b/Elixir.sublime-syntax index f7bb85b5..f2a8bc4d 100644 --- a/Elixir.sublime-syntax +++ b/Elixir.sublime-syntax @@ -440,7 +440,7 @@ contexts: - match: (? Date: Tue, 19 Mar 2019 23:38:22 +0100 Subject: [PATCH 4/7] Elixir: reduce regex length by grouping is_* function names. --- Elixir.sublime-syntax | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Elixir.sublime-syntax b/Elixir.sublime-syntax index f2a8bc4d..a80dc886 100644 --- a/Elixir.sublime-syntax +++ b/Elixir.sublime-syntax @@ -59,7 +59,7 @@ contexts: - match: ',|\)|$' pop: true - include: main - - match: \b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\b + - match: \b(is_(?:atom|binary|bitstring|boolean|float|function|integer|list|map|nil|number|pid|port|record|reference|tuple|exception)|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\b scope: keyword.guard.elixir numeric: From 0110e187e30c65d4ff3a986f8a1854622d8d7ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aziz=20K=C3=B6ksal?= Date: Tue, 19 Mar 2019 23:42:49 +0100 Subject: [PATCH 5/7] Elixir: fix: atoms can also begin with a Unicode character or underscore. --- Elixir.sublime-syntax | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Elixir.sublime-syntax b/Elixir.sublime-syntax index a80dc886..cc891218 100644 --- a/Elixir.sublime-syntax +++ b/Elixir.sublime-syntax @@ -480,12 +480,12 @@ contexts: pop: true - include: interpolated_elixir - include: escaped_char - - match: '(?[a-zA-Z_][\w@]*(?>[?!]|=(?![>=]))?|\<\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\-|\|>|=>|=~|=|/|\\\\|\*\*?|\.\.?\.?|>=?|<=?|&&?&?|\+\+?|\-\-?|\|\|?\|?|\!|@|\%?\{\}|%|\[\]|\^(\^\^)?)' + - match: '(?[_[:alpha:]][\w@]*(?>[?!]|=(?![>=]))?|\<\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\-|\|>|=>|=~|=|/|\\\\|\*\*?|\.\.?\.?|>=?|<=?|&&?&?|\+\+?|\-\-?|\|\|?\|?|\!|@|\%?\{\}|%|\[\]|\^(\^\^)?)' comment: symbols scope: constant.other.symbol.elixir captures: 1: punctuation.definition.constant.elixir - - match: '(?>[a-zA-Z_][\w@]*(?>[?!])?)(:)(?!:)' + - match: '(?>[_[:alpha:]][\w@]*(?>[?!])?)(:)(?!:)' comment: symbols scope: constant.other.keywords.elixir captures: From 781e17f55e0aa24d9c04407225e9bac040aa8c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aziz=20K=C3=B6ksal?= Date: Tue, 19 Mar 2019 23:45:56 +0100 Subject: [PATCH 6/7] Elixir: fix: function names can begin with a Unicode character or underscore. --- Elixir.sublime-syntax | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Elixir.sublime-syntax b/Elixir.sublime-syntax index cc891218..162859e9 100644 --- a/Elixir.sublime-syntax +++ b/Elixir.sublime-syntax @@ -335,13 +335,13 @@ contexts: pop: true - match: '{{module_name}}' scope: entity.name.protocol.elixir - - match: '^\s*(def|defmacro)\s+([a-zA-Z_]\w*(?:!|\?)?)(?:(\()|\s*)' + - match: '^\s*(def|defmacro)\s+(\w+(?:!|\?)?)(?:(\()|\s*)' captures: 1: keyword.control.module.elixir 2: entity.name.function.public.elixir 3: punctuation.definition.parameters.elixir push: function_body - - match: '^\s*(defp|defmacrop)\s+([a-zA-Z_]\w*(?:!|\?)?)(?:(\()|\s*)' + - match: '^\s*(defp|defmacrop)\s+(\w+(?:!|\?)?)(?:(\()|\s*)' captures: 1: keyword.control.module.elixir 2: entity.name.function.private.elixir From 94e8dd9c9b71cf95e07d93c68370b281bec645d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aziz=20K=C3=B6ksal?= Date: Thu, 21 Mar 2019 20:44:17 +0100 Subject: [PATCH 7/7] Elixir: added id_begin variable; fixed matching function names. --- Elixir.sublime-syntax | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Elixir.sublime-syntax b/Elixir.sublime-syntax index 162859e9..0642f2d1 100644 --- a/Elixir.sublime-syntax +++ b/Elixir.sublime-syntax @@ -10,6 +10,7 @@ scope: source.elixir variables: module_name: '\b[A-Z][a-zA-Z0-9_]*\b' + id_begin: '[[:alpha:]_]' contexts: main: @@ -335,13 +336,13 @@ contexts: pop: true - match: '{{module_name}}' scope: entity.name.protocol.elixir - - match: '^\s*(def|defmacro)\s+(\w+(?:!|\?)?)(?:(\()|\s*)' + - match: '^\s*(def|defmacro)\s+({{id_begin}}\w*(?:!|\?)?)(?:(\()|\s*)' captures: 1: keyword.control.module.elixir 2: entity.name.function.public.elixir 3: punctuation.definition.parameters.elixir push: function_body - - match: '^\s*(defp|defmacrop)\s+(\w+(?:!|\?)?)(?:(\()|\s*)' + - match: '^\s*(defp|defmacrop)\s+({{id_begin}}\w*(?:!|\?)?)(?:(\()|\s*)' captures: 1: keyword.control.module.elixir 2: entity.name.function.private.elixir @@ -480,12 +481,12 @@ contexts: pop: true - include: interpolated_elixir - include: escaped_char - - match: '(?[_[:alpha:]][\w@]*(?>[?!]|=(?![>=]))?|\<\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\-|\|>|=>|=~|=|/|\\\\|\*\*?|\.\.?\.?|>=?|<=?|&&?&?|\+\+?|\-\-?|\|\|?\|?|\!|@|\%?\{\}|%|\[\]|\^(\^\^)?)' + - match: '(?{{id_begin}}[\w@]*(?>[?!]|=(?![>=]))?|\<\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\-|\|>|=>|=~|=|/|\\\\|\*\*?|\.\.?\.?|>=?|<=?|&&?&?|\+\+?|\-\-?|\|\|?\|?|\!|@|\%?\{\}|%|\[\]|\^(\^\^)?)' comment: symbols scope: constant.other.symbol.elixir captures: 1: punctuation.definition.constant.elixir - - match: '(?>[_[:alpha:]][\w@]*(?>[?!])?)(:)(?!:)' + - match: '(?>{{id_begin}}[\w@]*(?>[?!])?)(:)(?!:)' comment: symbols scope: constant.other.keywords.elixir captures: