aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorangelodlfrtr2023-03-18 14:17:02 +0000
committerGitHub2023-03-18 14:17:02 +0000
commitac2a7731a6d04b8b913f49531058c7e2a843efd5 (patch)
tree9158c5e96ba50ebaa4a4b15c5b7d20384cab68d7
parent9f5374bf47624d59e7bbcaa9382dbe06022acef7 (diff)
Add language support for Cap’n Proto format (#6325)
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml13
-rw-r--r--runtime/queries/capnp/folds.scm14
-rw-r--r--runtime/queries/capnp/highlights.scm141
-rw-r--r--runtime/queries/capnp/indents.scm19
-rw-r--r--runtime/queries/capnp/injections.scm2
-rw-r--r--runtime/queries/capnp/locals.scm96
7 files changed, 286 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 8aefe581..f62b147f 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 42ebf154..73114a19 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 00000000..6e3f9c18
--- /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 00000000..27ddf8e2
--- /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 00000000..9adaf34f
--- /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 00000000..321c90ad
--- /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 00000000..e98ce260
--- /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)))