Releases: Automattic/harper
v0.30.0
What's Changed
- docs: clarify question on FAQ by @elijah-potter in #1087
- feat: handle some false positives in let/lets/let's/let us by @hippietrail in #1085
- feat: have pastβhave passed by @hippietrail in #1088
- build(deps): bump clap from 4.5.36 to 4.5.37 by @dependabot in #1093
- feat: Australian English affix annotation
_
by @hippietrail in #1094 - fix: reset vscode version to
1.96.2
by @hippietrail in #1084 - Dictionary (and adj-of-a) curation 2025 04 18 by @hippietrail in #1090
- Updated
justfile
to check tests and benches by @RunDevelopment in #1098 - feat: worse-case scenarioβworst-case scenario by @hippietrail in #1104
- docs(obsidian): wrote initial contributor's guide by @elijah-potter in #1105
- feat: incaseβin case by @hippietrail in #1103
- feat: adds a
t_ws()
shorthand forthen_whitespace()
in the spirit oft_aco()
by @hippietrail in #1115 - feat: implement dialect indicator for Obsidian plugin by @hippietrail in #1102
- Fix Lua syntax in neovim example config by @nikosavola in #1110
- feat: client's sideβclient-side, server's sideβserver side by @hippietrail in #1109
- fix(obsidian): console contamination by @elijah-potter in #1116
- feat(core): add several novel rules by @elijah-potter in #1108
New Contributors
- @nikosavola made their first contribution in #1110
Full Changelog: v0.29.1...v0.30.0
v0.29.1
What's Changed
- chore: "off of a" false positive by @hippietrail in #1081
- feat: phrase corrections: like a plague, have went, case and point, aswell by @hippietrail in #1078
- Dictionary curation 2025 04 17 by @hippietrail in #1080
- fix: #1075 package logo font for vscode extension by @hippietrail in #1077
Full Changelog: v0.29.0...v0.29.1
v0.29.0
What's Changed
- refactor: remove unneeded logic for repeated words by @hippietrail in #1020
- fix: improve to handle -s -es and -ed endings by @hippietrail in #1003
- feat: start clarifying affix system by @hippietrail in #972
- refactor: improve logic and robustness of thenβthan by @hippietrail in #1021
- Curate existing rules by @elijah-potter in #1023
- fix: new logic and false positives by @hippietrail in #1024
- build(deps): bump tokio from 1.44.1 to 1.44.2 by @dependabot in #1040
- build(deps): bump indexmap from 2.8.0 to 2.9.0 by @dependabot in #1037
- build(deps): bump uuid from 1.12.0 to 1.16.0 by @dependabot in #1038
- feat: use the old code if
parallel
unavailable by @hippietrail in #1019 - feat: mention which verb triggered lint in msg by @hippietrail in #1034
- feat: Expand "cuz", correct "on face value" by @hippietrail in #1030
- feat: exempt "you guys" from the possessive your linter by @hippietrail in #1027
- feat: trail and errorβtrial and error by @hippietrail in #1044
- chore: tweak priority/position of statusbar item and add Harper logo by @hippietrail in #1043
- chore: "side of a" false positive by @hippietrail in #1029
- feat: Add special cases to sentence capitalization by @hippietrail in #1031
- feat: don't allow "let's" to trigger a following compound by @hippietrail in #1032
- Dictionary curation 2025 04 04 by @hippietrail in #1028
- feature: highly kept (secret)βwell-kept by @hippietrail in #1045
- Documentation updates by @mcecode in #1000
- chore: manually spotted 3 things our lints would flag in doc comments by @hippietrail in #1047
- feat: sequential pronouns: don't detect "my US", make case insensitive by @hippietrail in #1026
- feat(devshell): init devshell by @alDuncanson in #1014
harper.js
API reference generation improvements by @mcecode in #1050- fix(comments): ignore comments CSpell compatibility by @mcecode in #1046
- fix: update vscode deps by @hippietrail in #1042
- feat: hone in onβhome in on by @hippietrail in #1059
- Adj of a curation 2025 04 09 by @hippietrail in #1053
- Dictionary curation 2025 04 08 by @hippietrail in #1052
- fix: make modal-of linter case insensitive by @hippietrail in #1048
- build(deps): bump clap from 4.5.34 to 4.5.36 by @dependabot in #1060
- build(deps): bump anyhow from 1.0.97 to 1.0.98 by @dependabot in #1063
- build(deps): bump lru from 0.13.0 to 0.14.0 by @dependabot in #1061
- build(deps): bump smallvec from 1.14.0 to 1.15.0 by @dependabot in #1062
- feat(core): add simple corrections from my notes by @elijah-potter in #1025
- Fix bug 1066 "Stack Overflow", dictionary curation, adjective-of-a curation by @hippietrail in #1068
- feat: add for (a)while, after (a)while, unless if, suffice to say by @hippietrail in #1071
Full Changelog: v0.28.0...v0.29.0
v0.28.0
What's Changed
- fix(vscode-plugin): sleep a longer time after openUntitled by @kiding in #1004
- docs: update link to website by @alDuncanson in #1007
- feat(harper-cli): make lint accept user & file-local dictionary by @kiding in #987
- feat(ls): use PlainEnglish parser for language id "text" by @86xsk in #968
- docs: fix grammar by @alDuncanson in #1009
- feat(comments): add
scala
support by @tymcauley in #970 - docs(core): update the
Author a Rule
page to align with code by @elijah-potter in #1008 - feat(core): make
LintConfig
sorted by key by @elijah-potter in #1012 - feat: wrote first draft of statistics logging by @elijah-potter in #454
- feat(obsidian): add debounce setting by @elijah-potter in #1015
- feat(harper.js): significantly improve worker performance by @elijah-potter in #1016
- feat: #20 : comma spacing and #498 : Asian commas by @hippietrail in #891
- feat(core): added a bunch more common rules by @elijah-potter in #940
- chore: merge and sort original and non-US sections by @hippietrail in #977
- Adj of a curation 2025 04 02 by @hippietrail in #1006
New Contributors
- @alDuncanson made their first contribution in #1007
- @tymcauley made their first contribution in #970
Full Changelog: v0.27.0...v0.28.0
v0.27.0
What's Changed
- fix(harper-ls): handle language mode change and VS Code auto detect by @kiding in #966
- feat: linters for common mistakes with "another" by @hippietrail in #963
- Dictionary curation 2025 03 06 by @hippietrail in #837
- feat(core): flag " of a" by @hippietrail in #967
- fix: include the full set of personal pronouns and possessives by @hippietrail in #964
- fix: 2 words in curated dict lack / before annotations by @hippietrail in #958
- feat: implement #828 by @hippietrail in #853
- VS Code Extension Updates by @mcecode in #960
- doc(core): write up the difference between a
Linter
and aPatternLinter
by @elijah-potter in #973 - fix(core): remove bad phrase by @elijah-potter in #974
- fix: handle another false positive in "adjective of a" by @hippietrail in #980
- feat(harper-typst): ignore file path as arguments, regex, .display by @kiding in #976
- Improve doc coverage by @elijah-potter in #979
- feat: detect capitalized false positives by @hippietrail in #988
- fix(harper-cli): set American as the default dialect by @kiding in #986
- build(deps): bump once_cell from 1.21.1 to 1.21.3 by @dependabot in #996
- feat: more false positives: "inside of" & "out of" by @hippietrail in #992
- template for feature requests on github by @hippietrail in #981
- build(deps): bump clap from 4.5.32 to 4.5.34 by @dependabot in #995
- feat: implement #993 by @hippietrail in #994
- Dialect indicator for VS Code extension by @hippietrail in #985
- chore: "head of a" false positive + test by @hippietrail in #999
- test(core): confirm that #720 is no longer present by @elijah-potter in #975
- fix(wordpress): crashes when options menu is opened by @elijah-potter in #1002
Full Changelog: v0.26.0...v0.27.0
v0.26.0
What's Changed
- docs: fix user dictionary by @kit494way in #893
- feat: mask out comments beginning with spellchecker:ignore by @grantlemons in #861
- feat(harper.js): export both binary and inlinedBinary for different runtimes by @Asuka109 in #607
- feat: linter for "as far back as" to replace "as early back as" by @hippietrail in #889
- feat: flag "explanation mark/point" instead of "exclamation" by @hippietrail in #895
- feat: correct "in anyway" to "in any way" by @hippietrail in #894
- build(deps): bump @babel/helpers from 7.26.9 to 7.26.10 in /packages by @dependabot in #899
- fix: two spelling mistakes based on homophones by @hippietrail in #886
- feat: allow blank lines and comments in
dictionary.dict
by @hippietrail in #756 - docs: fix typo #906 by @hippietrail in #912
- hotfix(core): properly store spans in
PatternLinter
cache by @elijah-potter in #926 - Dictionary curation 2025 03 12 by @hippietrail in #902
- Dialect prototyping by @elijah-potter in #925
- feat: insert newline automatically in
just addnoun
by @elijah-potter in #931 - docs: fix 3 grammar mistakes by @hippietrail in #933
- feat: linter for "each and everyone" by @hippietrail in #923
- feat: expand the "get rid off" lint to cover "get ride of" by @hippietrail in #900
- fix(vscode-plugin): ignore non-existent ".git" files, support untitled/unsaved files on VS Code by @kiding in #927
- feat(core): improve assertion to allow overlapping suggestions by @elijah-potter in #935
- build(deps): bump @wordpress/editor from 14.19.0 to 14.20.0 in /packages by @dependabot in #915
- build(deps): bump indexmap from 2.7.1 to 2.8.0 by @dependabot in #921
- build(deps): bump tokio from 1.43.0 to 1.44.1 by @dependabot in #919
- build(deps-dev): bump @types/node from 22.13.9 to 22.13.10 in /packages by @dependabot in #913
- build(deps): bump foldhash from 0.1.4 to 0.1.5 by @dependabot in #917
- feat: correct "along time" to "a long time" by @hippietrail in #910
- Add -able affix to open (openable) by @claydugo in #930
- docs: mention hidden library dependencies by @elijah-potter in #943
- feat(core): create new test assertion for
nth
suggestion results by @elijah-potter in #942 - build: migrate to pnpm workspace & biome by @Asuka109 in #924
- build(deps): bump serde from 1.0.218 to 1.0.219 by @dependabot in #920
- build(deps): bump clap from 4.5.31 to 4.5.32 by @dependabot in #946
- Web improvements by @elijah-potter in #944
- feat: ignore shebang lines by @holmanb in #947
- feat(web): add mask-image to header by @Asuka109 in #951
- fix(core): reduce ambiguity for
AvoidContraction
by @elijah-potter in #941 - chore: add comments describing major sections by @hippietrail in #952
New Contributors
- @kit494way made their first contribution in #893
- @holmanb made their first contribution in #947
Full Changelog: v0.25.1...v0.26.0
v0.25.1
What's Changed
- docs(ls): give example config that disables
sentence_capitalization
by @elijah-potter in #879 - fix(core): indexing problem in Regexish work by @elijah-potter in #883
- Just getforms improvements by @hippietrail in #862
- Dictionary curation 2025 03 11 by @hippietrail in #884
- fix(core): insert paragraph breaks after code blocks by @elijah-potter in #882
Full Changelog: v0.25.0...v0.25.1
v0.25.0
What's Changed
- docs: update integrations section by @mcecode in #755
- Typst Corrections by @grantlemons in #442
- refactor: add comments to
just addnoun
and tweak logic by @hippietrail in #605 - feat: implements #841 by @hippietrail in #842
- Add WordPress Plugin Documentation and Demo by @elijah-potter in #838
- feat: add
just newest-dict-changes
by @hippietrail in #701 - Spellcheck improvements by @elijah-potter in #844
- fix: add missing "gotten rid off" to other "rid off" by @hippietrail in #840
- Rules page improvements by @elijah-potter in #843
- build(deps): bump axios from 1.8.1 to 1.8.2 in /packages by @dependabot in #845
- Regexish by @hippietrail in #669
- fix: fall back to
grep
whenrg
is not available by @hippietrail in #848 - feat: flag "monumentous" and offer "momentous" and "monumental" by @hippietrail in #864
- build(deps-dev): bump svelte-check from 4.1.4 to 4.1.5 in /packages by @dependabot in #874
- build(deps): bump typst-syntax from 0.13.0 to 0.13.1 by @dependabot in #867
- build(deps-dev): bump typescript from 5.7.3 to 5.8.2 in /packages by @dependabot in #871
- build(deps-dev): bump autoprefixer from 10.4.20 to 10.4.21 in /packages by @dependabot in #873
- Dictionary curation 2025 03 08 by @hippietrail in #860
- feat: add many variants of "change of tact"->"tack" by @hippietrail in #852
- feat: implement #525 (worse/worst confusion) by @hippietrail in #856
- build(deps): bump cached from 0.54.0 to 0.55.1 by @dependabot in #868
- build(deps): bump anyhow from 1.0.96 to 1.0.97 by @dependabot in #865
- Build against an older GLIBC version by @elijah-potter in #877
- Cache busting by @elijah-potter in #876
- build(deps): bump thiserror from 2.0.11 to 2.0.12 by @dependabot in #866
- build(deps): bump serde_json from 1.0.139 to 1.0.140 by @dependabot in #869
- feat: add a lint to correct "in of itself" to "in and of itself" by @hippietrail in #863
- feat: implement "ticking time clock" by @hippietrail in #851
- feat: implements #746 by @hippietrail in #855
- feat(dict): added words to dictionary by @ficcdaf in #847
- fix: Ignore hex codes inside rgb function calls by @grantlemons in #857
- feat: Added Linux musl compilations by @kiding in #878
New Contributors
Full Changelog: v0.24.0...v0.25.0
v0.24.0
What's Changed
- feat(core): add five technical words to the curated dictionary by @86xsk in #767
- Rid off phrase corrections by @hippietrail in #717
- chore: new words and fixes to existing entries by @hippietrail in #783
- fix(core): don't ignore blocking word-likes by @elijah-potter in #788
- fix(core): remove bad
Forthwith
rule by @elijah-potter in #787 - fix(core): address edge-case from #744 by @elijah-potter in #786
- feat: implement false positive "the great might of" by @hippietrail in #795
- chore: add words and improve affix annotations by @hippietrail in #793
- test: check that dictionary attributes can be spread over two entries by @hippietrail in #779
- test(core): issue #798 by @elijah-potter in #799
- chore: add words, fix annotations by @hippietrail in #805
- feat(web): create page for debugging the title-case algo by @elijah-potter in #801
- chore: curate dictionary by @hippietrail in #803
- build(deps-dev): bump @types/jasmine from 5.1.6 to 5.1.7 in /packages by @dependabot in #810
- build(deps-dev): bump rollup from 4.34.6 to 4.34.9 in /packages by @dependabot in #808
- build(deps): bump clap from 4.5.29 to 4.5.31 by @dependabot in #814
- build(deps-dev): bump prettier from 3.5.2 to 3.5.3 in /packages by @dependabot in #811
- build(deps): bump serde_json from 1.0.138 to 1.0.139 by @dependabot in #813
- feat(core): add a ton of rules from the backlog by @elijah-potter in #797
- WordPress plugin by @elijah-potter in #817
- Dictionary curation 2025 03 04 by @hippietrail in #819
- build(deps-dev): bump @types/node from 22.13.4 to 22.13.9 in /packages by @dependabot in #818
- test(core): added test with capital letters by @elijah-potter in #738
- build(deps): bump pulldown-cmark from 0.12.2 to 0.13.0 by @dependabot in #693
- refactor(core): proper noun linters use canonical casing and JSON file by @elijah-potter in #834
- Dictionary curation 2025 03 05 by @hippietrail in #833
- feat: lex 0s 1s 0's 1's etc as words by @hippietrail in #775
- refactor: nominal and determiner word types by @hippietrail in #731
New Contributors
Full Changelog: v0.23.0...v0.24.0
v0.23.0
What's Changed
The biggest change was to the naming convention for our settings in #726. We've already seen some configs breaking in #785, and we're sorry about that. The primary motivation was to clean up the user experience for Visual Studio Code and other platforms moving forward by using a more predictable scheme.
To use the new scheme, all you have to do is change your linter rules to use PascalCase
rather than the previous snake_case
. Additionally, if you're using either the force_stable
option or the ignore_link_title
option, you'll need to make those PascalCase
as well.
- feat: another exception for "back in the days before" by @hippietrail in #712
- feat(core): allow the
ThenThan
linter to cover more cases by @elijah-potter in #714 - Create linter for non-idiomatic "back in the days" by @elijah-potter in #707
- Make
Lintkind::Spelling
exclusive to one rule. by @elijah-potter in #713 - feat: github template for reporting false positives by @hippietrail in #728
- chore: dictionary curation by @hippietrail in #727
- Overhaul by @elijah-potter in #726
- feat(core): added technical words to dictionary by @ficcdaf in #729
- feat: lex 4-digit plural decades by @hippietrail in #675
- fix(core): edge case found in Harper's documentation by @elijah-potter in #737
- fix(core): address edge cases in
ThenThan
rule by @elijah-potter in #735 - feat(core): add rule that corrects
ban together
by @elijah-potter in #734 - fix(vscode-plugin): update config keys to new standard by @mcecode in #733
- feat: reimplement "operative system(s)" by @hippietrail in #719
- fix(core): restrict
GeneralCompoundNouns
to ignore adverb prefixes by @elijah-potter in #736 - feat(core): added plural form of integration by @ficcdaf in #740
- build(deps): bump typst-syntax from 0.12.0 to 0.13.0 by @dependabot in #757
- build(deps): bump anyhow from 1.0.95 to 1.0.96 by @dependabot in #758
- build(deps-dev): bump prettier from 3.4.2 to 3.5.2 in /packages by @dependabot in #763
- build(deps-dev): bump @vitest/browser from 3.0.5 to 3.0.6 in /packages by @dependabot in #762
- build(deps-dev): bump @rollup/plugin-node-resolve from 15.3.1 to 16.0.0 in /packages by @dependabot in #764
- chore: dictionary curation by @hippietrail in #745
- feat: tests for sentences containing a decade by @hippietrail in #747
- feat(vscode-plugin): config updates by @mcecode in #754
- fix(core): improper pattern by @elijah-potter in #739
- doc(web): updated environment and language-server documentation on the website by @ficcdaf in #741
- build(deps): bump serde from 1.0.217 to 1.0.218 by @dependabot in #760
- feat: add
just sample
to list all forms of random dictionary words by @hippietrail in #646 - build(deps): bump ordered-float from 4.6.0 to 5.0.0 by @dependabot in #759
- build(deps-dev): bump @microsoft/api-documenter from 7.26.7 to 7.26.10 in /packages by @dependabot in #765
- feat: capitalize multi-word country and capital city names by @hippietrail in #703
- Fuzz results by @elijah-potter in #773
- feat: move 'could of' etc from
matcher.rs
to its own linter by @hippietrail in #715 - fix: better ascii and hex digit checks by @hippietrail in #776
- build(deps-dev): bump @microsoft/api-extractor from 7.49.2 to 7.50.1 in /packages by @dependabot in #761
- fix: mostly
j
annotations for adverbs in-ly
by @hippietrail in #778
New Contributors
Full Changelog: v0.22.0...v0.23.0