Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3786 commits
Select commit Hold shift + click to select a range
df064ab
build(deps): bump indexmap from 2.12.0 to 2.12.1 (#2274)
dependabot[bot] Dec 1, 2025
0ff301d
build(deps): bump criterion from 0.7.0 to 0.8.0 (#2272)
dependabot[bot] Dec 1, 2025
ab1d8e2
refactor: upgrade `Expatriate` to `phrase_set_corrections` (#2265)
hippietrail Dec 1, 2025
87d703d
fix(dict): update webpack entry (#2278)
mcecode Dec 1, 2025
dc6a7d8
build(deps): bump tracing-subscriber from 0.3.20 to 0.3.22 (#2273)
dependabot[bot] Dec 1, 2025
4d57233
fix(core): address edge cases in `title_case` module (#2284)
elijah-potter Dec 2, 2025
01d7a7e
fix(chrome-ext): return focus to source element when `SuggestionBox` …
elijah-potter Dec 2, 2025
a3f0cef
fix(core): ignore inflections of `be` in compound noun rule (#2281)
elijah-potter Dec 2, 2025
b8dcd86
fix(core): add `bypassable` to the dictionary (#2280)
elijah-potter Dec 2, 2025
f955719
feat: copywritten → copyrighted (#2276)
hippietrail Dec 2, 2025
8ea2d9d
feat: add `chroot` to dictionary (#2270)
jvoisin Dec 2, 2025
9136548
refactor: new `SequenceExpr` and `CharStringExt` methods (#2269)
hippietrail Dec 2, 2025
8ec99b6
feat(ls): add `octo` as a supported filetype (#2279)
elijah-potter Dec 2, 2025
9b0f344
fix(core): issues with spell check (#2288)
elijah-potter Dec 2, 2025
06327a5
fix(web): add Edge extension URL as a trusted source
elijah-potter Dec 1, 2025
275bfa5
feat: wish x can → wish x could (#2291)
hippietrail Dec 3, 2025
d3d4a1b
fix(core): ensure `news` isn't corrected to `news` (#2289)
elijah-potter Dec 3, 2025
f693517
fix(core): fix problems with the `NeedToNoun` rule (#2287)
elijah-potter Dec 3, 2025
fe82edf
fix(core): seal extension traits
elijah-potter Dec 3, 2025
829cee1
Release 1.1.0
elijah-potter Dec 3, 2025
44e206d
fix(web): problems with the title casing page (#2293)
elijah-potter Dec 3, 2025
c6ad5fd
fix: flag "piece of advise" (#2266)
hippietrail Dec 3, 2025
b190846
hotfix(harper.js): doc generation for systems without parallel
elijah-potter Dec 3, 2025
7f8e025
feat(core): many new rules (#2292)
elijah-potter Dec 3, 2025
f3b8691
feat: implement #1135 missing "be" (#2296)
hippietrail Dec 4, 2025
11dc756
fix(core): add `canonicalize` to the dictionary (#2294)
claydugo Dec 4, 2025
a8ec19c
hotfix: use parallel when available
elijah-potter Dec 5, 2025
d66585f
feat: implement #1036 join prefix to word (#2299)
hippietrail Dec 5, 2025
031577b
feat: Harper works great on Wattpad
elijah-potter Dec 5, 2025
c2c50ea
chore(core): delete dead code
elijah-potter Dec 5, 2025
62041d2
feat(core): create rule to title-case headings (#2297)
elijah-potter Dec 5, 2025
a4ee1b2
build(deps): bump criterion from 0.8.0 to 0.8.1 (#2306)
dependabot[bot] Dec 8, 2025
33d30e1
build(deps): bump unicode-script from 0.5.7 to 0.5.8 (#2305)
dependabot[bot] Dec 8, 2025
4cb1ae7
build(deps): bump tree-sitter-bash from 0.25.0 to 0.25.1 (#2304)
dependabot[bot] Dec 8, 2025
29c7cfe
fix(ls): prevent panic when workspace/configuration is unsupported (#…
mcecode Dec 8, 2025
300262f
Irregular verbs (#2285)
hippietrail Dec 8, 2025
57a0f43
doc(core): add example to the README
elijah-potter Dec 8, 2025
f4491f2
hotfix(core): properly format example
elijah-potter Dec 9, 2025
812601e
Fascinated about (#2319)
hippietrail Dec 10, 2025
5610283
feat(obsidian): add button to disable rules from within popup (#2300)
elijah-potter Dec 10, 2025
6fdf05d
chore: add weigh/weight to noun/verb confusion (#2315)
hippietrail Dec 10, 2025
392eb0d
refactor: made a new `lint_group` from two mass noun linters (#2290)
hippietrail Dec 10, 2025
df06e48
feat: typo every → ever (#2311)
hippietrail Dec 10, 2025
cc19333
doc(core): clarify difference between chunker NPs and pattern NPs (#2…
elijah-potter Dec 10, 2025
42a8531
feat: PIN number → PIN / personal identification number etc. (#2318)
hippietrail Dec 11, 2025
5eeb690
feat(chrome-ext): add `sh.reddit.com` as a supported page
elijah-potter Dec 11, 2025
35c0bac
feat: brandish→brand (#2325)
hippietrail Dec 11, 2025
5136c2e
feat: wreck havoc→wreak havoc (#2321)
hippietrail Dec 11, 2025
c4b3063
fix(chrome-ext): text in dark mode not legible (#2326)
elijah-potter Dec 11, 2025
de1771d
feat: adding prefixes to dictionary (#2212)
hippietrail Dec 11, 2025
b1864eb
fix(core): seal trait
elijah-potter Dec 11, 2025
9b871c4
Release 1.2.0
elijah-potter Dec 11, 2025
7e62fb7
fix(web): make title and description more SEO-friendly
elijah-potter Dec 11, 2025
768da82
feat: daml support (#2347)
Sengoku11 Dec 16, 2025
bde9981
fix: false positive for "since N years old" (#2342)
hippietrail Dec 16, 2025
d8b626d
feat: make senses→make sense (#2330)
hippietrail Dec 16, 2025
212a1c0
build(deps): bump uuid from 1.18.1 to 1.19.0 (#2334)
dependabot[bot] Dec 16, 2025
17dcba7
feat: part of speeches → parts of speech (#2346)
hippietrail Dec 16, 2025
68dee7e
feat(chrome-ext): show Harper version string in the popup (#2348)
elijah-potter Dec 16, 2025
7c5aa61
feat(chrome-ext): replace with rounded icon
elijah-potter Dec 16, 2025
ae0da36
fix(chrome-ext): enable on GitHub CM Markdown fields (#2350)
elijah-potter Dec 17, 2025
b437131
fix(chrome-ext): failing tests from bad Playwright config
elijah-potter Dec 19, 2025
dbb1459
fix(chrome-ext): make Playwright more verbose
elijah-potter Dec 19, 2025
010311c
fix(chrome-ext): make it even more verbose
elijah-potter Dec 19, 2025
ba535f3
Revert "fix(chrome-ext): make it even more verbose"
elijah-potter Dec 19, 2025
e487b79
fix(chrome-ext): verbosity up
elijah-potter Dec 19, 2025
a5ae1af
fix(chrome-ext): set global timeout
elijah-potter Dec 19, 2025
99a1a79
fix(chrome-ext): possible webserver fix
elijah-potter Dec 19, 2025
e7cbd29
Revert "fix(chrome-ext): verbosity up"
elijah-potter Dec 22, 2025
17616bb
feat(chrome-ext): update Playwright
elijah-potter Dec 22, 2025
4211e02
feat: update Vitest
elijah-potter Dec 22, 2025
9f0c555
fix: playwright config in Vitest
elijah-potter Dec 22, 2025
9898bd0
feat: make Playwright configuration more resilient
elijah-potter Dec 22, 2025
fa9ab72
fix(chrome-ext): appease formatter
elijah-potter Dec 22, 2025
ae41f48
fix: don't flag "plugin developer" (#2370)
hippietrail Dec 22, 2025
bcaa4ca
feat: oldest in the books→oldest in the book (#2337)
hippietrail Dec 22, 2025
af829ba
feat: try to detect space in wrong spot between words (#2363)
hippietrail Dec 22, 2025
7c2a8ef
Dictionary curation 2025 12 10 (#2336)
hippietrail Dec 22, 2025
3ed422a
feat: as nauseam→ad nauseam (#2354)
hippietrail Dec 22, 2025
8b5a679
feat: every once and again→every once in a while & once again (#2361)
hippietrail Dec 22, 2025
9116400
docs: add section for projects using Harper (#2351)
elijah-potter Dec 22, 2025
2e57cb3
Release 1.3.0
elijah-potter Dec 22, 2025
64fde38
feat: be good in sth. → be good at sth. (#2368)
hippietrail Dec 23, 2025
4634629
fix: issue 1722 (#2373)
hippietrail Dec 29, 2025
7b38e2c
fix: expand `BestOfAllTime` linter (#2381)
hippietrail Dec 29, 2025
162d72d
fix: don't change 'you' to 'your' if the previous word is a verb (#2390)
hippietrail Dec 29, 2025
bc48e64
feat: behind the scene → behind the scenes (#2382)
hippietrail Dec 29, 2025
e1cf97e
feat: implement Indian English dialect (#2397)
hippietrail Dec 30, 2025
b0331e7
fix: `Handful` was in `linting/mod.rs` but missing from `linting/ling…
hippietrail Dec 31, 2025
8cfed40
build(deps): bump serde_json from 1.0.145 to 1.0.148 (#2392)
dependabot[bot] Dec 31, 2025
38eaf4e
refactor(core): simplify code (#2393)
86xsk Dec 31, 2025
ec085c6
fix: a vs an for "herb" and "SQL" (#2385)
hippietrail Dec 31, 2025
a21ce9c
build(deps): bump tracing from 0.1.43 to 0.1.44 (#2371)
dependabot[bot] Dec 31, 2025
981a0a7
feat(cli): recognize *.markdown as Markdown (#2404)
scop Jan 1, 2026
213fb78
feat: more abbreviation expansions (#2310)
hippietrail Jan 1, 2026
70dd097
feat: as oppose to & double edge sword (#2375)
hippietrail Jan 1, 2026
7197bfb
feat: line(s) of codes→lines of code (#2405)
hippietrail Jan 1, 2026
1120f8b
Feature/add asciidoc support (#2407)
Crown0815 Jan 1, 2026
9820cb9
fix: mark "heading" as a countable noun (#2379)
hippietrail Jan 1, 2026
a904c0a
feat: escape goat → scapegoat (#2408)
hippietrail Jan 2, 2026
6aad60f
fix broken links (#2421)
kaushik327 Jan 5, 2026
b0e9372
build(deps): bump clap from 4.5.53 to 4.5.54 (#2420)
dependabot[bot] Jan 5, 2026
b0da741
build(deps): bump tree-sitter-lua from 0.2.0 to 0.4.1 (#2418)
dependabot[bot] Jan 5, 2026
4b56f86
chore: normalize annotations; fix `characteristicallyally` (#2409)
hippietrail Jan 5, 2026
0e632fb
feat: one of the thing → one of the things (#2395)
hippietrail Jan 5, 2026
baa50cb
feat: the Microsoft's Security Graph→Microsoft's Security Graph (#2331)
hippietrail Jan 5, 2026
03d1a49
Untangle mixups between "flesh out" and "fully fledged" (#2332)
hippietrail Jan 5, 2026
d3f100c
chore: add "arise the question" to "rise the question" linter (#2413)
hippietrail Jan 5, 2026
c36da99
feat: australian regionalism "blood nose" = "nosebleed" (#2360)
hippietrail Jan 5, 2026
a5347e7
feat(chrome-ext): request that users review the extension (#2359)
elijah-potter Jan 5, 2026
e1569cd
build(deps): bump tokio from 1.48.0 to 1.49.0 (#2419)
dependabot[bot] Jan 5, 2026
c230354
feat: foam out the mouth → foam at the mouth (#2428)
hippietrail Jan 6, 2026
bae23cb
Release 1.4.0
elijah-potter Jan 6, 2026
e00029b
fix(chrome-ext): properly support Zendesk (#2424)
elijah-potter Jan 6, 2026
147da7d
refactor(cli): refactor `Input` and adjacent code (#2412)
86xsk Jan 6, 2026
8633bc4
fix(obsidian): bug causing the Indian dialect to crash the settings p…
elijah-potter Jan 8, 2026
81ec3b1
fix: don't flag "need to run into" (#2437)
hippietrail Jan 8, 2026
086110b
feat: alloc→allocate/allocation deref→dereference ptr→pointer (#2427)
hippietrail Jan 8, 2026
bf5d662
build(deps): bump lru from 0.16.2 to 0.16.3 (#2440)
dependabot[bot] Jan 8, 2026
98cef96
fix(harper.js): create disposal function and use it (#2445)
elijah-potter Jan 8, 2026
8bb9b65
Release 1.4.1
elijah-potter Jan 8, 2026
eea9a8c
feat(cli): Support all potential md extensions (#2449)
Inhishonor Jan 9, 2026
e12403f
fix: Allow exception `need to match` for `NeedToNoun` (#2448)
Greenheart Jan 9, 2026
1438d82
feat: initiatively→proactively / initially (#2432)
hippietrail Jan 9, 2026
52ba63c
fix: propagate proper noun property to possessive forms (#2399)
hippietrail Jan 9, 2026
7758d4c
chore: +vibe coding terms; add `/` annotation for phrasal verbs (#2452)
hippietrail Jan 9, 2026
2d59188
Add some political science terms to the dictionary (#2441)
Inhishonor Jan 9, 2026
3ce0c4d
fix(core): mark `very` as an adverb of manner
elijah-potter Jan 9, 2026
623aa76
feat: number agreement in this/these type(s) of thing(s) (#2400)
hippietrail Jan 9, 2026
4cabef7
build(deps): bump serde_json from 1.0.148 to 1.0.149 (#2467)
dependabot[bot] Jan 12, 2026
576d3f9
feat: `harper-cli lint` shows priorities and lets lint overlap remova…
hippietrail Jan 12, 2026
fc31b74
fix(harper.js): improve test flakiness
elijah-potter Jan 12, 2026
b7c4874
fix(core): don't replace non-alphanumeric characters when title-casin…
elijah-potter Jan 12, 2026
22d6e4f
fix(harper.js): reduce test flakiness more
elijah-potter Jan 12, 2026
834fdc9
feat: imho→in my humble/honest opinion (#2468)
hippietrail Jan 12, 2026
29d6cac
feat(core): create the Weir language (#2357)
elijah-potter Jan 12, 2026
8f2f3f5
chore: add "discoverable", "handoff" (#2457)
hippietrail Jan 12, 2026
b294dd6
refactor(core): merge semantically identical funcs (#2458)
86xsk Jan 12, 2026
378b0e3
doc: clarify instructions and project status (#2453)
elijah-potter Jan 12, 2026
e815239
feat: Add get_rel() to get a token relative to the end of a slice (#2…
hippietrail Jan 12, 2026
d744d91
chore: add "different tact" to "change tacts" linter (#2469)
hippietrail Jan 13, 2026
3012dcc
feat: create `harper-thesaurus` (#2085)
86xsk Jan 13, 2026
64e8834
fix(core): PR getting flagged as 'misspelled' (#2476)
elijah-potter Jan 14, 2026
52304b9
feat: Make the dialect indicator in the VS Code status bar clickable …
hippietrail Jan 14, 2026
bcae3dd
fix(core): ignore apostrophes in the `OrthographicConsistency` rule (…
elijah-potter Jan 14, 2026
0863a31
fix(harper.js): disable slow test
elijah-potter Jan 14, 2026
f05011a
fix(chrome-ext): highlights are mis-positioned in fixed elements (#2477)
elijah-potter Jan 14, 2026
35662dc
feat: take a look to → take a look at (#2478)
hippietrail Jan 14, 2026
9bd3503
feat: better of with → better off with (#2483)
hippietrail Jan 15, 2026
6208c55
chore: remove garbage file
elijah-potter Jan 15, 2026
47ca6fb
doc(core): describe how Weir's replacement strategies work (#2480)
elijah-potter Jan 15, 2026
86f7a20
fix: don't flag "no two" etc. (#2489)
hippietrail Jan 15, 2026
7672608
feat: very less → much less/far less/a lot less (#2484)
hippietrail Jan 15, 2026
38bc97c
feat: more fast → faster etc. (#2263)
hippietrail Jan 15, 2026
52fa165
Hotkey (#2149)
LoganBrinsmead Jan 15, 2026
57102ed
feat: fix "I walks" / "he walk" etc. (#2333)
hippietrail Jan 16, 2026
160b632
perf(test): improve test performance (#2473)
86xsk Jan 16, 2026
25acec2
fix(core): panics in Weir (#2493)
elijah-potter Jan 16, 2026
cc27faa
fix(thesaurus): MacOS builds by using `ruzstd` (#2490)
elijah-potter Jan 16, 2026
6c148af
feat(web): make "no AI" more prominent for SEO
elijah-potter Jan 16, 2026
fbfd184
build(deps): bump chrono from 0.4.42 to 0.4.43 (#2535)
dependabot[bot] Jan 20, 2026
89c9773
build(deps): bump thiserror from 2.0.17 to 2.0.18 (#2533)
dependabot[bot] Jan 20, 2026
1661077
build(deps): bump indexmap from 2.12.1 to 2.13.0 (#2534)
dependabot[bot] Jan 20, 2026
33d4652
Indian English tweaks (#2507)
hippietrail Jan 20, 2026
e60488a
fix(core): fix `AnA` false-positives (#2538)
86xsk Jan 20, 2026
78dcff7
feat: whom → who when subject of verb (#2528)
hippietrail Jan 20, 2026
f976717
feat: vicious circle vs cycle (#2384)
hippietrail Jan 20, 2026
1f5129c
feat(web): add campaign to CWS link
elijah-potter Jan 20, 2026
e3a6d83
feat: obsess on → obsess over; obsessed on → obsessed with (#2537)
hippietrail Jan 20, 2026
9898925
fix(core): capitalization issue in `SpellCheck` (#2541)
86xsk Jan 20, 2026
b41eed1
feat: despite it is→ despite (it/its) being (#2542)
hippietrail Jan 20, 2026
5c1f057
feat: detect browser dialect (#2485)
hippietrail Jan 20, 2026
7b7b821
feat: to loose/too lose→too loose/to lose (#2543)
hippietrail Jan 20, 2026
233cf5d
feat: allow any preposition, special plurals for both nouns (#2514)
hippietrail Jan 20, 2026
d3bef82
fix(chrome-ext): Applying suggestions breaks cursor/keyboard in Draft…
draphy Jan 21, 2026
6a591d9
fix(chrome-ext): enable on the Slack app
elijah-potter Jan 21, 2026
2fb98b4
feat(cli): chunk annotations (#2450)
86xsk Jan 21, 2026
c7402a5
feat(chrome-ext): enable on OpenRouter
elijah-potter Jan 21, 2026
95c5d8d
fix(core): allow both a/an for "LED" in `AnA` (#2556)
86xsk Jan 21, 2026
678c957
refactor(core): simplify code (#2555)
86xsk Jan 21, 2026
6469dc7
feat(core): create a good number of new Weir rules (#2506)
elijah-potter Jan 21, 2026
8c50ac8
feat(harper.js): expose the Typst parser in `harper.js` (#2554)
elijah-potter Jan 21, 2026
b748fbb
docs: fix errors in documentation (#2557)
elijah-potter Jan 22, 2026
eb6f3cb
fix(chrome-ext): Applying suggestions duplicates text in WhatsApp Web…
draphy Jan 22, 2026
c19d45b
fix(harper-typst): condense contractions (#2558)
elijah-potter Jan 22, 2026
66f87e1
chore: dictionary curation (#2496)
hippietrail Jan 22, 2026
7e36aaa
chore: Update/curate dictionary (#2540)
Inhishonor Jan 22, 2026
234a11a
refactor(core): remove dependency on `lazy_static` (#2560)
86xsk Jan 22, 2026
abb5f5c
feat(harper-typst): update to Typst `0.14.2` (#2566)
elijah-potter Jan 22, 2026
24efad0
fix(chrome-ext): remove mention of Chrome Extension to avoid confusio…
elijah-potter Jan 22, 2026
436fe7f
Release 1.5.0
elijah-potter Jan 22, 2026
f524cc6
fix(chrome-ext): problems with incorrect dialect selection and revers…
elijah-potter Jan 22, 2026
071613a
Release 1.5.1
elijah-potter Jan 22, 2026
40c5640
refactor(brill): remove `lazy_static` dependency (#2571)
86xsk Jan 23, 2026
b9bb1da
fix: allow `check-rust` to complete without `cargo hack`
hippietrail Jan 25, 2026
4f0ce30
fix: change the check for `cargo hack`
hippietrail Jan 25, 2026
4994760
feat: afterall → after all (#2582)
hippietrail Jan 26, 2026
50cc6d9
perf(core): cache Wier ASTs (#2584)
86xsk Jan 26, 2026
92f2ecc
deps(cli): bump ariadne from 0.4.1 to 0.6.0 (#2577)
86xsk Jan 26, 2026
0ff95f4
feat: prev → previous (#2598)
hippietrail Jan 26, 2026
995a91b
build(deps): bump uuid from 1.19.0 to 1.20.0 (#2595)
dependabot[bot] Jan 26, 2026
daae904
fix: confusing wording (#2586)
hippietrail Jan 26, 2026
aca4db1
feat: as of currently→ currently / as of now (#2599)
hippietrail Jan 26, 2026
f0c3d22
chore: add words/annotations to curated dict (#2570)
86xsk Jan 26, 2026
b021f50
feat: nor I would→nor would I (#2590)
hippietrail Jan 26, 2026
f16ee7d
build(deps): bump sysinfo from 0.37.2 to 0.38.0 (#2594)
dependabot[bot] Jan 26, 2026
ef4d721
fix(chrome-ext): Draft.js multiline suggestion replacement corruption…
draphy Jan 26, 2026
43cda65
fix: `rm` old vscode versions after `just test-vscode` (#2574)
hippietrail Jan 26, 2026
1e4b1f7
fix(chrome-ext): force visibility on Reddit (#2603)
elijah-potter Jan 26, 2026
7e93315
docs(chrome-ext): notify users that Harper will clash with Gmail's gr…
elijah-potter Jan 26, 2026
df8c319
refactor: `DISABLE_CARGO_HACK` approach as per PR feedback
hippietrail Jan 27, 2026
33b87af
feat: yea/yeh →yeah (#2604)
hippietrail Jan 27, 2026
b998803
fix(obsidian-plugin): postpone initialization until layout is ready (…
Vinzent03 Jan 27, 2026
e79402d
feat: no only is there → not only is there (#2610)
hippietrail Jan 27, 2026
eb26bee
feat(chrome-ext): enable use of the CSS Custom Highlights API for Fir…
elijah-potter Jan 27, 2026
a19586a
refactor(core): adjustments in `Number` (#2591)
86xsk Jan 27, 2026
665b936
feat(core): write rule to correct `cybersec` -> `cybersecurity` (#2613)
elijah-potter Jan 27, 2026
72c29ba
fix(chrome-ext): improve test reliability (#2615)
elijah-potter Jan 27, 2026
cfca985
feat: try one‘s hands at→try one‘s hand at (#2614)
hippietrail Jan 27, 2026
5031d92
feat(core): add `allows` keyword to Weir (#2602)
elijah-potter Jan 27, 2026
f7d657a
Merge branch 'master' of http://github.com/Automattic/harper into war…
hippietrail Jan 28, 2026
278d3ad
fix: fail if `cargo-hack` is missing and `DISABLE_CARGO_HACK` not spe…
hippietrail Jan 28, 2026
4cfe6a3
feat: flash in the pans→flashes in the pan
hippietrail Jan 28, 2026
2f89697
build(deps): bump clap from 4.5.54 to 4.5.56 (#2641)
dependabot[bot] Feb 3, 2026
5dc3e82
feat: flash in the pans → flashes in the pan (#2621)
hippietrail Feb 3, 2026
4cac073
feat: go at war → go to war (#2646)
hippietrail Feb 3, 2026
77ce896
chore: curate dictionary (#2580)
hippietrail Feb 3, 2026
5154c84
fix(chrome-ext): preserve cursor position in generic contenteditable …
draphy Feb 3, 2026
0ccdb1f
feat: peak behind the curtain→peek behind the curtain (#2635)
hippietrail Feb 3, 2026
b9b8fe4
fix(core): typo in rule name
elijah-potter Feb 3, 2026
6be3807
fix: AsciiDoc support (#2633)
mcecode Feb 3, 2026
0a66574
build(deps): bump bytes from 1.10.1 to 1.11.1 (#2647)
dependabot[bot] Feb 3, 2026
76c224f
docs: add Tally to section for projects using Harper (#2645)
twocaretcat Feb 3, 2026
bca3f95
feat(core): improve debug formatting for `Suggestion` (#2619)
86xsk Feb 3, 2026
e9ad52b
refactor(core): adjustments in lexing code (#2618)
86xsk Feb 3, 2026
a1562eb
feat: look one's nose down→look down one's nose (#2644)
hippietrail Feb 3, 2026
d5a80d6
feat(core): introduce Weirpacks (#2491)
elijah-potter Feb 3, 2026
14c0677
fix(lint-framework): preserve cursor position in textarea after apply…
draphy Feb 4, 2026
4314a2d
feat: like no tomorrow → like there's no tomorrow (#2652)
hippietrail Feb 4, 2026
e80a8dc
build(test): improve test build time (#2648)
86xsk Feb 4, 2026
390d4ee
refactor(core): use a macro and document the methods (#2655)
elijah-potter Feb 4, 2026
052db85
build: `panic = abort` and `lto = fat` for release (#2572)
86xsk Feb 4, 2026
cf548be
refactor(harper.js): we do not need named types for Weirpacks (#2657)
elijah-potter Feb 4, 2026
866aafb
Release 1.6.0
elijah-potter Feb 4, 2026
afef88a
feat: worth to do → worth doing (#2638)
hippietrail Feb 5, 2026
85cdc11
build(deps): bump time from 0.3.41 to 0.3.47 (#2663)
dependabot[bot] Feb 5, 2026
6c9f45e
refactor: use `Span::empty` to create empty spans (#2658)
86xsk Feb 5, 2026
3d05cae
feat(core): create expression references (#2664)
elijah-potter Feb 5, 2026
912b53b
Merge branch 'master' of http://github.com/Automattic/harper into war…
hippietrail Feb 7, 2026
0c28e7d
Merge branch 'warn-instead-of-fail-without-cargo-hack' of https://git…
hippietrail Feb 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
target
build
*.pdf
node_modules
14 changes: 0 additions & 14 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,18 +1,4 @@
# This file is for unifying the coding style for different editors and IDEs
# editorconfig.org

# WordPress Coding Standards
# https://make.wordpress.org/core/handbook/coding-standards/

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = tab

[*.{yml,yaml}]
indent_style = space
indent_size = 2
1 change: 1 addition & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
use flake
3 changes: 0 additions & 3 deletions .eslintrc.js

This file was deleted.

3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* text=auto eol=lf
quill_simple.html linguist-generated
github_textarea.html linguist-generated
30 changes: 30 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Platform**
What platform has the issue? Is it in Obsidian, Neovim, Visual Studio Code, Chrome, or Firefox? Something else?

**Additional context**
Add any other context about the problem here.
14 changes: 14 additions & 0 deletions .github/ISSUE_TEMPLATE/report-false-positive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
name: Report False Positive
about: Harper flagged something that's actually correct
title: ''
labels: bug, harper-core, linting, false-positive
---
**What got flagged?**
The text that was incorrectly flagged.

**Why is this incorrect?**
Brief explanation.

**Example of correct usage:**
[Your example here]
18 changes: 18 additions & 0 deletions .github/ISSUE_TEMPLATE/report-grammatical-error.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
name: Report Grammatical Error
about: Harper missed a grammatical error
title: ''
labels: enhancement, harper-core, linting
---
**The Error**
Description of the error.

**Examples (2-3):**
1.
2.

**References**
Any grammar rules or resources that support this.

**Potential Edge Cases**
When might this not apply?
22 changes: 22 additions & 0 deletions .github/ISSUE_TEMPLATE/suggest-a-feature.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: Suggest a Feature
about: Propose a new feature
title: ''
labels: enhancement
---
**What problem does this solve?**
Brief description.

**Proposed Solution**
How should it work?

**Examples**
Show, don't tell.

**Component**
- [ ] Core engine
- [ ] Plugin/Extension
- [ ] Other: _____

**Additional Context**
Any other relevant info.
10 changes: 10 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: 2
updates:
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
20 changes: 20 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Issues
<!-- Link any relevant GitHub issues here. -->
<!-- If this PR resolves the issue(s), write closes/fixes/resolves before the issue number(s) (e.g. Fixes #____, closes #____). -->

# Description
<!-- Please include a summary of the change. -->
<!-- Any details that you think are important to review this PR? -->
<!-- Are there other PRs related to this one? -->

# Demo
<!-- Add a screenshot or a video demonstration when possible and necessary. -->

# How Has This Been Tested?
<!-- Please describe how you tested your changes. -->

# Checklist
<!-- Go over all the following points, and put an `x` in all the boxes that apply -->

- [ ] I have performed a self-review of my own code
- [ ] I have added tests to cover my changes
152 changes: 152 additions & 0 deletions .github/workflows/binaries.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
name: Binaries

on:
push:
branches: ["master"]
tags: ["v*"]
merge_group:

jobs:
binaries:
name: ${{ matrix.platform.project }} - ${{ matrix.platform.release_for }}
if: github.event.pull_request.draft == false
strategy:
matrix:
platform:
- release_for: Windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
project: harper-ls
bin: harper-ls.exe
name: harper-ls-x86_64-pc-windows-msvc.zip
command: build
- release_for: macOS-x86_64
os: macOS-latest
target: x86_64-apple-darwin
project: harper-ls
bin: harper-ls
name: harper-ls-x86_64-apple-darwin.tar.gz
command: build
- release_for: macOS-aarch64
os: macOS-latest
target: aarch64-apple-darwin
project: harper-ls
bin: harper-ls
name: harper-ls-aarch64-apple-darwin.tar.gz
command: build
- release_for: Linux-x86_64-GNU
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
project: harper-ls
bin: harper-ls
name: harper-ls-x86_64-unknown-linux-gnu.tar.gz
command: build
- release_for: Linux-aarch64-GNU
os: ubuntu-latest
target: aarch64-unknown-linux-gnu
project: harper-ls
bin: harper-ls
name: harper-ls-aarch64-unknown-linux-gnu.tar.gz
command: build
- release_for: Linux-x86_64-musl
os: ubuntu-latest
target: x86_64-unknown-linux-musl
project: harper-ls
bin: harper-ls
name: harper-ls-x86_64-unknown-linux-musl.tar.gz
command: build
- release_for: Linux-aarch64-musl
os: ubuntu-latest
target: aarch64-unknown-linux-musl
project: harper-ls
bin: harper-ls
name: harper-ls-aarch64-unknown-linux-musl.tar.gz
command: build

- release_for: Windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
project: harper-cli
bin: harper-cli.exe
name: harper-cli-x86_64-pc-windows-msvc.zip
command: build
- release_for: macOS-x86_64
os: macOS-latest
target: x86_64-apple-darwin
project: harper-cli
bin: harper-cli
name: harper-cli-x86_64-apple-darwin.tar.gz
command: build
- release_for: macOS-aarch64
os: macOS-latest
target: aarch64-apple-darwin
project: harper-cli
bin: harper-cli
name: harper-cli-aarch64-apple-darwin.tar.gz
command: build
- release_for: Linux-x86_64-GNU
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
project: harper-cli
bin: harper-cli
name: harper-cli-x86_64-unknown-linux-gnu.tar.gz
command: build
- release_for: Linux-aarch64-GNU
os: ubuntu-latest
target: aarch64-unknown-linux-gnu
project: harper-cli
bin: harper-cli
name: harper-cli-aarch64-unknown-linux-gnu.tar.gz
command: build
- release_for: Linux-x86_64-musl
os: ubuntu-latest
target: x86_64-unknown-linux-musl
project: harper-cli
bin: harper-cli
name: harper-cli-x86_64-unknown-linux-musl.tar.gz
command: build
- release_for: Linux-aarch64-musl
os: ubuntu-latest
target: aarch64-unknown-linux-musl
project: harper-cli
bin: harper-cli
name: harper-cli-aarch64-unknown-linux-musl.tar.gz
command: build

runs-on: ${{ matrix.platform.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.8
- name: Build binary
uses: houseabsolute/actions-rust-cross@v1
with:
command: ${{ matrix.platform.command }}
target: ${{ matrix.platform.target }}
args: "--locked --release --bin ${{ matrix.platform.project }}"
force-use-cross: ${{ matrix.platform.os == 'ubuntu-latest' }}
strip: true
- name: Package as archive
shell: bash
run: |
cd target/${{ matrix.platform.target }}/release
if [[ "${{ matrix.platform.os }}" == "windows-latest" ]]; then
7z a ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }}
else
tar czvf ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }}
fi
cd -
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform.bin }}-${{ matrix.platform.target }}
path: ${{ matrix.platform.name }}

- name: Release artifacts
if: startsWith(github.ref, 'refs/tags/v')
uses: ncipollo/release-action@v1
with:
artifacts: ${{ matrix.platform.name }}
allowUpdates: true
draft: true
30 changes: 30 additions & 0 deletions .github/workflows/build_web.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Build Web

on:
push:
branches: ["master", "web-prod"]
pull_request:
branches: ["master"]
merge_group:

jobs:
build-web:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
- name: Retrieve version after install
id: nodenv
run: echo "node-version=$(node -v | sed 's/^v//')" >> $GITHUB_OUTPUT
- uses: redhat-actions/buildah-build@v2
with:
image: web
containerfiles: |
Dockerfile
build-args: |
NODE_VERSION=${{ steps.nodenv.outputs.node-version }}-slim
extra-args: |
--ulimit nofile=65536:65536
48 changes: 48 additions & 0 deletions .github/workflows/chrome_plugin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Chrome Plugin

on:
push:
branches: ["master"]
tags: ["v*"]
pull_request:
branches: ["master"]
merge_group:

env:
CARGO_TERM_COLOR: always

jobs:
chrome-plugin:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: extractions/setup-just@v2
- uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
- name: Enable Corepack
run: corepack enable
- uses: cargo-bins/cargo-binstall@main
- name: Install `wasm-pack`
run: cargo binstall wasm-pack --force --no-confirm
- name: Build Chrome Plugin
run: just build-chrome-plugin
- name: Build Firefox Plugin
run: just build-firefox-plugin
- name: Upload Chrome extension
uses: actions/upload-artifact@v4
with:
name: harper-chrome-plugin.zip
path: "packages/chrome-plugin/package/harper-chrome-plugin.zip"
- name: Upload Firefox extension
uses: actions/upload-artifact@v4
with:
name: harper-firefox-plugin.zip
path: "packages/chrome-plugin/package/harper-firefox-plugin.zip"
- name: Release artifacts
uses: ncipollo/release-action@v1
if: startsWith(github.ref, 'refs/tags/v')
with:
artifacts: "packages/chrome-plugin/package/*.zip"
allowUpdates: true
draft: true
Loading