aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/fish
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/fish
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/fish')
-rw-r--r--runtime/queries/fish/folds.scm8
-rw-r--r--runtime/queries/fish/highlights.scm204
-rw-r--r--runtime/queries/fish/indents.scm18
-rw-r--r--runtime/queries/fish/injections.scm2
-rw-r--r--runtime/queries/fish/locals.scm19
5 files changed, 251 insertions, 0 deletions
diff --git a/runtime/queries/fish/folds.scm b/runtime/queries/fish/folds.scm
new file mode 100644
index 000000000..06363e15e
--- /dev/null
+++ b/runtime/queries/fish/folds.scm
@@ -0,0 +1,8 @@
+[
+ (function_definition)
+ (if_statement)
+ (switch_statement)
+ (for_statement)
+ (while_statement)
+ (begin_statement)
+] @fold
diff --git a/runtime/queries/fish/highlights.scm b/runtime/queries/fish/highlights.scm
new file mode 100644
index 000000000..a7c451175
--- /dev/null
+++ b/runtime/queries/fish/highlights.scm
@@ -0,0 +1,204 @@
+; Fish highlighting
+; Operators
+[
+ "&&"
+ "||"
+ "|"
+ "&|"
+ "2>|"
+ "&"
+ ".."
+ "!"
+ (direction)
+ (stream_redirect)
+] @operator
+
+; match operators of test command
+(command
+ name: (word) @function.builtin
+ (#eq? @function.builtin "test")
+ argument: (word) @operator
+ (#match? @operator "^(!?\\=|-[a-zA-Z]+)$"))
+
+; match operators of [ command
+(command
+ name: (word) @punctuation.bracket
+ (#eq? @punctuation.bracket "[")
+ argument: (word) @operator
+ (#match? @operator "^(!?\\=|-[a-zA-Z]+)$"))
+
+[
+ "not"
+ "and"
+ "or"
+] @keyword.operator
+
+; Conditionals
+(if_statement
+ [
+ "if"
+ "end"
+ ] @keyword.conditional)
+
+(switch_statement
+ [
+ "switch"
+ "end"
+ ] @keyword.conditional)
+
+(case_clause
+ "case" @keyword.conditional)
+
+(else_clause
+ "else" @keyword.conditional)
+
+(else_if_clause
+ [
+ "else"
+ "if"
+ ] @keyword.conditional)
+
+; Loops/Blocks
+(while_statement
+ [
+ "while"
+ "end"
+ ] @keyword.repeat)
+
+(for_statement
+ [
+ "for"
+ "end"
+ ] @keyword.repeat)
+
+(begin_statement
+ [
+ "begin"
+ "end"
+ ] @keyword.repeat)
+
+; Keywords
+[
+ "in"
+ (break)
+ (continue)
+] @keyword
+
+"return" @keyword.return
+
+; Punctuation
+[
+ "["
+ "]"
+ "{"
+ "}"
+ "("
+ ")"
+] @punctuation.bracket
+
+"," @punctuation.delimiter
+
+; Commands
+(command
+ argument: [
+ (word) @variable.parameter
+ (#lua-match? @variable.parameter "^[-]")
+ ])
+
+(command_substitution
+ "$" @punctuation.special)
+
+; non-builtin command names
+(command
+ name: (word) @function.call)
+
+; derived from builtin -n (fish 3.2.2)
+(command
+ name: [
+ (word) @function.builtin
+ (#any-of? @function.builtin
+ "." ":" "_" "alias" "argparse" "bg" "bind" "block" "breakpoint" "builtin" "cd" "command"
+ "commandline" "complete" "contains" "count" "disown" "echo" "emit" "eval" "exec" "exit" "fg"
+ "functions" "history" "isatty" "jobs" "math" "printf" "pwd" "random" "read" "realpath" "set"
+ "set_color" "source" "status" "string" "test" "time" "type" "ulimit" "wait")
+ ])
+
+; Functions
+(function_definition
+ [
+ "function"
+ "end"
+ ] @keyword.function)
+
+(function_definition
+ name: [
+ (word)
+ (concatenation)
+ ] @function)
+
+(function_definition
+ option: [
+ (word)
+ (concatenation
+ (word))
+ ] @variable.parameter
+ (#lua-match? @variable.parameter "^[-]"))
+
+; Strings
+[
+ (double_quote_string)
+ (single_quote_string)
+] @string
+
+(escape_sequence) @string.escape
+
+; Variables
+(variable_name) @variable
+
+(variable_expansion) @constant
+
+(variable_expansion
+ "$" @punctuation.special) @none
+
+; Reference: https://fishshell.com/docs/current/language.html#special-variables
+((variable_name) @variable.builtin
+ (#any-of? @variable.builtin
+ "PATH" "CDPATH" "LANG" "LC_ALL" "LC_COLLATE" "LC_CTYPE" "LC_MESSAGES" "LC_MONETARY" "LC_NUMERIC"
+ "LC_TIME" "fish_color_normal" "fish_color_command" "fish_color_keyword" "fish_color_keyword"
+ "fish_color_redirection" "fish_color_end" "fish_color_error" "fish_color_param"
+ "fish_color_valid_path" "fish_color_option" "fish_color_comment" "fish_color_selection"
+ "fish_color_operator" "fish_color_escape" "fish_color_autosuggestion" "fish_color_cwd"
+ "fish_color_cwd_root" "fish_color_user" "fish_color_host" "fish_color_host_remote"
+ "fish_color_status" "fish_color_cancel" "fish_color_search_match" "fish_color_history_current"
+ "fish_pager_color_progress" "fish_pager_color_background" "fish_pager_color_prefix"
+ "fish_pager_color_completion" "fish_pager_color_description"
+ "fish_pager_color_selected_background" "fish_pager_color_selected_prefix"
+ "fish_pager_color_selected_completion" "fish_pager_color_selected_description"
+ "fish_pager_color_secondary_background" "fish_pager_color_secondary_prefix"
+ "fish_pager_color_secondary_completion" "fish_pager_color_secondary_description"
+ "fish_term24bit" "fish_term256" "fish_ambiguous_width" "fish_emoji_width"
+ "fish_autosuggestion_enabled" "fish_handle_reflow" "fish_key_bindings" "fish_escape_delay_ms"
+ "fish_sequence_key_delay_ms" "fish_complete_path" "fish_cursor_selection_mode"
+ "fish_function_path" "fish_greeting" "fish_history" "fish_trace" "FISH_DEBUG"
+ "FISH_DEBUG_OUTPUT" "fish_user_paths" "umask" "BROWSER" "_" "argv" "CMD_DURATION" "COLUMNS"
+ "LINES" "fish_kill_signal" "fish_killring" "fish_read_limit" "fish_pid" "history" "HOME"
+ "hostname" "IFS" "last_pid" "PWD" "pipestatus" "SHLVL" "status" "status_generation" "TERM"
+ "USER" "EUID" "version" "FISH_VERSION"))
+
+; Nodes
+[
+ (integer)
+ (float)
+] @number
+
+(comment) @comment
+
+(comment) @spell
+
+((word) @boolean
+ (#any-of? @boolean "true" "false"))
+
+((program
+ .
+ (comment) @keyword.directive @nospell)
+ (#lua-match? @keyword.directive "^#!/"))
diff --git a/runtime/queries/fish/indents.scm b/runtime/queries/fish/indents.scm
new file mode 100644
index 000000000..4984c4cb2
--- /dev/null
+++ b/runtime/queries/fish/indents.scm
@@ -0,0 +1,18 @@
+[
+ (function_definition)
+ (while_statement)
+ (for_statement)
+ (if_statement)
+ (begin_statement)
+ (switch_statement)
+] @indent.begin
+
+[
+ "else" ; else and else if must both start the line with "else", so tag the string directly
+ "case"
+ "end"
+] @indent.branch
+
+"end" @indent.end
+
+(comment) @indent.ignore
diff --git a/runtime/queries/fish/injections.scm b/runtime/queries/fish/injections.scm
new file mode 100644
index 000000000..2f0e58eb6
--- /dev/null
+++ b/runtime/queries/fish/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/fish/locals.scm b/runtime/queries/fish/locals.scm
new file mode 100644
index 000000000..904d568f9
--- /dev/null
+++ b/runtime/queries/fish/locals.scm
@@ -0,0 +1,19 @@
+; Scopes
+[
+ (command)
+ (function_definition)
+ (if_statement)
+ (for_statement)
+ (begin_statement)
+ (while_statement)
+ (switch_statement)
+] @local.scope
+
+; Definitions
+(function_definition
+ name: (word) @local.definition.function)
+
+; References
+(variable_name) @local.reference
+
+(word) @local.reference