Skip to content

Latest commit

 

History

163 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

prettyout

Pretty, grouped output for CLI linters and security scanners. Works transparently — install once, use your tools as usual.

$ ruff check .

E501 (12) — Line too long
  src/main.py — lines 42, 87, 103
  src/utils.py — lines 15, 29

F401 (3) — Module imported but unused
  src/main.py — line 1
  tests/test_api.py — lines 3, 11

3 issues · 2 rules · 3 files

Supports 14 tools across Python, JavaScript/TypeScript, Go, Rust, Shell, Docker, and security scanning.

Supported tools

Tool Language / domain
ruff Python linter
mypy Python type checker
basedpyright Python type checker (strict)
bandit Python security linter
pylint Python linter
eslint JavaScript / TypeScript linter
biome JS / TS / JSON formatter and linter
stylelint CSS / SCSS / Less linter
shellcheck Shell script linter
hadolint Dockerfile linter
golangci-lint Go meta-linter
cargo clippy Rust linter
trivy Security vulnerability scanner
semgrep Semantic code analysis

Install

Install the main binary and any plugins you need:

go install github.com/gudoshnikovn/prettyout/cmd/prettyout@latest

# Python
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-ruff@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-mypy@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-basedpyright@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-bandit@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-pylint@latest

# JavaScript / TypeScript
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-eslint@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-biome@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-stylelint@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-npm-audit@latest

# Shell / Docker
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-shellcheck@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-hadolint@latest

# Go / Rust
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-golangci@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-cargo-clippy@latest

# Security
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-trivy@latest
go install github.com/gudoshnikovn/prettyout/cmd/prettyout-semgrep@latest

Setup

prettyout setup
source ~/.zshrc   # or restart terminal

This adds eval "$(prettyout hook zsh)" to your rc file. After that, supported tools automatically produce pretty output.

For bash:

prettyout setup --shell bash
source ~/.bashrc

Usage

Just use your tools as usual:

ruff check .
eslint src/
golangci-lint run ./...
trivy fs .

Only intercepted subcommands are wrapped — ruff format runs unchanged. Flags like --watch are passed through without buffering.

Manage tools

prettyout list              # show all tools and their status
prettyout enable ruff       # enable pretty output for ruff
prettyout disable ruff      # fall back to original output
prettyout doctor            # diagnose setup problems

Configuration

~/.config/prettyout/config.yaml:

enabled:
  ruff: true
  eslint: true

settings:
  ruff:
    colors: true
    group_by: rule        # "rule" (default) or "file"
    max_message_length: 100
    only_rules: [E501, F401]   # optional: filter to specific rules
    only_files: [src/]         # optional: filter to specific paths

ci_mode: auto   # auto | always | never
                # auto = skip interception when stdout is not a TTY

Per-project override: .prettyout.yaml in the project root (same schema, all fields optional).

Group by rule vs group by file

Group by rule (default) — best for fixing one type of issue across the whole codebase:

E501 (12) — Line too long
  src/main.py — lines 42, 87
  src/utils.py — line 15

Group by file — best for reviewing everything wrong in a specific file:

src/main.py
  E501 — lines 42, 87
  F401 — line 1

Switch per-project:

# .prettyout.yaml
settings:
  ruff:
    group_by: file

Environment variables

All config options can be overridden per-run without touching config files:

Variable Values Description
PO_GROUP_BY rule / file Override group_by for this run
PO_SORT alpha / count Override sort order for this run
PO_ONLY_RULES E501,F401 Comma-separated rule filter
PO_ONLY_FILES src/,tests/ Comma-separated path prefix filter
PO_STATS 1 Print a compact count table instead of full output
# Show only E501 violations, sorted by frequency
PO_ONLY_RULES=E501 PO_SORT=count ruff check .

# Compact stats table for the whole codebase
PO_STATS=1 ruff check .

Writing a plugin

A plugin is any executable named prettyout-<toolname> that reads JSON from stdin and writes formatted text to stdout.

Copy cmd/prettyout-example/main.go as your starting point — it's a fully working, well-commented template with both group_by: rule and group_by: file modes, filtering, sorting, stats mode, and all the edge cases handled.

import "github.com/gudoshnikovn/prettyout/pkg/formatter"

func main() {
    formatter.RunWithConfig("mytool", func(data []byte, cfg formatter.Config) error {
        // parse JSON from data into a slice of your structs
        // map them to []formatter.Issue
        // return formatter.Render(issues, cfg)
    })
}

Register the tool in custom_tools in your config:

custom_tools:
  mytool:
    plugin: prettyout-mytool
    output_args: [--json]
    intercept_subcommands: [lint]  # optional: only intercept these subcommands

To add your tool to the built-in registry (available to all prettyout users), open a PR adding an entry to internal/registry/builtin.yaml.

See docs/architecture.md for a full description of how everything works.

Use plugins directly

ruff check . --output-format=json | prettyout-ruff
eslint --format json src/ | prettyout-eslint
golangci-lint run --out-format json ./... | prettyout-golangci
trivy fs --format json . | prettyout-trivy

About

Pretty, grouped output for CLI tools that support JSON output. Works transparently — install once, use tools as usual.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages