Skip to main content

Parse, format, lint, and edit GMAT mission scripts from Python — a tree-sitter grammar and tooling.

Project description

gmat-script

Parse, format, lint, and edit GMAT .script mission files from Python — built on a tree-sitter grammar. The whole stack operates on script text; nothing here requires a GMAT install.

It ships the parser, a typed AST with a mutation API, a canonical formatter, and a static linter, plus a gmat-script command-line tool over the same engine. Editor tooling builds on top of the same tree as it lands.

Install

pip install gmat-script

gmat-script supports Python 3.10, 3.11, and 3.12. The wheel bundles a precompiled grammar, so the install needs no C or Node toolchain — and never GMAT.

Quick start

Parse a script — parse never raises on malformed input: it returns a tree carrying ERROR / MISSING nodes localised to the broken construct, surfaced through tree.errors.

from gmat_script import parse

tree = parse("Create Spacecraft Sat\nSat.SMA = 7000\n")

tree.has_errors      # False — the script is well-formed
tree.to_source()     # round-trips byte-for-byte to the input

Edit it through the typed AST — typed resources with dict-like field access. Each edit splices the source and re-parses, so untouched bytes are never disturbed and a corrupting edit is refused.

from gmat_script import Script

script = Script.parse("Create Spacecraft Sat\nSat.SMA = 7000\n")

script.spacecraft["Sat"]["SMA"]         # 7000 — read a field
script.spacecraft["Sat"]["SMA"] = 8000  # set it
script.rename_resource("Sat", "MainSat")  # rename, rewriting references
script.to_source()                      # the edited source

Format it — a deterministic, idempotent pretty-printer that re-lays-out without reordering.

from gmat_script import format

format("GMAT Sat.SMA=7000;\n")   # 'Sat.SMA = 7000\n'

Lint it — structural checks against the bundled field catalogue: unknown types and fields, type / enum / reference-target mismatches, duplicate names, unused or undeclared references.

from gmat_script import lint

for d in lint("Create Spcecraft Sat\n"):
    print(d.rule, d.message)   # unknown-resource-type unknown resource type 'Spcecraft'

Command line

The same engine drives the gmat-script command-line tool — a fast, install-free gate for CI:

$ gmat-script parse mission.script     # print the syntax tree; exit non-zero on a syntax error
$ gmat-script format --check *.script   # fail if any file is not in canonical form
$ gmat-script lint mission.script       # report structural problems; exit non-zero on an error

format rewrites files in place by default, or checks / diffs them with ruff-style exit codes. It also ships pre-commit hooks, so scripts are formatted on every commit — add the repo to your .pre-commit-config.yaml:

repos:
  - repo: https://github.com/astro-tools/gmat-script
    rev: v0.3.0
    hooks:
      - id: gmat-script-format        # auto-format on commit
      # - id: gmat-script-format-check  # or: check only, never write (CI)

Editor tooling

VS Marketplace Open VSX

The same engine drives an editor experience — highlighting, hover docs, live diagnostics, completion, go-to-definition, an outline, and format-on-save.

  • VS Code — the GMAT Script extension, on the Visual Studio Marketplace and Open VSX. Highlighting works on install; the richer features come from the language server (pip install "gmat-script[lsp]").
  • Neovim, Emacs, Helix, and the rest — a Language Server Protocol server (gmat-script-lsp, from the lsp extra) backs any LSP-capable editor.

See the VS Code extension guide and the language server guide.

The grammar surface

The tree-sitter grammar parses GMAT scripts (.script) and GmatFunctions (.gmf) — the same grammar for both — and re-emits any input byte-for-byte, comments and layout included. It is a deliberately permissive superset: Create <Type> <name> accepts any resource type and unknown command keywords parse as generic command nodes, so a new resource or command never needs a grammar change. The acceptance bar is concrete: every one of the 162 .script and 9 .gmf files shipped with NASA GMAT R2026a parses with zero errors and round-trips exactly.

See the grammar surface reference for the node taxonomy and the covered / deferred constructs.

The GMAT-free guarantee

Reading, checking, formatting, and transforming a script needs only this package — never a GMAT install. pip install gmat-script never pulls in, requires, or looks for GMAT or gmatpy; the only runtime dependency is tree-sitter. (GMAT is used at build time only, to generate the field catalogue the linter checks against.)

GMAT version

The grammar targets GMAT R2026a. Because it never enumerates resource types or command keywords, parsing is effectively version-independent — scripts from other releases parse too. Semantics that do vary by release (valid field names, enums, defaults) belong to the linter and are scoped to R2026a.

