SattLint
SattLint is a Python toolkit for SattLine projects. It provides syntax-checking, configurable static analysis, ICF validation and formatting, graphics-rule analysis, and an interactive terminal UI.
What SattLint Does
- Check whether a SattLine file parses correctly
- Analyze a full program or library together with its dependencies
- Find issues such as unused variables, written-but-never-read variables, and shadowing
- Validate and format ICF files and check graphics rules
- Inspect parser outputs when something looks wrong
Requirements
- Windows or Linux
- Python 3.13 or newer
- pipx (for clean, isolated installation)
- A local copy of your SattLine code
Installation
1. Get the source
git clone https://github.com/SorenHJohansen/SattLint.git
cd SattLint
2. Install pipx
Linux
python3 -m pip install --user pipx
python3 -m pipx ensurepath
Restart your terminal after this.
Windows
py -m pip install --user pipx
py -m pipx ensurepath
Restart your terminal after this.
3. Install SattLint
pipx install .
This installs SattLint globally in an isolated environment.
4. Verify
sattlint --version
sattlint syntax-check tests/fixtures/sample_sattline_files/SattLineFullGrammarTest.s
Quick Start
sattlint syntax-check path/to/Program.s
Output:
OK— valid file- Error message — invalid file
Exit codes:
0— success1— a real problem was found (e.g.syntax-checkfound a syntax error)2— invalid arguments or configuration
analyze reports issues in its output but exits 0 once the analysis runs;
among the CLI commands, only syntax-check uses exit code 1 for findings.
Available Commands
sattlint syntax-check path/to/Program.s
sattlint init # scaffold a .slproj project file
sattlint analyze --list-checks # list available analyzers
sattlint analyze --check naming-consistency
sattlint validate-config
sattlint cache-prune
Shared flags for config-driven commands:
sattlint --config path/to/config.toml analyze --check naming-consistency
sattlint --config path/to/config.toml --no-cache analyze --check naming-consistency
sattlint --project path/to/project.slproj analyze --check naming-consistency
For the full command reference, run sattlint --help.
Interactive Shell
sattlint
Opens the Textual interactive terminal UI with the following views:
- Analyze — queue curated reports and additional analyzers
- Setup — configure paths, targets, mode, and cache settings
- Help — first-time guidance and workflow explanation
Project Files (.slproj)
A .slproj project file captures all analysis settings in a single
checked-in file: targets, directories, mode, and output/cache paths. Paths
inside a .slproj are relative to the file itself, so projects are portable
across machines.
sattlint initscaffolds a new.slprojin the current directory.sattlint --project PATH <command>uses an explicit project file.- Without
--projector--config, SattLint auto-discovers a.slprojby walking up from the current working directory. - Project settings merge over
~/.config/sattlint/config.tomldefaults.
Prefer a .slproj project file over editing ~/.config/sattlint/config.toml
directly.
First-Time Setup
The first time SattLint runs, it creates a config file automatically:
- Windows:
%APPDATA%\sattlint\config.toml - Linux:
~/.config/sattlint/config.toml
For a portable, checked-in setup, create a .slproj project file with
sattlint init instead; project settings merge over these config defaults
(see Project Files).
Configuration
-
Start SattLint with
sattlint -
Select Setup
-
Configure the following:
program_dir— your SattLine program folderABB_lib_dir— shared or ABB librariesother_lib_dirs— any additional librariesanalyzed_programs_and_libraries— what to analyzeicf_dir— directory used for ICF validation and formattingEdit graphics rules— define expected module invocation or clipping rules (saved as JSON)
-
Save with Save configuration
-
Select Analyze to run checks
Note: Use names without file extensions (e.g.
MyProgram, notMyProgram.s).
Updating
pipx install --force .
Graphics Rule Configuration
- Open Setup, then Edit graphics rules to add or update expected invocation coordinates, flags, and clipping-related values
- Use
unit:selectors when a module should look the same in every detected unit (e.g.unit:L1orunit:L1.L2.UnitControl) - Use
equipment:selectors when a module should look the same inside every equipment module (e.g.equipment:L1.L2.EquipModPanelShort) - Open Analyze, then run Validate graphics rules from Structure & modules to report modules that are not to spec
- Run
sattlint validate-configto confirm the graphics rules JSON path is valid
Common Problems
sattlint not found
pipx is not on your PATH. Run pipx ensurepath and restart your terminal.
Python version error
Install Python 3.13+ and reinstall with pipx install --force ..
Targets not found
- Names must not include file extensions
- Paths in config must be correct
- Mode (
official/draft) must match your files
Missing libraries
Add missing folders to ABB_lib_dir or other_lib_dirs.
Results look outdated
Use sattlint --no-cache analyze to skip the AST cache, or run sattlint cache-prune to remove stale cache artifacts before re-analyzing.
For Developers
See CONTRIBUTING.md for development setup, tests, and tooling.
License
SattLint is released under the MIT License.
Metadata
Release files for sattlint 2026.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| sattlint-2026.9.1.tar.gz | 497.5 kB | With provenance | Details for sattlint-2026.9.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| sattlint-2026.9.1-py3-none-any.whl | Python 3 | none | any | Details for sattlint-2026.9.1-py3-none-any.whl |
Total release size: 1.1 MB
Release files / sattlint-2026.9.1.tar.gz
| Download URL | sattlint-2026.9.1.tar.gz |
|---|---|
| Size | 497.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e9f542ff054f592990fe30705e87f9f10293a44f0f3cfa1f0b6bff1e46c91bf4
|
|
BLAKE2b-256 checksum How to use checksums |
b434b3ffd7aa0d146de3127bd0f2d3093241e3c3c320b0023e2182e7774f3a17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logRelease files / sattlint-2026.9.1-py3-none-any.whl
| Download URL | sattlint-2026.9.1-py3-none-any.whl |
|---|---|
| Size | 628.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
236d76a2f26ab566148d9d89ca1c1889d99983ddcab04dba86b484330427fda6
|
|
BLAKE2b-256 checksum How to use checksums |
5e8adc17c8b0e8fc9228d57ba58fd304b0ab6e7906f57ead3ede9d7965d3870d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logSecurity for sattlint 2026.9.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for sattlint-2026.9.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.