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 @@ -2740,6 +2740,20 @@ indent = { tab-width = 4, unit = "\t" } 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" 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)