Skip to main content

poly-overview

What poly is — the native, tree-sitter, native-toolchain, quality, and built-in-rule-pack tiers, language coverage, and when to reach for it

Informações da origem

Repositório
Goldziher/poly
Última atividade na origem
14 de outubro de 2026 às 17:24
Idioma detectado do SKILL.md
inglês
Estrelas
20
Forks
1

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Explorador de arquivos
2 arquivos

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
description
What poly is — the native, tree-sitter, native-toolchain, quality, and built-in-rule-pack tiers, language coverage, and when to reach for it
name
poly-overview
license
MIT
metadata
{"author":"Goldziher","repository":"https://github.com/Goldziher/poly"}
<!-- AI-RULEZ :: GENERATED FILE — DO NOT EDIT Content-Hash: blake3:273b80b1cc5f091780eac739023a29774686024091327f99c639532e042d2ff6 Source-Hash: blake3:840c919261146454e2836095406355dd3ba8664fc068055c202682015400e43f Schema-Version: v1 --> # poly Overview poly is a single pure-Rust binary that lints and formats a whole repository across languages. It wraps best-in-class tools as in-process crate backends and falls back to a tree-sitter generic tier for everything else, so it runs the same on any machine and in CI. No system tool is ever *required*; the one scoped exception is the native-toolchain tier below, which uses a language's canonical CLI when it happens to be installed. ## Per-language coverage tiers - **Tier 1 — native in-process backends.** Highest fidelity, compiled straight into the binary and registered per language in `registry.rs`: `ruff` (Python), `oxc` (JS/TS/JSX/TSX/JSON/JSONC), `taplo` (TOML), `rumdl` (Markdown/MDX), `sqruff` (SQL), YAML, `malva` (CSS/SCSS/LESS) + `biome` (CSS/SCSS), `markup_fmt` (HTML/Vue/Svelte/Astro/Angular/Jinja/ Vento/Mustache/XML), `mago` (PHP), `rubyfmt` (Ruby), `graphql` + `biome` (GraphQL), `nixfmt` (Nix), `hcl`, Dockerfile, dotenv, and INI. - **Tier 2 — tree-sitter generic tier.** The catch-all for the long tail (Elixir, C/C++, C#, protobuf, and the rest of 300+ grammars). CST-driven structural reindent for brace-family grammars, whitespace normalization otherwise, and a `LEAVE_UNTOUCHED` list for grammars where whitespace is significant. Best-effort, pure Rust, grammars loaded on demand — never gofmt/rustfmt parity, by design. - **Native-toolchain tier (scoped exception).** A language's canonical first-party CLI run per file over stdin/stdout when installed: `rustfmt`, `gofmt` and `shellcheck` are **on by default when found on PATH**; `zig fmt`, `shfmt`, `google-java-format`, `ktfmt`, `styler` (R), `swift-format`, `dart format`, and `gleam format` are opt-in via `[fmt.<lang>.<tool>] enabled = true` / `[lint.<lang>.<tool>] enabled = true`. When the tool is absent, formatting falls through to tier 2 with an info-level notice, so the zero-dependency guarantee always holds. ## Cross-cutting engines (every language) Four engines are appended to every language regardless of tier: - **`typos`** — spelling in identifiers, comments, and strings. - **`quality`** — structural code-quality metrics off the tree-sitter parse: file/function/ type length, nesting depth, cyclomatic complexity, parameter count, and `lazy-ignore`. Warning severity, on by default. The structural rules need a verified node-kind table and run for Python, Rust, Go, JavaScript, TypeScript, TSX, Java, Kotlin, C, C++, C#, and Ruby; `magic-number` and `law-of-demeter` are opt-in. Configure under `[lint.quality]`. - **`astgrep`** — ast-grep pattern rules. poly embeds a **built-in rule pack** of 26 rules across 9 languages (C#, Elixir, Go, Java, Kotlin, Python, Ruby, Rust, Swift), on by default; 13 of them ship `severity: off`. User rules under `[rules] dirs` (default `.poly/rules`) layer on top and replace a pack rule sharing its `id`. Disable the pack wholesale with `[rules] builtin = false`. - **`uncomment`** — opt-in comment removal, off unless `[lint.uncomment] enabled = true`. ## When to use it Reach for poly as the single lint/format gate for any repo: local dev, git hooks, and CI. It replaces invoking ruff / oxlint / rustfmt / prettier individually — one binary, one `poly.toml`, one report. A language with no native backend still gets tier-2 formatting plus the cross-cutting engines, so poly covers the whole tree rather than only the languages you wired up by hand.
Ver no GitHub