diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index f62b147fe..3c18956ae 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -123,6 +123,7 @@ | scheme | ✓ | | | | | scss | ✓ | | | `vscode-css-language-server` | | slint | ✓ | | ✓ | `slint-lsp` | +| smithy | ✓ | | | `cs` | | sml | ✓ | | | | | solidity | ✓ | | | `solc` | | sql | ✓ | | | | diff --git a/languages.toml b/languages.toml index 5a42d7a4a..234b1313e 100644 --- a/languages.toml +++ b/languages.toml @@ -2355,3 +2355,17 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "capnp" source = { git = "https://github.com/amaanq/tree-sitter-capnp", rev = "fc6e2addf103861b9b3dffb82c543eb6b71061aa" } + +[[language]] +name = "smithy" +scope = "source.smithy" +injection-regex = "smithy" +file-types = ["smithy"] +roots = ["smithy-build.json"] +comment-token = "//" +indent = { tab-width = 4, unit = " " } +language-server = { command = "cs", args = ["launch", "com.disneystreaming.smithy:smithy-language-server:latest.release", "--", "0"] } + +[[grammar]] +name = "smithy" +source = { git = "https://github.com/indoorvivants/tree-sitter-smithy", rev = "cf8c7eb9faf7c7049839585eac19c94af231e6a0" } diff --git a/runtime/queries/smithy/highlights.scm b/runtime/queries/smithy/highlights.scm new file mode 100644 index 000000000..269e96094 --- /dev/null +++ b/runtime/queries/smithy/highlights.scm @@ -0,0 +1,102 @@ +; Queries are taken from: https://github.com/indoorvivants/tree-sitter-smithy/blob/main/queries/highlights.scm +; Preproc +(control_key) @keyword.directive + +; Namespace +(namespace) @namespace + +; Includes +[ + "use" +] @keyword.control.import + +; Builtins +(primitive) @type.builtin +[ + "enum" + "intEnum" + "list" + "map" + "set" +] @type.builtin + +; Fields (Members) +; (field) @variable.other.member + +(key_identifier) @variable.other.member +(shape_member + (field) @variable.other.member) +(operation_field) @variable.other.member +(operation_error_field) @variable.other.member + +; Constants +(enum_member + (enum_field) @type.enum) + +; Types +(identifier) @type +(structure_resource + (shape_id) @type) + +; Attributes +(mixins + (shape_id) @attribute) +(trait_statement + (shape_id) @attribute) + +; Operators +[ + "@" + "-" + "=" + ":=" +] @operator + +; Keywords +[ + "namespace" + "service" + "structure" + "operation" + "union" + "resource" + "metadata" + "apply" + "for" + "with" +] @keyword + +; Literals +(string) @string +(escape_sequence) @constant.character.escape + +(number) @constant.numeric + +(float) @constant.numeric.float + +(boolean) @constant.builtin.boolean + +(null) @constant.builtin + +; Misc +[ + "$" + "#" +] @punctuation.special + +["{" "}"] @punctuation.bracket + +["(" ")"] @punctuation.bracket + +["[" "]"] @punctuation.bracket + +[ + ":" + "." +] @punctuation.delimiter + +; Comments +[ + (comment) + (documentation_comment) +] @comment