Merge branch 'master' of github.com:helix-editor/helix

imgbot
trivernis 2 years ago
commit de3b54563b
Signed by: Trivernis
GPG Key ID: DFFFCC2C7A02DB45

@ -1,5 +1,6 @@
| Language | Syntax Highlighting | Treesitter Textobjects | Auto Indent | Default LSP |
| --- | --- | --- | --- | --- |
| awk | ✓ | ✓ | | `awk-language-server` |
| bash | ✓ | | | `bash-language-server` |
| beancount | ✓ | | | |
| c | ✓ | ✓ | ✓ | `clangd` |
@ -24,6 +25,7 @@
| elvish | ✓ | | | `elvish` |
| erb | ✓ | | | |
| erlang | ✓ | ✓ | | `erlang_ls` |
| esdl | ✓ | | | |
| fish | ✓ | ✓ | ✓ | |
| fortran | ✓ | | ✓ | `fortls` |
| gdscript | ✓ | | ✓ | |
@ -74,6 +76,7 @@
| odin | ✓ | | | `ols` |
| openscad | ✓ | | | `openscad-language-server` |
| org | ✓ | | | |
| pascal | ✓ | ✓ | | `pasls` |
| perl | ✓ | ✓ | ✓ | |
| php | ✓ | ✓ | ✓ | `intelephense` |
| prisma | ✓ | | | `prisma-language-server` |
@ -112,5 +115,6 @@
| verilog | ✓ | ✓ | | `svlangserver` |
| vue | ✓ | | | `vls` |
| wgsl | ✓ | | | `wgsl_analyzer` |
| xit | ✓ | | | |
| yaml | ✓ | | ✓ | `yaml-language-server` |
| zig | ✓ | | ✓ | `zls` |

