From ac2a7731a6d04b8b913f49531058c7e2a843efd5 Mon Sep 17 00:00:00 2001 From: angelodlfrtr Date: Sat, 18 Mar 2023 15:17:02 +0100 Subject: [PATCH] =?UTF-8?q?Add=20language=20support=20for=20Cap=E2=80=99n?= =?UTF-8?q?=20Proto=20format=20(#6325)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- book/src/generated/lang-support.md | 1 + languages.toml | 13 +++ runtime/queries/capnp/folds.scm | 14 +++ runtime/queries/capnp/highlights.scm | 141 +++++++++++++++++++++++++++ runtime/queries/capnp/indents.scm | 19 ++++ runtime/queries/capnp/injections.scm | 2 + runtime/queries/capnp/locals.scm | 96 ++++++++++++++++++ 7 files changed, 286 insertions(+) create mode 100644 runtime/queries/capnp/folds.scm create mode 100644 runtime/queries/capnp/highlights.scm create mode 100644 runtime/queries/capnp/indents.scm create mode 100644 runtime/queries/capnp/injections.scm create mode 100644 runtime/queries/capnp/locals.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 8aefe5816..f62b147fe 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -10,6 +10,7 @@ | c | ✓ | ✓ | ✓ | `clangd` | | c-sharp | ✓ | ✓ | | `OmniSharp` | | cairo | ✓ | | | | +| capnp | ✓ | | ✓ | | | clojure | ✓ | | | `clojure-lsp` | | cmake | ✓ | ✓ | ✓ | `cmake-language-server` | | comment | ✓ | | | | diff --git a/languages.toml b/languages.toml index 42ebf1546..73114a193 100644 --- a/languages.toml +++ b/languages.toml @@ -2328,3 +2328,16 @@ roots = [] [[grammar]] name = "rst" source = { git = "https://github.com/stsewd/tree-sitter-rst", rev = "25e6328872ac3a764ba8b926aea12719741103f1" } + +[[language]] +name = "capnp" +scope = "source.capnp" +injection-regex = "capnp" +file-types = ["capnp"] +roots = [] +comment-token = "#" +indent = { tab-width = 2, unit = " " } + +[[grammar]] +name = "capnp" +source = { git = "https://github.com/amaanq/tree-sitter-capnp", rev = "fc6e2addf103861b9b3dffb82c543eb6b71061aa" } diff --git a/runtime/queries/capnp/folds.scm b/runtime/queries/capnp/folds.scm new file mode 100644 index 000000000..6e3f9c187 --- /dev/null +++ b/runtime/queries/capnp/folds.scm @@ -0,0 +1,14 @@ +[ + (annotation_targets) + (const_list) + (enum) + (interface) + (implicit_generics) + (generics) + (group) + (method_parameters) + (named_return_types) + (struct) + (struct_shorthand) + (union) +] @fold diff --git a/runtime/queries/capnp/highlights.scm b/runtime/queries/capnp/highlights.scm new file mode 100644 index 000000000..27ddf8e2d --- /dev/null +++ b/runtime/queries/capnp/highlights.scm @@ -0,0 +1,141 @@ +; Preproc + +(unique_id) @keyword.directive +(top_level_annotation_body) @keyword.directive + +; Includes + +[ + "import" + "$import" + "embed" +] @keyword.control.import + +(import_path) @string + +; Builtins + +[ + (primitive_type) + "List" +] @type.builtin + +; Typedefs + +(type_definition) @type + +; Labels (@number, @number!) + +(field_version) @label + +; Methods + +(annotation_definition_identifier) @function.method +(method_identifier) @function.method + +; Fields + +(field_identifier) @variable.other.member + +; Properties + +(property) @label + +; Parameters + +(param_identifier) @variable.parameter +(return_identifier) @variable.parameter + +; Constants + +(const_identifier) @variable +(local_const) @constant +(enum_member) @type.enum.variant + +(void) @constant.builtin + +; Types + +(enum_identifier) @type.enum +(extend_type) @type +(type_identifier) @type + +; Attributes + +(annotation_identifier) @attribute +(attribute) @attribute + +; Operators + +[ + ; @ ! - + "=" +] @operator + +; Keywords + + +[ + "annotation" + "enum" + "group" + "interface" + "struct" + "union" +] @keyword.storage.type + +[ + "extends" + "namespace" + "using" + (annotation_target) +] @special + +; Literals + +[ + (string) + (concatenated_string) + (block_text) + (namespace) +] @string + +(escape_sequence) @constant.character.escape + +(data_string) @string.special + +(number) @constant.numeric.integer + +(float) @constant.numeric.float + +(boolean) @constant.builtin.boolean + +; Misc + +[ + "const" +] @keyword.storage.modifier + +[ + "*" + "$" + ":" +] @string.special.symbol + +["{" "}"] @punctuation.bracket + +["(" ")"] @punctuation.bracket + +["[" "]"] @punctuation.bracket + +[ + "," + ";" + "->" +] @punctuation.delimiter + +(data_hex) @constant + +; Comments + +(comment) @comment.line diff --git a/runtime/queries/capnp/indents.scm b/runtime/queries/capnp/indents.scm new file mode 100644 index 000000000..9adaf34fd --- /dev/null +++ b/runtime/queries/capnp/indents.scm @@ -0,0 +1,19 @@ +[ + (annotation_targets) + (const_list) + (enum) + (interface) + (implicit_generics) + (generics) + (group) + (method_parameters) + (named_return_types) + (struct) + (struct_shorthand) + (union) +] @indent + +[ + "}" + ")" +] @outdent diff --git a/runtime/queries/capnp/injections.scm b/runtime/queries/capnp/injections.scm new file mode 100644 index 000000000..321c90add --- /dev/null +++ b/runtime/queries/capnp/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/capnp/locals.scm b/runtime/queries/capnp/locals.scm new file mode 100644 index 000000000..e98ce2605 --- /dev/null +++ b/runtime/queries/capnp/locals.scm @@ -0,0 +1,96 @@ +; Scopes + +[ + (message) + (annotation_targets) + (const_list) + (enum) + (interface) + (implicit_generics) + (generics) + (group) + (method_parameters) + (named_return_types) + (struct) + (struct_shorthand) + (union) +] @local.scope + +; References + +[ + (extend_type) + (field_type) +] @local.reference +(custom_type (type_identifier) @local.reference) +(custom_type + (generics + (generic_parameters + (generic_identifier) @local.reference))) + +; Definitions + +(annotation_definition_identifier) @local.definition + +(const_identifier) @local.definition + +(enum (enum_identifier) @local.definition) + +[ + (enum_member) + (field_identifier) +] @local.definition + +(method_identifier) @local.definition + +(namespace) @local.definition + +[ + (param_identifier) + (return_identifier) +] @local.definition + +(group (type_identifier) @local.definition) + +(struct (type_identifier) @local.definition) + +(union (type_identifier) @local.definition) + +(interface (type_identifier) @local.definition) + +; Generics Related (don't know how to combine these) + +(struct + (generics + (generic_parameters + (generic_identifier) @local.definition))) + +(interface + (generics + (generic_parameters + (generic_identifier) @local.definition))) + +(method + (implicit_generics + (implicit_generic_parameters + (generic_identifier) @local.definition))) + +(method + (generics + (generic_parameters + (generic_identifier) @local.definition))) + +(annotation + (generics + (generic_parameters + (generic_identifier) @local.definition))) + +(replace_using + (generics + (generic_parameters + (generic_identifier) @local.definition))) + +(return_type + (generics + (generic_parameters + (generic_identifier) @local.definition)))