SysML v2 textual notation style checker and formatter
Project description
sysml-style
SysML v2 textual notation style checker and formatter. Lints and auto-formats .sysml files using configurable rules.
Installation
pip install sysmlpy # required dependency
pip install tomli # optional — only needed on Python < 3.11 for pyproject.toml config
Then run from the project root:
python -m sysml_style --help
Or install the package in editable mode:
pip install -e .
sysml-style --help
Usage
sysml-style check [OPTIONS] FILE [FILE ...]
sysml-style format [OPTIONS] FILE [FILE ...]
check — Lint files for style issues
sysml-style check uav.sysml
sysml-style check --ignore SML401,SML202 uav.sysml
sysml-style check --quiet uav.sysml
Issues are printed as:
file.sysml:3:5: SML101 expected spaces around '=' operator [fixable]
Exit code: 0 if no issues, 1 if issues found.
format — Auto-format files
sysml-style format uav.sysml # rewrites in-place
sysml-style format --check uav.sysml # exit 1 if would change (for CI)
sysml-style format --diff uav.sysml # show unified diff, don't write
sysml-style format --quiet uav.sysml
Exit code: 0 if no changes, 1 if --check would reformat, 2 on parse errors.
Config
Create a [tool.sysml-style] section in your pyproject.toml:
[tool.sysml-style]
max_line_length = 120
indent_size = 4
ignore = ["SML401", "SML202"]
naming_convention = "strict" # or "relaxed"
sysml-style walks up from the target file to find pyproject.toml. Use --config PATH to point to a specific file. Without a config file, sensible defaults are used.
Rules
SML1xx — Whitespace
| Code | Rule | Fixable |
|---|---|---|
| SML101 | Spaces around = and :>> operators |
yes |
| SML102 | No space before ; |
yes |
| SML103 | No trailing whitespace | yes |
| SML104 | Indentation is a multiple of the detected unit (2/3/4 spaces) | no |
| SML105 | Blank line between top-level definitions | yes |
| SML106 | Space before { |
yes |
SML2xx — Naming
| Code | Rule | Fixable |
|---|---|---|
| SML201 | Definition names should be UpperCamelCase | no |
| SML202 | Usage (feature) names should be lowerCamelCase | no |
| SML203 | Port names should end with Port suffix |
no |
| SML204 | Avoid spaces in element names; use CamelCase ⚠️ | no |
In relaxed naming mode, single-quoted names like 'My Part' are allowed without case enforcement.
⚠️ SML204 is a warning-level rule. Some organizations use spaces in quoted names for readability. Add
--ignore SML204if this doesn't fit your workflow.
SML3xx — Structure
| Code | Rule | Fixable |
|---|---|---|
| SML301 | import/alias before definitions |
no |
| SML302 | Empty block body {} can be omitted |
no |
| SML303 | Filename matches outermost package name ⚠️ |
no |
| SML304 | Usages should have a descriptive name (no anonymous usages; redefinitions excluded) | no |
| SML305 | import must have a visibility parameter (public/private/protected) |
yes |
⚠️ SML303 is a warning-level rule. Filename conventions vary across organizations — some use
snake_case.sysml, others mirror the package name exactly. Add--ignore SML303or setignore = ["SML303"]in your config if the rule doesn't fit your workflow.SML305 is fixable — the fix adds
publicbefore the import, which is the safest default visibility.
SML4xx — Idioms
| Code | Rule | Fixable |
|---|---|---|
| SML401 | Doc comment before element, not after ; |
no |
| SML402 | Use doc keyword for documentation comments |
no |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sysml_style-0.3.5.tar.gz.
File metadata
- Download URL: sysml_style-0.3.5.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8971df6b20c0d1734bf735c7c2ad4fe42e748f2a065f1a3d234e3805bd1b307b
|
|
| MD5 |
62049115269d770299617779cf2376b6
|
|
| BLAKE2b-256 |
e3b0ed4e052b64c3d9fc953f8df570b64c8030e05bb2b382883863c4670d90c3
|
Provenance
The following attestation bundles were made for sysml_style-0.3.5.tar.gz:
Publisher:
python-publish.yml on mycr0ft/sysml-style
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sysml_style-0.3.5.tar.gz -
Subject digest:
8971df6b20c0d1734bf735c7c2ad4fe42e748f2a065f1a3d234e3805bd1b307b - Sigstore transparency entry: 1806700184
- Sigstore integration time:
-
Permalink:
mycr0ft/sysml-style@ea731618175473d6fa8c86042311ffd294364b98 -
Branch / Tag:
refs/tags/v0.3.5 - Owner: https://github.com/mycr0ft
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@ea731618175473d6fa8c86042311ffd294364b98 -
Trigger Event:
release
-
Statement type:
File details
Details for the file sysml_style-0.3.5-py3-none-any.whl.
File metadata
- Download URL: sysml_style-0.3.5-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a6a705209a96a9ff5659ec1d2ebc70556f856e2a197ae9c0bf8539439d2524c
|
|
| MD5 |
794ed7446be0d3e72edf347316f36afe
|
|
| BLAKE2b-256 |
5a48ae35a2ba26f0e0ef400b97a459a8388512be2ee8b24971aadc7c83acc81f
|
Provenance
The following attestation bundles were made for sysml_style-0.3.5-py3-none-any.whl:
Publisher:
python-publish.yml on mycr0ft/sysml-style
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sysml_style-0.3.5-py3-none-any.whl -
Subject digest:
6a6a705209a96a9ff5659ec1d2ebc70556f856e2a197ae9c0bf8539439d2524c - Sigstore transparency entry: 1806700220
- Sigstore integration time:
-
Permalink:
mycr0ft/sysml-style@ea731618175473d6fa8c86042311ffd294364b98 -
Branch / Tag:
refs/tags/v0.3.5 - Owner: https://github.com/mycr0ft
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@ea731618175473d6fa8c86042311ffd294364b98 -
Trigger Event:
release
-
Statement type: