mirror of
https://github.com/helix-editor/helix.git
synced 2025-04-07 04:47:45 +03:00
* fix: fish builtin functions are highlighted as such * fix: single-character commands recognized as builtins ???? how did that query even happen * fix: update builtins to fish 3.7.1 * fix: add back `alias` and `isatty` they are builtins, but aren't reported by builtin -n for some reason
156 lines
2.4 KiB
Scheme
156 lines
2.4 KiB
Scheme
;; Operators
|
|
|
|
[
|
|
"&&"
|
|
"||"
|
|
"|"
|
|
"&"
|
|
"="
|
|
"!="
|
|
".."
|
|
"!"
|
|
(direction)
|
|
(stream_redirect)
|
|
(test_option)
|
|
] @operator
|
|
|
|
[
|
|
"not"
|
|
"and"
|
|
"or"
|
|
] @keyword.operator
|
|
|
|
;; Conditionals
|
|
|
|
(if_statement
|
|
[
|
|
"if"
|
|
"end"
|
|
] @keyword.control.conditional)
|
|
|
|
(switch_statement
|
|
[
|
|
"switch"
|
|
"end"
|
|
] @keyword.control.conditional)
|
|
|
|
(case_clause
|
|
[
|
|
"case"
|
|
] @keyword.control.conditional)
|
|
|
|
(else_clause
|
|
[
|
|
"else"
|
|
] @keyword.control.conditional)
|
|
|
|
(else_if_clause
|
|
[
|
|
"else"
|
|
"if"
|
|
] @keyword.control.conditional)
|
|
|
|
;; Loops/Blocks
|
|
|
|
(while_statement
|
|
[
|
|
"while"
|
|
"end"
|
|
] @keyword.control.repeat)
|
|
|
|
(for_statement
|
|
[
|
|
"for"
|
|
"end"
|
|
] @keyword.control.repeat)
|
|
|
|
(begin_statement
|
|
[
|
|
"begin"
|
|
"end"
|
|
] @keyword.control.repeat)
|
|
|
|
;; Keywords
|
|
|
|
[
|
|
"in"
|
|
(break)
|
|
(continue)
|
|
] @keyword
|
|
|
|
"return" @keyword.control.return
|
|
|
|
;; Punctuation
|
|
|
|
[
|
|
"["
|
|
"]"
|
|
"{"
|
|
"}"
|
|
"("
|
|
")"
|
|
] @punctuation.bracket
|
|
|
|
"," @punctuation.delimiter
|
|
|
|
;; Commands
|
|
|
|
(command
|
|
argument: [
|
|
(word) @variable.parameter (#match? @variable.parameter "^-")
|
|
]
|
|
)
|
|
|
|
; derived from builtin -n (fish 3.7.1)
|
|
(command
|
|
name: [
|
|
(word) @function.builtin
|
|
(#any-of? @function.builtin "abbr" "alias" "and" "argparse" "begin" "bg" "bind" "block" "break" "breakpoint" "builtin" "case" "cd" "command" "commandline" "complete" "contains" "continue" "count" "disown" "echo" "else" "emit" "end" "eval" "exec" "exit" "false" "fg" "for" "function" "functions" "history" "if" "isatty" "jobs" "math" "not" "or" "path" "printf" "pwd" "random" "read" "realpath" "return" "set" "set_color" "source" "status" "string" "switch" "test" "time" "true" "type" "ulimit" "wait" "while")
|
|
]
|
|
)
|
|
|
|
(test_command "test" @function.builtin)
|
|
|
|
; non-builtin command names
|
|
(command name: (word) @function)
|
|
|
|
;; Functions
|
|
|
|
(function_definition ["function" "end"] @keyword.function)
|
|
|
|
(function_definition
|
|
name: [
|
|
(word) (concatenation)
|
|
]
|
|
@function)
|
|
|
|
(function_definition
|
|
option: [
|
|
(word)
|
|
(concatenation (word))
|
|
] @variable.parameter (#match? @variable.parameter "^-")
|
|
)
|
|
|
|
;; Strings
|
|
|
|
[(double_quote_string) (single_quote_string)] @string
|
|
(escape_sequence) @constant.character.escape
|
|
|
|
;; Variables
|
|
|
|
(variable_name) @variable
|
|
(variable_expansion) @constant
|
|
|
|
;; Nodes
|
|
|
|
(integer) @constant.numeric.integer
|
|
(float) @constant.numeric.float
|
|
(comment) @comment
|
|
(test_option) @string
|
|
|
|
((word) @constant.builtin.boolean
|
|
(#match? @constant.builtin.boolean "^(true|false)$"))
|
|
|
|
;; Error
|
|
|
|
(ERROR) @error
|