Proselint Setup

Proselint is a linter for English prose that checks for common style and usage errors. Language Check integrates Proselint as an optional engine alongside Harper, LanguageTool, and Vale.

Note

Proselint only supports English. It is automatically skipped when spell_language is set to a non-English locale.

Installing Proselint

Proselint is a Python package. Install it so the proselint binary is on your $PATH.

pip install proselint
pipx install proselint

pipx installs into an isolated environment and adds the binary to your PATH automatically.

brew install proselint
# Debian/Ubuntu
sudo apt install python3-proselint

# Arch Linux
sudo pacman -S proselint

Verify with:

proselint --version

Tip

If the command is not found after installing, ensure the install location is on your $PATH. For pip, this is typically ~/.local/bin on Linux/macOS or %APPDATA%\Python\Scripts on Windows. You may need to add it:

# Linux/macOS — add to ~/.bashrc or ~/.zshrc
export PATH="$HOME/.local/bin:$PATH"

Enabling Proselint

Add proselint: true to your .languagecheck.yaml:

engines:
  harper: true
  proselint: true

Or use the Language Check: Manage Engines command from the VS Code command palette.

The inspector health tab shows whether the proselint binary was detected and will display install instructions if it is missing.

Proselint Configuration

Proselint uses its own JSON config file. Language Check does not replace this — you manage Proselint’s config separately.

Config search order

Proselint searches for configuration in this order:

  1. proselint.json in the current directory (and parents)

  2. ~/.config/proselint/config.json

Pointing to a custom config

Specify a custom config path in .languagecheck.yaml:

engines:
  proselint:
    enabled: true
    config: "config/proselint.json"

Example config

{
  "checks": {
    "typography.diacritical_marks": false,
    "misc.suddenly": false
  }
}

See the Proselint README for the full list of available checks.

How it Works

Language Check sends document text to Proselint via stdin with:

proselint check -o json [--config <path>]

Proselint’s JSON output is parsed and converted to Language Check diagnostics:

Proselint field

Language Check mapping

check_path

Rule ID prefixed with proselint.

message

Diagnostic message

span

Byte offsets (adjusted for padding)

replacements

Fix suggestions

All Proselint diagnostics are mapped to warning severity.

Rule Overrides

Override Proselint rule severities in .languagecheck.yaml using the proselint.<check_path> format:

rules:
  proselint.uncomparables:
    severity: "off"       # Disable this rule
  proselint.hedging:
    severity: info         # Downgrade from warning

High Performance Mode

Proselint is skipped when performance.high_performance_mode is enabled, since it requires spawning an external process.