Skip to content

About

A fast, customizable linter for prose.

Resources

Stars

6 stars

Watchers

1 watching

Forks

Latest commit

 

History

88 Commits

Folders and files

Repository files navigation

P R O S E R U N N E R

Fast prose linter. Finds writing issues, lets you ignore what you don't care about.

Example

$ proserunner document.md
document.md
[1]   3:13  "quick as lightning"  -> A tired phrase.
[2]   7:15  "software program"    -> Pleonastic phrase.
[3]  11:49  "hopefully"           -> Skunked term: consider rephrasing.
[4]  13:8   "Female booksalesman" -> Sexist or ridiculous term.

Fix what matters, ignore the rest by number:

$ proserunner document.md --ignore-issues 2,3
document.md
[1]   3:13  "quick as lightning"  -> A tired phrase.
[2]  13:8   "Female booksalesman" -> Sexist or ridiculous term.

Quick start

Clone the repo, cd into it, then pick one:

# Option 1: native binary (needs Babashka, Clojure CLI, and GraalVM; fastest startup)
bb install                          # Installs to ~/.local/bin (open a new shell if it wasn't on your PATH)
proserunner document.md             # Check a file, from anywhere
proserunner docs/ README.md         # Check several paths
proserunner init                    # Set up project config

# Option 2: Babashka only (no build, no Java); run from the repo
bb lint /path/to/document.md        # Same flags as proserunner

# Option 3: Clojure CLI (needs Java and Clojure CLI, slower startup); run from the repo
clojure -M:run /path/to/document.md

Options 2 and 3 resolve relative paths from the repo directory, so pass an absolute path to your file.

See installation for details.

In CI, the exit status does the work: 0 means no issues, 1 means issues were found, 2 means something went wrong.

proserunner docs/ -o plain   # Fails the build on issues; one issue per line in the log

Why it's useful

  • Numbered issues - Ignore specific problems by number: --ignore-issues 1,3,5. Numbers are for the current run.
  • Pipes - proserunner - checks standard input, so it fits after pandoc or your clipboard.
  • Customizable - Add checks as EDN files. Toggle them on/off without touching code.
  • Fast - Parallel processing, smart caching.
  • Flexible - Output formats: grouped, plain (one issue per line), table, JSON, EDN, verbose.
  • Smart ignores - Run it, fix what matters, ignore the rest by number. Ignores remember location.
  • Project friendly - Commit ignore files and custom checks. Everyone sees the same issues.

What it checks

Ships with 22 checks (run proserunner checks to see yours):

Name Kind Explanation
Annotations Case Typical markers used to signal problem sites in the text.
Archaisms Existence Outmoded word or phrase.
Clichés Existence An overused phrase or opinion that betrays a lack of original thought.
Compression Recommender Compressing common phrases. From Style: Toward Clarity and Grace by Joseph M. Williams.
Corporate-speak Existence Words and phrases that make you sound like an automaton.
Hedging Existence Say, or say not. There is no hedging.
Jargon Existence Phrases infected with bureaucracy.
Meta-discourse Existence Self-referential phrases that add no value.
Needless-variant Recommender Prefer the more common term.
Nominalization Recommender Convert weak noun phrases back to strong verbs.
Non-words Recommender Identifies sequences of letters masquerading as words, and suggests an actual word.
Not the negative. Recommender Prefer the word to the negation of the word's opposite.
Overused-adverbs Existence Use of adverbs that are weak or redundant. Consider using a stronger verb instead.
Oxymorons Existence Avoid contradictory terms (that aren't funny).
Phrasal adjectives Recommender Hyphenate phrasal adjectives.
Pompous-diction Recommender Pompous diction: use simpler words. From Style: Toward Clarity and Grace by Joseph M. Williams.
Redundancies Existence Avoid phrases that say the same thing more than once.
Regex Regex Raw regular expressions.
Repetition Repetition Catches consecutive repetition of words, like the the.
Sexism Existence Sexist or ridiculous terms (like mail person instead of mail carrier).
Skunked-terms Existence Words with controversial correct usage that are best avoided.
Weasel-words Existence Vague phrases that avoid commitment and precision.

See check definitions →

Customizing checks

Turn off checks - Edit ~/.config/proserunner/config.edn (or $XDG_CONFIG_HOME/proserunner/):

{:checks
 [{:name "default"
   :directory "default"
   :files ["cliches"
           ;; "jargon"      ; disabled
           "corporate-speak"]}]}

Add custom checks - Drop .edn files in:

  • Global: ~/.config/proserunner/custom/
  • Project: .proserunner/checks/

Or use: proserunner checks add ~/my-checks

See Usage docs for check examples.

Docs

About

A fast, customizable linter for prose.

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages