From 9a80f7203da9a7d4904a73e3af5754248656be6a Mon Sep 17 00:00:00 2001 From: Pascal Eberhard <99962926+pascaleberhard0se@users.noreply.github.com> Date: Sun, 31 Mar 2024 14:16:19 +0200 Subject: [PATCH] add initial support for bitbake language (#10010) Signed-off-by: Pascal Eberhard --- book/src/generated/lang-support.md | 1 + languages.toml | 12 ++++ runtime/queries/bitbake/highlights.scm | 82 ++++++++++++++++++++++++++ runtime/queries/bitbake/injections.scm | 18 ++++++ 4 files changed, 113 insertions(+) create mode 100644 runtime/queries/bitbake/highlights.scm create mode 100644 runtime/queries/bitbake/injections.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 2030949eb..a43c0b70a 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -9,6 +9,7 @@ | beancount | ✓ | | | | | bibtex | ✓ | | | `texlab` | | bicep | ✓ | | | `bicep-langserver` | +| bitbake | ✓ | | | `bitbake-language-server` | | blade | ✓ | | | | | blueprint | ✓ | | | `blueprint-compiler` | | c | ✓ | ✓ | ✓ | `clangd` | diff --git a/languages.toml b/languages.toml index 03e471a57..6fbcbbc4e 100644 --- a/languages.toml +++ b/languages.toml @@ -12,6 +12,7 @@ awk-language-server = { command = "awk-language-server" } bash-language-server = { command = "bash-language-server", args = ["start"] } bass = { command = "bass", args = ["--lsp"] } bicep-langserver = { command = "bicep-langserver" } +bitbake-language-server = { command = "bitbake-language-server" } bufls = { command = "bufls", args = ["serve"] } cairo-language-server = { command = "cairo-language-server", args = [] } cl-lsp = { command = "cl-lsp", args = [ "stdio" ] } @@ -3209,6 +3210,17 @@ indent = { tab-width = 2, unit = " " } name = "dbml" source = { git = "https://github.com/dynamotn/tree-sitter-dbml", rev = "2e2fa5640268c33c3d3f27f7e676f631a9c68fd9" } +[[language]] +name = "bitbake" +language-servers = [ "bitbake-language-server" ] +scope = "source.bitbake" +file-types = ["bb", "bbappend", "bbclass", {glob = "conf/*.conf" }, {glob = "conf/*/*.{inc,conf}" }, { glob = "recipe-*/*/*.inc" }] +comment-token = "#" + +[[grammar]] +name = "bitbake" +source = { git = "https://github.com/tree-sitter-grammars/tree-sitter-bitbake", rev = "10bacac929ff36a1e8f4056503fe4f8717b21b94" } + [[language]] name = "log" scope = "source.log" diff --git a/runtime/queries/bitbake/highlights.scm b/runtime/queries/bitbake/highlights.scm new file mode 100644 index 000000000..6e8ab0cf3 --- /dev/null +++ b/runtime/queries/bitbake/highlights.scm @@ -0,0 +1,82 @@ + +; variables +(variable_assignment (identifier) @variable.other.member) +(variable_assignment (concatenation (identifier) @variable.other.member)) +(unset_statement (identifier) @variable.other.member) +(export_statement (identifier) @variable.other.member) +(variable_expansion (identifier) @variable.other.member) +(python_function_definition (parameters (python_identifier) @variable.other.member)) + +(variable_assignment (override) @keyword.storage.modifier) +(overrides_statement (identifier) @keyword.storage.modifier) +(flag) @keyword.storage.modifier + +[ + "=" + "?=" + "??=" + ":=" + "=+" + "+=" + ".=" + "=." + +] @operator + +(variable_expansion [ "${" "}" ] @punctuation.special) +[ "(" ")" "{" "}" "[" "]" ] @punctuation.bracket + +[ + "noexec" + "INHERIT" + "OVERRIDES" + "$BB_ENV_PASSTHROUGH" + "$BB_ENV_PASSTHROUGH_ADDITIONS" +] @variable.builtin + +; functions + +(python_function_definition (python_identifier) @function) +(anonymous_python_function (identifier) @function) +(function_definition (identifier) @function) +(export_functions_statement (identifier) @function) +(addtask_statement (identifier) @function) +(deltask_statement (identifier) @function) +(addhandler_statement (identifier) @function) +(function_definition (override) @keyword.storage.modifier) + +[ + "addtask" + "deltask" + "addhandler" + "unset" + "EXPORT_FUNCTIONS" + "python" + "def" +] @keyword.function + +[ + "append" + "prepend" + "remove" + + "before" + "after" +] @keyword.operator + +; imports + +[ + "inherit" + "include" + "require" + "export" + "import" +] @keyword.control.import + +(inherit_path) @namespace +(include_path) @namespace + + +(string) @string +(comment) @comment diff --git a/runtime/queries/bitbake/injections.scm b/runtime/queries/bitbake/injections.scm new file mode 100644 index 000000000..adae990e4 --- /dev/null +++ b/runtime/queries/bitbake/injections.scm @@ -0,0 +1,18 @@ +((python_function_definition) @injection.content + (#set! injection.language "python") + (#set! injection.include-children)) + +((anonymous_python_function (block) @injection.content) + (#set! injection.language "python") + (#set! injection.include-children)) + +((inline_python) @injection.content + (#set! injection.language "python") + (#set! injection.include-children)) + +((function_definition) @injection.content + (#set! injection.language "bash") + (#set! injection.include-children)) + +((comment) @injection.content + (#set! injection.language "comment"))