aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorath32021-11-08 01:05:12 +0000
committerGitHub2021-11-08 01:05:12 +0000
commit30744646cb0fab64a87f20c98bff033007512323 (patch)
tree902cdbd2d044cfdd9990938528b3f6c0af09465c
parentcdc2107bca42f5affa6896771a26f09dc55beeb7 (diff)
Perl support (#978)
-rw-r--r--.gitmodules4
m---------helix-syntax/languages/tree-sitter-perl0
-rw-r--r--languages.toml8
-rw-r--r--runtime/queries/perl/highlights.scm181
-rw-r--r--runtime/queries/perl/textobjects.scm8
5 files changed, 201 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules
index 7ed34ad3..5c6f22cd 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -134,3 +134,7 @@
path = helix-syntax/languages/tree-sitter-cmake
url = https://github.com/uyha/tree-sitter-cmake
shallow = true
+[submodule "helix-syntax/languages/tree-sitter-perl"]
+ path = helix-syntax/languages/tree-sitter-perl
+ url = https://github.com/ganezdragon/tree-sitter-perl
+ shallow = true
diff --git a/helix-syntax/languages/tree-sitter-perl b/helix-syntax/languages/tree-sitter-perl
new file mode 160000
+Subproject 0ac2c6da562c7a2c26ed7e8691d4a590f7e8b90
diff --git a/languages.toml b/languages.toml
index 826fd93f..98892171 100644
--- a/languages.toml
+++ b/languages.toml
@@ -366,3 +366,11 @@ roots = []
comment-token = "#"
indent = { tab-width = 2, unit = " " }
language-server = { command = "cmake-language-server" }
+
+[[language]]
+name = "perl"
+scope = "source.perl"
+file-types = ["pl", "pm"]
+roots = []
+comment-token = "#"
+indent = { tab-width = 2, unit = " " }
diff --git a/runtime/queries/perl/highlights.scm b/runtime/queries/perl/highlights.scm
new file mode 100644
index 00000000..b6f04291
--- /dev/null
+++ b/runtime/queries/perl/highlights.scm
@@ -0,0 +1,181 @@
+; Variables
+(variable_declaration
+ .
+ (scope) @keyword)
+[
+(single_var_declaration)
+(scalar_variable)
+(array_variable)
+(hash_variable)
+(hash_variable)
+] @variable
+
+
+[
+(package_name)
+(special_scalar_variable)
+(special_array_variable)
+(special_hash_variable)
+(special_literal)
+(super)
+] @constant
+
+(
+ [
+ (package_name)
+ (super)
+ ]
+ .
+ ("::" @operator)
+)
+
+(comments) @comment
+(pod_statement) @comment.block.documentation
+
+[
+(use_no_statement)
+(use_no_feature_statement)
+(use_no_if_statement)
+(use_no_version)
+(use_constant_statement)
+(use_parent_statement)
+] @keyword
+
+(use_constant_statement
+ constant: (identifier) @constant)
+
+[
+"require"
+] @keyword
+
+(method_invocation
+ .
+ (identifier) @variable)
+
+(method_invocation
+ (arrow_operator)
+ .
+ (identifier) @function)
+(method_invocation
+ function_name: (identifier) @function)
+(named_block_statement
+ function_name: (identifier) @function)
+
+(call_expression
+ function_name: (identifier) @function)
+(function_definition
+ name: (identifier) @function)
+[
+(function)
+(map)
+(grep)
+(bless)
+] @function
+
+[
+"return"
+"sub"
+"package"
+"BEGIN"
+"END"
+] @keyword.function
+
+[
+"("
+")"
+"["
+"]"
+"{"
+"}"
+] @punctuation.bracket
+(standard_input_to_variable) @punctuation.bracket
+
+[
+"=~"
+"or"
+"="
+"=="
+"+"
+"-"
+"."
+"//"
+"||"
+(arrow_operator)
+(hash_arrow_operator)
+(array_dereference)
+(hash_dereference)
+(to_reference)
+(type_glob)
+(hash_access_variable)
+(ternary_expression)
+(ternary_expression_in_hash)
+] @operator
+
+[
+(regex_option)
+(regex_option_for_substitution)
+(regex_option_for_transliteration)
+] @variable.parameter
+
+(type_glob
+ (identifier) @variable)
+(
+ (scalar_variable)
+ .
+ ("->" @operator))
+
+[
+(word_list_qw)
+(command_qx_quoted)
+(string_single_quoted)
+(string_double_quoted)
+(string_qq_quoted)
+(bareword)
+(transliteration_tr_or_y)
+] @string
+
+[
+(regex_pattern_qr)
+(patter_matcher_m)
+(substitution_pattern_s)
+] @string.regexp
+
+(escape_sequence) @string.special
+
+[
+","
+(semi_colon)
+(start_delimiter)
+(end_delimiter)
+(ellipsis_statement)
+] @punctuation.delimiter
+
+[
+(integer)
+(floating_point)
+(scientific_notation)
+(hexadecimal)
+] @constant.numeric
+
+[
+; (if_statement)
+(unless_statement)
+(if_simple_statement)
+(unless_simple_statement)
+] @keyword.control.conditional
+
+[
+"if"
+"elsif"
+"else"
+] @keyword.control.conditional
+
+(foreach_statement) @keyword.control.repeat
+(foreach_statement
+ .
+ (scope) @keyword)
+
+(function_attribute) @label
+
+(function_signature) @type
+
diff --git a/runtime/queries/perl/textobjects.scm b/runtime/queries/perl/textobjects.scm
new file mode 100644
index 00000000..988e22b4
--- /dev/null
+++ b/runtime/queries/perl/textobjects.scm
@@ -0,0 +1,8 @@
+(function_definition
+ (identifier) (_) @function.inside) @function.around
+
+(anonymous_function
+ (_) @function.inside) @function.around
+
+(argument
+ (_) @parameter.inside)