From c2e6b9f506fddec15e48bd06cf712aef2bf53e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Tue, 1 Jun 2021 17:40:40 +0900 Subject: [PATCH] Add typescript support & ts/js indentation queries --- languages.toml | 11 +++++++ runtime/queries/javascript/indents.toml | 28 ++++++++++++++++++ runtime/queries/typescript/highlights.scm | 36 +++++++++++++++++++++++ runtime/queries/typescript/indents.toml | 1 + runtime/queries/typescript/locals.scm | 2 ++ runtime/queries/typescript/tags.scm | 23 +++++++++++++++ 6 files changed, 101 insertions(+) create mode 100644 runtime/queries/javascript/indents.toml create mode 100644 runtime/queries/typescript/highlights.scm create mode 120000 runtime/queries/typescript/indents.toml create mode 100644 runtime/queries/typescript/locals.scm create mode 100644 runtime/queries/typescript/tags.scm diff --git a/languages.toml b/languages.toml index 26ad5ddc..87f03d06 100644 --- a/languages.toml +++ b/languages.toml @@ -65,6 +65,17 @@ roots = [] indent = { tab-width = 2, unit = " " } +[[language]] +name = "typescript" +scope = "source.ts" +injection-regex = "^(ts|typescript)$" +file-types = ["ts"] +roots = [] +# TODO: highlights-jsx, highlights-params + +language-server = { command = "typescript-language-server", args = ["--stdio"] } +indent = { tab-width = 2, unit = " " } + [[language]] name = "css" scope = "source.css" diff --git a/runtime/queries/javascript/indents.toml b/runtime/queries/javascript/indents.toml new file mode 100644 index 00000000..9d711ab2 --- /dev/null +++ b/runtime/queries/javascript/indents.toml @@ -0,0 +1,28 @@ +indent = [ + "array", + "object", + "arguments", + "formal_parameters", + + "statement_block", + "object_pattern", + "class_body", + "named_imports", + + "binary_expression", + "return_statement", + "template_substitution", + # (expression_statement (call_expression)) + "export_clause", + + # typescript + "enum_declaration", + "interface_declaration", + "object_type", +] + +outdent = [ + "}", + "]", + ")" +] diff --git a/runtime/queries/typescript/highlights.scm b/runtime/queries/typescript/highlights.scm new file mode 100644 index 00000000..a3212a3d --- /dev/null +++ b/runtime/queries/typescript/highlights.scm @@ -0,0 +1,36 @@ +; inherits: javascript + +; Types + +(type_identifier) @type +(predefined_type) @type.builtin + +((identifier) @type + (#match? @type "^[A-Z]")) + +(type_arguments + "<" @punctuation.bracket + ">" @punctuation.bracket) + +; Variables + +(required_parameter (identifier) @variable.parameter) +(optional_parameter (identifier) @variable.parameter) + +; Keywords + +[ + "abstract" + "declare" + "enum" + "export" + "implements" + "interface" + "keyof" + "namespace" + "private" + "protected" + "public" + "type" + "readonly" +] @keyword diff --git a/runtime/queries/typescript/indents.toml b/runtime/queries/typescript/indents.toml new file mode 120000 index 00000000..3a17f258 --- /dev/null +++ b/runtime/queries/typescript/indents.toml @@ -0,0 +1 @@ +../javascript/indents.toml \ No newline at end of file diff --git a/runtime/queries/typescript/locals.scm b/runtime/queries/typescript/locals.scm new file mode 100644 index 00000000..aa6d6ffd --- /dev/null +++ b/runtime/queries/typescript/locals.scm @@ -0,0 +1,2 @@ +(required_parameter (identifier) @local.definition) +(optional_parameter (identifier) @local.definition) diff --git a/runtime/queries/typescript/tags.scm b/runtime/queries/typescript/tags.scm new file mode 100644 index 00000000..ccae934e --- /dev/null +++ b/runtime/queries/typescript/tags.scm @@ -0,0 +1,23 @@ +(function_signature + name: (identifier) @name) @definition.function + +(method_signature + name: (property_identifier) @name) @definition.method + +(abstract_method_signature + name: (property_identifier) @name) @definition.method + +(abstract_class_declaration + name: (type_identifier) @name) @definition.class + +(module + name: (identifier) @name) @definition.module + +(interface_declaration + name: (type_identifier) @name) @definition.interface + +(type_annotation + (type_identifier) @name) @reference.type + +(new_expression + constructor: (identifier) @name) @reference.class