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 $$ $^ $? $_
  • Unicode-aware source — Unicode identifiers, variables, parameters, type/class/enum names, and decimal digits
  • 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.37.0.tar.gz (465.2 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.37.0-cp310-abi3-win_arm64.whl (215.7 kB view details)

Uploaded CPython 3.10+Windows ARM64

tree_sitter_pwsh-0.37.0-cp310-abi3-win_amd64.whl (228.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

tree_sitter_pwsh-0.37.0-cp310-abi3-musllinux_1_2_x86_64.whl (246.8 kB view details)

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

tree_sitter_pwsh-0.37.0-cp310-abi3-musllinux_1_2_aarch64.whl (236.7 kB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

tree_sitter_pwsh-0.37.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (237.5 kB view details)

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

tree_sitter_pwsh-0.37.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (247.7 kB view details)

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

tree_sitter_pwsh-0.37.0-cp310-abi3-macosx_11_0_arm64.whl (222.2 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

tree_sitter_pwsh-0.37.0-cp310-abi3-macosx_10_9_x86_64.whl (213.7 kB view details)

Uploaded CPython 3.10+macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: tree_sitter_pwsh-0.37.0.tar.gz
  • Upload date:
  • Size: 465.2 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.37.0.tar.gz
Algorithm Hash digest
SHA256 59e792033d180cdf282388639cc2ed616193371eb9e4b750f82f68a5db4cfa64
MD5 e84a16dae4210e5d43f14e9d86771910
BLAKE2b-256 67582ef58f4f494a0b5438f338c0b33df49311a801bd3ec775b76487c0fa75a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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.37.0-cp310-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.37.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 2a8c89d38396ba5c31c72a8a9634c2d94067152b224b68790be9af110b9c01ad
MD5 2f81bb66cd6e70ef2ef958641c0fe5d0
BLAKE2b-256 ec3c253e8e393f6ccea9ebf2b519b825f4dc329157911fd0713d5632b6747452

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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.37.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.37.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 16d7e44e3a7926b9710ad59a81076371f3d9b627411163efad417b90cf974d72
MD5 2ae72efcd2d4d184705bf2a3c3286488
BLAKE2b-256 7c62dc6d598e37e9775f98c9c88120abb771c5d061c1cf06f2ca2dc0fa26a7a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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.37.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.37.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5f0fbc23c0aa54a843867d4701be45d5379aa54faa871018272823a78430d43c
MD5 092b12e7fa87657613a48be57c0723fc
BLAKE2b-256 1d59e8e4213527faed49735a87cc508940803b330a00ae697c6ea3d25c2e3137

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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.37.0-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.37.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8c8c046865abe26063ce8a272a8d21d291abfc75394508aa8e76bc225fea07a3
MD5 3b57ed6a20bdda3f5da3ee96583832ba
BLAKE2b-256 b6851669a095f4c3465781c3fa3425f7c585248f75d2916051ca27345dfc49dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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.37.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.37.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 18ebb7ee46b10b9e6ad73ed34dfb0c079a5874163fd715518c0a98ce2532fe62
MD5 22863a01d6dc25b83621511fdc8feb42
BLAKE2b-256 cc20c6bef144f085a35f211b4f8d739654a721f90b98623062774e42f7ce8c9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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.37.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.37.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 07d9cfe03444ff3ec76d815e990c8ca332bd1de805edaaa00650808e36dfee2e
MD5 8edd93da22bc9ae14f2d888e42959f1a
BLAKE2b-256 6a792eaac8ead715eedecb9e8194f9bee30d1e05f045ddeecd555f5092345ce6

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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.37.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.37.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 71d574fd6fa3ba75ffaa0d75d1663a2a7161670a60b4333215b2e355d4b0ed69
MD5 8f8b2e6719929beb52c9b41957fd4b50
BLAKE2b-256 95df4162289d75c3ba40997228ca1adba923d94cca83657367d988178b584822

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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.37.0-cp310-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.37.0-cp310-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2180fcd8b4e2ac04fecf8e7eb266661086753c6b4a2ddf93df331fde687dc4d6
MD5 6c36fc751327605399508fffb6e2af81
BLAKE2b-256 1e12db20bc3eea739eaed840b641dda85b2845bd4e7f16c826004af8cda85705

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.37.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