aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/perl
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-06-12 09:54:30 -0600
committerChristian Clason <c.clason@uni-graz.at>2025-05-12 18:43:40 +0200
commit692b051b09935653befdb8f7ba8afdb640adf17b (patch)
tree167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/perl
parentfeat(c-family): inherit injections (diff)
downloadnvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.gz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.bz2
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.lz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.xz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.zst
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.zip
feat!: drop modules, general refactor and cleanup
Diffstat (limited to 'runtime/queries/perl')
-rw-r--r--runtime/queries/perl/folds.scm36
-rw-r--r--runtime/queries/perl/highlights.scm324
-rw-r--r--runtime/queries/perl/injections.scm15
3 files changed, 375 insertions, 0 deletions
diff --git a/runtime/queries/perl/folds.scm b/runtime/queries/perl/folds.scm
new file mode 100644
index 000000000..a457a0a50
--- /dev/null
+++ b/runtime/queries/perl/folds.scm
@@ -0,0 +1,36 @@
+(comment)+ @fold
+
+(pod) @fold
+
+; fold the block-typed package and class statements only
+(package_statement
+ (block)) @fold
+
+(class_statement
+ (block)) @fold
+
+[
+ (subroutine_declaration_statement)
+ (method_declaration_statement)
+ (conditional_statement)
+ (loop_statement)
+ (for_statement)
+ (cstyle_for_statement)
+ (block_statement)
+ (defer_statement)
+ (phaser_statement)
+] @fold
+
+(try_statement
+ (block) @fold)
+
+(eval_expression
+ (block) @fold)
+
+(anonymous_subroutine_expression) @fold
+
+; perhaps folks want to fold these too?
+[
+ (anonymous_array_expression)
+ (anonymous_hash_expression)
+] @fold
diff --git a/runtime/queries/perl/highlights.scm b/runtime/queries/perl/highlights.scm
new file mode 100644
index 000000000..d52baab44
--- /dev/null
+++ b/runtime/queries/perl/highlights.scm
@@ -0,0 +1,324 @@
+((source_file
+ .
+ (comment) @keyword.directive @nospell)
+ (#lua-match? @keyword.directive "^#!/"))
+
+[
+ "use"
+ "no"
+ "require"
+] @keyword.import
+
+[
+ "if"
+ "elsif"
+ "unless"
+ "else"
+] @keyword.conditional
+
+(conditional_expression
+ [
+ "?"
+ ":"
+ ] @keyword.conditional.ternary)
+
+[
+ "while"
+ "until"
+ "for"
+ "foreach"
+] @keyword.repeat
+
+("continue" @keyword.repeat
+ (block))
+
+[
+ "try"
+ "catch"
+ "finally"
+] @keyword.exception
+
+"return" @keyword.return
+
+[
+ "sub"
+ "method"
+] @keyword.function
+
+[
+ "async"
+ "await"
+] @keyword.coroutine
+
+[
+ "map"
+ "grep"
+ "sort"
+] @function.builtin
+
+[
+ "package"
+ "class"
+ "role"
+] @keyword.import
+
+[
+ "defer"
+ "do"
+ "eval"
+ "my"
+ "our"
+ "local"
+ "dynamically"
+ "state"
+ "field"
+ "last"
+ "next"
+ "redo"
+ "goto"
+ "undef"
+] @keyword
+
+(_
+ operator: _ @operator)
+
+"\\" @operator
+
+(yadayada) @keyword.exception
+
+(phaser_statement
+ phase: _ @keyword)
+
+(class_phaser_statement
+ phase: _ @keyword)
+
+[
+ "or"
+ "xor"
+ "and"
+ "eq"
+ "equ"
+ "eqr"
+ "ne"
+ "cmp"
+ "lt"
+ "le"
+ "ge"
+ "gt"
+ "isa"
+] @keyword.operator
+
+(eof_marker) @keyword.directive
+
+(data_section) @comment
+
+(pod) @none
+
+[
+ (number)
+ (version)
+] @number
+
+(boolean) @boolean
+
+[
+ (string_literal)
+ (interpolated_string_literal)
+ (quoted_word_list)
+ (command_string)
+ (heredoc_content)
+ (replacement)
+ (transliteration_content)
+] @string
+
+[
+ (heredoc_token)
+ (command_heredoc_token)
+ (heredoc_end)
+] @label
+
+[
+ (escape_sequence)
+ (escaped_delimiter)
+] @string.escape
+
+(_
+ modifiers: _ @character.special)
+
+[
+ (quoted_regexp)
+ (match_regexp)
+ (regexp_content)
+] @string.regexp
+
+(autoquoted_bareword) @string.special
+
+(use_statement
+ (package) @type)
+
+(package_statement
+ (package) @type)
+
+(class_statement
+ (package) @type)
+
+(require_expression
+ (bareword) @type)
+
+(subroutine_declaration_statement
+ name: (bareword) @function)
+
+(method_declaration_statement
+ name: (bareword) @function)
+
+(attribute_name) @attribute
+
+(attribute_value) @string
+
+(label) @label
+
+(statement_label
+ label: _ @label)
+
+(relational_expression
+ operator: "isa"
+ right: (bareword) @type)
+
+(function_call_expression
+ (function) @function.call)
+
+(method_call_expression
+ (method) @function.method.call)
+
+(method_call_expression
+ invocant: (bareword) @type)
+
+(func0op_call_expression
+ function: _ @function.builtin)
+
+(func1op_call_expression
+ function: _ @function.builtin)
+
+; this was a regex for the CLI
+([
+ (function)
+ (expression_statement
+ (bareword))
+] @function.builtin
+ (#any-of? @function.builtin
+ "accept" "atan2" "bind" "binmode" "bless" "crypt" "chmod" "chown" "connect" "die" "dbmopen"
+ "exec" "fcntl" "flock" "formline" "getpriority" "getprotobynumber" "gethostbyaddr"
+ "getnetbyaddr" "getservbyname" "getservbyport" "getsockopt" "glob" "index" "ioctl" "join" "kill"
+ "link" "listen" "mkdir" "msgctl" "msgget" "msgrcv" "msgsend" "open" "opendir" "print" "printf"
+ "push" "pack" "pipe" "return" "rename" "rindex" "read" "recv" "reverse" "say" "select" "seek"
+ "semctl" "semget" "semop" "send" "setpgrp" "setpriority" "seekdir" "setsockopt" "shmctl"
+ "shmread" "shmwrite" "shutdown" "socket" "socketpair" "split" "sprintf" "splice" "substr"
+ "system" "symlink" "syscall" "sysopen" "sysseek" "sysread" "syswrite" "tie" "truncate" "unlink"
+ "unpack" "utime" "unshift" "vec" "warn" "waitpid"))
+
+(function) @function
+
+(_
+ "{" @punctuation.special
+ (varname)
+ "}" @punctuation.special)
+
+(varname
+ (block
+ "{" @punctuation.special
+ "}" @punctuation.special))
+
+([
+ (varname)
+ (filehandle)
+] @variable.builtin
+ (#any-of? @variable.builtin
+ "ENV" "ARGV" "INC" "ARGVOUT" "SIG" "STDIN" "STDOUT" "STDERR" "a" "b" "_"))
+
+((varname) @variable.builtin
+ ; highlights all the reserved ^ vars like ${^THINGS}
+ (#lua-match? @variable.builtin "%^"))
+
+((varname) @variable.builtin
+ ; highlights punc vars and also numeric only like $11
+ (#lua-match? @variable.builtin "^%A+$"))
+
+[
+ (scalar)
+ (array)
+ (hash)
+ (glob)
+ ; arraylen's sigil is kinda special b/c it's not a data type
+ (arraylen
+ "$#" @operator)
+] @variable
+
+; all post deref sigils highlighted as operators, and the unrolly star is a special char
+(postfix_deref
+ [
+ "$"
+ "@"
+ "%"
+ "*"
+ "$#"
+ ] @operator
+ "*" @character.special)
+
+(slices
+ [
+ arrayref: _
+ hashref: _
+ ]
+ [
+ "@"
+ "%"
+ ] @operator)
+
+; except for subref deref, b/c that's actually a function call
+(amper_deref_expression
+ [
+ "&"
+ "*"
+ ] @function.call)
+
+; mark hash or glob keys that are any form of string in any form of access
+(_
+ "{"
+ [
+ (autoquoted_bareword)
+ (_
+ (string_content))
+ ] @variable.member
+ "}")
+
+; mark stringies on the LHS of a fat comma as a hash key, b/c that's usually what it
+; denotes somewhat
+(_
+ [
+ (autoquoted_bareword)
+ (_
+ (string_content))
+ ] @variable.member
+ .
+ "=>"
+ (_))
+
+(comment) @comment @spell
+
+[
+ "=>"
+ ","
+ ";"
+ "->"
+] @punctuation.delimiter
+
+([
+ "["
+ "]"
+ "{"
+ "}"
+ "("
+ ")"
+] @punctuation.bracket
+ ; priority hack so nvim + ts-cli behave the same
+ (#set! priority 90))
diff --git a/runtime/queries/perl/injections.scm b/runtime/queries/perl/injections.scm
new file mode 100644
index 000000000..ec11e9013
--- /dev/null
+++ b/runtime/queries/perl/injections.scm
@@ -0,0 +1,15 @@
+; an injections.scm file for nvim-treesitter
+((comment) @injection.content
+ (#set! injection.language "comment"))
+
+((pod) @injection.content
+ (#set! injection.language "pod"))
+
+((substitution_regexp
+ (replacement) @injection.content
+ (substitution_regexp_modifiers) @_modifiers)
+ ; match if there's a single `e` in the modifiers list
+ (#lua-match? @_modifiers "e")
+ (#not-lua-match? @_modifiers "e.*e")
+ (#set! injection.language "perl")
+ (#set! injection.include-children))