Skip to main content

A unified CLI tool for code formatting, linting, and quality assurance

Project description

Lintro

Lintro Logo

A comprehensive CLI tool that unifies various code formatting, linting, and quality assurance tools under a single command-line interface.

What is Lintro?

Lintro is a unified command-line interface that brings together multiple code quality tools into a single, easy-to-use package. Instead of managing separate tools like Ruff, Prettier, Yamllint, and others individually, Lintro provides a consistent interface for all your code quality needs.

Python Coverage License Tests CI Docker PyPI

CodeQL OpenSSF Scorecard

Why Lintro?

  • 🚀 Unified Interface: One command to run all your linting and formatting tools
  • 🎯 Consistent Output: Beautiful, standardized output formats across all tools
  • 🔧 Auto-fixing: Automatically fix issues where possible
  • 🐳 Docker Ready: Run in isolated containers for consistent environments
  • 📊 Rich Reporting: Multiple output formats (grid, JSON, HTML, CSV, Markdown)
  • ⚡ Fast: Optimized execution with efficient tool management
  • 🔒 Reliable: Comprehensive test suite with 84% coverage

Features

  • Unified CLI for multiple code quality tools
  • Multi-language support - Python, JavaScript, YAML, Docker, and more
  • Auto-fixing capabilities where possible
  • Beautiful output formatting with table views
  • Docker support for containerized environments
  • CI/CD integration with GitHub Actions

Supported Tools

Tool Language Auto-fix
Actionlint ⚙️ GitHub Workflows -
Bandit 🐍 Python -
Darglint 🐍 Python -
Hadolint 🐳 Dockerfile -
Prettier 🟨 JS/TS · 🧾 JSON
Black 🐍 Python
Ruff 🐍 Python
Yamllint 🧾 YAML -

Quick Start

Installation

From PyPI (Recommended)

pip install lintro

Development Installation

# Clone and install in development mode
git clone https://github.com/TurboCoder13/py-lintro.git
cd py-lintro
pip install -e .

Basic Usage

# Check all files for issues
lintro check

# Auto-fix issues where possible
lintro format

# Use grid formatting for better readability
lintro check --output-format grid

# Run specific tools only
lintro check --tools ruff,prettier,actionlint

# List all available tools
lintro list-tools

Docker Usage

Quick Start with Published Image

# Run Lintro directly from GitHub Container Registry
docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check

# With specific formatting
docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check --output-format grid

# Run specific tools only
docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check --tools ruff,prettier

Development Setup

# Clone and setup
git clone https://github.com/TurboCoder13/py-lintro.git
cd py-lintro
chmod +x scripts/**/*.sh

# Run with local Docker build
./scripts/docker/docker-lintro.sh check --output-format grid

See Docker Documentation for detailed usage.

Advanced Usage

Output Formatting

# Grid format (recommended)
lintro check --output-format grid --group-by code

# Export to file
lintro check --output report.txt

# Different grouping options
lintro check --output-format grid --group-by file  # Group by file
lintro check --output-format grid --group-by code  # Group by error type

Tool-Specific Options

# Exclude patterns
lintro check --exclude "migrations,node_modules,dist"

# Tool-specific options use key=value (lists with |)
lintro check --tool-options "ruff:line_length=88,prettier:print_width=80"

# Ruff + Black cooperation:
# Lintro prefers Ruff for linting and Black for formatting.
# When Black is configured as a post-check, Lintro disables Ruff formatting by
# default to avoid double-formatting. Override if needed:
lintro format --tool-options ruff:format=True        # force Ruff to format
lintro check  --tool-options ruff:format_check=True  # force Ruff format check

CI/CD Integration

Lintro includes pre-built GitHub Actions workflows:

  • Automated code quality checks on pull requests
  • Coverage reporting with badges
  • Multi-tool analysis across your entire codebase

See GitHub Integration Guide for setup instructions.

Documentation

For comprehensive documentation, see our Documentation Hub which includes:

Development

# Run tests
./scripts/local/run-tests.sh

# Run Lintro on itself
./scripts/local/local-lintro.sh check --output-format grid

# Docker development
./scripts/docker/docker-test.sh
./scripts/docker/docker-lintro.sh check --output-format grid

For detailed information about all available scripts, see Scripts Documentation.

Dependencies

  • Renovate for automated dependency updates
  • Python 3.13+ with UV package manager
  • Optional: Docker for containerized usage

License

This project is licensed under the MIT License. See the LICENSE file for details.

Troubleshooting

Common Issues

"Command not found: lintro"

Solution: Ensure Lintro is installed correctly:

pip install lintro
# or for development
pip install -e .

"Tool not found" errors

Solution: Install the required tools or use Docker:

# Install tools individually
pip install ruff darglint
npm install -g prettier
pip install yamllint
# or use Docker (recommended)
docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check

Permission errors on Windows

Solution: Run as administrator or use WSL:

# Use WSL for better compatibility
wsl
pip install lintro

Docker permission issues

Solution: Add your user to the docker group:

sudo usermod -aG docker $USER
# Log out and back in

Slow performance

Solution: Use exclude patterns and specific tools:

# Exclude large directories
lintro check --exclude "node_modules,venv,.git"

# Run specific tools only
lintro check --tools ruff,prettier

Getting Help

Contributing

We welcome contributions! See our Contributing Guide for details on:

  • Adding new tools
  • Reporting bugs
  • Submitting features
  • Code style guidelines

Project details


Release history Release notifications | RSS feed

This version

0.6.2

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lintro-0.6.2.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

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

lintro-0.6.2-py3-none-any.whl (128.4 kB view details)

Uploaded Python 3

File details

Details for the file lintro-0.6.2.tar.gz.

File metadata

  • Download URL: lintro-0.6.2.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lintro-0.6.2.tar.gz
Algorithm Hash digest
SHA256 e7956d239129f5aa8a5b38213518bd59bfa43bf20e9a1ebdc474eca45663697e
MD5 b30182dd510aea4ea37ada9e38f3b7bc
BLAKE2b-256 736fdc2b06dc6779da524476895ea335e5b09b65b377207ec15143d41f792d34

See more details on using hashes here.

Provenance

The following attestation bundles were made for lintro-0.6.2.tar.gz:

Publisher: publish-pypi-on-tag.yml on TurboCoder13/py-lintro

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

File details

Details for the file lintro-0.6.2-py3-none-any.whl.

File metadata

  • Download URL: lintro-0.6.2-py3-none-any.whl
  • Upload date:
  • Size: 128.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lintro-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7fbe5ad1403a48e634c841431389f45c7a22d5cf75cb549cc0fe49f46ceca2d3
MD5 9339dc658c08cc67e8f0da80deb6f496
BLAKE2b-256 7d1b1251bcb3f8e438c5ca7e022b75434bf4e123ea3ecbab39f4f87ce7900cc3

See more details on using hashes here.

Provenance

The following attestation bundles were made for lintro-0.6.2-py3-none-any.whl:

Publisher: publish-pypi-on-tag.yml on TurboCoder13/py-lintro

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