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.34.1.tar.gz (336.0 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.34.1-cp310-abi3-win_arm64.whl (160.9 kB view details)

Uploaded CPython 3.10+Windows ARM64

tree_sitter_pwsh-0.34.1-cp310-abi3-win_amd64.whl (173.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

tree_sitter_pwsh-0.34.1-cp310-abi3-musllinux_1_2_x86_64.whl (185.4 kB view details)

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

tree_sitter_pwsh-0.34.1-cp310-abi3-musllinux_1_2_aarch64.whl (175.8 kB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

tree_sitter_pwsh-0.34.1-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (176.7 kB view details)

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

tree_sitter_pwsh-0.34.1-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (186.4 kB view details)

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

tree_sitter_pwsh-0.34.1-cp310-abi3-macosx_11_0_arm64.whl (165.9 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

tree_sitter_pwsh-0.34.1-cp310-abi3-macosx_10_9_x86_64.whl (161.5 kB view details)

Uploaded CPython 3.10+macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: tree_sitter_pwsh-0.34.1.tar.gz
  • Upload date:
  • Size: 336.0 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.34.1.tar.gz
Algorithm Hash digest
SHA256 7f44ff5ec1ec8197da33c745f2588cfd9784e9552756c0cac4ada56b741f9835
MD5 bcbf7f787bb391f528b9d0c79d5da4c6
BLAKE2b-256 21c429d185beb028ff45f08cbabb47cfe6910e603c59e9692ef3696c8b2e1868

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.34.1-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 edf40a59e1e566bf1e7dd00ee6935ce3ebd03a35ffaec65b016c4dfec2434daf
MD5 98a39f3304212c301d1278687f0c010c
BLAKE2b-256 2d7136bb458e2853e71aebb2a1b69c83d7a8872199229afb1c2e6df0e9587fb3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.34.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 0207630813611db9bb5eb9b300de37de81a75588ef1b1e281d768c662a264d9f
MD5 dfbd6710ef9a08e472a5d6684e54ddfb
BLAKE2b-256 2c39cde530d0d9231cb88843ecfe1ddca0cf7713d25e6aa595d86af2175ffa70

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.34.1-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e3aaecc6dbafe97aafd7ea7f0a3ba6500d68c5005b06cf47cb9ab5ff6e73d353
MD5 96f9e8b696ab7883920709293ca87918
BLAKE2b-256 800f14b372d10c68b4932af4ea5878dc4f9475f623f9d3c92849cc0e294d2442

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.34.1-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 869664c7edacd8cc779bb0abddec5f8bc497790b42b37eab00c1a9c7141ec12b
MD5 9dbaeb40f88c66c3e23f01d986b7a62f
BLAKE2b-256 1af0a80bb3424d57d0c6c529c21062d471ef1e865970587ae6d4b770aa9971d8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.34.1-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0bbcac7b76ea9a248bda4973115fa79dd73b2b2ae80e25a09a6a3738ea997157
MD5 18d5b970fc30fbc06756ddb015608dcf
BLAKE2b-256 e9517dcf742aabc47118d9b05ba4013d719bb17aead812b16b06c00539e93869

See more details on using hashes here.

Provenance

The following attestation bundles were made for tree_sitter_pwsh-0.34.1-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.34.1-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.34.1-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 607941dacb54afa875dd0d9be7af8273c1ae8d53c6d3e52be440ad976f601e33
MD5 4adab6a2c91b824220b6a37789e740d2
BLAKE2b-256 372c79da0c775f9885ea1f70504485fe62e7650c9c792824f23356d45d679178

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.34.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f1d5dec914a3f442cea1a735adc41c58a0a87f90ad1dea06e4797cab35d5adc
MD5 207cca046e3075df1f120c21b3e91bd3
BLAKE2b-256 a3e43a1e7b826b288afce9758138d9914e07628cc8d24e00b176e54879aed575

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tree_sitter_pwsh-0.34.1-cp310-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ac8ccbd67e90b069a8c9d664c8d8f245fc00006de4b029915d92635b868c4010
MD5 cbe9d0a9bdc07d721b569b0ddb774398
BLAKE2b-256 50130c84ec4457101c9ffb39d6b082e165bb46fe453a271c4c45600bd3abf281

See more details on using hashes here.

Provenance

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