mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17:02 -04:00
feat!(gdshader): replace gdshader parser and queries (#8244)
Switch parser to https://github.com/airblast-dev/tree-sitter-gdshader
This commit is contained in:
parent
fd2880e8bc
commit
64f4755b9d
4 changed files with 250 additions and 102 deletions
2
SUPPORTED_LANGUAGES.md
generated
2
SUPPORTED_LANGUAGES.md
generated
|
|
@ -92,7 +92,7 @@ ecma (queries only)[^ecma] | unstable | `HFIJL` | @steelsojka
|
||||||
[gap](https://github.com/gap-system/tree-sitter-gap)[^gap] | unstable | `HF JL` | @reiniscirpons
|
[gap](https://github.com/gap-system/tree-sitter-gap)[^gap] | unstable | `HF JL` | @reiniscirpons
|
||||||
[gaptst](https://github.com/gap-system/tree-sitter-gaptst)[^gaptst] | unstable | `HF J ` | @reiniscirpons
|
[gaptst](https://github.com/gap-system/tree-sitter-gaptst)[^gaptst] | unstable | `HF J ` | @reiniscirpons
|
||||||
[gdscript](https://github.com/PrestonKnopp/tree-sitter-gdscript)[^gdscript] | unmaintained | `HFIJL` |
|
[gdscript](https://github.com/PrestonKnopp/tree-sitter-gdscript)[^gdscript] | unmaintained | `HFIJL` |
|
||||||
[gdshader](https://github.com/GodOfAvacyn/tree-sitter-gdshader) | unstable | `H J ` | @godofavacyn
|
[gdshader](https://github.com/airblast-dev/tree-sitter-gdshader) | unstable | `H J ` | @airblast-dev
|
||||||
[git_config](https://github.com/the-mikedavis/tree-sitter-git-config) | unstable | `HF J ` | @amaanq
|
[git_config](https://github.com/the-mikedavis/tree-sitter-git-config) | unstable | `HF J ` | @amaanq
|
||||||
[git_rebase](https://github.com/the-mikedavis/tree-sitter-git-rebase) | unstable | `H J ` | @gbprod
|
[git_rebase](https://github.com/the-mikedavis/tree-sitter-git-rebase) | unstable | `H J ` | @gbprod
|
||||||
[gitattributes](https://github.com/tree-sitter-grammars/tree-sitter-gitattributes) | unstable | `H JL` | @ObserverOfTime
|
[gitattributes](https://github.com/tree-sitter-grammars/tree-sitter-gitattributes) | unstable | `H JL` | @ObserverOfTime
|
||||||
|
|
|
||||||
|
|
@ -660,10 +660,10 @@ return {
|
||||||
},
|
},
|
||||||
gdshader = {
|
gdshader = {
|
||||||
install_info = {
|
install_info = {
|
||||||
revision = '14e834063e136fa69b6d91f711f4f1981acf424b',
|
revision = '0dab84552f7d33a0084b469b7e38237302bf8e91',
|
||||||
url = 'https://github.com/GodOfAvacyn/tree-sitter-gdshader',
|
url = 'https://github.com/airblast-dev/tree-sitter-gdshader',
|
||||||
},
|
},
|
||||||
maintainers = { '@godofavacyn' },
|
maintainers = { '@airblast-dev' },
|
||||||
tier = 2,
|
tier = 2,
|
||||||
},
|
},
|
||||||
git_config = {
|
git_config = {
|
||||||
|
|
|
||||||
|
|
@ -1,38 +1,14 @@
|
||||||
[
|
[
|
||||||
"render_mode"
|
|
||||||
"shader_type"
|
|
||||||
"group_uniforms"
|
|
||||||
"global"
|
"global"
|
||||||
"instance"
|
"group_uniforms"
|
||||||
|
"uniform"
|
||||||
"const"
|
"const"
|
||||||
"varying"
|
"varying"
|
||||||
"uniform"
|
"discard"
|
||||||
|
"render_mode"
|
||||||
|
"shader_type"
|
||||||
] @keyword
|
] @keyword
|
||||||
|
|
||||||
"struct" @keyword.type
|
|
||||||
|
|
||||||
[
|
|
||||||
(precision_qualifier)
|
|
||||||
(interpolation_qualifier)
|
|
||||||
] @keyword.modifier
|
|
||||||
|
|
||||||
[
|
|
||||||
"in"
|
|
||||||
"out"
|
|
||||||
"inout"
|
|
||||||
] @keyword.modifier
|
|
||||||
|
|
||||||
[
|
|
||||||
"while"
|
|
||||||
"for"
|
|
||||||
] @keyword.repeat
|
|
||||||
|
|
||||||
[
|
|
||||||
"continue"
|
|
||||||
"break"
|
|
||||||
"return"
|
|
||||||
] @keyword.return
|
|
||||||
|
|
||||||
[
|
[
|
||||||
"if"
|
"if"
|
||||||
"else"
|
"else"
|
||||||
|
|
@ -41,51 +17,42 @@
|
||||||
"default"
|
"default"
|
||||||
] @keyword.conditional
|
] @keyword.conditional
|
||||||
|
|
||||||
|
"struct" @keyword.type
|
||||||
|
|
||||||
|
"return" @keyword.return
|
||||||
|
|
||||||
[
|
[
|
||||||
"#"
|
(parameter_qualifier)
|
||||||
"include"
|
(interpolation_specifier)
|
||||||
|
(precision_specifier)
|
||||||
|
] @keyword
|
||||||
|
|
||||||
|
[
|
||||||
|
"while"
|
||||||
|
"for"
|
||||||
|
"do"
|
||||||
|
"continue"
|
||||||
|
"break"
|
||||||
|
] @keyword.repeat
|
||||||
|
|
||||||
|
[
|
||||||
|
"#undef"
|
||||||
|
"#include"
|
||||||
|
"#if"
|
||||||
|
"#ifdef"
|
||||||
|
"#ifndef"
|
||||||
|
"#elif"
|
||||||
|
"#else"
|
||||||
|
"#endif"
|
||||||
] @keyword.directive
|
] @keyword.directive
|
||||||
|
|
||||||
(string) @string
|
"#define" @keyword.directive.define
|
||||||
|
|
||||||
[
|
[
|
||||||
"="
|
|
||||||
"+="
|
|
||||||
"-="
|
|
||||||
"!"
|
|
||||||
"~"
|
|
||||||
"+"
|
|
||||||
"-"
|
|
||||||
"*"
|
|
||||||
"/"
|
|
||||||
"%"
|
|
||||||
"||"
|
|
||||||
"&&"
|
|
||||||
"|"
|
|
||||||
"^"
|
|
||||||
"&"
|
|
||||||
"=="
|
|
||||||
"!="
|
|
||||||
">"
|
|
||||||
">="
|
|
||||||
"<="
|
|
||||||
"<"
|
|
||||||
"<<"
|
|
||||||
">>"
|
|
||||||
"++"
|
|
||||||
"--"
|
|
||||||
] @operator
|
|
||||||
|
|
||||||
(boolean) @boolean
|
|
||||||
|
|
||||||
(integer) @number
|
|
||||||
|
|
||||||
(float) @number.float
|
|
||||||
|
|
||||||
[
|
|
||||||
"."
|
|
||||||
","
|
|
||||||
";"
|
";"
|
||||||
|
"."
|
||||||
|
":"
|
||||||
|
","
|
||||||
] @punctuation.delimiter
|
] @punctuation.delimiter
|
||||||
|
|
||||||
[
|
[
|
||||||
|
|
@ -97,46 +64,201 @@
|
||||||
"}"
|
"}"
|
||||||
] @punctuation.bracket
|
] @punctuation.bracket
|
||||||
|
|
||||||
(builtin_type) @type.builtin
|
|
||||||
|
|
||||||
(ident_type) @type.definition
|
|
||||||
|
|
||||||
[
|
[
|
||||||
(shader_type)
|
"="
|
||||||
(render_mode)
|
"-"
|
||||||
(hint_name)
|
"*"
|
||||||
] @attribute
|
"/"
|
||||||
|
"+"
|
||||||
|
"%"
|
||||||
|
"~"
|
||||||
|
"|"
|
||||||
|
"&"
|
||||||
|
"^"
|
||||||
|
"<<"
|
||||||
|
">>"
|
||||||
|
"<"
|
||||||
|
"<="
|
||||||
|
">="
|
||||||
|
">"
|
||||||
|
"=="
|
||||||
|
"!="
|
||||||
|
"!"
|
||||||
|
"&&"
|
||||||
|
"||"
|
||||||
|
"-="
|
||||||
|
"+="
|
||||||
|
"*="
|
||||||
|
"/="
|
||||||
|
"%="
|
||||||
|
"|="
|
||||||
|
"&="
|
||||||
|
"^="
|
||||||
|
">>="
|
||||||
|
"<<="
|
||||||
|
"--"
|
||||||
|
"++"
|
||||||
|
] @operator
|
||||||
|
|
||||||
(builtin_variable) @constant.builtin
|
(comma_expression
|
||||||
|
operator: "," @operator)
|
||||||
|
|
||||||
(builtin_function) @function.builtin
|
(ternary_expression
|
||||||
|
[
|
||||||
|
":"
|
||||||
|
"?"
|
||||||
|
]) @keyword.conditional.ternary
|
||||||
|
|
||||||
(group_uniforms_declaration
|
(primitive_type) @type.builtin
|
||||||
group_name: (ident) @property
|
|
||||||
subgroup_name: (ident) @property)
|
|
||||||
|
|
||||||
(struct_declaration
|
(type_identifier) @type
|
||||||
name: (ident) @type)
|
|
||||||
|
|
||||||
(struct_member
|
(integer) @number
|
||||||
name: (ident) @property)
|
|
||||||
|
|
||||||
(function_declaration
|
(float) @number.float
|
||||||
name: (ident) @function)
|
|
||||||
|
|
||||||
(parameter
|
(boolean) @boolean
|
||||||
name: (ident) @variable.parameter)
|
|
||||||
|
|
||||||
(member_expr
|
(case_statement
|
||||||
member: (ident) @property)
|
value: (identifier) @constant)
|
||||||
|
|
||||||
(call_expr
|
(shader_type_statement
|
||||||
function: [
|
(shader_type) @keyword
|
||||||
(ident)
|
(#any-of? @keyword "spatial" "canvas_item" "particle" "sky" "fog"))
|
||||||
(builtin_type)
|
|
||||||
] @function)
|
|
||||||
|
|
||||||
(call_expr
|
; spatial
|
||||||
function: (builtin_type) @function.call)
|
(source_file
|
||||||
|
(shader_type_statement
|
||||||
|
(shader_type) @_shader_type)
|
||||||
|
(#eq? @_shader_type "spatial")
|
||||||
|
(render_mode_statement
|
||||||
|
(render_mode) @keyword)
|
||||||
|
(#any-of? @keyword
|
||||||
|
"blend_mix" "blend_add" "blend_sub" "blend_mul" "blend_premul_alpha" "depth_draw_opaque"
|
||||||
|
"depth_draw_always" "depth_draw_never" "depth_prepass_alpha" "depth_test_disabled"
|
||||||
|
"sss_mode_skin" "cull_back" "cull_front" "cull_disabled" "unshaded" "wireframe"
|
||||||
|
"debug_shadow_splits" "diffuse_burley" "diffuse_lambert" "diffuse_lambert_wrap" "diffuse_toon"
|
||||||
|
"specular_schlick_ggx" "specular_toon" "specular_disabled" "skip_vertex_transform"
|
||||||
|
"world_vertex_coords" "ensure_correct_normals" "shadows_disabled" "ambient_light_disabled"
|
||||||
|
"shadow_to_opacity" "vertex_lighting" "particle_trails" "alpha_to_coverage"
|
||||||
|
"alpha_to_coverage_and_one" "fog_disabled"))
|
||||||
|
|
||||||
|
; canvas_item
|
||||||
|
(source_file
|
||||||
|
(shader_type_statement
|
||||||
|
(shader_type) @_shader_type)
|
||||||
|
(#eq? @_shader_type "canvas_item")
|
||||||
|
(render_mode_statement
|
||||||
|
(render_mode) @keyword)
|
||||||
|
(#any-of? @keyword
|
||||||
|
"blend_mix" "blend_add" "blend_sub" "blend_mul" "blend_premul_alpha" "blend_disabled" "unshaded"
|
||||||
|
"light_only" "skip_vertex_transform" "world_vertex_coords"))
|
||||||
|
|
||||||
|
; particle
|
||||||
|
(source_file
|
||||||
|
(shader_type_statement
|
||||||
|
(shader_type) @_shader_type)
|
||||||
|
(#eq? @_shader_type "particle")
|
||||||
|
(render_mode_statement
|
||||||
|
(render_mode) @keyword)
|
||||||
|
(#any-of? @keyword "keep_data" "disable_force" "disable_velocity" "collision_use_scale"))
|
||||||
|
|
||||||
|
; sky
|
||||||
|
(source_file
|
||||||
|
(shader_type_statement
|
||||||
|
(shader_type) @_shader_type)
|
||||||
|
(#eq? @_shader_type "sky")
|
||||||
|
(render_mode_statement
|
||||||
|
(render_mode) @keyword)
|
||||||
|
(#any-of? @keyword "use_half_res_pass" "use_quarter_res_pass" "disable_fog"))
|
||||||
|
|
||||||
|
; fog has no render modes
|
||||||
|
(identifier) @variable
|
||||||
|
|
||||||
|
(struct_definition
|
||||||
|
name: (identifier) @type)
|
||||||
|
|
||||||
|
(struct_definition
|
||||||
|
(struct_fields
|
||||||
|
(field_definition
|
||||||
|
declarator: [
|
||||||
|
(identifier) @variable.member
|
||||||
|
(array_declarator
|
||||||
|
declarator: (identifier) @variable.member)
|
||||||
|
])))
|
||||||
|
|
||||||
|
(preproc_include
|
||||||
|
path: (_) @string)
|
||||||
|
|
||||||
|
(preproc_undef
|
||||||
|
argument: (identifier) @constant)
|
||||||
|
|
||||||
(comment) @comment @spell
|
(comment) @comment @spell
|
||||||
|
|
||||||
|
; technically an injection site for bbcode TODO: maybe add it?
|
||||||
|
((comment) @comment.documentation @spell
|
||||||
|
(#lua-match? @comment.documentation "^/%*%*[^/]"))
|
||||||
|
|
||||||
|
(parameter_declaration
|
||||||
|
declarator: [
|
||||||
|
(identifier) @variable.parameter
|
||||||
|
(array_declarator
|
||||||
|
declarator: (identifier) @variable.parameter)
|
||||||
|
])
|
||||||
|
|
||||||
|
(function_definition
|
||||||
|
declarator: (identifier) @function)
|
||||||
|
|
||||||
|
(call_expression
|
||||||
|
function: (identifier) @function.call)
|
||||||
|
|
||||||
|
(field_expression
|
||||||
|
field: (_) @property)
|
||||||
|
|
||||||
|
((call_expression
|
||||||
|
function: (identifier) @function.builtin)
|
||||||
|
(#any-of? @function.builtin
|
||||||
|
; taken from: https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/shader_functions.html
|
||||||
|
; trigonometric builtins
|
||||||
|
"radians" "degrees" "sin" "cos" "tan" "asin" "acos" "atan" "sinh" "cosh" "tanh" "asinh" "acosh"
|
||||||
|
"atanh"
|
||||||
|
; exponential and math builtins
|
||||||
|
"pow" "exp" "exp2" "log" "log2" "sqrt" "inversesqrt" "abs" "sign" "floor" "round" "roundEven"
|
||||||
|
"trunc" "ceil" "fract" "mod" "modf" "min" "max" "clamp" "mix" "fma" "step" "smoothstep" "isnan"
|
||||||
|
"isinf" "floatBitsToInt" "floatBitsToUint" "intBitsToFloat" "uintBitsToFloat"
|
||||||
|
; geometric builtins
|
||||||
|
"length" "distance" "dot" "cross" "normalize" "reflect" "refract" "faceforward" "matrixCompMult"
|
||||||
|
"outerProduct" "transpose" "determinant" "inverse"
|
||||||
|
; comparison builtins
|
||||||
|
"lessThan" "greaterThan" "lessThanEqual" "equal" "notEqual" "any" "all" "not"
|
||||||
|
; texture builtins
|
||||||
|
"textureSize" "textureQueryLod" "textureQueryLevels" "texture" "textureProj" "textureLod"
|
||||||
|
"textureProjLod" "textureGrad" "textureProjGrad" "texelFetch" "textureGather" "dFdx"
|
||||||
|
"dFdxCoarse" "dFdxFine" "dFdy" "dFdyCoarse" "dFdyFine" "fwidth" "fwidthCoarse" "fwidthFine"
|
||||||
|
; packing unpacking builtins
|
||||||
|
"packHalf2x16" "unpackHalf2x16" "packUnorm2x16" "unpackUnorm2x16" "packSnorm2x16"
|
||||||
|
"unpackSnorm2x16" "packUnorm4x8" "unpackUnorm4x8" "packSnorm4x8" "unpackSnorm4x8"
|
||||||
|
; bitwise builtins
|
||||||
|
"bitfieldExtract" "bitfieldInsert" "bitfieldReverse" "bitCount" "findLSB" "findMSB" "imulExtend"
|
||||||
|
"umulExtend" "uaddCarry" "usubBorrow" "ldexp" "frexp"))
|
||||||
|
|
||||||
|
; assume all uppercase variables as constants
|
||||||
|
((identifier) @constant
|
||||||
|
(#lua-match? @constant "^[A-Z][A-Z0-9_]+$"))
|
||||||
|
|
||||||
|
((identifier) @constant.builtin
|
||||||
|
(#any-of? @constant.builtin
|
||||||
|
; common / declared in all shader types
|
||||||
|
"PI" "E" "TAU" "CURRENT_RENDERER" "RENDERER_COMPATIBILITY" "RENDERER_MOBILE"
|
||||||
|
"RENDERER_FORWARD_PLUS"; TODO: add more builtins
|
||||||
|
))
|
||||||
|
|
||||||
|
((identifier) @variable.builtin
|
||||||
|
(#eq? @variable.builtin "TIME"))
|
||||||
|
|
||||||
|
(type_hint
|
||||||
|
[
|
||||||
|
(identifier) @attribute
|
||||||
|
(call_expression
|
||||||
|
function: (_) @attribute)
|
||||||
|
])
|
||||||
|
|
|
||||||
26
tests/query/highlights/gdshader/test.gdshader
Normal file
26
tests/query/highlights/gdshader/test.gdshader
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
shader_type spatial;
|
||||||
|
|
||||||
|
render_mode unshaded, wireframe;
|
||||||
|
// <- @keyword
|
||||||
|
// ^^^^^^^^ @keyword
|
||||||
|
// ^^^^^^^^^ @keyword
|
||||||
|
|
||||||
|
/** My Doc comment*/
|
||||||
|
//^^^^^^^^^^^^^^^^^^ @comment.documentation
|
||||||
|
uniform float MY_VALUE: interesting_hint = 1.0;
|
||||||
|
//<- @keyword
|
||||||
|
// ^^^^^ type.builtin
|
||||||
|
// ^^^^^^^^ constant
|
||||||
|
// ^ @punctuation.delimiter
|
||||||
|
// ^^^^^^^^^^^^^^^^ @attribute
|
||||||
|
// ^ @operator
|
||||||
|
// ^^^ @number.float
|
||||||
|
// ^ punctuation.delimiter
|
||||||
|
|
||||||
|
void vertex() {
|
||||||
|
// <- type.builtin
|
||||||
|
// ^^^^^^ @function
|
||||||
|
do {} while (123< 2231);
|
||||||
|
//^^ keyword.repeat
|
||||||
|
// ^^^^^ keyword.repeat
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue