Merge branch 'helix-editor:master' into master

pull/13448/head
Nikola Milenkovic 2025-05-07 13:24:39 +01:00 committed by GitHub
commit a6e25fb6f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 639 additions and 21 deletions

22
Cargo.lock generated
View File

@ -151,9 +151,9 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
[[package]]
name = "cc"
version = "1.2.20"
version = "1.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a"
checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0"
dependencies = [
"shlex",
]
@ -177,9 +177,9 @@ dependencies = [
[[package]]
name = "chrono"
version = "0.4.40"
version = "0.4.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
dependencies = [
"android-tzdata",
"iana-time-zone",
@ -913,7 +913,7 @@ dependencies = [
"itoa",
"libc",
"memmap2",
"rustix 1.0.5",
"rustix 1.0.7",
"smallvec",
"thiserror 2.0.12",
]
@ -1530,7 +1530,7 @@ dependencies = [
"regex-automata",
"regex-cursor",
"ropey",
"rustix 1.0.5",
"rustix 1.0.7",
"tempfile",
"unicode-segmentation",
"which",
@ -1637,7 +1637,7 @@ dependencies = [
"log",
"once_cell",
"parking_lot",
"rustix 1.0.5",
"rustix 1.0.7",
"serde",
"serde_json",
"slotmap",
@ -2374,9 +2374,9 @@ dependencies = [
[[package]]
name = "rustix"
version = "1.0.5"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266"
dependencies = [
"bitflags",
"errno",
@ -2622,7 +2622,7 @@ dependencies = [
"fastrand",
"getrandom 0.3.1",
"once_cell",
"rustix 1.0.5",
"rustix 1.0.7",
"windows-sys 0.59.0",
]
@ -2995,7 +2995,7 @@ checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762"
dependencies = [
"either",
"env_home",
"rustix 1.0.5",
"rustix 1.0.7",
"winsafe",
]

View File

@ -47,6 +47,8 @@ The following variables are supported:
| `cursor_column` | The column number of the primary cursor in the currently focused document, starting at 1. This is counted as the number of grapheme clusters from the start of the line rather than bytes or codepoints. |
| `buffer_name` | The relative path of the currently focused document. `[scratch]` is expanded instead for scratch buffers. |
| `line_ending` | A string containing the line ending of the currently focused document. For example on Unix systems this is usually a line-feed character (`\n`) but on Windows systems this may be a carriage-return plus a line-feed (`\r\n`). The line ending kind of the currently focused document can be inspected with the `:line-ending` command. |
| `language` | A string containing the language name of the currently focused document.|
| `selection` | A string containing the contents of the primary selection of the currently focused document. |
Aside from editor variables, the following expansions may be used:

View File

@ -46,6 +46,7 @@
| dot | ✓ | | | `dot-language-server` |
| dtd | ✓ | | | |
| dune | ✓ | | | |
| dunstrc | ✓ | | | |
| earthfile | ✓ | ✓ | ✓ | `earthlyls` |
| edoc | ✓ | | | |
| eex | ✓ | | | |
@ -180,6 +181,7 @@
| prolog | ✓ | | ✓ | `swipl` |
| protobuf | ✓ | ✓ | ✓ | `buf`, `pb`, `protols` |
| prql | ✓ | | | |
| pug | ✓ | | | |
| purescript | ✓ | ✓ | | `purescript-language-server` |
| python | ✓ | ✓ | ✓ | `ruff`, `jedi-language-server`, `pylsp` |
| qml | ✓ | | ✓ | `qmlls` |
@ -200,6 +202,7 @@
| scala | ✓ | ✓ | ✓ | `metals` |
| scheme | ✓ | | ✓ | |
| scss | ✓ | | | `vscode-css-language-server` |
| slang | ✓ | ✓ | ✓ | `slangd` |
| slint | ✓ | ✓ | ✓ | `slint-lsp` |
| smali | ✓ | | ✓ | |
| smithy | ✓ | | | `cs` |

View File

@ -153,6 +153,8 @@
| `goto_last_change` | Goto last change | normal: `` ]G ``, select: `` ]G `` |
| `goto_line_start` | Goto line start | normal: `` gh ``, `` <home> ``, select: `` gh ``, insert: `` <home> `` |
| `goto_line_end` | Goto line end | normal: `` gl ``, `` <end> ``, select: `` gl `` |
| `goto_column` | Goto column | normal: `` g\| `` |
| `extend_to_column` | Extend to column | select: `` g\| `` |
| `goto_next_buffer` | Goto next buffer | normal: `` gn ``, select: `` gn `` |
| `goto_previous_buffer` | Goto previous buffer | normal: `` gp ``, select: `` gp `` |
| `goto_line_end_newline` | Goto newline at line end | insert: `` <end> `` |

View File

@ -23,6 +23,7 @@ The following [captures][tree-sitter-captures] are recognized:
| `test.inside` |
| `test.around` |
| `parameter.inside` |
| `parameter.around` |
| `comment.inside` |
| `comment.around` |
| `entry.inside` |

View File

@ -213,6 +213,7 @@ Jumps to various locations.
| Key | Description | Command |
| ----- | ----------- | ------- |
| `g` | Go to line number `<n>` else start of file | `goto_file_start` |
| <code>&#124;</code> | Go to column number `<n>` else start of line | `goto_column` |
| `e` | Go to the end of the file | `goto_last_line` |
| `f` | Go to files in the selections | `goto_file` |
| `h` | Go to the start of the line | `goto_line_start` |

View File

@ -451,7 +451,6 @@ fn build_tree_sitter_library(
command
.args(["/nologo", "/LD", "/I"])
.arg(header_path)
.arg("/Od")
.arg("/utf-8")
.arg("/std:c11");
if let Some(scanner_path) = scanner_path.as_ref() {
@ -469,7 +468,6 @@ fn build_tree_sitter_library(
cpp_command
.args(["/nologo", "/LD", "/I"])
.arg(header_path)
.arg("/Od")
.arg("/utf-8")
.arg("/std:c++14")
.arg(format!("/Fo{}", object_file.display()))

View File

@ -451,6 +451,8 @@ impl MappableCommand {
goto_last_change, "Goto last change",
goto_line_start, "Goto line start",
goto_line_end, "Goto line end",
goto_column, "Goto column",
extend_to_column, "Extend to column",
goto_next_buffer, "Goto next buffer",
goto_previous_buffer, "Goto previous buffer",
goto_line_end_newline, "Goto newline at line end",
@ -3839,6 +3841,28 @@ fn goto_last_line_impl(cx: &mut Context, movement: Movement) {
doc.set_selection(view.id, selection);
}
fn goto_column(cx: &mut Context) {
goto_column_impl(cx, Movement::Move);
}
fn extend_to_column(cx: &mut Context) {
goto_column_impl(cx, Movement::Extend);
}
fn goto_column_impl(cx: &mut Context, movement: Movement) {
let count = cx.count();
let (view, doc) = current!(cx.editor);
let text = doc.text().slice(..);
let selection = doc.selection(view.id).clone().transform(|range| {
let line = range.cursor_line(text);
let line_start = text.line_to_char(line);
let line_end = line_end_char_index(&text, line);
let pos = graphemes::nth_next_grapheme_boundary(text, line_start, count - 1).min(line_end);
range.put_cursor(text, pos, movement == Movement::Extend)
});
doc.set_selection(view.id, selection);
}
fn goto_last_accessed_file(cx: &mut Context) {
let view = view_mut!(cx.editor);
if let Some(alt) = view.docs_access_history.pop() {

View File

@ -38,6 +38,7 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
"G" => goto_line,
"g" => { "Goto"
"g" => goto_file_start,
"|" => goto_column,
"e" => goto_last_line,
"f" => goto_file,
"h" => goto_line_start,
@ -368,6 +369,7 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
"v" => normal_mode,
"g" => { "Goto"
"g" => extend_to_file_start,
"|" => extend_to_column,
"e" => extend_to_last_line,
"k" => extend_line_up,
"j" => extend_line_down,

View File

@ -33,6 +33,10 @@ pub enum Variable {
BufferName,
/// A string containing the line-ending of the currently focused document.
LineEnding,
// The name of current buffers language as set in `languages.toml`
Language,
// Primary selection
Selection,
}
impl Variable {
@ -41,6 +45,8 @@ impl Variable {
Self::CursorColumn,
Self::BufferName,
Self::LineEnding,
Self::Language,
Self::Selection,
];
pub const fn as_str(&self) -> &'static str {
@ -49,6 +55,8 @@ impl Variable {
Self::CursorColumn => "cursor_column",
Self::BufferName => "buffer_name",
Self::LineEnding => "line_ending",
Self::Language => "language",
Self::Selection => "selection",
}
}
@ -58,6 +66,8 @@ impl Variable {
"cursor_column" => Some(Self::CursorColumn),
"buffer_name" => Some(Self::BufferName),
"line_ending" => Some(Self::LineEnding),
"language" => Some(Self::Language),
"selection" => Some(Self::Selection),
_ => None,
}
}
@ -215,5 +225,12 @@ fn expand_variable(editor: &Editor, variable: Variable) -> Result<Cow<'static, s
}
}
Variable::LineEnding => Ok(Cow::Borrowed(doc.line_ending.as_str())),
Variable::Language => Ok(match doc.language_name() {
Some(lang) => Cow::Owned(lang.to_owned()),
None => Cow::Borrowed("text"),
}),
Variable::Selection => Ok(Cow::Owned(
doc.selection(view.id).primary().fragment(text).to_string(),
)),
}
}

View File

@ -104,6 +104,7 @@ robotframework_ls = { command = "robotframework_ls" }
ruff = { command = "ruff", args = ["server"] }
ruby-lsp = { command = "ruby-lsp" }
serve-d = { command = "serve-d" }
slangd = { command = "slangd" }
slint-lsp = { command = "slint-lsp", args = [] }
solargraph = { command = "solargraph", args = ["stdio"] }
solc = { command = "solc", args = ["--lsp"] }
@ -1899,7 +1900,7 @@ source = { git = "https://github.com/mtoohey31/tree-sitter-gitattributes", rev =
[[language]]
name = "git-ignore"
scope = "source.gitignore"
file-types = [{ glob = ".gitignore_global" }, { glob = "git/ignore" }, { glob = ".ignore" }, { glob = "CODEOWNERS" }, { glob = ".config/helix/ignore" }, { glob = ".helix/ignore" }, { glob = ".*ignore" }]
file-types = [{ glob = ".gitignore_global" }, { glob = "git/ignore" }, { glob = ".ignore" }, { glob = "CODEOWNERS" }, { glob = ".config/helix/ignore" }, { glob = ".helix/ignore" }, { glob = ".*ignore" }, { glob = ".git-blame-ignore-revs" }]
injection-regex = "git-ignore"
comment-token = "#"
grammar = "gitignore"
@ -2577,6 +2578,20 @@ formatter = { command = "cue", args = ["fmt", "-"] }
name = "cue"
source = { git = "https://github.com/eonpatapon/tree-sitter-cue", rev = "8a5f273bfa281c66354da562f2307c2d394b6c81" }
[[language]]
name = "slang"
scope = "source.lang"
injection-regex = "slang"
file-types = ["slang"]
comment-token = "//"
block-comment-tokens = { start = "/*", end = "*/" }
language-servers = [ "slangd" ]
indent = { tab-width = 4, unit = " " }
[[grammar]]
name = "slang"
source = { git = "https://github.com/tree-sitter-grammars/tree-sitter-slang", rev = "327b1b821c255867a4fb724c8eee48887e3d014b" }
[[language]]
name = "slint"
scope = "source.slint"
@ -4313,3 +4328,24 @@ comment-tokens = "#"
[[grammar]]
name = "debian"
source = { git = "https://gitlab.com/MggMuggins/tree-sitter-debian", rev = "9b3f4b78c45aab8a2f25a5f9e7bbc00995bc3dde" }
[[language]]
name = "pug"
scope = "source.pug"
file-types = ["pug"]
comment-tokens = ["//", "//-"]
indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "pug"
source = { git = "https://github.com/zealot128/tree-sitter-pug", rev = "13e9195370172c86a8b88184cc358b23b677cc46" }
[[language]]
name = "dunstrc"
scope = "source.dunstrc"
comment-tokens = ["#", ";"]
file-types = [ { glob = "dunst/dunstrc" } ]
[[grammar]]
name = "dunstrc"
source = { git = "https://github.com/rotmh/tree-sitter-dunstrc", rev = "9cb9d5cc51cf5e2a47bb2a0e2f2e519ff11c1431" }

View File

@ -0,0 +1,14 @@
(assign
(key) @attribute)
(comment) @comment.line
[
"["
"]"
] @punctuation.bracket
"=" @operator
(section
(name) @namespace)

View File

@ -1,5 +1,5 @@
; Comments
(tripledot) @comment.discard
(tripledot) @comment.unused
[(comment) (line_comment) (shebang)] @comment
@ -114,10 +114,6 @@
] @comment.block.documentation)
(#any-of? @keyword "doc" "moduledoc"))
; Ignored variables
((variable) @comment.discard
(#match? @comment.discard "^_"))
; Macros
(macro
"?"+ @keyword.directive
@ -163,3 +159,7 @@
(record field: (atom) @variable.other.member)
(record name: (atom) @type)
; Ignored variables
((variable) @comment.unused
(#match? @comment.unused "^_"))

View File

@ -0,0 +1,97 @@
(comment) @comment
(
doctype
(("doctype") @keyword.storage.type)
((doctype_name) @type.enum.variant)
)
(tag_name) @constant
; Attributes
(id) @attribute
(class) @attribute
(attribute_name) @attribute
(quoted_attribute_value) @string
; Controls
(
conditional
((keyword) @keyword.control.conditional)
)
(
case
((keyword) @keyword.control)
(
when
((keyword) @keyword.control)
)
)
(
each
((keyword) @keyword.control.repeat)
)
(
else
((keyword) @keyword.control.conditional)
)
(
while
((keyword) @keyword.control.repeat)
)
; Mixins
(
mixin_definition
((keyword) @keyword.function)
((mixin_name) @function.method)
)
(
mixin_use
(("+") @operator)
((mixin_name) @function.method)
)
; Includes
(
include
((keyword) @keyword.directive)
((filename) @string.special.path)
)
; Inheritance
(
extends
((keyword) @keyword.directive)
((filename) @string.special.path)
)
(
block_definition
((keyword) @keyword.directive)
((block_name) @function.method)
)
(
block_append
((keyword) @keyword.directive)
((block_name) @function.method)
)
(
block_prepend
((keyword) @keyword.directive)
((block_name) @function.method)
)
; Filters
(
filter
(":" @function.macro)
((filter_name) @function.macro)
((content) @special)
)
; Inline JavaScript
(
unbuffered_code
(("-") @special)
)

View File

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

View File

@ -0,0 +1,371 @@
; inherits: c
; cpp
((identifier) @variable.other.member
(#match? @variable.other.member "^m_.*$"))
(parameter_declaration
declarator: (reference_declarator) @variable.parameter)
; function(Foo ...foo)
(variadic_parameter_declaration
declarator: (variadic_declarator
(_) @variable.parameter))
; int foo = 0
(optional_parameter_declaration
declarator: (_) @variable.parameter)
(field_declaration
(field_identifier) @variable.other.member)
(field_initializer
(field_identifier) @variable.other.member)
(function_declarator
declarator: (field_identifier) @function.method)
(concept_definition
name: (identifier) @type)
(alias_declaration
name: (type_identifier) @type)
(namespace_identifier) @namespace
((namespace_identifier) @type
(#match? @type "^[%u]"))
(case_statement
value: (qualified_identifier
(identifier) @constant))
(using_declaration
.
"using"
.
"namespace"
.
[
(qualified_identifier)
(identifier)
] @namespace)
(destructor_name
(identifier) @function.method)
; functions
(function_declarator
(qualified_identifier
(identifier) @function))
(function_declarator
(qualified_identifier
(qualified_identifier
(identifier) @function)))
(function_declarator
(qualified_identifier
(qualified_identifier
(qualified_identifier
(identifier) @function))))
(function_declarator
(template_function
(identifier) @function))
(operator_name) @function
"operator" @function
"static_assert" @function.builtin
(call_expression
(qualified_identifier
(identifier) @function))
(call_expression
(qualified_identifier
(qualified_identifier
(identifier) @function)))
(call_expression
(qualified_identifier
(qualified_identifier
(qualified_identifier
(identifier) @function))))
(call_expression
(template_function
(identifier) @function))
(call_expression
(qualified_identifier
(template_function
(identifier) @function)))
(call_expression
(qualified_identifier
(qualified_identifier
(template_function
(identifier) @function))))
(call_expression
(qualified_identifier
(qualified_identifier
(qualified_identifier
(template_function
(identifier) @function)))))
; methods
(function_declarator
(template_method
(field_identifier) @function.method))
(call_expression
(field_expression
(field_identifier) @function.method))
; constructors
((function_declarator
(qualified_identifier
(identifier) @constructor))
(#match? @constructor "^%u"))
((call_expression
function: (identifier) @constructor)
(#match? @constructor "^%u"))
((call_expression
function: (qualified_identifier
name: (identifier) @constructor))
(#match? @constructor "^%u"))
((call_expression
function: (field_expression
field: (field_identifier) @constructor))
(#match? @constructor "^%u"))
; constructing a type in an initializer list: Constructor (): **SuperType (1)**
((field_initializer
(field_identifier) @constructor
(argument_list))
(#match? @constructor "^%u"))
; Constants
(this) @variable.builtin
(null
"nullptr" @constant.builtin)
(true) @constant.builtin.boolean
(false) @constant.builtin.boolean
; Literals
(raw_string_literal) @string
; Keywords
[
"try"
"catch"
"noexcept"
"throw"
] @keyword.control.exception
[
"decltype"
"explicit"
"friend"
"override"
"using"
"requires"
"constexpr"
] @keyword
[
"class"
"namespace"
"template"
"typename"
"concept"
] @keyword.storage.type
[
"co_await"
"co_yield"
"co_return"
] @keyword
[
"public"
"private"
"protected"
"final"
"virtual"
] @keyword.storage.modifier
[
"new"
"delete"
"xor"
"bitand"
"bitor"
"compl"
"not"
"xor_eq"
"and_eq"
"or_eq"
"not_eq"
"and"
"or"
] @keyword.operator
"<=>" @operator
"::" @punctuation.delimiter
(template_argument_list
[
"<"
">"
] @punctuation.bracket)
(template_parameter_list
[
"<"
">"
] @punctuation.bracket)
(literal_suffix) @operator
; hlsl
[
"in"
"out"
"inout"
"uniform"
"shared"
"groupshared"
"discard"
"cbuffer"
"row_major"
"column_major"
"globallycoherent"
"centroid"
"noperspective"
"nointerpolation"
"sample"
"linear"
"snorm"
"unorm"
"point"
"line"
"triangleadj"
"lineadj"
"triangle"
] @keyword
((identifier) @variable.builtin
(#match? @variable.builtin "^SV_"))
; ((identifier) @variable)
(hlsl_attribute) @attribute
(hlsl_attribute
[
"["
"]"
] @attribute)
"This" @type.builtin
[
"interface"
"extension"
"property"
"associatedtype"
"where"
"var"
"let"
] @keyword
"__init" @constructor
[
"__subscript"
"get"
"set"
] @function.builtin
(call_expression) @function
(call_expression (identifier)) @function
((call_expression
function: (identifier) @function.builtin)
(#any-of? @function.builtin
"frac" "abs" "acos" "acosh" "asin" "asinh" "atan" "atanh" "cos" "cosh" "exp" "exp2" "floor" "log" "log10" "log2" "round" "rsqrt" "sin" "sincos" "sinh" "sqrt" "tan" "tanh" "trunc"
"AllMemoryBarrier" "AllMemoryBarrierWithGroupSync" "DeviceMemoryBarrier" "DeviceMemoryBarrierWithGroupSync" "GroupMemoryBarrier" "GroupMemoryBarrierWithGroupSync"
"abort" "clip" "errorf" "printf"
"all" "any" "countbits" "faceforward" "firstbithigh" "firstbitlow" "isfinite" "isinf" "isnan" "max" "min" "noise" "pow" "reversebits" "sign"
"asdouble" "asfloat" "asint" "asuint" "D3DCOLORtoUBYTE4" "f16tof32" "f32tof16"
"ceil" "clamp" "degrees" "fma" "fmod" "frac" "frexp" "ldexp" "lerp" "mad" "modf" "radiants" "saturate" "smoothstep" "step"
"cross" "determinant" "distance" "dot" "dst" "length" "lit" "msad4" "mul" "normalize" "rcp" "reflect" "refract" "transpose"
"ddx" "ddx_coarse" "ddx_fine" "ddy" "ddy_coarse" "ddy_fine" "fwidth"
"EvaluateAttributeAtCentroid" "EvaluateAttributeAtSample" "EvaluateAttributeSnapped"
"GetRenderTargetSampleCount" "GetRenderTargetSamplePosition"
"InterlockedAdd" "InterlockedAnd" "InterlockedCompareExchange" "InterlockedCompareStore" "InterlockedExchange" "InterlockedMax" "InterlockedMin" "InterlockedOr" "InterlockedXor"
"InterlockedCompareStoreFloatBitwise" "InterlockedCompareExchangeFloatBitwise"
"Process2DQuadTessFactorsAvg" "Process2DQuadTessFactorsMax" "Process2DQuadTessFactorsMin" "ProcessIsolineTessFactors"
"ProcessQuadTessFactorsAvg" "ProcessQuadTessFactorsMax" "ProcessQuadTessFactorsMin" "ProcessTriTessFactorsAvg" "ProcessTriTessFactorsMax" "ProcessTriTessFactorsMin"
"tex1D" "tex1Dbias" "tex1Dgrad" "tex1Dlod" "tex1Dproj"
"tex2D" "tex2Dbias" "tex2Dgrad" "tex2Dlod" "tex2Dproj"
"tex3D" "tex3Dbias" "tex3Dgrad" "tex3Dlod" "tex3Dproj"
"texCUBE" "texCUBEbias" "texCUBEgrad" "texCUBElod" "texCUBEproj"
"WaveIsFirstLane" "WaveGetLaneCount" "WaveGetLaneIndex"
"IsHelperLane"
"WaveActiveAnyTrue" "WaveActiveAllTrue" "WaveActiveBallot"
"WaveReadLaneFirst" "WaveReadLaneAt"
"WaveActiveAllEqual" "WaveActiveAllEqualBool" "WaveActiveCountBits"
"WaveActiveSum" "WaveActiveProduct" "WaveActiveBitAnd" "WaveActiveBitOr" "WaveActiveBitXor" "WaveActiveMin" "WaveActiveMax"
"WavePrefixCountBits" "WavePrefixProduct" "WavePrefixSum"
"QuadReadAcrossX" "QuadReadAcrossY" "QuadReadAcrossDiagonal" "QuadReadLaneAt"
"QuadAny" "QuadAll"
"WaveMatch" "WaveMultiPrefixSum" "WaveMultiPrefixProduct" "WaveMultiPrefixCountBits" "WaveMultiPrefixAnd" "WaveMultiPrefixOr" "WaveMultiPrefixXor"
"NonUniformResourceIndex"
"DispatchMesh" "SetMeshOutputCounts"
"dot4add_u8packed" "dot4add_i8packed" "dot2add"
"RestartStrip"
"CalculateLevelOfDetail" "CalculateLevelOfDetailUnclamped" "Gather" "GetDimensions" "GetSamplePosition" "Load" "Sample" "SampleBias" "SampleCmp" "SampleCmpLevelZero" "SampleGrad" "SampleLevel" "GatherRaw" "SampleCmpLevel"
"SampleCmpBias" "SampleCmpGrad"
"WriteSamplerFeedback" "WriteSamplerFeedbackBias" "WriteSamplerFeedbackGrad" "WriteSamplerFeedbackLevel"
"Append" "Consume" "DecrementCounter" "IncrementCounter"
"Load2" "Load3" "Load4" "Store" "Store2" "Store3" "Store4"
"GatherRed" "GatherGreen" "GatherBlue" "GatherAlpha" "GatherCmp" "GatherCmpRed" "GatherCmpGreen" "GatherCmpBlue" "GatherCmpAlpha"
))
(interface_requirements
(identifier) @type)
(binary_expression
[
"is"
"as"
]
right: (identifier) @type)
[
"as"
"is"
] @keyword.operator
[
"__exported"
"import"
] @keyword.control.import
(property_declaration
(identifier) @variable.other.member)

View File

@ -0,0 +1,6 @@
; inherits: hlsl
[
(interface_specifier)
(extension_specifier)
] @indent

View File

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

View File

@ -0,0 +1,30 @@
(function_definition
body: (_) @function.inside) @function.around
(struct_specifier
body: (_) @class.inside) @class.around
(interface_specifier
body: (_) @class.inside) @class.around
(enum_specifier
body: (_) @class.inside) @class.around
(union_specifier
body: (_) @class.inside) @class.around
(parameter_list
((_) @parameter.inside . ","? @parameter.around) @parameter.around)
(argument_list
((_) @parameter.inside . ","? @parameter.around) @parameter.around)
(comment) @comment.inside
(comment)+ @comment.around
(enumerator
(_) @entry.inside) @entry.around
(initializer_list
(_) @entry.around)

View File

@ -106,6 +106,7 @@
"+"
"/"
"*"
"**"
"^"
"&"
"|"
@ -118,8 +119,6 @@
"'{"
"<="
"@"
"or"
"and"
"=="
"!="
"==="
@ -131,8 +130,15 @@
"%"
">>"
"<<"
">>>"
"<<<"
"|="
(inc_or_dec_operator)
"?"
] @operator
[
"or"
"and"
] @keyword.operator
(cast