Skip to main content

PowerShell grammar for tree-sitter

Project description

tree-sitter-pwsh

PowerShell grammar for tree-sitter.

Parses .ps1 and .psm1 files into a concrete syntax tree for syntax highlighting, code navigation, and analysis.

Features

  • Pipelines and commands — pipes |, chain operators && ||, PowerShell 7 line-initial pipe continuation (\n| Cmd), redirections > >> 2>&1, invocation & ., splatting @params, barewords (including expandable $var.suffix forms), verbatim arguments --%
  • Directivesusing namespace, using module (type names, relative bareword paths like .\Foo.psm1, and hashtable specs), using assembly, using static, and top-of-file #Requires
  • Strings and interpolation — expandable strings "$var $(expr)", escaped quotes "", # in interpolated strings, verbatim strings, here-strings @" / @', sub-expressions $(...), array sub-expressions @(...), hashtable literals @{}, and PowerShell-style escaping
  • Functions and named blocksfunction, filter, workflow with param() blocks, attributes, validation, and begin/process/end/clean
  • Control flowif/elseif/else, switch (-Regex, -Wildcard, -Exact, -CaseSensitive), foreach, for, while, do/while/until
  • Error handlingtry/catch/finally with typed catch clauses, trap, throw, break, continue, return, exit
  • Workflow and data blocksdata sections, inlinescript, parallel, and sequence statement blocks
  • Expressions — ternary ? :, null-coalescing ??/??=, logical (-and/-or/-xor), bitwise (-band/-bor/-bxor), comparison/string/type/containment operators, -f format, range ..
  • Types — common .NET type forms including generics [Dictionary[string, int]], arrays [int[]], nested types Array+Enumerator, and double-backtick arity List1 ``
  • Variables$var, $scope:var, ${braced} with backtick escapes, @splatted, and special vars $$ $^ $? $_
  • Classes and enums — attribute-decorated declarations ([Flags()] enum, [Attr()] class), properties, methods, constructors with : base()/: this() chaining, hidden/static modifiers, and inheritance clauses with generic bases (: IComparer[Object])
  • Numbers — decimal, hex 0x, scientific 1.5e10, numeric suffixes (u, ul, s, us, y, uy, n, l, d), and size multipliers (kb/mb/gb/tb/pb)
  • Case-insensitive keywords and operators — parses PowerShell casing variations without normalization

Example

using namespace System.IO

function Get-FileSize {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$Path
    )

    begin { $total = 0 }
    process {
        $size = (Get-Item $Path).Length
        $total += $size
    }
    end { $total }
    clean { Remove-Variable total }
}

$result = Get-FileSize -Path ".\README.md"
$message = $result -gt 1kb ? "Large file" : "Small file"
Write-Host $message

Parsed tree:

(program
  (using_directive_list
    (using_statement (type_name (type_name (type_identifier)) (type_identifier))))
  (statement_list
    (function_statement
      (function_name)
      (script_block
        (param_block
          (attribute_list
            (attribute (attribute_name (type_spec (type_name (type_identifier))))))
          (parameter_list
            (script_parameter
              (attribute_list
                (attribute (attribute_name (type_spec (type_name (type_identifier))))))
              (variable))))
        (script_block_body
          (named_block_list
            (named_block (block_name) (statement_block ...))
            (named_block (block_name) (statement_block ...))
            (named_block (block_name) (statement_block ...))
            (named_block (block_name) (statement_block ...))))))
    (pipeline
      (assignment_expression ...))
    (pipeline
      (assignment_expression ...))
    (pipeline
      (pipeline_chain
        (command (command_name) (command_elements ...))))))

Installation

npm

npm install tree-sitter-pwsh

Cargo

cargo add tree-sitter-pwsh

PyPI

pip install tree-sitter-pwsh

Go

import tree_sitter_powershell "github.com/wharflab/tree-sitter-powershell/bindings/go"

The root package also exports the bundled queries/highlights.scm via go:embed:

import powershell "github.com/wharflab/tree-sitter-powershell"

lang := powershell.GetLanguage()
query, _ := powershell.GetHighlightsQuery()

Usage

Node.js

import Parser from "tree-sitter";
import PowerShell from "tree-sitter-pwsh";

const parser = new Parser();
parser.setLanguage(PowerShell);

const tree = parser.parse(`Get-Process | Where-Object { $_.CPU -gt 10 }\n`);
console.log(tree.rootNode.toString());

Rust

let mut parser = tree_sitter::Parser::new();
let language = tree_sitter_pwsh::LANGUAGE;
parser.set_language(&language.into()).unwrap();

let tree = parser.parse("Get-Process | Sort-Object CPU\n", None).unwrap();
println!("{}", tree.root_node().to_sexp());

Python

from tree_sitter import Language, Parser
import tree_sitter_pwsh

parser = Parser(Language(tree_sitter_pwsh.language()))
tree = parser.parse(b"Get-Process | Sort-Object CPU\n")
print(tree.root_node.sexp())

Syntax Highlighting

