Skip to content

Releases: amperser/proselint

Release v0.16.0

14 Nov 22:33

Choose a tag to compare

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

Read more

0.14.0

23 Apr 00:20
a443343

Choose a tag to compare

[email protected]

Bug Fixes

  • now loads the default configuration if none is provided (#1246)
  • added support for hyphens in lexical_illusions (#1344)

Features

  • additional spelling checks ally_ly, ance_ence, ely_ly and ve_of (#1266)

0.13.0

07 Nov 02:01
f7faa72

Choose a tag to compare

[email protected]

Bug Fixes

  • made memoize safe for both arguments and keyword arguments (#1217)

Features

  • now exports decorators that wrap meta-checks (#1188]

0.12.0

21 Aug 02:57
ea8be0a

Choose a tag to compare

[email protected]

Bug fixes

  • make am_pm checks case-sensitive (#620)

Features

  • added --dump-config and --dump-default-config CLI arguments (#1212)
  • now exports proselint.config.default (#1212)

Breaking Changes

  • proselint.tools.lint now takes a config object instead of using load_options (#1212)

0.11.3

10 Jul 16:25
53076b2

Choose a tag to compare

[email protected]

Note: This is a hotfix release.

Bug fixes

  • fix package bundling to include proselintrc (#1195)

0.11.2

06 Jul 08:06
0816a5b

Choose a tag to compare

0.11.2 Pre-release
Pre-release

[email protected]

Note: This is a hotfix release.

Bug fixes

  • correct false positives in lexical_illusions.misc (#1192)

0.11.1

05 Jul 16:41
dde94f6

Choose a tag to compare

0.11.1 Pre-release
Pre-release

[email protected]

Bug fixes

  • fix package metadata and pypi upload (hotfix release)

0.11.0

04 Jul 20:31
753df02

Choose a tag to compare

0.11.0 Pre-release
Pre-release

[email protected]

Bug fixes

  • add warning for missing corpus (535c330)
  • reduce false positives for uncomparables.misc (#1152)
  • correct "attorney and not a republic" mondegreen (#985)
  • correct unbound line and column in error printing (#1181)
  • fix false positive in misc.but (#691)

Features

  • add --config CLI argument (#1081)
  • add exceptions for proselint.tools.existence_check (#1182)
  • use regex for lexical_illusions.misc (#1174)
  • implement project-wide proselintrc (#1173)

Breaking Changes

N/A.

0.10.2

04 Aug 04:19
30b4e00

Choose a tag to compare

Full Changelog

  • Include tests in source package (mavit)

0.10.1

02 Aug 14:28
583ce04

Choose a tag to compare

Full Changelog