diff --git a/Cargo.lock b/Cargo.lock index 55ddff31..80ef3e51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2669,7 +2669,7 @@ dependencies = [ [[package]] name = "harper-brill" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-pos-utils", "lazy_static", @@ -2703,7 +2703,7 @@ dependencies = [ [[package]] name = "harper-comments" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-core", "harper-html", @@ -2737,7 +2737,7 @@ dependencies = [ [[package]] name = "harper-core" -version = "1.1.0" +version = "1.2.0" dependencies = [ "ammonia", "bitflags 2.10.0", @@ -2775,7 +2775,7 @@ dependencies = [ [[package]] name = "harper-html" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-core", "harper-tree-sitter", @@ -2786,7 +2786,7 @@ dependencies = [ [[package]] name = "harper-ink" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-core", "harper-tree-sitter", @@ -2797,7 +2797,7 @@ dependencies = [ [[package]] name = "harper-jjdescription" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-core", "harper-tree-sitter", @@ -2808,7 +2808,7 @@ dependencies = [ [[package]] name = "harper-literate-haskell" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-comments", "harper-core", @@ -2819,7 +2819,7 @@ dependencies = [ [[package]] name = "harper-ls" -version = "1.1.0" +version = "1.2.0" dependencies = [ "anyhow", "clap", @@ -2850,7 +2850,7 @@ dependencies = [ [[package]] name = "harper-pos-utils" -version = "1.1.0" +version = "1.2.0" dependencies = [ "burn", "burn-ndarray", @@ -2868,7 +2868,7 @@ dependencies = [ [[package]] name = "harper-python" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-core", "harper-tree-sitter", @@ -2879,7 +2879,7 @@ dependencies = [ [[package]] name = "harper-stats" -version = "1.1.0" +version = "1.2.0" dependencies = [ "chrono", "harper-core", @@ -2890,7 +2890,7 @@ dependencies = [ [[package]] name = "harper-tree-sitter" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-core", "tree-sitter", @@ -2909,7 +2909,7 @@ dependencies = [ [[package]] name = "harper-typst" -version = "1.1.0" +version = "1.2.0" dependencies = [ "harper-core", "itertools 0.14.0", diff --git a/harper-brill/Cargo.toml b/harper-brill/Cargo.toml index 7c03d84d..e985500a 100644 --- a/harper-brill/Cargo.toml +++ b/harper-brill/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-brill" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-comments/Cargo.toml b/harper-comments/Cargo.toml index 30a3ca0e..5ff77b7a 100644 --- a/harper-comments/Cargo.toml +++ b/harper-comments/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-comments" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-core/Cargo.toml b/harper-core/Cargo.toml index 740feeb0..56aca6d0 100644 --- a/harper-core/Cargo.toml +++ b/harper-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-core" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-html/Cargo.toml b/harper-html/Cargo.toml index ca085165..c20dfc67 100644 --- a/harper-html/Cargo.toml +++ b/harper-html/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-html" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-ink/Cargo.toml b/harper-ink/Cargo.toml index 6bd5d5b1..798b78dd 100644 --- a/harper-ink/Cargo.toml +++ b/harper-ink/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-ink" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-jjdescription/Cargo.toml b/harper-jjdescription/Cargo.toml index d5c2af11..a18a5097 100644 --- a/harper-jjdescription/Cargo.toml +++ b/harper-jjdescription/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-jjdescription" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-literate-haskell/Cargo.toml b/harper-literate-haskell/Cargo.toml index 57c92df7..2899b8d3 100644 --- a/harper-literate-haskell/Cargo.toml +++ b/harper-literate-haskell/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-literate-haskell" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-ls/Cargo.toml b/harper-ls/Cargo.toml index 70149f17..96895f66 100644 --- a/harper-ls/Cargo.toml +++ b/harper-ls/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-ls" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-pos-utils/Cargo.toml b/harper-pos-utils/Cargo.toml index b1209e2f..76a3c657 100644 --- a/harper-pos-utils/Cargo.toml +++ b/harper-pos-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-pos-utils" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-python/Cargo.toml b/harper-python/Cargo.toml index 42656ae3..951fd6aa 100644 --- a/harper-python/Cargo.toml +++ b/harper-python/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-python" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-stats/Cargo.toml b/harper-stats/Cargo.toml index 0c07c58d..3300188b 100644 --- a/harper-stats/Cargo.toml +++ b/harper-stats/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-stats" -version = "1.1.0" +version = "1.2.0" edition = "2021" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-tree-sitter/Cargo.toml b/harper-tree-sitter/Cargo.toml index 7c59a59a..1049e83a 100644 --- a/harper-tree-sitter/Cargo.toml +++ b/harper-tree-sitter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-tree-sitter" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/harper-typst/Cargo.toml b/harper-typst/Cargo.toml index 1c8a959b..eaeabd01 100644 --- a/harper-typst/Cargo.toml +++ b/harper-typst/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-typst" -version = "1.1.0" +version = "1.2.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" diff --git a/packages/chrome-plugin/package.json b/packages/chrome-plugin/package.json index 5d09b92f..17060143 100644 --- a/packages/chrome-plugin/package.json +++ b/packages/chrome-plugin/package.json @@ -1,7 +1,7 @@ { "name": "chrome-plugin", "displayName": "chrome-plugin", - "version": "1.1.0", + "version": "1.2.0", "author": "no one", "description": "The private grammar checker for 21st Century English", "type": "module", diff --git a/packages/harper.js/package.json b/packages/harper.js/package.json index c701371b..1b80ea63 100644 --- a/packages/harper.js/package.json +++ b/packages/harper.js/package.json @@ -1,6 +1,6 @@ { "name": "harper.js", - "version": "1.1.0", + "version": "1.2.0", "license": "Apache-2.0", "author": "Elijah Potter", "description": "The grammar checker that respects your privacy.", diff --git a/packages/obsidian-plugin/package.json b/packages/obsidian-plugin/package.json index 047a42b5..9a773052 100644 --- a/packages/obsidian-plugin/package.json +++ b/packages/obsidian-plugin/package.json @@ -1,7 +1,7 @@ { "name": "obsidian-plugin", "private": true, - "version": "1.1.0", + "version": "1.2.0", "main": "main.js", "devDependencies": { "@playwright/test": "^1.52.0", diff --git a/packages/vscode-plugin/package.json b/packages/vscode-plugin/package.json index a29e0eca..44dfa02c 100644 --- a/packages/vscode-plugin/package.json +++ b/packages/vscode-plugin/package.json @@ -2,7 +2,7 @@ "name": "harper", "displayName": "Harper - Grammar / Spell Checking", "description": "The grammar checker for developers", - "version": "1.1.0", + "version": "1.2.0", "private": true, "author": "Elijah Potter", "publisher": "elijah-potter", @@ -353,6 +353,12 @@ "default": true, "description": "Looks for incorrect spacing inside the closed compound `anywhere`." }, + "harper.linters.ApartFrom": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Flags the misspelling `apart form` and suggests `apart from`." + }, "harper.linters.AppleNames": { "scope": "resource", "type": "boolean", @@ -551,6 +557,12 @@ "default": true, "description": "Replaces the incorrect past-tense spelling `bough` with `bought` after subject pronouns." }, + "harper.linters.BrandBrandish": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Looks for `brandish` wrongly used when `brand` is intended." + }, "harper.linters.Brutality": { "scope": "resource", "type": "boolean", @@ -561,7 +573,7 @@ "scope": "resource", "type": "boolean", "default": true, - "description": "English convention treats `built-in` as a single, attributive adjective—meaning something integrated from the outset—whereas other forms like `in built` are non-standard and can feel awkward to readers." + "description": "English convention treats `built-in` as a single, attributive adjective—meaning something integrated from the outset—whereas other forms like `in built` are nonstandard and can feel awkward to readers." }, "harper.linters.ByAccident": { "scope": "resource", @@ -719,6 +731,12 @@ "default": true, "description": "The words “criteria” and “phenomena” are the plurals of “criterion” and “phenomenon”, respectively. They are often incorrectly used as singular." }, + "harper.linters.CureFor": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Flags `cure against` and prefers the standard `cure for` pairing." + }, "harper.linters.CurrencyPlacement": { "scope": "resource", "type": "boolean", @@ -809,6 +827,12 @@ "default": true, "description": "Removes unnecessary `about` after `discuss`." }, + "harper.linters.DisjointPrefixes": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Looks for words with their prefixes written with a space or hyphen between instead of joined." + }, "harper.linters.DoNotWant": { "scope": "resource", "type": "boolean", @@ -887,6 +911,12 @@ "default": true, "description": "Detects variants like `on route` or `in route` and suggests `en route`." }, + "harper.linters.EverEvery": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Tries to correct typos of `every` instead of `ever`." + }, "harper.linters.EverPresent": { "scope": "resource", "type": "boolean", @@ -1043,6 +1073,12 @@ "default": true, "description": "Flags misuse of `far be it` and suggests using `from` when it is followed by `for`" }, + "harper.linters.FascinatedBy": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Ensures the correct prepositions are used with `fascinated` (e.g., `fascinated by` or `fascinated with`)." + }, "harper.linters.FastPaste": { "scope": "resource", "type": "boolean", @@ -1521,7 +1557,7 @@ "scope": "resource", "type": "boolean", "default": true, - "description": "Detects the possessive `its` before `had`, `been`, or `got` and offers `it's` or `it has`." + "description": "Detects places where the possessive `its` should be the contraction `it's`, including before verbs/clauses and before proper nouns after opinion verbs." }, "harper.linters.ItsPossessive": { "scope": "resource", @@ -1547,12 +1583,24 @@ "default": true, "description": "Corrects `jar-dropping` to `jaw-dropping`, ensuring the intended meaning of something that causes amazement." }, + "harper.linters.JealousOf": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Encourages the standard preposition after `jealous`." + }, "harper.linters.JetpackNames": { "scope": "resource", "type": "boolean", "default": true, "description": "Ensure proper capitalization of Jetpack-related terms." }, + "harper.linters.JohnsHopkins": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Recommends the proper spelling `Johns Hopkins`." + }, "harper.linters.JustDeserts": { "scope": "resource", "type": "boolean", @@ -1595,6 +1643,12 @@ "default": true, "description": "Corrects wrong variations of the idiomatic adjective `last-ditch`." }, + "harper.linters.LastNight": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Flags `yesterday night` and suggests the standard phrasing `last night`." + }, "harper.linters.LeftRightHand": { "scope": "resource", "type": "boolean", @@ -1665,7 +1719,7 @@ "scope": "resource", "type": "boolean", "default": true, - "description": "Corrects non-standard variants of `low-hanging fruit`." + "description": "Corrects nonstandard variants of `low-hanging fruit`." }, "harper.linters.MakeDoWith": { "scope": "resource", @@ -1691,11 +1745,11 @@ "default": true, "description": "Corrects the eggcorn `managerial reigns` to the idiomatic `managerial reins`." }, - "harper.linters.MassPlurals": { + "harper.linters.MassNouns": { "scope": "resource", "type": "boolean", "default": true, - "description": "Looks for plural forms of mass nouns that have no plural." + "description": "Detects mass nouns used as countable nouns." }, "harper.linters.MergeWords": { "scope": "resource", @@ -1769,6 +1823,12 @@ "default": true, "description": "Corrects the eggcorn `mixed bad` to `mixed bag`." }, + "harper.linters.ModalBeAdjective": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Looks for `be` missing between a modal verb and adjective." + }, "harper.linters.ModalOf": { "scope": "resource", "type": "boolean", @@ -1961,12 +2021,6 @@ "default": true, "description": "Looks for incorrect spacing inside the closed compound `notwithstanding`." }, - "harper.linters.NounCountability": { - "scope": "resource", - "type": "boolean", - "default": true, - "description": "Correct mass nouns that are preceded by the wrong determiners or quantifiers." - }, "harper.linters.NounVerbConfusion": { "scope": "resource", "type": "boolean", @@ -2277,7 +2331,7 @@ "scope": "resource", "type": "boolean", "default": true, - "description": "Corrects `quite many` to `quite a few`, which is the more natural and idiomatic phrase in standard English. `Quite many` is considered non-standard usage." + "description": "Corrects `quite many` to `quite a few`, which is the more natural and idiomatic phrase in standard English. `Quite many` is considered nonstandard usage." }, "harper.linters.QuiteQuiet": { "scope": "resource", @@ -2309,6 +2363,12 @@ "default": true, "description": "Expands an initialism." }, + "harper.linters.RedundantAcronyms": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Identifies redundant acronyms where the last word repeats the last letter's meaning (e.g., `ATM machine` → `ATM` or `automated teller machine`)." + }, "harper.linters.RedundantAdditiveAdverbs": { "scope": "resource", "type": "boolean", @@ -2351,12 +2411,24 @@ "default": true, "description": "This rule looks for repetitions of words that are not homographs." }, + "harper.linters.Respond": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Flags uses of the noun `response` where the verb `respond` is needed after an auxiliary." + }, "harper.linters.RifeWith": { "scope": "resource", "type": "boolean", "default": true, "description": "Corrects `ripe with` to `rife with`, preserving the phrase’s meaning of being filled with something, often undesirable." }, + "harper.linters.RightClick": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Hyphenates right-click style mouse commands." + }, "harper.linters.RiseTheQuestion": { "scope": "resource", "type": "boolean", @@ -2421,7 +2493,7 @@ "scope": "resource", "type": "boolean", "default": true, - "description": "Corrects non-standard variants of 'shoot oneself in the foot'." + "description": "Corrects nonstandard variants of 'shoot oneself in the foot'." }, "harper.linters.SimpleGrammatical": { "scope": "resource", @@ -2507,6 +2579,12 @@ "default": true, "description": "Looks for incorrect spacing inside the closed compound `somewhere`." }, + "harper.linters.SoonToBe": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Hyphenates `soon-to-be` when it appears before a noun." + }, "harper.linters.SoonerOrLater": { "scope": "resource", "type": "boolean", @@ -2591,6 +2669,12 @@ "default": true, "description": "Corrects `take it personal` to `take it personally`." }, + "harper.linters.TakeMedicine": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Encourages pairing medicine-related nouns with verbs like `take` or `swallow` instead of `eat`." + }, "harper.linters.TalkToYouLater": { "scope": "resource", "type": "boolean", @@ -2861,6 +2945,12 @@ "default": false, "description": "Looks for situations where the genitive case of \"there\" should be used." }, + "harper.linters.UseTitleCase": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Prompts you to use title case in relevant headings." + }, "harper.linters.VerbToAdjective": { "scope": "resource", "type": "boolean", @@ -3005,6 +3095,12 @@ "default": true, "description": "Corrects `would/could have never` to `never would/could have`." }, + "harper.linters.WreakHavoc": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Corrects the eggcorn `wreck havoc` to `wreak havoc`, which is the proper term for causing chaos or destruction." + }, "harper.linters.WroughtIron": { "scope": "resource", "type": "boolean",