The grammar ships with a queries/highlights.scm file for use in editors that support tree-sitter highlighting (Neovim, Helix, Zed, etc.).

References

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tree_sitter_pwsh-0.33.0.tar.gz (322.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tree_sitter_pwsh-0.33.0-cp310-abi3-win_arm64.whl (147.0 kB view details)

Uploaded CPython 3.10+Windows ARM64

tree_sitter_pwsh-0.33.0-cp310-abi3-win_amd64.whl (154.0 kB view details)

Uploaded CPython 3.10+Windows x86-64

tree_sitter_pwsh-0.33.0-cp310-abi3-musllinux_1_2_x86_64.whl (171.3 kB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

tree_sitter_pwsh-0.33.0-cp310-abi3-musllinux_1_2_aarch64.whl (166.7 kB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

tree_sitter_pwsh-0.33.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (167.5 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

tree_sitter_pwsh-0.33.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (173.0 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

tree_sitter_pwsh-0.33.0-cp310-abi3-macosx_11_0_arm64.whl (158.2 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

tree_sitter_pwsh-0.33.0-cp310-abi3-macosx_10_9_x86_64.whl (148.4 kB view details)

Uploaded CPython 3.10+macOS 10.9+ x86-64

File details

Details for the file tree_sitter_pwsh-0.33.0.tar.gz.

File metadata

  • Download URL: tree_sitter_pwsh-0.33.0.tar.gz
  • Upload date:
  • Size: 322.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tree_sitter_pwsh-0.33.0.tar.gz
Algorithm Hash digest
SHA256 135ce4839ff6f62736858919f39c6912ca5b841d08a89a23640676c2e58d4f57
MD5 a68e2453b64eaa5dcdc75d600b6decfd
BLAKE2b-256 4efa59a6e2773488edc88f196ee2321cb90dfedf114352ccf87d8f794b2bda90

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0.tar.gz:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tree_sitter_pwsh-0.33.0-cp310-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.33.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 5eafb42b128f0a2622f6e98f0bca9e04855a3d468d2b2e0c9342bfb4910bd1ca
MD5 60af5591de605c50f4802542829ecaba
BLAKE2b-256 e10bfdd021516ced961c424af1cfd5ac480962a820a0bf7bd49e841a6c74a3fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0-cp310-abi3-win_arm64.whl:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tree_sitter_pwsh-0.33.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.33.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 b512a434fb62a70d1875567e324c12d2ba29a6d413973e9d34e308552760fb1c
MD5 ed5f0bd256d98ce7e2d463d01d825b29
BLAKE2b-256 1e31aa7bda3ab337242e32d80f86b83d3754e2fdb108a4e1919ec7d6adcac333

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0-cp310-abi3-win_amd64.whl:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tree_sitter_pwsh-0.33.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.33.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 92e73953efd869c8572dc15fe4db5c9227ca4ef1b5df64bdcc3577c76b838d2b
MD5 9180efb7bb0ffbc1346986ae1432dbc9
BLAKE2b-256 6bbb9825c6131d56ab82e268b6a2eb94d670447bedff68f3285b45f4750066d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tree_sitter_pwsh-0.33.0-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.33.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 730444bb13e487fe48c838517742d3f4e47b9a2fdb0801b9dbbbb042c4b061d7
MD5 c3826be8658c889316d6392ac3dee135
BLAKE2b-256 f36bb626997ae5bbc43b438e83a731fc8b65e6ff29e8aaaacb53efebcd774afc

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0-cp310-abi3-musllinux_1_2_aarch64.whl:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tree_sitter_pwsh-0.33.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.33.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7f0f3b8bcb0dbd5f1108825c102358132b860cb948b900dfcd877c2599323a53
MD5 16a2d390fc53cb7f40482430cd6f29c1
BLAKE2b-256 5e7c610823f0e5bce3f9547e36ca26a6410d08f006797cc04d6f2233099600cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tree_sitter_pwsh-0.33.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.33.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 e1792de23ffb18354894a48b4fa39ae41ec2dedc831b8d59253316791f136784
MD5 32b2b68852b66190c7f8933bdee55fa0
BLAKE2b-256 dea23cd008e2e88385c6213011d48c3375da6e055c63cb61beff7ab24eedc06f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tree_sitter_pwsh-0.33.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.33.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5e4c0acc5546ccb9b686e9458d2abd43e677c2ac8f8551cce87e2fe249f61d6c
MD5 a3b8c6bf8f1cd35b637fca282b6f9e92
BLAKE2b-256 9275a849e6609262b307257313c5a6535f849ca8174c3f832144def1da46a887

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tree_sitter_pwsh-0.33.0-cp310-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.33.0-cp310-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b9527b8f456291389aa6435256f65fa4395500635403319932f8bb011ee0a582
MD5 5e8db535463c9184100e7fe7b9715c00
BLAKE2b-256 3a83528b570e3163ea4086e125287013476c15a113d6723dd9f0a54e34d57b42

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.33.0-cp310-abi3-macosx_10_9_x86_64.whl:

Publisher: publish_pypi.yml on wharflab/tree-sitter-powershell

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page