aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml14
-rw-r--r--runtime/queries/gn/highlights.scm42
-rw-r--r--runtime/queries/gn/injections.scm15
-rw-r--r--runtime/queries/gn/locals.scm16
5 files changed, 88 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 9c55b4a0..a7d45a46 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -54,6 +54,7 @@
| git-rebase | ✓ | | | |
| gleam | ✓ | ✓ | | `gleam` |
| glsl | ✓ | ✓ | ✓ | |
+| gn | ✓ | | | |
| go | ✓ | ✓ | ✓ | `gopls`, `golangci-lint-langserver` |
| godot-resource | ✓ | | | |
| gomod | ✓ | | | `gopls` |
diff --git a/languages.toml b/languages.toml
index 3456209a..3dedf671 100644
--- a/languages.toml
+++ b/languages.toml
@@ -2741,6 +2741,20 @@ name = "just"
source = { git = "https://github.com/IndianBoy42/tree-sitter-just", rev = "8af0aab79854aaf25b620a52c39485849922f766" }
[[language]]
+name = "gn"
+scope = "source.gn"
+injection-regex = "gn"
+file-types = ["gn", "gni"]
+roots = []
+comment-token = "#"
+indent = { tab-width = 2, unit = " " }
+formatter = { command = "gn", args = ["format", "--stdin"] }
+
+[[grammar]]
+name = "gn"
+source = { git = "https://github.com/willcassella/tree-sitter-gn", rev = "e18d6e36a79b20dafb58f19d407bd38b0e60260e" }
+
+[[language]]
name = "blueprint"
scope = "source.blueprint"
injection-regex = "blueprint"
diff --git a/runtime/queries/gn/highlights.scm b/runtime/queries/gn/highlights.scm
new file mode 100644
index 00000000..ff619db1
--- /dev/null
+++ b/runtime/queries/gn/highlights.scm
@@ -0,0 +1,42 @@
+; Copyright (C) 2021 Will Cassella (github@willcassella.com)
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+; http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+(identifier) @variable.builtin
+
+(scope_access field: (_) @variable.other.member)
+
+(call target: (_) @function)
+
+[ "if" "else" ] @keyword.control.conditional
+
+[
+ (assign_op)
+ (arithmetic_binary_op)
+ (comparison_binary_op)
+ (equivalence_binary_op)
+ (logical_and_binary_op)
+ (logical_or_binary_op)
+ (negation_unary_op)
+] @operator
+
+[ "(" ")" "[" "]" "{" "}" ] @punctuation.bracket
+[ "." "," ] @punctuation.delimiter
+
+(string) @string
+(string_escape) @constant.character.escape
+(string_expansion [ "$" "${" "}" ] @constant.character.escape)
+[ (integer) (hex) ] @constant.numeric
+(boolean) @constant.builtin.boolean
+
+(comment) @comment
diff --git a/runtime/queries/gn/injections.scm b/runtime/queries/gn/injections.scm
new file mode 100644
index 00000000..55864c29
--- /dev/null
+++ b/runtime/queries/gn/injections.scm
@@ -0,0 +1,15 @@
+; Copyright (C) 2021 Will Cassella (github@willcassella.com)
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+; http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+((comment) @injection.content (#set! injection.language "comment"))
diff --git a/runtime/queries/gn/locals.scm b/runtime/queries/gn/locals.scm
new file mode 100644
index 00000000..e8bd995c
--- /dev/null
+++ b/runtime/queries/gn/locals.scm
@@ -0,0 +1,16 @@
+; Copyright (C) 2021 Will Cassella (github@willcassella.com)
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+; http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+(source_file) @local.scope
+(assignment target: (identifier) @local.definition)