diff options
author | rhysd <lin90162@yahoo.co.jp> | 2023-10-03 01:52:06 +0900 |
---|---|---|
committer | Martin Nordholts <enselic@gmail.com> | 2023-10-04 09:09:54 +0200 |
commit | d376a4b631688dc37a9d5c8a0faa03a4e7bfc32d (patch) | |
tree | ecb4b101ca4e0cbfcac47864b62b3e52817e17a5 | |
parent | 6e5fd368825ca8db401611829b342ea2585d1ff5 (diff) |
Add support for WGSL
-rw-r--r-- | .gitmodules | 3 | ||||
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | assets/acknowledgements.bin | bin | 9823 -> 9795 bytes | |||
-rw-r--r-- | assets/syntaxes.bin | bin | 908131 -> 920106 bytes | |||
m--------- | assets/syntaxes/02_Extra/vscode-wgsl | 0 | ||||
-rw-r--r-- | assets/syntaxes/02_Extra/wgsl.sublime-syntax | 198 | ||||
-rw-r--r-- | doc/assets.md | 1 | ||||
-rw-r--r-- | tests/syntax-tests/highlighted/WGSL/test.wgsl | 20 | ||||
-rw-r--r-- | tests/syntax-tests/source/WGSL/LICENSE.md | 5 | ||||
-rw-r--r-- | tests/syntax-tests/source/WGSL/test.wgsl | 20 |
10 files changed, 248 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules index 5144482d..7c8a7724 100644 --- a/.gitmodules +++ b/.gitmodules @@ -257,3 +257,6 @@ [submodule "assets/syntaxes/02_Extra/NSIS"] path = assets/syntaxes/02_Extra/NSIS url = https://github.com/SublimeText/NSIS +[submodule "assets/syntaxes/02_Extra/vscode-wgsl"] + path = assets/syntaxes/02_Extra/vscode-wgsl + url = https://github.com/PolyMeilex/vscode-wgsl.git diff --git a/CHANGELOG.md b/CHANGELOG.md index d921f9bb..dd4afeb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - Replaced quotes with double quotes so fzf integration example script works on windows and linux. see #2095 (@johnmatthiggins) - Associate `ksh` files with `bash` syntax, see #2633 (@johnmatthiggins) - Associate `ron` files with `rust` syntax, see #2427 (@YeungOnion) +- Add support for [WebGPU Shader Language](https://www.w3.org/TR/WGSL/), see #2692 (@rhysd) ## Themes diff --git a/assets/acknowledgements.bin b/assets/acknowledgements.bin Binary files differindex 3e6c0376..578a4f82 100644 --- a/assets/acknowledgements.bin +++ b/assets/acknowledgements.bin diff --git a/assets/syntaxes.bin b/assets/syntaxes.bin Binary files differindex 04e7eefe..9e0d02d3 100644 --- a/assets/syntaxes.bin +++ b/assets/syntaxes.bin diff --git a/assets/syntaxes/02_Extra/vscode-wgsl b/assets/syntaxes/02_Extra/vscode-wgsl new file mode 160000 +Subproject acf26718d7a327377641e31d8f9a9dab376efa8 diff --git a/assets/syntaxes/02_Extra/wgsl.sublime-syntax b/assets/syntaxes/02_Extra/wgsl.sublime-syntax new file mode 100644 index 00000000..4a526114 --- /dev/null +++ b/assets/syntaxes/02_Extra/wgsl.sublime-syntax @@ -0,0 +1,198 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/syntax.html +name: WGSL +file_extensions: + - wgsl +scope: source.wgsl +contexts: + main: + - include: line_comments + - include: block_comments + - include: keywords + - include: attributes + - include: functions + - include: function_calls + - include: constants + - include: types + - include: variables + - include: punctuation + attributes: + - match: '(@)([A-Za-z_]+)' + comment: attribute declaration + scope: meta.attribute.wgsl + captures: + 1: keyword.operator.attribute.at + 2: entity.name.attribute.wgsl + block_comments: + - match: /\*\*/ + comment: empty block comments + scope: comment.block.wgsl + - match: /\*\* + comment: block documentation comments + push: + - meta_scope: comment.block.documentation.wgsl + - match: \*/ + pop: true + - include: block_comments + - match: /\*(?!\*) + comment: block comments + push: + - meta_scope: comment.block.wgsl + - match: \*/ + pop: true + - include: block_comments + constants: + - match: '(-?\b[0-9][0-9]*\.[0-9][0-9]*)([eE][+-]?[0-9]+)?\b' + comment: decimal float literal + scope: constant.numeric.float.wgsl + - match: '-?\b0x[0-9a-fA-F]+\b|\b0\b|-?\b[1-9][0-9]*\b' + comment: int literal + scope: constant.numeric.decimal.wgsl + - match: '\b0x[0-9a-fA-F]+u\b|\b0u\b|\b[1-9][0-9]*u\b' + comment: uint literal + scope: constant.numeric.decimal.wgsl + - match: \b(true|false)\b + comment: boolean constant + scope: constant.language.boolean.wgsl + function_calls: + - match: '([A-Za-z0-9_]+)(\()' + comment: function/method calls + captures: + 1: entity.name.function.wgsl + 2: punctuation.brackets.round.wgsl + push: + - meta_scope: meta.function.call.wgsl + - match: \) + captures: + 0: punctuation.brackets.round.wgsl + pop: true + - include: line_comments + - include: block_comments + - include: keywords + - include: attributes + - include: function_calls + - include: constants + - include: types + - include: variables + - include: punctuation + functions: + - match: '\b(fn)\s+([A-Za-z0-9_]+)((\()|(<))' + comment: function definition + captures: + 1: keyword.other.fn.wgsl + 2: entity.name.function.wgsl + 4: punctuation.brackets.round.wgsl + push: + - meta_scope: meta.function.definition.wgsl + - match: '\{' + captures: + 0: punctuation.brackets.curly.wgsl + pop: true + - include: line_comments + - include: block_comments + - include: keywords + - include: attributes + - include: function_calls + - include: constants + - include: types + - include: variables + - include: punctuation + keywords: + - match: \b(bitcast|block|break|case|continue|continuing|default|discard|else|elseif|enable|fallthrough|for|function|if|loop|private|read|read_write|return|storage|switch|uniform|while|workgroup|write)\b + comment: other keywords + scope: keyword.control.wgsl + - match: \b(asm|const|do|enum|handle|mat|premerge|regardless|typedef|unless|using|vec|void)\b + comment: reserved keywords + scope: keyword.control.wgsl + - match: \b(let|var)\b + comment: storage keywords + scope: keyword.other.wgsl storage.type.wgsl + - match: \b(type)\b + comment: type keyword + scope: keyword.declaration.type.wgsl storage.type.wgsl + - match: \b(enum)\b + comment: enum keyword + scope: keyword.declaration.enum.wgsl storage.type.wgsl + - match: \b(struct)\b + comment: struct keyword + scope: keyword.declaration.struct.wgsl storage.type.wgsl + - match: \bfn\b + comment: fn + scope: keyword.other.fn.wgsl + - match: (\^|\||\|\||&&|<<|>>|!)(?!=) + comment: logical operators + scope: keyword.operator.logical.wgsl + - match: '&(?![&=])' + comment: logical AND, borrow references + scope: keyword.operator.borrow.and.wgsl + - match: (\+=|-=|\*=|/=|%=|\^=|&=|\|=|<<=|>>=) + comment: assignment operators + scope: keyword.operator.assignment.wgsl + - match: '(?<![<>])=(?!=|>)' + comment: single equal + scope: keyword.operator.assignment.equal.wgsl + - match: (=(=)?(?!>)|!=|<=|(?<!=)>=) + comment: comparison operators + scope: keyword.operator.comparison.wgsl + - match: '(([+%]|(\*(?!\w)))(?!=))|(-(?!>))|(/(?!/))' + comment: math operators + scope: keyword.operator.math.wgsl + - match: \.(?!\.) + comment: dot access + scope: keyword.operator.access.dot.wgsl + - match: '->' + comment: dashrocket, skinny arrow + scope: keyword.operator.arrow.skinny.wgsl + line_comments: + - match: \s*//.* + comment: single line comment + scope: comment.line.double-slash.wgsl + punctuation: + - match: ',' + comment: comma + scope: punctuation.comma.wgsl + - match: '[{}]' + comment: curly braces + scope: punctuation.brackets.curly.wgsl + - match: '[()]' + comment: parentheses, round brackets + scope: punctuation.brackets.round.wgsl + - match: ; + comment: semicolon + scope: punctuation.semi.wgsl + - match: '[\[\]]' + comment: square brackets + scope: punctuation.brackets.square.wgsl + - match: '(?<![=-])[<>]' + comment: angle brackets + scope: punctuation.brackets.angle.wgsl + types: + - match: \b(bool|i32|u32|f32)\b + comment: scalar Types + scope: storage.type.wgsl + - match: \b(i64|u64|f64)\b + comment: reserved scalar Types + scope: storage.type.wgsl + - match: \b(vec2i|vec3i|vec4i|vec2u|vec3u|vec4u|vec2f|vec3f|vec4f|vec2h|vec3h|vec4h)\b + comment: vector type aliasses + scope: storage.type.wgsl + - match: \b(mat2x2f|mat2x3f|mat2x4f|mat3x2f|mat3x3f|mat3x4f|mat4x2f|mat4x3f|mat4x4f|mat2x2h|mat2x3h|mat2x4h|mat3x2h|mat3x3h|mat3x4h|mat4x2h|mat4x3h|mat4x4h)\b + comment: matrix type aliasses + scope: storage.type.wgsl + - match: '\b(vec[2-4]|mat[2-4]x[2-4])\b' + comment: vector/matrix types + scope: storage.type.wgsl + - match: \b(atomic)\b + comment: atomic types + scope: storage.type.wgsl + - match: \b(array)\b + comment: array types + scope: storage.type.wgsl + - match: '\b([A-Z][A-Za-z0-9]*)\b' + comment: Custom type + scope: entity.name.type.wgsl + variables: + - match: '\b(?<!(?<!\.)\.)(?:r#(?!(crate|[Ss]elf|super)))?[a-z0-9_]+\b' + comment: variables + scope: variable.other.wgsl diff --git a/doc/assets.md b/doc/assets.md index 7403e58d..8641188c 100644 --- a/doc/assets.md +++ b/doc/assets.md @@ -84,6 +84,7 @@ The following files have been manually modified after converting from a `.tmLang * `Org mode.sublime-syntax` => removed `task` file type. * `Robot.sublime_syntax` => changed name to "Robot Framework", added `.resource` extension. * `SML.sublime_syntax` => removed `ml` file type. +* `wgsl.sublime-syntax` => added `wgsl` file extension. ### Non-submodule additions diff --git a/tests/syntax-tests/highlighted/WGSL/test.wgsl b/tests/syntax-tests/highlighted/WGSL/test.wgsl new file mode 100644 index 00000000..9ebcd5d0 --- /dev/null +++ b/tests/syntax-tests/highlighted/WGSL/test.wgsl @@ -0,0 +1,20 @@ +[3;38;2;102;217;239mstruct[0m[38;2;248;248;242m [0m[38;2;166;226;46mVertexOut[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m +[38;2;248;248;242m [0m[38;2;249;38;114m@[0m[38;2;166;226;46mbuiltin[0m[38;2;248;248;242m([0m[38;2;255;255;255mposition[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;255;255;255mposition[0m[38;2;248;248;242m : [0m[3;38;2;102;217;239mvec4f[0m[38;2;248;248;242m,[0m +[38;2;248;248;242m [0m[38;2;249;38;114m@[0m[38;2;166;226;46mlocation[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;255;255;255mcolor[0m[38;2;248;248;242m : [0m[3;38;2;102;217;239mvec4f[0m +[38;2;248;248;242m}[0m + +[38;2;249;38;114m@[0m[38;2;166;226;46mvertex[0m +[38;2;249;38;114mfn[0m[38;2;248;248;242m [0m[38;2;166;226;46mvertex_main[0m[38;2;248;248;242m([0m[38;2;249;38;114m@[0m[38;2;166;226;46mlocation[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;255;255;255mposition[0m[38;2;248;248;242m: [0m[3;38;2;102;217;239mvec4f[0m[38;2;248;248;242m,[0m +[38;2;248;248;242m [0m[38;2;249;38;114m@[0m[38;2;166;226;46mlocation[0m[38;2;248;248;242m([0m[38;2;190;132;255m1[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;255;255;255mcolor[0m[38;2;248;248;242m: [0m[3;38;2;102;217;239mvec4f[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114m->[0m[38;2;248;248;242m [0m[38;2;166;226;46mVertexOut[0m +[38;2;248;248;242m{[0m +[38;2;248;248;242m [0m[3;38;2;102;217;239mvar[0m[38;2;248;248;242m [0m[38;2;255;255;255moutput[0m[38;2;248;248;242m : [0m[38;2;166;226;46mVertexOut[0m[38;2;248;248;242m;[0m +[38;2;248;248;242m [0m[38;2;255;255;255moutput[0m[38;2;249;38;114m.[0m[38;2;248;248;242mposition [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;255;255;255mposition[0m[38;2;248;248;242m;[0m +[38;2;248;248;242m [0m[38;2;255;255;255moutput[0m[38;2;249;38;114m.[0m[38;2;248;248;242mcolor [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;255;255;255mcolor[0m[38;2;248;248;242m;[0m +[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;255;255;255moutput[0m[38;2;248;248;242m;[0m +[38;2;248;248;242m}[0m + +[38;2;249;38;114m@[0m[38;2;166;226;46mfragment[0m +[38;2;249;38;114mfn[0m[38;2;248;248;242m [0m[38;2;166;226;46mfragment_main[0m[38;2;248;248;242m([0m[38;2;248;248;242mfragData: [0m[38;2;166;226;46mVertexOut[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114m->[0m[38;2;248;248;242m [0m[38;2;249;38;114m@[0m[38;2;166;226;46mlocation[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[3;38;2;102;217;239mvec4f[0m +[38;2;248;248;242m{[0m +[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m fragData[0m[38;2;249;38;114m.[0m[38;2;248;248;242mcolor[0m[38;2;248;248;242m;[0m +[38;2;248;248;242m}[0m diff --git a/tests/syntax-tests/source/WGSL/LICENSE.md b/tests/syntax-tests/source/WGSL/LICENSE.md new file mode 100644 index 00000000..da812527 --- /dev/null +++ b/tests/syntax-tests/source/WGSL/LICENSE.md @@ -0,0 +1,5 @@ +The `test.wgsl` file has been added from https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API under the following license: + +``` +Any copyright is dedicated to the Public Domain: https://creativecommons.org/publicdomain/zero/1.0/ +``` diff --git a/tests/syntax-tests/source/WGSL/test.wgsl b/tests/syntax-tests/source/WGSL/test.wgsl new file mode 100644 index 00000000..796a94e8 --- /dev/null +++ b/tests/syntax-tests/source/WGSL/test.wgsl @@ -0,0 +1,20 @@ +struct VertexOut { + @builtin(position) position : vec4f, + @location(0) color : vec4f +} + +@vertex +fn vertex_main(@location(0) position: vec4f, + @location(1) color: vec4f) -> VertexOut +{ + var output : VertexOut; + output.position = position; + output.color = color; + return output; +} + +@fragment +fn fragment_main(fragData: VertexOut) -> @location(0) vec4f +{ + return fragData.color; +} |