@ -229,10 +229,7 @@ impl Markdown {
Event::End(tag) => {
tags.pop();
match tag {
Tag::Heading(_, _, _)
| Tag::Paragraph
| Tag::CodeBlock(CodeBlockKind::Fenced(_))
| Tag::Item => {
Tag::Heading(_, _, _) | Tag::Paragraph | Tag::CodeBlock(_) | Tag::Item => {
push_line(&mut spans, &mut lines);
}
_ => (),
@ -240,17 +237,18 @@ impl Markdown {
// whenever heading, code block or paragraph closes, empty line
match tag {
Tag::Heading(_, _, _)
| Tag::Paragraph
| Tag::CodeBlock(CodeBlockKind::Fenced(_)) => {
Tag::Heading(_, _, _) | Tag::Paragraph | Tag::CodeBlock(_) => {
lines.push(Spans::default());
}
_ => (),
}
}
Event::Text(text) => {
// TODO: temp workaround
if let Some(Tag::CodeBlock(CodeBlockKind::Fenced(language))) = tags.last() {
if let Some(Tag::CodeBlock(kind)) = tags.last() {
let language = match kind {
CodeBlockKind::Fenced(language) => language,
CodeBlockKind::Indented => "",
};
let tui_text = highlighted_code_block(
text.to_string(),
language,

@ -66,6 +66,20 @@ indent = { tab-width = 2, unit = " " }
name = "toml"
source = { git = "https://github.com/ikatyang/tree-sitter-toml", rev = "7cff70bbcbbc62001b465603ca1ea88edd668704" }
[[language]]
name = "awk"
scope = "source.awk"
injection-regex = "awk"
file-types = ["awk", "gawk", "nawk", "mawk"]
roots = []
comment-token = "#"
language-server = { command = "awk-language-server" }
indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "awk"
source = { git = "https://github.com/Beaglefoot/tree-sitter-awk", rev = "a799bc5da7c2a84bc9a06ba5f3540cf1191e4ee3" }
[[language]]
name = "protobuf"
scope = "source.proto"
@ -482,7 +496,7 @@ indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "ruby"
source = { git = "https://github.com/tree-sitter/tree-sitter-ruby", rev = "dfff673b41df7fadcbb609c6338f38da3cdd018e" }
source = { git = "https://github.com/tree-sitter/tree-sitter-ruby", rev = "4c600a463d97e36a0ca5ac57e11f3ac8c297a0fa" }
[[language]]
name = "bash"
@ -571,7 +585,7 @@ indent = { tab-width = 4, unit = " " }
[[grammar]]
name = "julia"
source = { git = "https://github.com/tree-sitter/tree-sitter-julia", rev = "12ea597262125fc22fd2e91aa953ac69b19c26ca" }
source = { git = "https://github.com/tree-sitter/tree-sitter-julia", rev = "fc60b7cce87da7a1b7f8cb0f9371c3dc8b684500" }
[[language]]
name = "java"
@ -923,7 +937,7 @@ indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "dart"
source = { git = "https://github.com/UserNobody14/tree-sitter-dart", rev = "6a25376685d1d47968c2cef06d4db8d84a70025e" }
source = { git = "https://github.com/UserNobody14/tree-sitter-dart", rev = "2d7f66651c9319c1a0e4dda226cc2628fbb66528" }
[[language]]
name = "scala"
@ -1493,7 +1507,6 @@ indent = { tab-width = 2, unit = " " }
name = "jsdoc"
source = { git = "https://github.com/tree-sitter/tree-sitter-jsdoc", rev = "189a6a4829beb9cdbe837260653b4a3dfb0cc3db" }
[[language]]
name = "openscad"
scope = "source.openscad"
@ -1653,3 +1666,42 @@ indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "task"
source = { git = "https://github.com/alexanderbrevig/tree-sitter-task", rev = "f2cb435c5dbf3ee19493e224485d977cb2d36d8b" }
[[language]]
name = "xit"
scope = "source.xit"
injection-regex = "xit"
file-types = ["xit"]
roots = []
indent = { tab-width = 4, unit = " " }
[[grammar]]
name = "xit"
source = { git = "https://github.com/synaptiko/tree-sitter-xit", rev = "7d7902456061bc2ad21c64c44054f67b5515734c" }
[[language]]
name = "esdl"
scope = "source.esdl"
injection-regex = "esdl"
file-types = ["esdl"]
comment-token = "#"
indent = { tab-width = 2, unit = " " }
roots = ["edgedb.toml"]
[[grammar]]
name ="esdl"
source = { git = "https://github.com/greym0uth/tree-sitter-esdl", rev = "b840c8a8028127e0a7c6e6c45141adade2bd75cf" }
[[language]]
name = "pascal"
scope = "source.pascal"
injection-regex = "pascal"
file-types = ["pas", "pp", "inc", "lpr", "lfm"]
roots = []
comment-token = "//"
indent = { tab-width = 2, unit = " " }
language-server = { command = "pasls", args = [] }
[[grammar]]
name = "pascal"
source = { git = "https://github.com/Isopod/tree-sitter-pascal", rev = "2fd40f477d3e2794af152618ccfac8d92eb72a66" }

@ -0,0 +1,122 @@
; tree-sitter-awk v0.5.1
; https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries
; Order matters
[
";"
","
"("
")"
"["
"]"
"{"
"}"
] @operator
(piped_io_statement [
"|"
"|&"
] @operator)
(redirected_io_statement [
">"
">>"
] @operator)
(update_exp [
"++"
"--"
] @operator)
(ternary_exp [
"?"
":"
] @operator)
(assignment_exp [
"="
"+="
"-="
"*="
"/="
"%="
"^="
] @operator)
(unary_exp [
"!"
"+"
"-"
] @operator)
(binary_exp [
"^"
"**"
"*"
"/"
"%"
"+"
"-"
"<"
">"
"<="
">="
"=="
"!="
"~"
"!~"
"in"
"&&"
"||"
] @operator)
[
"@include"
"@load"
"@namespace"
(pattern)
] @namespace
[
"function"
"func"
"print"
"printf"
"if"
"else"
"do"
"while"
"for"
"in"
"delete"
"return"
"exit"
"switch"
"case"
"default"
(break_statement)
(continue_statement)
(next_statement)
(nextfile_statement)
(getline_input)
(getline_file)
] @keyword
(comment) @comment
(regex) @string.regexp
(number) @constant.numeric
(string) @string
(func_call name: (identifier) @function)
(func_def name: (identifier) @function)
(field_ref (_) @variable)
[
(identifier)
(field_ref)
] @variable
(ns_qualified_name "::" @operator)
(ns_qualified_name (namespace) @namespace)

@ -0,0 +1,5 @@
((comment) @injection.content
(#set! injection.language "comment"))
((regex_pattern) @injection.content
(#set! injection.language "regex"))

@ -0,0 +1,10 @@
(func_def name: (identifier) (block) @function.inside) @function.around
(param_list (_) @parameter.inside) @parameter.around
(args (_) @parameter.inside) @parameter.around
(comment) @comment.inside
(comment)+ @comment.around

@ -1,2 +1,8 @@
((comment) @injection.content
(#set! injection.language "comment"))
(command
name: (command_name (word) @_command)
argument: (raw_string) @injection.content
(#match? @_command "^[gnm]?awk$")
(#set! injection.language "awk"))

@ -1,16 +1,95 @@
; things surrounded by ({[]})
[
(class_body)
(function_body)
(function_expression_body)
(declaration)
(initializers)
(template_substitution)
(list_literal)
(set_or_map_literal)
(parenthesized_expression)
(arguments)
(index_selector)
(block)
(assertion_arguments)
(switch_block)
(if_statement)
(catch_parameters)
(for_loop_parts)
(configuration_uri_condition)
(enum_body)
(class_body)
(extension_body)
(parameter_type_list)
(optional_positional_parameter_types)
(named_parameter_types)
(formal_parameter_list)
(formal_parameter)
(list_literal)
(optional_formal_parameters)
] @indent
; control flow statement which accept one line as body
(for_statement
body: _ @indent
(#not-kind-eq? @indent block)
(#set! "scope" "all")
)
(while_statement
body: _ @indent
(#not-kind-eq? @indent block)
(#set! "scope" "all")
)
(do_statement
body: _ @indent
(#not-kind-eq? @indent block)
(#set! "scope" "all")
)
(if_statement
consequence: _ @indent
(#not-kind-eq? @indent block)
(#set! "scope" "all")
)
(if_statement
alternative: _ @indent
(#not-kind-eq? @indent if_statement)
(#not-kind-eq? @indent block)
(#set! "scope" "all")
)
(if_statement
"else" @else
alternative: (if_statement) @indent
(#not-same-line? @indent @else)
(#set! "scope" "all")
)
(if_element
consequence: _ @indent
(#set! "scope" "all")
)
(if_element
alternative: _ @indent
(#not-kind-eq? @indent if_element)
(#set! "scope" "all")
)
(if_element
"else" @else
alternative: (if_element) @indent
(#not-same-line? @indent @else)
(#set! "scope" "all")
)
(for_element
body: _ @indent
(#set! "scope" "all")
)
; simple statements
[
(local_variable_declaration)
(break_statement)
(continue_statement)
(return_statement)
(arguments)
(yield_statement)
(yield_each_statement)
(expression_statement)
] @indent
[
@ -18,3 +97,4 @@
"]"
")"
] @outdent

@ -0,0 +1,74 @@
; Keywords
[
"module"
"using"
"single"
"multi"
"link"
"property"
"constraint"
"tuple"
"annotation"
"abstract"
"scalar"
"type"
"required"
"optional"
"extension"
"function"
] @keyword
(modifier) @keyword
(extending) @keyword
(module name: (identifier) @namespace)
(object_type) @type
(comment) @comment
; Properties
(property) @variable.other.member
(link) @variable.other.member
(annotation) @variable.other.member
(identifier) @variable
(string) @string
(edgeql_fragment) @string
; Builtins
(type) @type
[
"str"
"bool"
"int16"
"int32"
"int64"
"float32"
"float64"
"bigint"
"decimal"
"json"
"uuid"
"bytes"
"datetime"
"duration"
"sequence"
"anytype"
] @type.builtin
(true) @constant.builtin
(false) @constant.builtin
(null) @constant.builtin
; Delimiters
[
";"
","
] @punctuation.delimiter
; Operators
[
"->"
":="
] @operator

@ -1,110 +1,154 @@
; ----------
; Primitives
; ----------
[
(triple_string)
(string)
] @string
(line_comment)
(block_comment)
] @comment
(string
prefix: (identifier) @constant.builtin)
(((identifier) @constant.builtin) (match? @constant.builtin "^(nothing|missing|Inf|NaN)$"))
(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "true"))
(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false"))
(macro_identifier) @function.macro
(macro_identifier (identifier) @function.macro) ; for any one using the variable highlight
(macro_definition
name: (identifier) @function.macro
["macro" "end" @keyword])
(integer_literal) @constant.numeric.integer
(float_literal) @constant.numeric.float
(field_expression
(identifier)
(identifier) @variable.other.member .)
(function_definition
name: (identifier) @function)
(call_expression
(identifier) @function)
(call_expression
(field_expression (identifier) @function.method .))
(broadcast_call_expression
(identifier) @function)
(broadcast_call_expression
(field_expression (identifier) @function.method .))
(parameter_list
(identifier) @variable.parameter)
(parameter_list
(optional_parameter .
(identifier) @variable.parameter))
(typed_parameter
(identifier) @variable.parameter
(identifier) @type)
(character_literal) @constant.character
(escape_sequence) @constant.character.escape
(string_literal) @string
(prefixed_string_literal
prefix: (identifier) @function.macro) @string
(quote_expression
(identifier) @string.special.symbol)
; -------------------
; Modules and Imports
; -------------------
(module_definition
name: (identifier) @namespace)
(import_statement
(identifier) @namespace)
(selected_import
. (identifier) @namespace)
(scoped_identifier
(identifier) @namespace)
; -----
; Types
; -----
(abstract_definition
name: (identifier) @type)
(primitive_definition
name: (identifier) @type)
(struct_definition
name: (identifier) @type)
(struct_definition
. (_)
(identifier) @variable.other.member)
(struct_definition
. (_)
(typed_expression
. (identifier) @variable.other.member))
(type_parameter_list
(identifier) @type)
(constrained_parameter
(identifier) @type)
(subtype_clause
(identifier) @type)
(typed_expression
(identifier) @type . )
(parameterized_identifier
(identifier) @type)
(type_argument_list
(identifier) @type)
; -------------------
; Function definition
; -------------------
(
(function_definition
name: (identifier) @function)
; prevent constructors (PascalCase) to be highlighted as functions
(#match? @function "^[^A-Z]"))
(parameter_list
(identifier) @variable.parameter)
(typed_parameter
(identifier) @variable.parameter
(parameterized_identifier) @type)
(function_expression
(identifier)? @type)
(optional_parameter
. (identifier) @variable.parameter)
(spread_parameter) @variable.parameter
(spread_parameter
(identifier) @variable.parameter)
(named_argument
. (identifier) @variable.parameter)
(argument_list
(typed_expression
(identifier) @variable.parameter
(identifier) @type))
(argument_list
(typed_expression
(identifier) @variable.parameter
(parameterized_identifier) @type))
;; Symbol expressions (:my-wanna-be-lisp-keyword)
(quote_expression
(identifier)) @string.special.symbol
(function_expression
. (identifier) @variable.parameter)
;; Parsing error! foo (::Type) get's parsed as two quote expressions
(argument_list
(quote_expression
(quote_expression
(identifier) @type)))
; ---------------
; Functions calls
; ---------------
(type_argument_list
(identifier) @type)
(parameterized_identifier (_)) @type
(argument_list
(typed_expression . (identifier) @variable.parameter))
(
(call_expression
(identifier) @function)
; prevent constructors (PascalCase) to be highlighted as functions
(#match? @function "^[^A-Z]"))
(typed_expression
(identifier) @type .)
(typed_expression
(parameterized_identifier) @type .)
(
(broadcast_call_expression
(identifier) @function)
(#match? @function "^[^A-Z]"))
(struct_definition
name: (identifier) @type)
(
(call_expression
(field_expression (identifier) @function .))
(#match? @function "^[^A-Z]"))
(number) @constant.numeric.integer
(range_expression
(identifier) @constant.numeric.integer
(eq? @constant.numeric.integer "end"))
(range_expression
(_
(identifier) @constant.numeric.integer
(eq? @constant.numeric.integer "end")))
(coefficient_expression
(number)
(identifier) @constant.builtin)
;; TODO: operators.
;; Those are a bit difficult to implement since the respective nodes are hidden right now (_power_operator)
;; and heavily use Unicode chars (support for those are bad in vim/lua regexes)
;[;
;(power_operator);
;(times_operator);
;(plus_operator);
;(arrow_operator);
;(comparison_operator);
;(assign_operator);
;] @operator ;
"end" @keyword
(
(broadcast_call_expression
(field_expression (identifier) @function .))
(#match? @function "^[^A-Z]"))
; ------
; Macros
; ------
(macro_definition
name: (identifier) @function.macro)
(macro_identifier
"@" @function.macro
(identifier) @function.macro)
; --------
; Keywords
; --------
(function_definition
["function" "end"] @keyword.function)
(if_statement
["if" "end"] @keyword.control.conditional)
@ -115,33 +159,6 @@
(ternary_expression
["?" ":"] @keyword.control.conditional)
(function_definition ["function" "end"] @keyword.function)
(comment) @comment
[
"const"
"return"
"macro"
"struct"
"primitive"
"type"
] @keyword
((identifier) @keyword (match? @keyword "global|local"))
(compound_expression
["begin" "end"] @keyword)
(try_statement
["try" "end" ] @keyword.control.exception)
(finally_clause
"finally" @keyword.control.exception)
(catch_clause
"catch" @keyword.control.exception)
(quote_statement
["quote" "end"] @keyword)
(let_statement
["let" "end"] @keyword)
(for_statement
["for" "end"] @keyword.control.repeat)
(while_statement
@ -152,33 +169,96 @@
"in" @keyword.control.repeat)
(for_clause
"for" @keyword.control.repeat)
(do_clause
["do" "end"] @keyword)
(export_statement
["export"] @keyword.control.import)
(try_statement
["try" "end" ] @keyword.control.exception)
(finally_clause
"finally" @keyword.control.exception)
(catch_clause
"catch" @keyword.control.exception)
[
"using"
"module"
"export"
"import"
"using"
] @keyword.control.import
((identifier) @keyword.control.import (#eq? @keyword.control.import "baremodule"))
[
"abstract"
"begin"
"const"
"do"
"end"
"let"
"macro"
"module"
"mutable"
"primitive"
"quote"
"return"
"struct"
"type"
] @keyword
; TODO: fix this
((identifier) @keyword (match? @keyword "global|local"))
(((identifier) @constant.builtin) (match? @constant.builtin "^(nothing|Inf|NaN)$"))
(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "true"))
(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false"))
; ---------
; Operators
; ---------
[
(operator)
"::"
"<:"
":"
"=>"
"..."
"$"
] @operator
; ------------
; Punctuations
; ------------
[
"."
","
";"
] @punctuation.delimiter
[
"["
"]"
"("
")"
"{"
"}"
] @punctuation.bracket
; ---------------------
; Remaining identifiers
; ---------------------
["::" ":" "." "," "..." "!"] @punctuation.delimiter
["[" "]" "(" ")" "{" "}"] @punctuation.bracket
(const_statement
(variable_declaration
. (identifier) @constant))
["="] @operator
; SCREAMING_SNAKE_CASE
(
(identifier) @constant
(match? @constant "^[A-Z][A-Z0-9_]*$"))
; remaining identifiers that start with capital letters should be types (PascalCase)
(
(identifier) @type
(match? @type "^[A-Z]"))
; Field expressions are either module content or struct fields.
; Module types and constants should already be captured, so this
; assumes the remaining identifiers to be struct fields.
(field_expression
(_)
(identifier) @variable.other.member)
(identifier) @variable
;; In case you want type highlighting based on Julia naming conventions (this might collide with mathematical notation)
;((identifier) @type ; exception: mark `A_foo` sort of identifiers as variables
;(match? @type "^[A-Z][^_]"))
((identifier) @constant
(match? @constant "^[A-Z][A-Z_]{2}[A-Z_]*$"))

@ -1,5 +1,28 @@
((triple_string) @injection.content
(#set! injection.language "markdown"))
(
(source_file
(string_literal) @injection.content
.
[
(module_definition)
(function_definition)
(macro_definition)
(primitive_definition)
(abstract_definition)
(struct_definition)
(assignment_expression)
(const_statement)
])
(#set! injection.language "markdown"))
((comment) @injection.content
(#set! injection.language "comment"))
(
[
(line_comment)
(block_comment)
] @injection.content
(#set! injection.language "comment"))
(
(prefixed_string_literal
prefix: (identifier) @function.macro) @injection.content
(#eq? @function.macro "re")
(#set! injection.language "regex"))

@ -1,59 +1,43 @@
; -----------
; Definitions
; -----------
; Imports
(import_statement
(identifier) @definition.import)
(variable_declaration
(identifier) @local.definition)
(variable_declaration
(tuple_expression
(identifier) @local.definition))
(for_binding
(identifier) @local.definition)
(for_binding
(tuple_expression
(identifier) @local.definition))
(assignment_expression
(tuple_expression
(identifier) @local.definition))
(assignment_expression
(bare_tuple_expression
(identifier) @local.definition))
(assignment_expression
(identifier) @local.definition)
(type_parameter_list
(identifier) @definition.type)
(type_argument_list
(identifier) @definition.type)
(struct_definition
name: (identifier) @definition.type)
(identifier) @local.definition)
; Constants
(const_statement
(variable_declaration
. (identifier) @local.definition))
; Parameters
(parameter_list
(identifier) @definition.parameter)
(identifier) @local.definition)
(typed_parameter
(identifier) @definition.parameter
(identifier))
(function_expression
. (identifier) @definition.parameter)
(argument_list
(typed_expression
(identifier) @definition.parameter
(identifier)))
(spread_parameter
(identifier) @definition.parameter)
. (identifier) @local.definition)
(function_definition
name: (identifier) @definition.function) @local.scope
(macro_definition
name: (identifier) @definition.macro) @local.scope
(optional_parameter .
(identifier) @local.definition)
(identifier) @local.reference
(spread_parameter
(identifier) @local.definition)
(function_expression
. (identifier) @local.definition)
; ------
; Scopes
; ------
[
(try_statement)
(finally_clause)
(quote_statement)
(let_statement)
(compound_expression)
(for_statement)
(function_definition)
(macro_definition)
] @local.scope
; ----------
; References
; ----------
(identifier) @local.reference

@ -0,0 +1,382 @@
; -- Identifier type inferrence
; VERY QUESTIONABLE: Highlighting of identifiers based on spelling
(exprBinary ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(exprUnary ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(assignment rhs: ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(exprBrackets ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(exprParens ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(exprDot rhs: ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(exprTpl args: ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(exprArgs ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(declEnumValue ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
(defaultValue ((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
; -- Break, Continue & Exit
; (Not ideal: ideally, there would be a way to check if these special
; identifiers are shadowed by a local variable)
(statement ((identifier) @keyword.control.return
(#match? @keyword.control.return "^[eE][xX][iI][tT]$")))
(statement (exprCall entity: ((identifier) @keyword.control.return
(#match? @keyword.control.return "^[eE][xX][iI][tT]$"))))
(statement ((identifier) @keyword.control.repeat
(#match? @keyword.control.repeat "^[bB][rR][eE][aA][kK]$")))
(statement ((identifier) @keyword.control.repeat
(#match? @keyword.control.repeat "^[cC][oO][nN][tT][iI][nN][uU][eE]$")))
; -- Heuristic for procedure/function calls without parentheses
; (If a statement consists only of an identifier, assume it's a procedure)
; (This will still not match all procedure calls, and also may produce false
; positives in rare cases, but only for nonsensical code)
(statement (exprDot rhs: (exprTpl entity: (identifier) @function)))
(statement (exprTpl entity: (identifier) @function))
(statement (exprDot rhs: (identifier) @function))
(statement (identifier) @function)
; -- Procedure name in calls with parentheses
; (Pascal doesn't require parentheses for procedure calls, so this will not
; detect all calls)
(inherited) @function
; foo.bar<t>
(exprCall entity: (exprDot rhs: (exprTpl entity: (identifier) @function)))
; foo.bar
(exprCall entity: (exprDot rhs: (identifier) @function))
; foobar<t>
(exprCall entity: (exprTpl entity: (identifier) @function))
; foobar
(exprCall entity: (identifier) @function)
; -- Fields
(declSection (declVars (declVar name:(identifier) @variable.other.member)))
(declSection (declField name:(identifier) @variable.other.member))
(declClass (declField name:(identifier) @variable.other.member))
(exprDot rhs: (exprDot) @variable.other.member)
(exprDot rhs: (identifier) @variable.other.member)
(recInitializerField name:(identifier) @variable.other.member)
; -- Variable & constant declarations
; (This is only questionable because we cannot detect types of identifiers
; declared in other units, so the results will be inconsistent)
(declVar name: (identifier) @variable)
(declConst name: (identifier) @constant)
(declEnumValue name: (identifier) @constant)
; -- Constant usage
[
(caseLabel)
(label)
] @constant
(procAttribute (identifier) @constant)
(procExternal (identifier) @constant)
; -- Type usage
(typeref) @type
; -- Exception parameters
(exceptionHandler variable: (identifier) @variable.parameter)
; -- Template parameters
(genericArg type: (typeref) @type)
(genericArg name: (identifier) @variable.parameter)
(declProc name: (genericDot lhs: (identifier) @type))
(declType (genericDot (identifier) @type))
(genericDot (genericTpl (identifier) @type))
(genericDot (genericDot (identifier) @type))
(genericTpl entity: (genericDot (identifier) @type))
(genericTpl entity: (identifier) @type)
; -- Function parameters
(declArg name: (identifier) @variable.parameter)
; Treat property declarations like functions
(declProp name: (identifier) @function)
(declProp getter: (identifier) @variable.other.member)
(declProp setter: (identifier) @variable.other.member)
; -- Procedure & function declarations
; foo.bar<t>
(declProc name: (genericDot rhs: (genericTpl entity: (identifier) @function)))
; foo.bar
(declProc name: (genericDot rhs: (identifier) @function))
; foobar<t>
(declProc name: (genericTpl entity: (identifier) @function))
; foobar
(declProc name: (identifier) @function)
; -- Type declaration
(declType name: (genericTpl entity: (identifier) @type))
(declType name: (identifier) @type)
; -- Comments
(comment) @comment
(pp) @function.macro
; -- Variables
(exprBinary (identifier) @variable)
(exprUnary (identifier) @variable)
(assignment (identifier) @variable)
(exprBrackets (identifier) @variable)
(exprParens (identifier) @variable)
(exprDot (identifier) @variable)
(exprTpl (identifier) @variable)
(exprArgs (identifier) @variable)
(defaultValue (identifier) @variable)
; -- Literals
(literalNumber) @constant.builtin.numeric
(literalString) @string
; -- Builtin constants
[
(kTrue)
(kFalse)
] @constant.builtin.boolean
[
(kNil)
] @constant.builtin
; -- Punctuation & operators
[
(kOr)
(kXor)
(kDiv)
(kMod)
(kAnd)
(kShl)
(kShr)
(kNot)
(kIs)
(kAs)
(kIn)
] @keyword.operator
[
(kDot)
(kAdd)
(kSub)
(kMul)
(kFdiv)
(kAssign)
(kAssignAdd)
(kAssignSub)
(kAssignMul)
(kAssignDiv)
(kEq)
(kLt)
(kLte)
(kGt)
(kGte)
(kNeq)
(kAt)
(kHat)
] @operator
[
".."
] @punctuation.special
[
";"
","
":"
(kEndDot)
] @punctuation.delimiter
[
"("
")"
"["
"]"
] @punctuation.bracket
; -- Attributes
(procAttribute (kPublic) @attribute)
[
(kDefault)
(kIndex)
(kNodefault)
(kStored)
(kStatic)
(kVirtual)
(kAbstract)
(kSealed)
(kDynamic)
(kOverride)
(kOverload)
(kReintroduce)
(kInline)
(kForward)
(kStdcall)
(kCdecl)
(kCppdecl)
(kPascal)
(kRegister)
(kMwpascal)
(kExternal)
(kName)
(kMessage)
(kDeprecated)
(kExperimental)
(kPlatform)
(kUnimplemented)
(kCvar)
(kExport)
(kFar)
(kNear)
(kSafecall)
(kAssembler)
(kNostackframe)
(kInterrupt)
(kNoreturn)
(kIocheck)
(kLocal)
(kHardfloat)
(kSoftfloat)
(kMs_abi_default)
(kMs_abi_cdecl)
(kSaveregisters)
(kSysv_abi_default)
(kSysv_abi_cdecl)
(kVectorcall)
(kVarargs)
(kWinapi)
(kAlias)
(kDelayed)
(rttiAttributes)
(procAttribute)
] @attribute
; -- Keywords
[
(kProgram)
(kLibrary)
(kUnit)
(kUses)
(kBegin)
(kEnd)
(kAsm)
(kVar)
(kThreadvar)
(kConst)
(kResourcestring)
(kConstref)
(kOut)
(kType)
(kLabel)
(kExports)
(kAbsolute)
(kProperty)
(kRead)
(kWrite)
(kImplements)
(kClass)
(kInterface)
(kObject)
(kRecord)
(kObjcclass)
(kObjccategory)
(kObjcprotocol)
(kArray)
(kFile)
(kString)
(kSet)
(kOf)
(kHelper)
(kPacked)
(kInherited)
(kGeneric)
(kSpecialize)
(kFunction)
(kProcedure)
(kConstructor)
(kDestructor)
(kOperator)
(kReference)
(kInterface)
(kImplementation)
(kInitialization)
(kFinalization)
(kPublished)
(kPublic)
(kProtected)
(kPrivate)
(kStrict)
(kRequired)
(kOptional)
(kTry)
(kExcept)
(kFinally)
(kRaise)
(kOn)
(kCase)
(kWith)
(kGoto)
] @keyword
[
(kFor)
(kTo)
(kDownto)
(kDo)
(kWhile)
(kRepeat)
(kUntil)
] @keyword.control.repeat
[
(kIf)
(kThen)
(kElse)
] @keyword.control.conditional

@ -0,0 +1,2 @@
((comment) @injection.content
(#set! injection.language "comment"))

@ -0,0 +1,10 @@
(declType (declClass (declSection) @class.inside)) @class.around
(defProc body: (_) @function.inside) @function.around
(declArgs (_) @parameter.inside) @parameter.around
(exprArgs (_) @parameter.inside) @parameter.around
(comment) @comment.inside
(comment)+ @comment.around

@ -0,0 +1,11 @@
(headline) @markup.heading
(open_checkbox) @markup.list
(ongoing_checkbox) @keyword.control
(checked_checkbox) @diff.plus
(obsolete_checkbox) @comment.unused
(checked_task) @comment.unused
(obsolete_task) @comment.unused
(priority) @error

@ -2,38 +2,42 @@
#
# This was made based on
# https://github.com/doomemacs/themes/blob/master/themes/doom-acario-dark-theme.el
# I've done my best to make it work completely, but there's still some things that differ from the emacs version.
# I've done my best to make it look like the Emacs theme, there are still things that looks different from the original.
# But I've decided to keep it like that as I found it to be easier to read when there's a lot going on i.e lots of variables, strings and functions close to each other.
type = { fg = 'blue' }
constructor = { fg = 'red' }
constant = { fg = 'magenta' }
'constant.numeric' = { fg = 'orange' }
string = { fg = 'green' }
comment = { fg = 'gray', modifiers = ['italic'] }
'attribute' = { fg = 'blue' }
'comment' = { fg = 'gray', modifiers = ['italic'] }
'comment.block' = { fg = 'green', modifiers = ['italic'] }
'comment.block.documentation' = { fg = 'green', modifiers = ['italic'] }
variable = { fg = 'cyan' }
'variable.parameter' = { fg = 'blue' }
label = { fg = 'green' }
keyword = { fg = 'red' }
operator = { fg = 'blue' }
function = { fg = 'yellow' }
tag = { fg = 'cyan' }
attribute = { fg = 'blue' }
attribute = { fg = 'blue' }
namespace = { fg = 'red' }
'constant' = { fg = 'magenta' }
'constant.numeric' = { fg = 'orange' }
'constructor' = { fg = 'red' }
'function' = { fg = 'yellow' }
'function.builtin' = { fg = 'blue' }
'function.method' = { fg = 'white' }
'keyword' = { fg = 'red' }
'label' = { fg = 'green' }
'namespace' = { fg = 'white' }
'operator' = { fg = 'blue' }
'punctuation.bracket' = { fg = 'blue' }
'punctuation.delimiter' = { fg = 'white', modifiers = ['bold'] }
'string' = { fg = 'green' }
'tag' = { fg = 'cyan' }
'type' = { fg = 'blue' }
'variable' = { fg = 'cyan' }
'variable.parameter' = { fg = 'white' }
'markup.bold' = { fg = 'orange', modifiers = ['bold'] }
'markup.italic' = { fg = 'magenta', modifiers = ['italic'] }
'markup.heading' = { fg = 'red' }
'markup.list' = { fg = 'red' }
'markup.raw.inline' = { fg = 'green', bg = 'base4' }
'markup.raw.block' = { fg = 'green', bg = 'base4' }
'markup.link' = { fg = 'orange' }
'markup.link' = { fg = 'orange' }
'markup.link.url' = { fg = 'magenta' }
'markup.link.text' = { fg = 'orange' }
'markup.link.label' = { fg = 'green' }
'markup.list' = { fg = 'red' }
'markup.quote' = { fg = 'green', modifiers = ['italic'] }
'markup.bold' = { fg = 'orange', modifiers = ['bold'] }
'markup.italic' = { fg = 'magenta', modifiers = ['italic'] }
'markup.raw.block' = { fg = 'green', bg = 'base4' }
'markup.raw.inline' = { fg = 'green', bg = 'base4' }
'diff.plus' = { fg = 'green' }
'diff.minus' = { fg = 'red' }
@ -61,19 +65,20 @@ namespace = { fg = 'red' }
'ui.menu.selected' = { bg = 'base3', fg = 'fg' }
'ui.selection' = { bg = 'base2' }
warning = { fg = 'orange' }
error = { fg = 'red', modifiers = ['bold'] }
info = { fg = 'blue', modifiers = ['bold'] }
hint = { fg = 'blue', modifiers = ['bold'] }
'warning' = { fg = 'orange' }
'error' = { fg = 'red', modifiers = ['bold'] }
'info' = { fg = 'blue', modifiers = ['bold'] }
'hint' = { fg = 'blue', modifiers = ['bold'] }
'diagnostic'= { fg = 'red', modifiers = ['underlined'] }
'diagnostic.error'= { fg = 'red', modifiers = ['underlined'] }
'diagnostic.info'= { fg = 'blue', modifiers = ['underlined'] }
'diagnostic.warning'= { fg = 'yellow', modifiers = ['underlined'] }
'diagnostic.error'= { fg = 'red', modifiers = ['underlined'] }
'special' = { fg = 'orange' }
[palette]
white = '#ffffff'
black = '#000000'
red = '#D83441'
green = '#79D836'

Loading…
Cancel
Save