Skip to content

Release v0.16.0

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Nov 22:33
· 22 commits to main since this release

What's New

  • CLI updates: Proselint now has subcommands. These are proselint check for the original behaviour, proselint version to print the version and exit, and proselint dump-config to view the loaded or default configuration.
  • Stable JSON output: We now have stable output for connecting Proselint with other programs. Use proselint check --output-format json to access this new functionality, with a schema shown in the documentation.
  • Phantom power and ludicrous speed: A 5x performance improvement against the demo file has been achieved over the last release.
  • Configuration changes: You can now specify checks down to the individual level in your configuration, while still being able to control them at the module level. Accompanying this new granularity is the ability to nest dictionaries to keep your configuration concise.
  • Housekeeping: The cache system of yore is gone, and the many check streamlining suggestions from #1373 were implemented.

Thank you to all of our new and returning contributors for this release. An unabridged summary is also available below.

Change Log

0.16.0 - 2025-11-14

💥 Breaking Changes

This release is not backwards compatible. The following breaking changes have been made.

As a program

  • Python 3.9 is now end-of-life, and no longer supported
  • Different calling conventions. See --help for a full list of options
    • proselint --version is now proselint version, for consistency with other linters
    • proselint is now proselint check
    • proselint --dump-config and --dump-default-config are now proselint dump-config and dump-config --default
    • --time and --clean have been removed
    • --debug is now --verbose
    • --json and --compact are now --output-format json and --output-format compact
  • Several checks have been removed and renamed as an implementation of #1373.
    User configurations will need to be modified accordingly
    • airlinese, bureaucratese, chatspeak, commercialese, corporate_speak, and jargon have been recategorized under industrial_language.
    • security, links, and cursing (except for cursing.nword) have been removed
    • sexism, lgbtq, and cursing.nwordhave been recategorized under social_awareness
    • consistency.spacing has been moved to typography.punctuation.spacing
    • typography.exclamation and hyperbole have been merged and moved to typography.punctuation.hyperbole
    • consistency.spelling has been moved to spelling.consistency
    • consistency has been removed
    • All modules that previously contained a single check file have been flattened
      • archaism.misc is now archaism
      • hedging.misc is now hedging
      • lexical_illusions.misc is now lexical_illusions
      • malapropisms.misc is now malapropisms
      • mixed_metaphors.misc.bottleneck is now mixed_metaphors.bottleneck
      • misc.mondegreens is now mondegreens
      • needless_variants.misc is now needless_variants
      • nonwords.misc is now nonwords
      • oxymorons.misc is now oxymorons
      • skunked_terms.misc is now skunked_terms
      • uncomparables.misc is now uncomparables
  • There is a new JSON output schema for --output-format json. This is documented, stable, and versioned. Plugins will require updates.
  • The on-disk cache has been removed

As a library

  • The cache has been removed, along with all related features in proselint.tools
  • The score module has been removed
  • The build backend is now uv_build
  • The topics and context features of proselint.tools have been removed
  • The _check functions of proselint.tools have been replaced by classes in proselint.registry.checks.types
  • Checks are now specified with Check in proselint.registry.checks
  • Lint runs are executed with LintFile and return LintResult, both in proselint.tools
  • The ppm_threshold wrapper in proselint.tools has been replaced by CheckFlags in proselint.registry.checks
  • The max_errors wrapper in proselint.tools has been removed
  • load_options in proselint.tools has been replaced by the proselint.config module
  • errors_to_json in proselint.tools has been replaced by LintResult.into_dict

⛰️ Features

🐛 Bug Fixes

  • (checks) Ignore least and most in uncomparables after at (#1433) - (b94542c)
  • (checks) Allow very well in weasel_words (#1426) - (616e855)
  • (checks) Resolve meantime/meanwhile conflict in misc.preferred_forms (#1425) - (18ecce6)
  • (registry) [breaking] Remove results_limit (#1421) - (d77cd1b)
  • Move chocolatey to spelling.consistency (#1432) - (7a2d503)
  • Simplify but check and properly count lines (#1423) - (68be196)
  • Rectify capitalisation in preferred forms (#1413) - (81d2ea1)
  • Check venery-waxed return types (#1414) - (b481488)
  • Update Sublime plugin for SublimeLinter4 (#1107) - (8df0966)

🚜 Refactor

📚 Documentation

⚡ Performance

⚙️ Miscellaneous Tasks

Build

New Contributors ❤️