Those semantics live in a field catalogue reflected from R2026a (102 resource types, 2614 fields) and shipped as data inside the wheel, so the linter and editor tooling need no GMAT install. It is version-pinned and provenance-stamped, selectable per release, and adding another GMAT version is a data file — not a code change. See the field catalogue.

What gmat-script is not

  • Not a propagator or astrodynamics engine. It reads and transforms script text; it computes no orbits and models no physics.
  • Not a mission runner. Running a script is GMAT's job — gmat-script does no execution.
  • Not an engine-dependent validator. "Does it parse" is a structural question answered here; "does it run / converge" is a different question that needs GMAT.

Documentation

Full documentation — getting started, the grammar surface, the typed AST and editing guides, the formatter, the linter and the field catalogue, the command-line tool, the language server and VS Code extension, the error-reporting model, and the API reference — is at astro-tools.github.io/gmat-script.

License

MIT — part of the astro-tools organization.

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

gmat_script-0.3.0.tar.gz (467.3 kB view details)

Uploaded Source

Built Distributions

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

gmat_script-0.3.0-cp310-abi3-win_amd64.whl (128.5 kB view details)

Uploaded CPython 3.10+Windows x86-64

gmat_script-0.3.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (139.1 kB view details)

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

gmat_script-0.3.0-cp310-abi3-macosx_11_0_arm64.whl (126.1 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gmat_script-0.3.0-cp310-abi3-macosx_10_9_x86_64.whl (125.2 kB view details)

Uploaded CPython 3.10+macOS 10.9+ x86-64

File details

Details for the file gmat_script-0.3.0.tar.gz.

File metadata

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

File hashes

Hashes for gmat_script-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e55bbfa4739c3083935ff157d80bc52aee3d4c8c24028b89ce67d4e946c7765c
MD5 55ae9089b1de55b8b353df1c34244d8f
BLAKE2b-256 7333f46987746a949215cbf1949464a9ba16014429d394a699d1c618eab3d90d

See more details on using hashes here.

Provenance

The following attestation bundles were made for gmat_script-0.3.0.tar.gz:

Publisher: release.yml on astro-tools/gmat-script

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

File details

Details for the file gmat_script-0.3.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: gmat_script-0.3.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 128.5 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gmat_script-0.3.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ec8200166000a5b37da95e1958604832d25a372ad0ede2ff84baf46f6c3b92c9
MD5 f3e0f9cf38ac0bbcecb2214a706e7df3
BLAKE2b-256 f182a5a2955ba25c63937baa898eb4b598f3642e630d34b35162265d318c2323

See more details on using hashes here.

Provenance

The following attestation bundles were made for gmat_script-0.3.0-cp310-abi3-win_amd64.whl:

Publisher: release.yml on astro-tools/gmat-script

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

File details

Details for the file gmat_script-0.3.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for gmat_script-0.3.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 3052f02ec702d9487caa8c8255c9cbb294c14d2f304f41e8475401e0199cd598
MD5 52169dbe475d6590af66c132a277b5e0
BLAKE2b-256 90a5f60e11a3ea6d300628113c4ed5019894453bfd6c9a8ded76759aa3f12289

See more details on using hashes here.

Provenance

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

Publisher: release.yml on astro-tools/gmat-script

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

File details

Details for the file gmat_script-0.3.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gmat_script-0.3.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3b18dcd82da217067c8825a4b3b92d3ae95b279c72b7a58be9a458455c98beb0
MD5 2060bedc231534c19b3898dce7235ab3
BLAKE2b-256 d56750f47f84ba6e2785045c65b6e24920241bb8930313fe8becb929fcbf2d33

See more details on using hashes here.

Provenance

The following attestation bundles were made for gmat_script-0.3.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on astro-tools/gmat-script

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

File details

Details for the file gmat_script-0.3.0-cp310-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for gmat_script-0.3.0-cp310-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 53edded80cda547b1592f9fb9ab8a84e28da1d402bcb350d86541a08665ec012
MD5 b9443078673d72f18015d851dd829974
BLAKE2b-256 66f2586bebb42626246d91966e05a6fd2f8a8901a03348a6f54d38754a5aaab2

See more details on using hashes here.

Provenance

The following attestation bundles were made for gmat_script-0.3.0-cp310-abi3-macosx_10_9_x86_64.whl:

Publisher: release.yml on astro-tools/gmat-script

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