• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lpenz / omnilint / 33692426493
89%
main: 89%

Build:
Build:
LAST BUILD BRANCH: v0.10.0
DEFAULT BRANCH: main
Ran 02 Sep 2026 10:52PM UTC
Jobs 1
Files 49
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

02 Sep 2026 10:51PM UTC coverage: 89.087% (-0.7%) from 89.748%
33692426493

push

github

lpenz
refactor: replace per-linter boilerplate with shared CommandLinter

Every external-tool linter duplicated the same plumbing: a struct holding a
PathBuf and a Linter, a new() that constructed a Command, spawned the process
and stored it, and a manual Stream impl whose poll_next delegated to a shared
free function. This was verbose, error-prone, and scattered the common logic
across 37 nearly-identical files.

Introduce a single data-driven implementation in src/linters/mod.rs:

- Spec: a small descriptor (linter name, static args, optional dynamic
  extra_args, whether findings are on stderr, how to resolve the executable,
  and a line->Vec<Entry> parser). Defaults cover the common cases so each
  linter only overrides what it needs.
- Executable: picks between looking the binary up by the linter's own name
  (Named) or via executable_for_linter (Mapped), used by go-vet and py_compile.
- CommandLinter: owns the spawned Linter plus a per-line parse fn and a
  VecDeque that buffers the multiple entries a single output line may yield
  (needed by eslint/mypy). It replaces the old free poll_next while preserving
  the "linter not found" single-entry behavior and stderr/stdout selection.
- into_entries: adapts the single-finding parse_line -> Option<Entry> helpers
  used by most custom linters to the new Vec-returning parser signature.
- linter_stream!: a macro that emits the delegating Stream impl for each thin
  wrapper struct, so linter modules no longer hand-write any stream code.

Each linter module is reduced to a new() that builds a Spec plus a parse
function; the custom parse_line logic and its unit tests are unchanged.
parse_line_standard now returns Vec<Entry> and fits the new parser signature
directly.

Net result: 887 insertions, 1470 deletions. All checks pass (cargo fmt,
cargo clippy, cargo test, test-nix.sh).

372 of 527 new or added lines in 38 files covered. (70.59%)

8 existing lines in 8 files now uncovered.

2547 of 2859 relevant lines covered (89.09%)

10.77 hits per line

Uncovered Changes

Lines Coverage ∆ File
24
86.6
-2.62% src/linters/mod.rs
12
56.25
9.03% src/linters/govet.rs
11
79.37
18.39% src/linters/eslint.rs
11
60.61
9.32% src/linters/stylelint.rs
10
62.5
0.5% src/linters/oxlint.rs
10
62.5
13.72% src/linters/perlcritic.rs
9
62.07
10.72% src/linters/staticcheck.rs
7
80.0
15.71% src/linters/rubocop.rs
6
79.49
16.22% src/linters/chktex.rs
3
96.47
6.09% src/linters/mypy.rs
2
95.35
-4.65% src/linters/bash.rs
2
95.92
-4.08% src/linters/cljkondo.rs
2
93.02
-5.12% src/linters/cppcheck.rs
2
95.24
-4.76% src/linters/hadolint.rs
2
94.12
-5.88% src/linters/jq.rs
2
96.23
-3.77% src/linters/ktlint.rs
2
93.33
-6.67% src/linters/luac.rs
2
96.55
-3.45% src/linters/luau.rs
2
94.34
-4.07% src/linters/markdownlint.rs
2
96.15
-3.85% src/linters/nix_compile.rs
2
96.15
-3.85% src/linters/proselint.rs
2
92.31
-5.65% src/linters/protolint.rs
2
94.87
-5.13% src/linters/py_compile.rs
2
96.08
-3.92% src/linters/pylint.rs
2
94.12
-4.24% src/linters/pyright.rs
2
95.83
-4.17% src/linters/shellcheck.rs
2
96.92
-3.08% src/linters/sqlfluff.rs
2
95.83
-4.17% src/linters/statix.rs
2
93.62
-4.69% src/linters/swiftlint.rs
2
95.08
-3.51% src/linters/systemd.rs
2
95.65
-4.35% src/linters/tidy.rs
2
94.44
-5.56% src/linters/xmllint.rs
2
95.56
-4.44% src/linters/yamllint.rs
2
94.29
-5.71% src/linters/zsh.rs
1
96.97
-3.03% src/linters/actionlint.rs
1
97.22
-2.78% src/linters/flake8.rs
1
96.88
-3.13% src/linters/luacheck.rs
1
97.67
-2.33% src/linters/ruff.rs

Coverage Regressions

Lines Coverage ∆ File
1
79.49
16.22% src/linters/chktex.rs
1
79.37
18.39% src/linters/eslint.rs
1
56.25
9.03% src/linters/govet.rs
1
62.5
0.5% src/linters/oxlint.rs
1
62.5
13.72% src/linters/perlcritic.rs
1
80.0
15.71% src/linters/rubocop.rs
1
62.07
10.72% src/linters/staticcheck.rs
1
60.61
9.32% src/linters/stylelint.rs
Jobs
ID Job ID Ran Files Coverage
1 33692426493.1 02 Sep 2026 10:52PM UTC 49
89.09
GitHub Action Run
Source Files on build 33692426493
  • Tree
  • List 49
  • Changed 38
  • Source Changed 38
  • Coverage Changed 38
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #33692426493
  • 5f1edd8a on github
  • Prev Build on devel (#33686787249)
  • Next Build on devel (#33915182157)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc