Skip to content

Commit

Permalink
Improve llvm highlighting and queries (#1388)
Browse files Browse the repository at this point in the history
* Improve llvm highlighting and queries

The llvm tree-sitter parser was updated to support scopes and more
accurate highlighting.

* Group highlight expressions better
  • Loading branch information
Flakebi authored Dec 29, 2021
1 parent f1ed042 commit 8c29b76
Show file tree
Hide file tree
Showing 6 changed files with 193 additions and 11 deletions.
2 changes: 1 addition & 1 deletion book/src/generated/lang-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
| julia || | | `julia` |
| latex || | | |
| ledger || | | |
| llvm || | | |
| llvm || | | |
| lua || || |
| markdown || | | |
| mint | | | | `mint` |
Expand Down
2 changes: 1 addition & 1 deletion helix-syntax/languages/tree-sitter-llvm
162 changes: 153 additions & 9 deletions runtime/queries/llvm/highlights.scm
Original file line number Diff line number Diff line change
@@ -1,14 +1,158 @@
(type) @type
(statement) @keyword.operator
(type_keyword) @type.builtin

(type [
(local_var)
(global_var)
] @type)

(argument) @variable.parameter

(_ inst_name: _ @keyword.operator)

[
"catch"
"filter"
] @keyword.operator

[
"to"
"nuw"
"nsw"
"exact"
"unwind"
"from"
"cleanup"
"swifterror"
"volatile"
"inbounds"
"inrange"
(icmp_cond)
(fcmp_cond)
(fast_math)
] @keyword.control

(_ callee: _ @function)
(function_header name: _ @function)

[
"declare"
"define"
(calling_conv)
] @keyword.function

[
"target"
"triple"
"datalayout"
"source_filename"
"addrspace"
"blockaddress"
"align"
"syncscope"
"within"
"uselistorder"
"uselistorder_bb"
"module"
"asm"
"sideeffect"
"alignstack"
"inteldialect"
"unwind"
"type"
"global"
"constant"
"externally_initialized"
"alias"
"ifunc"
"section"
"comdat"
"thread_local"
"localdynamic"
"initialexec"
"localexec"
"any"
"exactmatch"
"largest"
"nodeduplicate"
"samesize"
"distinct"
"attributes"
"vscale"
"no_cfi"
(linkage_aux)
(dso_local)
(visibility)
(dll_storage_class)
(unnamed_addr)
(attribute_name)
] @keyword


(function_header [
(linkage)
(calling_conv)
(unnamed_addr)
] @keyword.function)

[
(string)
(cstring)
] @string

(number) @constant.numeric.integer
(comment) @comment
(string) @string
(label) @label
(keyword) @keyword
"ret" @keyword.control.return
(boolean) @constant.builtin.boolean
(_ inst_name: "ret" @keyword.control.return)
(float) @constant.numeric.float
(constant) @constant
(identifier) @variable
(symbol) @punctuation.delimiter
(bracket) @punctuation.bracket

[
(local_var)
(global_var)
] @variable

[
(struct_value)
(array_value)
(vector_value)
] @constructor

[
"("
")"
"["
"]"
"{"
"}"
"<"
">"
"<{"
"}>"
] @punctuation.bracket

[
","
":"
] @punctuation.delimiter

[
"="
"|"
"x"
"..."
] @operator

[
"true"
"false"
] @constant.builtin.boolean

[
"undef"
"poison"
"null"
"none"
"zeroinitializer"
] @constant.builtin

(ERROR) @error
8 changes: 8 additions & 0 deletions runtime/queries/llvm/indents.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
indent = [
"function_body",
"instruction",
]

outdent = [
"}",
]
14 changes: 14 additions & 0 deletions runtime/queries/llvm/locals.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
; Scopes

(function_body) @local.scope

; Definitions

(argument
(value (var (local_var) @local.definition)))

(instruction
(local_var) @local.definition)

; References
(local_var) @local.reference
16 changes: 16 additions & 0 deletions runtime/queries/llvm/textobjects.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
(define
body: (_) @function.inside) @function.around

(struct_type
(struct_body) @class.inside) @class.around

(packed_struct_type
(struct_body) @class.inside) @class.around

(array_type
(array_vector_body) @class.inside) @class.around

(vector_type
(array_vector_body) @class.inside) @class.around

(argument) @parameter.inside

0 comments on commit 8c29b76

Please sign in to comment.