diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index c9668549e..9149acadf 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -132,6 +132,7 @@ | po | ✓ | ✓ | | | | pod | ✓ | | | | | ponylang | ✓ | ✓ | ✓ | | +| powershell | ✓ | | | | | prisma | ✓ | | | `prisma-language-server` | | prolog | | | | `swipl` | | protobuf | ✓ | ✓ | ✓ | `bufls`, `pb` | diff --git a/languages.toml b/languages.toml index 49672a30b..70953b990 100644 --- a/languages.toml +++ b/languages.toml @@ -3259,3 +3259,17 @@ indent = { tab-width = 4, unit = " " } [[grammar]] name = "fidl" source = { git = "https://github.com/google/tree-sitter-fidl", rev = "bdbb635a7f5035e424f6173f2f11b9cd79703f8d" } + +[[language]] +name = "powershell" +scope = "source.powershell" +injection-regex = "(pwsh|powershell)" +file-types = [ "ps1", "psm1", "psd1", "pscc", "psrc" ] +shebangs = [ "pwsh", "powershell" ] +comment-token = '#' +block-comment-tokens = { start = "<#", end = "#>" } +indent = { tab-width = 4, unit = " " } + +[[grammar]] +name = "powershell" +source = { git = "https://github.com/airbus-cert/tree-sitter-powershell", rev = "c9316be0faca5d5b9fd3b57350de650755f42dc0" } diff --git a/runtime/queries/powershell/highlights.scm b/runtime/queries/powershell/highlights.scm new file mode 100644 index 000000000..c62c72814 --- /dev/null +++ b/runtime/queries/powershell/highlights.scm @@ -0,0 +1,174 @@ +[ + "if" + "elseif" + "else" + "switch" +] @keyword.control.conditional + +[ + "foreach" + "for" + "while" + "do" + "until" +] @keyword.control.repeat + +[ + "break" + "continue" + "return" +] @keyword.control.return + +"in" @keyword.operator + +"function" @keyword.function + +[ + "class" + "enum" +] @keyword.storage.type + +[ + "param" + "dynamicparam" + "begin" + "process" + "end" + "filter" + "workflow" + "throw" + "exit" + "trap" + "try" + "catch" + "finally" + "data" + "inlinescript" + "parallel" + "sequence" +] @keyword + +[ + "-as" + "-ccontains" + "-ceq" + "-cge" + "-cgt" + "-cle" + "-clike" + "-clt" + "-cmatch" + "-cne" + "-cnotcontains" + "-cnotlike" + "-cnotmatch" + "-contains" + "-creplace" + "-csplit" + "-eq" + "-ge" + "-gt" + "-icontains" + "-ieq" + "-ige" + "-igt" + "-ile" + "-ilike" + "-ilt" + "-imatch" + "-in" + "-ine" + "-inotcontains" + "-inotlike" + "-inotmatch" + "-ireplace" + "-is" + "-isnot" + "-isplit" + "-join" + "-le" + "-like" + "-lt" + "-match" + "-ne" + "-not" + "-notcontains" + "-notin" + "-notlike" + "-notmatch" + "-replace" + "-shl" + "-shr" + "-split" + "-and" + "-or" + "-xor" + "-band" + "-bor" + "-bxor" + "+" + "-" + "*" + "/" + "%" + "++" + "--" + "!" + "\\" + ".." + "|" +] @operator + +(assignement_operator) @operator + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @punctuation.bracket + +[ + ";" + "," + "::" +] @punctuation.delimiter + +(string_literal) @string + +(integer_literal) @constant.numeric +(real_literal) @constant.numeric + +(command + command_name: (command_name) @function) + +(function_name) @function + +(invokation_expression + (member_name) @function) + +(member_access + (member_name) @variable.other.member) + +(command_invokation_operator) @operator + +(type_spec) @type + +(variable) @variable + +(comment) @comment + +(array_expression) @punctuation.bracket + +(assignment_expression + value: (pipeline) @variable) + +(format_operator) @operator + +(command_parameter) @variable.parameter + +(command_elements) @variable.builtin + +(generic_token) @variable diff --git a/runtime/queries/powershell/injections.scm b/runtime/queries/powershell/injections.scm new file mode 100644 index 000000000..321c90add --- /dev/null +++ b/runtime/queries/powershell/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment"))