Comprehensive Ignition linting tool with naming conventions and empirical validation. Extends ia-eknorr/ignition-lint with enhanced features.
Project description
Ignition Lint
A comprehensive linting toolkit for Ignitionยฎ projects that combines naming convention validation, empirical schema checks, and CI/CD automation.
๐ Acknowledgments: The naming convention validation features in this project were inspired by the excellent work by Eric Knorr in the ia-eknorr/ignition-lint repository. We extend that foundation with broader project linting and automation support.
โจ Features
- ๐ฏ Naming Validation โ Enforces component and parameter styles across
view.jsonfiles - ๐ Perspective Linting โ Schema-aware checks against Perspective views, bindings, and event scripts
- ๐ข Expression Validation โ Detects
now()polling issues, unknown functions, and fragile component references in Ignition expressions - ๐ Script Analysis โ Validates inline Jython (from
view.json) and standalone Python scripts inscript-pythondirectories - ๐ Unused Property Detection โ Flags unreferenced
customandparamsproperties per view - ๐ Lint Suppression โ Suppress rules via CLI flags, ignore files, or inline comments
- โก FastMCP Server โ Provides AI agent integration for real-time validation workflows
- ๐ GitHub Action โ Drop-in CI integration for automated linting on push or PR
- ๐ง CLI Tooling โ
--targetfor any directory,--projectfor Ignition layouts, JSON output for agents - ๐ Production Data โ Rules validated across 12,220+ real industrial components
๐ Relationship to ia-eknorr/ignition-lint
| Feature | ia-eknorr/ignition-lint | whiskeyhouse/ignition-lint |
|---|---|---|
| View.json naming validation | โ Core feature | โ Enhanced implementation |
| Component style checking | โ PascalCase, camelCase, etc. | โ Same styles + custom regex |
| Parameter style checking | โ Multiple styles supported | โ Same + enhanced validation |
| GitHub Actions integration | โ Simple action | โ Enhanced action + examples |
| CLI tool | โ Action-only | โ Full CLI with local development |
| Project-wide linting | โ Files only | โ Entire Ignition projects |
| Script validation | โ View.json only | โ Python/Jython scripts |
| Empirical validation | โ Naming only | โ Production-validated rules |
| MCP/AI integration | โ Not available | โ FastMCP server for AI agents |
| Installation method | GitHub Action only | โ
pip / uv + GitHub Action |
When To Use Which
Use ia-eknorr/ignition-lint when you only need the original naming checks and a lightweight GitHub Action.
Use whiskeyhouse/ignition-lint when you want local CLI tooling, broader schema validation, MCP integration, or multiple lint types in CI.
๐ Quick Start
Install
# Install from PyPI
pip install ignition-lint
# Or use uv for workspace management
uv sync
CLI Usage
# Lint any directory recursively (finds view.json + .py files automatically)
ignition-lint --target /path/to/any/folder
# Lint a subdirectory for just Perspective views
ignition-lint -t /path/to/views/MyScreen --checks perspective
# Lint scripts only, JSON output for AI agent / MCP consumption
ignition-lint -t /path/to/scripts --checks scripts --report-format json
# Lint a standard Ignition project with all checks
ignition-lint --project /path/to/project --profile full
# Naming convention validation only
ignition-lint --project /path/to/project --naming-only
# Suppress specific rules globally
ignition-lint --project /path/to/project --profile full --ignore-codes NAMING_PARAMETER,LONG_LINE
GitHub Actions
Add to .github/workflows/ignition-lint.yml:
name: Ignition Lint
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: whiskeyhouse/ignition-lint@v1
with:
files: "**/view.json"
component_style: "PascalCase"
parameter_style: "camelCase"
ignore_codes: "" # optional: comma-separated rule codes to suppress
๐ ๏ธ Tooling Overview
ignition-lintโ CLI entry point for project and file lintingignition-lint-serverโ FastMCP server for agent integrationsignition-lint-actionโ Wrapper used by the GitHub Action
๐ Project Layout
.
โโโ src/ignition_lint/ # Core package modules (CLI, server, checkers)
โโโ docs/ # Detailed strategy and integration guides
โโโ examples/ # Example scripts and views for demo scenarios
โโโ schemas/ # Component schemas and supporting data
โโโ scripts/ # Analysis tooling and supporting utilities
โโโ tests/ # Automated tests
โโโ ignition-lint # Convenience entry point for the CLI
โโโ action.yml # GitHub Action definition
โโโ pyproject.toml # Project metadata and build configuration
โโโ uv.lock # Resolved dependency versions (uv)
๐ Documentation Highlights
docs/SUPPRESSION.mdโ Suppressing rules: CLI flags, ignore files, inline commentsdocs/IGNITION-LINTER-INTEGRATION.mdโ Integrating the linter into Ignition projectsdocs/LINTER-INTEGRATION-STRATEGY.mdโ Recommended adoption patternsdocs/VALIDATION-LINTING-STRATEGY.mdโ Deep dive into validation methodologyexamples/โ Ready-to-run scenarios for demonstrating linting outcomes
๐ Lint Suppression
Three mechanisms let you control which rules fire and where:
--ignore-codesflag โ Suppress rules globally across the entire run.ignition-lintignorefile โ Gitignore-style patterns with optional rule scoping per path- Inline comments โ
# ignition-lint: disable=CODEdirectives in Python scripts
# Suppress rules from the command line
ignition-lint -p ./project --profile full --ignore-codes NAMING_PARAMETER,NAMING_COMPONENT
# .ignition-lintignore โ place in your --project root
scripts/generated/**
com.inductiveautomation.perspective/views/_REFERENCE/**:NAMING_COMPONENT,GENERIC_COMPONENT_NAME
# ignition-lint: disable-file=MISSING_DOCSTRING
def legacy_helper():
pass
See docs/SUPPRESSION.md for the full guide including all directive types, pattern syntax, rule code reference, and CI/CD examples.
๐ค FastMCP Integration
Run the FastMCP server to expose linting capabilities to AI agents:
ignition-lint-server --project /path/to/project
Connect FastMCP-compatible clients to the server for conversational linting, contextual file inspection, and auto-fix suggestions.
๐งช Testing
Use uv or pytest to run the test suite:
uv run pytest
# or
pytest
๐ License
MIT License. See LICENSE for details.
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 ignition_lint_toolkit-0.1.0.tar.gz.
File metadata
- Download URL: ignition_lint_toolkit-0.1.0.tar.gz
- Upload date:
- Size: 381.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
124d82a03d59fb09618ecde21ffa8039cfaaff83f203ce16a2284e0effa5f9cb
|
|
| MD5 |
a69b9f2a9726dc647afa3862448a74c7
|
|
| BLAKE2b-256 |
4bda92bcab22630dc13e9be49fdc786bef79f0ef0494f0d8d37f972613a46179
|
Provenance
The following attestation bundles were made for ignition_lint_toolkit-0.1.0.tar.gz:
Publisher:
release.yml on WhiskeyHouse/ignition-lint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ignition_lint_toolkit-0.1.0.tar.gz -
Subject digest:
124d82a03d59fb09618ecde21ffa8039cfaaff83f203ce16a2284e0effa5f9cb - Sigstore transparency entry: 923251802
- Sigstore integration time:
-
Permalink:
WhiskeyHouse/ignition-lint@7d53c7480492b985acae760407841e5cea19aafa -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/WhiskeyHouse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7d53c7480492b985acae760407841e5cea19aafa -
Trigger Event:
push
-
Statement type:
File details
Details for the file ignition_lint_toolkit-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ignition_lint_toolkit-0.1.0-py3-none-any.whl
- Upload date:
- Size: 50.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35b2c44273cd1343807642461616f9a80a2a0cfca0140866547e645130a63101
|
|
| MD5 |
4d8e70f902c57851abbcd0efff5d3341
|
|
| BLAKE2b-256 |
11ba84397f0e206450cd1e187ef036355ec1b45b05b601ac9ba4b590dcf071e6
|
Provenance
The following attestation bundles were made for ignition_lint_toolkit-0.1.0-py3-none-any.whl:
Publisher:
release.yml on WhiskeyHouse/ignition-lint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ignition_lint_toolkit-0.1.0-py3-none-any.whl -
Subject digest:
35b2c44273cd1343807642461616f9a80a2a0cfca0140866547e645130a63101 - Sigstore transparency entry: 923251826
- Sigstore integration time:
-
Permalink:
WhiskeyHouse/ignition-lint@7d53c7480492b985acae760407841e5cea19aafa -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/WhiskeyHouse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7d53c7480492b985acae760407841e5cea19aafa -
Trigger Event:
push
-
Statement type: