Skip to content

Commit aa8cebf

Browse files
authored
feat(vscode): Grammar for basic syntax highlighting (#43)
1 parent 91edd88 commit aa8cebf

File tree

4 files changed

+66
-2
lines changed

4 files changed

+66
-2
lines changed

vscode-extension/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/node_modules/
22
/.vscode-test/
33
*.vsix
4+
*.tmLanguage.json
45

56
# These files are copied from the repo root during CI
67
/cosign.pub

vscode-extension/package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vscode-extension/package.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"format:check": "prettier --check .",
1414
"test": "vscode-test",
1515
"typecheck": "tsc",
16-
"prepackage": "cp ../cosign.pub ../CHANGELOG.md ../LICENSE .",
16+
"prepackage": "cp ../cosign.pub ../CHANGELOG.md ../LICENSE . && npx js-yaml syntaxes/gdshader.tmLanguage.yaml > syntaxes/gdshader.tmLanguage.json",
1717
"package": "npm run prepackage && vsce package",
1818
"publish": "npm run prepackage && vsce publish"
1919
},
@@ -37,16 +37,19 @@
3737
"@vscode/vsce": "^3.6.0",
3838
"eslint": "^9.30.0",
3939
"eslint-plugin-headers": "^1.3.3",
40+
"js-yaml": "^4.1.0",
4041
"prettier": "^3.6.2"
4142
},
4243
"files": [
4344
"src",
4445
"node_modules",
46+
"syntaxes/*.json",
4547
"cosign.pub",
4648
"icon.png",
4749
"language-configuration.json",
4850
"README.md",
49-
"LICENSE"
51+
"LICENSE",
52+
"CHANGELOG.md"
5053
],
5154
"publisher": "armsnyder",
5255
"displayName": "GDShader",
@@ -107,6 +110,13 @@
107110
"configuration": "./language-configuration.json"
108111
}
109112
],
113+
"grammars": [
114+
{
115+
"language": "gdshader",
116+
"scopeName": "source.gdshader",
117+
"path": "./syntaxes/gdshader.tmLanguage.json"
118+
}
119+
],
110120
"commands": [
111121
{
112122
"command": "gdshader.restartServer",
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# yaml-language-server: $schema=https://www.schemastore.org/tmlanguage.json
2+
3+
scopeName: source.gdshader
4+
5+
patterns:
6+
- name: comment.line.double-slash.gdshader
7+
match: "//.*"
8+
9+
- name: comment.block.gdshader
10+
begin: '/\*'
11+
end: '\*/'
12+
13+
- name: keyword.control.gdshader
14+
match: \b(if|else|for|while|do|switch|case|break|continue|return|discard)\b
15+
16+
- name: support.type.datatype.gdshader
17+
match: \b(void|bool|u?int|float|[biu]?vec[234]|mat[234]|sampler[23]D(Array)?|samplerCube(Array)?|samplerExternalOES|[iu]sampler[23]D)\b
18+
19+
- name: storage.modifier.gdshader
20+
match: \b(const|uniform|instance|global|in|out|inout|varying)\b
21+
22+
- name: keyword.other.gdshader
23+
match: \b(struct|group_uniforms|shader_type|render_mode)\b
24+
25+
- name: keyword.control.preprocessor.gdshader
26+
match: '(?<=^\s*)#\w+'
27+
28+
# TODO(asnyder): Add support types for other built-ins, like shader types and render modes.
29+
30+
- name: support.type.hint.gdshader
31+
match: '(?<=\buniform\b.+:.*)((hint|filter|repeat)(_[a-z]+)+|source_color)\b'
32+
33+
- name: keyword.operator.gdshader
34+
match: '[+\-*/%=!<>&|^~?:]+'
35+
36+
- name: constant.numeric.gdshader
37+
match: \b(0x)?\d+(\.\d+)?([eE][+\-]?\d+)?\b
38+
39+
- name: entity.name.function.gdshader
40+
match: \b([a-zA-Z_][a-zA-Z0-9_]*)(?=\s*\()
41+
42+
- name: entity.name.type.struct.gdshader
43+
match: \b(?<=struct\s+)([a-zA-Z_][a-zA-Z0-9_]*)\b(?=\s*\{)
44+
45+
- name: constant.language.gdshader
46+
match: \b(true|false|[A-Z_][A-Z0-9_]*)\b
47+
48+
- name: entity.name.type.gdshader
49+
match: \b([a-zA-Z_][a-zA-Z0-9_]*)(?=\s+[a-zA-Z_][a-zA-Z0-9_]*\s*\W)
50+
51+
- name: variable.name.gdshader
52+
match: \b([a-zA-Z_][a-zA-Z0-9_]*)\b

0 commit comments

Comments
 (0)