Skip to content

Commit

Permalink
Add llvm-mir highlighting (helix-editor#1398)
Browse files Browse the repository at this point in the history
* Add injection regex for more languages

To support embedding them in other languages like markdown.

* Add llvm-mir highlighting

LLVM Machine IR is dumped as yaml files that can embed LLVM IR and
Machine IR.

To support this, add a llvm-mir-yaml language that uses the yaml
parser, but uses different injections to highlight IR and MIR.

* Update submodule with fixed multiline comments

Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
  • Loading branch information
Flakebi and archseer authored Jan 4, 2022
1 parent 7c9d368 commit 641255c
Show file tree
Hide file tree
Showing 14 changed files with 203 additions and 3 deletions.
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@
path = helix-syntax/languages/tree-sitter-git-commit
url = https://github.com/the-mikedavis/tree-sitter-git-commit.git
shallow = true
[submodule "helix-syntax/languages/tree-sitter-llvm-mir"]
path = helix-syntax/languages/tree-sitter-llvm-mir
url = https://github.com/Flakebi/tree-sitter-llvm-mir.git
shallow = true
[submodule "helix-syntax/languages/tree-sitter-git-diff"]
path = helix-syntax/languages/tree-sitter-git-diff
url = https://github.com/the-mikedavis/tree-sitter-git-diff.git
Expand Down
2 changes: 2 additions & 0 deletions book/src/generated/lang-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
| latex || | | |
| ledger || | | |
| llvm |||| |
| llvm-mir |||| |
| llvm-mir-yaml || || |
| lua || || |
| markdown || | | |
| mint | | | | `mint` |
Expand Down
1 change: 1 addition & 0 deletions helix-core/src/indent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,7 @@ where
comment_token: None,
auto_format: false,
diagnostic_severity: Severity::Warning,
tree_sitter_library: None,
language_server: None,
indent: Some(IndentationConfiguration {
tab_width: 4,
Expand Down
13 changes: 10 additions & 3 deletions helix-core/src/syntax.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ pub struct LanguageConfiguration {
#[serde(default)]
pub diagnostic_severity: Severity,

pub tree_sitter_library: Option<String>, // tree-sitter library name, defaults to language_id

// content_regex
#[serde(default, skip_serializing, deserialize_with = "deserialize_regex")]
pub injection_regex: Option<Regex>,
Expand Down Expand Up @@ -192,9 +194,14 @@ impl LanguageConfiguration {
if highlights_query.is_empty() {
None
} else {
let language = get_language(&crate::RUNTIME_DIR, &self.language_id)
.map_err(|e| log::info!("{}", e))
.ok()?;
let language = get_language(
&crate::RUNTIME_DIR,
self.tree_sitter_library
.as_deref()
.unwrap_or(&self.language_id),
)
.map_err(|e| log::info!("{}", e))
.ok()?;
let config = HighlightConfiguration::new(
language,
&highlights_query,
Expand Down
1 change: 1 addition & 0 deletions helix-syntax/languages/tree-sitter-llvm-mir
Submodule tree-sitter-llvm-mir added at 06fabc
22 changes: 22 additions & 0 deletions languages.toml
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,7 @@ file-types = ["yml", "yaml"]
roots = []
comment-token = "#"
indent = { tab-width = 2, unit = " " }
injection-regex = "yml|yaml"

# [[language]]
# name = "haskell"
Expand Down Expand Up @@ -386,6 +387,7 @@ roots = []
comment-token = "#"
indent = { tab-width = 2, unit = " " }
language-server = { command = "cmake-language-server" }
injection-regex = "cmake"

[[language]]
name = "glsl"
Expand All @@ -394,6 +396,7 @@ file-types = ["glsl", "vert", "tesc", "tese", "geom", "frag", "comp" ]
roots = []
comment-token = "//"
indent = { tab-width = 4, unit = " " }
injection-regex = "glsl"

[[language]]
name = "perl"
Expand Down Expand Up @@ -435,6 +438,25 @@ roots = []
file-types = ["ll"]
comment-token = ";"
indent = { tab-width = 2, unit = " " }
injection-regex = "llvm"

[[language]]
name = "llvm-mir"
scope = "source.llvm_mir"
roots = []
file-types = []
comment-token = ";"
indent = { tab-width = 2, unit = " " }
injection-regex = "mir"

[[language]]
name = "llvm-mir-yaml"
tree-sitter-library = "yaml"
scope = "source.yaml"
roots = []
file-types = ["mir"]
comment-token = "#"
indent = { tab-width = 2, unit = " " }

[[language]]
name = "tablegen"
Expand Down
1 change: 1 addition & 0 deletions runtime/queries/llvm-mir-yaml/highlights.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
; inherits: yaml
3 changes: 3 additions & 0 deletions runtime/queries/llvm-mir-yaml/indents.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
indent = [
"block_mapping_pair",
]
9 changes: 9 additions & 0 deletions runtime/queries/llvm-mir-yaml/injections.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
; inherits: yaml

((document (block_node (block_scalar) @injection.content))
(#set! injection.language "llvm"))

((document (block_node (block_mapping (block_mapping_pair
key: (flow_node (plain_scalar (string_scalar))) ; "body"
value: (block_node (block_scalar) @injection.content)))))
(#set! injection.language "mir"))
136 changes: 136 additions & 0 deletions runtime/queries/llvm-mir/highlights.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
[
(label)
(bb_ref)
] @label

[
(comment)
(multiline_comment)
] @comment

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

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

[
"="
"x"
] @operator

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

[
"null"
"_"
"unknown-address"
] @constant.builtin

[
(stack_object)
(constant_pool_index)
(jump_table_index)
(var)
(physical_register)
(ir_block)
(external_symbol)
(global_var)
(ir_local_var)
(metadata_ref)
(mnemonic)
] @variable

(low_level_type) @type

[
(immediate_type)
(primitive_type)
] @type.builtin

(number) @constant.numeric.integer
(float) @constant.numeric.float
(string) @string

(instruction name: _ @keyword.operator)

[
"successors"
"liveins"
"pre-instr-symbol"
"post-instr-symbol"
"heap-alloc-marker"
"debug-instr-number"
"debug-location"
"mcsymbol"
"tied-def"
"target-flags"
"CustomRegMask"
"same_value"
"def_cfa_register"
"restore"
"undefined"
"offset"
"rel_offset"
"def_cfa"
"llvm_def_aspace_cfa"
"register"
"escape"
"remember_state"
"restore_state"
"window_save"
"negate_ra_sign_state"
"intpred"
"floatpred"
"shufflemask"
"liveout"
"target-index"
"blockaddress"
"intrinsic"
"load"
"store"
"unknown-size"
"on"
"from"
"into"
"align"
"basealign"
"addrspace"
"call-entry"
"custom"
"constant-pool"
"stack"
"got"
"jump-table"
"syncscope"
"address-taken"
"landing-pad"
"inlineasm-br-indirect-target"
"ehfunclet-entry"
"bbsections"

(intpred)
(floatpred)
(memory_operand_flag)
(atomic_ordering)
(register_flag)
(instruction_flag)
(float_keyword)
] @keyword

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

outdent = [
"label",
]
2 changes: 2 additions & 0 deletions runtime/queries/llvm-mir/injections.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
([ (comment) (multiline_comment)] @injection.content
(#set! injection.language "comment"))
3 changes: 3 additions & 0 deletions runtime/queries/llvm-mir/textobjects.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
(basic_block) @function.around

(argument) @parameter.inside
2 changes: 2 additions & 0 deletions runtime/queries/yaml/injections.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
((comment) @injection.content
(#set! injection.language "comment"))

0 comments on commit 641255c

Please sign in to comment.