From 2022e6175ba72a772b6b6fda4479a8e554e0de02 Mon Sep 17 00:00:00 2001
From: Ivan Tkachuk <116971836+seshotake@users.noreply.github.com>
Date: Mon, 5 Jun 2023 11:40:14 +0300
Subject: [PATCH] Add blueprint language (#7213)

* Add blueprint tree-sitter support

* Add blueprint lsp support

* Run cargo xtask docgen
---
 book/src/generated/lang-support.md       |  1 +
 languages.toml                           | 15 +++++++
 runtime/queries/blueprint/highlights.scm | 56 ++++++++++++++++++++++++
 3 files changed, 72 insertions(+)
 create mode 100644 runtime/queries/blueprint/highlights.scm

diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index d3596657..59fe310f 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -7,6 +7,7 @@
 | beancount | ✓ |  |  |  |
 | bibtex | ✓ |  |  | `texlab` |
 | bicep | ✓ |  |  | `bicep-langserver` |
+| blueprint | ✓ |  |  | `blueprint-compiler` |
 | c | ✓ | ✓ | ✓ | `clangd` |
 | c-sharp | ✓ | ✓ |  | `OmniSharp` |
 | cabal |  |  |  |  |
diff --git a/languages.toml b/languages.toml
index 9e74bf7f..964dc081 100644
--- a/languages.toml
+++ b/languages.toml
@@ -77,6 +77,7 @@ vuels = { command = "vls" }
 wgsl_analyzer = { command = "wgsl_analyzer" }
 yaml-language-server = { command = "yaml-language-server", args = ["--stdio"] }
 zls = { command = "zls" }
+blueprint-compiler = { command = "blueprint-compiler", args = ["lsp"] }
 
 
 [language-server.lua-language-server]
@@ -2577,3 +2578,17 @@ indent = { tab-width = 4, unit = "\t" }
 [[grammar]]
 name = "just"
 source = { git = "https://github.com/IndianBoy42/tree-sitter-just", rev = "8af0aab79854aaf25b620a52c39485849922f766" }
+
+[[language]]
+name = "blueprint"
+scope = "source.blueprint"
+injection-regex = "blueprint"
+file-types = ["blp"]
+roots = []
+comment-token = "//"
+language-servers = [ "blueprint-compiler" ]
+indent = { tab-width = 4, unit = "    " }
+
+[[grammar]]
+name = "blueprint"
+source = { git = "https://gitlab.com/gabmus/tree-sitter-blueprint", rev = "7f1a5df44861291d6951b6b2146a9fef4c226e14" }
diff --git a/runtime/queries/blueprint/highlights.scm b/runtime/queries/blueprint/highlights.scm
new file mode 100644
index 00000000..05533cea
--- /dev/null
+++ b/runtime/queries/blueprint/highlights.scm
@@ -0,0 +1,56 @@
+(object_id) @attribute
+
+(string) @string
+(escape_sequence) @constant.character.escape
+
+(comment) @comment
+
+(constant) @constant.builtin
+(boolean) @constant.builtin.boolean
+
+(template) @keyword
+
+(using) @keyword.control.import
+
+(decorator) @attribute
+
+(property_definition (property_name) @variable.other.member)
+
+(object) @type
+
+(signal_binding (signal_name) @function.builtin)
+(signal_binding (function (identifier)) @function)
+(signal_binding "swapped" @keyword)
+
+(styles_list "styles" @function.macro)
+(layout_definition "layout" @function.macro)
+
+(gettext_string "_" @function.builtin)
+
+(menu_definition "menu" @keyword)
+(menu_section "section" @keyword)
+(menu_item "item" @function.macro)
+
+(template_definition (template_name_qualifier) @keyword.storage.type)
+
+(import_statement (gobject_library) @namespace)
+
+(import_statement (version_number) @constant.numeric.float)
+
+(float) @constant.numeric.float
+(number) @constant.numeric
+
+[
+  ";"
+  "."
+  ","
+] @punctuation.delimiter
+
+[
+  "("
+  ")"
+  "["
+  "]"
+  "{"
+  "}"
+] @punctuation.bracket