diff --git a/Cargo.lock b/Cargo.lock index 63d214ec..1acabcd5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2646,7 +2646,7 @@ dependencies = [ [[package]] name = "harper-brill" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-pos-utils", "lazy_static", @@ -2677,7 +2677,7 @@ dependencies = [ [[package]] name = "harper-comments" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-core", "harper-html", @@ -2711,7 +2711,7 @@ dependencies = [ [[package]] name = "harper-core" -version = "0.70.0" +version = "0.71.0" dependencies = [ "ammonia", "bitflags 2.10.0", @@ -2749,7 +2749,7 @@ dependencies = [ [[package]] name = "harper-html" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-core", "harper-tree-sitter", @@ -2760,7 +2760,7 @@ dependencies = [ [[package]] name = "harper-ink" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-core", "harper-tree-sitter", @@ -2771,7 +2771,7 @@ dependencies = [ [[package]] name = "harper-jjdescription" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-core", "harper-tree-sitter", @@ -2782,7 +2782,7 @@ dependencies = [ [[package]] name = "harper-literate-haskell" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-comments", "harper-core", @@ -2793,7 +2793,7 @@ dependencies = [ [[package]] name = "harper-ls" -version = "0.70.0" +version = "0.71.0" dependencies = [ "anyhow", "clap", @@ -2824,7 +2824,7 @@ dependencies = [ [[package]] name = "harper-pos-utils" -version = "0.70.0" +version = "0.71.0" dependencies = [ "burn", "burn-ndarray", @@ -2842,7 +2842,7 @@ dependencies = [ [[package]] name = "harper-python" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-core", "harper-tree-sitter", @@ -2853,7 +2853,7 @@ dependencies = [ [[package]] name = "harper-stats" -version = "0.70.0" +version = "0.71.0" dependencies = [ "chrono", "harper-core", @@ -2864,7 +2864,7 @@ dependencies = [ [[package]] name = "harper-tree-sitter" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-core", "tree-sitter", @@ -2883,7 +2883,7 @@ dependencies = [ [[package]] name = "harper-typst" -version = "0.70.0" +version = "0.71.0" dependencies = [ "harper-core", "itertools 0.14.0", diff --git a/harper-brill/Cargo.toml b/harper-brill/Cargo.toml index 02c74399..7abb504c 100644 --- a/harper-brill/Cargo.toml +++ b/harper-brill/Cargo.toml @@ -1,13 +1,13 @@ [package] name = "harper-brill" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" repository = "https://github.com/automattic/harper" [dependencies] -harper-pos-utils = { path = "../harper-pos-utils/", version = "0.70.0" } +harper-pos-utils = { path = "../harper-pos-utils/", version = "0.71.0" } lazy_static = "1.5.0" serde_json = "1.0.145" diff --git a/harper-cli/Cargo.toml b/harper-cli/Cargo.toml index 108a66f4..13016403 100644 --- a/harper-cli/Cargo.toml +++ b/harper-cli/Cargo.toml @@ -9,19 +9,19 @@ repository = "https://github.com/automattic/harper" anyhow = "1.0.100" ariadne = "0.4.1" clap = { version = "4.5.51", features = ["derive", "std", "string"], default-features = false } -harper-stats = { path = "../harper-stats", version = "0.70.0" } +harper-stats = { path = "../harper-stats", version = "0.71.0" } dirs = "6.0.0" -harper-literate-haskell = { path = "../harper-literate-haskell", version = "0.70.0" } -harper-python = { path = "../harper-python", version = "0.70.0" } -harper-core = { path = "../harper-core", version = "0.70.0" } -harper-pos-utils = { path = "../harper-pos-utils", version = "0.70.0", features = [] } -harper-comments = { path = "../harper-comments", version = "0.70.0" } -harper-typst = { path = "../harper-typst", version = "0.70.0" } +harper-literate-haskell = { path = "../harper-literate-haskell", version = "0.71.0" } +harper-python = { path = "../harper-python", version = "0.71.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } +harper-pos-utils = { path = "../harper-pos-utils", version = "0.71.0", features = [] } +harper-comments = { path = "../harper-comments", version = "0.71.0" } +harper-typst = { path = "../harper-typst", version = "0.71.0" } hashbrown = "0.16.0" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.145" strum = "0.27.2" -harper-ink = { version = "0.70.0", path = "../harper-ink" } +harper-ink = { version = "0.71.0", path = "../harper-ink" } [features] default = [] diff --git a/harper-comments/Cargo.toml b/harper-comments/Cargo.toml index 1c7fba69..92105e22 100644 --- a/harper-comments/Cargo.toml +++ b/harper-comments/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-comments" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" @@ -8,9 +8,9 @@ readme = "README.md" repository = "https://github.com/automattic/harper" [dependencies] -harper-core = { path = "../harper-core", version = "0.70.0" } -harper-html = { path = "../harper-html", version = "0.70.0" } -harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.70.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } +harper-html = { path = "../harper-html", version = "0.71.0" } +harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.71.0" } itertools = "0.14.0" tree-sitter = "0.25.10" tree-sitter-bash = "0.25.0" diff --git a/harper-core/Cargo.toml b/harper-core/Cargo.toml index ad494e1f..1ab814a7 100644 --- a/harper-core/Cargo.toml +++ b/harper-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-core" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" @@ -31,7 +31,7 @@ foldhash = "0.2.0" strum_macros = "0.27.2" strum = "0.27.2" ammonia = "4.1.2" -harper-brill = { path = "../harper-brill", version = "0.70.0" } +harper-brill = { path = "../harper-brill", version = "0.71.0" } bitflags = { version = "2.10.0", features = ["serde"] } trie-rs = "0.4.2" diff --git a/harper-html/Cargo.toml b/harper-html/Cargo.toml index e7db55d3..cea09ca8 100644 --- a/harper-html/Cargo.toml +++ b/harper-html/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "harper-html" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" repository = "https://github.com/automattic/harper" [dependencies] -harper-core = { path = "../harper-core", version = "0.70.0" } -harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.70.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } +harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.71.0" } tree-sitter-html = "0.23.2" tree-sitter = "0.25.10" diff --git a/harper-ink/Cargo.toml b/harper-ink/Cargo.toml index 813e62ae..d68c2bc4 100644 --- a/harper-ink/Cargo.toml +++ b/harper-ink/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "harper-ink" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" repository = "https://github.com/automattic/harper" [dependencies] -harper-core = { path = "../harper-core", version = "0.70.0" } -harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.70.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } +harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.71.0" } tree-sitter-ink-lbz = "0.0.1" tree-sitter = "0.25.10" diff --git a/harper-jjdescription/Cargo.toml b/harper-jjdescription/Cargo.toml index 75deaa4b..e26cdb9b 100644 --- a/harper-jjdescription/Cargo.toml +++ b/harper-jjdescription/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "harper-jjdescription" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" repository = "https://github.com/automattic/harper" [dependencies] -harper-core = { path = "../harper-core", version = "0.70.0" } -harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.70.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } +harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.71.0" } tree-sitter-jjdescription = "0.0.1" tree-sitter = "0.25.10" diff --git a/harper-literate-haskell/Cargo.toml b/harper-literate-haskell/Cargo.toml index 2436abc0..2f24c00f 100644 --- a/harper-literate-haskell/Cargo.toml +++ b/harper-literate-haskell/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "harper-literate-haskell" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" repository = "https://github.com/automattic/harper" [dependencies] -harper-core = { path = "../harper-core", version = "0.70.0" } -harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.70.0" } -harper-comments = { path = "../harper-comments", version = "0.70.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } +harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.71.0" } +harper-comments = { path = "../harper-comments", version = "0.71.0" } itertools = "0.14.0" paste = "1.0.14" diff --git a/harper-ls/Cargo.toml b/harper-ls/Cargo.toml index e8ceede5..02431b65 100644 --- a/harper-ls/Cargo.toml +++ b/harper-ls/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-ls" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" @@ -8,14 +8,14 @@ readme = "README.md" repository = "https://github.com/automattic/harper" [dependencies] -harper-stats = { path = "../harper-stats", version = "0.70.0" } -harper-literate-haskell = { path = "../harper-literate-haskell", version = "0.70.0" } -harper-core = { path = "../harper-core", version = "0.70.0", features = ["concurrent"] } -harper-comments = { path = "../harper-comments", version = "0.70.0" } -harper-jjdescription = { path = "../harper-jjdescription", version = "0.70.0" } -harper-typst = { path = "../harper-typst", version = "0.70.0" } -harper-html = { path = "../harper-html", version = "0.70.0" } -harper-python = { path = "../harper-python", version = "0.70.0" } +harper-stats = { path = "../harper-stats", version = "0.71.0" } +harper-literate-haskell = { path = "../harper-literate-haskell", version = "0.71.0" } +harper-core = { path = "../harper-core", version = "0.71.0", features = ["concurrent"] } +harper-comments = { path = "../harper-comments", version = "0.71.0" } +harper-jjdescription = { path = "../harper-jjdescription", version = "0.71.0" } +harper-typst = { path = "../harper-typst", version = "0.71.0" } +harper-html = { path = "../harper-html", version = "0.71.0" } +harper-python = { path = "../harper-python", version = "0.71.0" } tower-lsp-server = "0.22.1" tokio = { version = "1.48.0", default-features = false, features = ["fs", "io-std", "io-util", "macros", "net", "rt-multi-thread", "sync"] } clap = { version = "4.5.51", default-features = false, features = ["derive", "std"] } @@ -32,7 +32,7 @@ futures = "0.3.31" serde = { version = "1.0.228", features = ["derive"] } indexmap = { version = "2.12.0", features = ["serde"] } globset = "0.4.18" -harper-ink = { version = "0.70.0", path = "../harper-ink" } +harper-ink = { version = "0.71.0", path = "../harper-ink" } [features] default = [] diff --git a/harper-pos-utils/Cargo.toml b/harper-pos-utils/Cargo.toml index c6dec390..0f6bc8ef 100644 --- a/harper-pos-utils/Cargo.toml +++ b/harper-pos-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-pos-utils" -version = "0.70.0" +version = "0.71.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 2c3714f4..e762f67f 100644 --- a/harper-python/Cargo.toml +++ b/harper-python/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "harper-python" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" repository = "https://github.com/automattic/harper" [dependencies] -harper-core = { path = "../harper-core", version = "0.70.0" } -harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.70.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } +harper-tree-sitter = { path = "../harper-tree-sitter", version = "0.71.0" } tree-sitter-python = "0.25.0" tree-sitter = "0.25.10" diff --git a/harper-stats/Cargo.toml b/harper-stats/Cargo.toml index bba000d8..14dbc3ea 100644 --- a/harper-stats/Cargo.toml +++ b/harper-stats/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "harper-stats" -version = "0.70.0" +version = "0.71.0" edition = "2021" description = "The language checker for developers." license = "Apache-2.0" @@ -9,7 +9,7 @@ repository = "https://github.com/automattic/harper" [dependencies] serde = { version = "1.0.228", features = ["derive"] } -harper-core = { path = "../harper-core", version = "0.70.0", features = ["concurrent"] } +harper-core = { path = "../harper-core", version = "0.71.0", features = ["concurrent"] } uuid = { version = "1.18.1", features = ["serde", "v4"] } serde_json = "1.0.145" chrono = "0.4.42" diff --git a/harper-tree-sitter/Cargo.toml b/harper-tree-sitter/Cargo.toml index f95b7d1a..7a9877b9 100644 --- a/harper-tree-sitter/Cargo.toml +++ b/harper-tree-sitter/Cargo.toml @@ -1,11 +1,11 @@ [package] name = "harper-tree-sitter" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" repository = "https://github.com/automattic/harper" [dependencies] -harper-core = { path = "../harper-core", version = "0.70.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } tree-sitter = "0.25.10" diff --git a/harper-typst/Cargo.toml b/harper-typst/Cargo.toml index a73cbc42..42193e5f 100644 --- a/harper-typst/Cargo.toml +++ b/harper-typst/Cargo.toml @@ -1,13 +1,13 @@ [package] name = "harper-typst" -version = "0.70.0" +version = "0.71.0" edition = "2024" description = "The language checker for developers." license = "Apache-2.0" repository = "https://github.com/automattic/harper" [dependencies] -harper-core = { path = "../harper-core", version = "0.70.0" } +harper-core = { path = "../harper-core", version = "0.71.0" } typst-syntax = { version = "0.13.1" } ordered-float = { version = "5.1.0", features = ["serde"] } itertools = "0.14.0" diff --git a/harper-wasm/Cargo.toml b/harper-wasm/Cargo.toml index 26f25b03..686f5fdd 100644 --- a/harper-wasm/Cargo.toml +++ b/harper-wasm/Cargo.toml @@ -13,10 +13,10 @@ console_error_panic_hook = "0.1.7" tracing = "0.1.41" tracing-wasm = "0.2.1" wasm-bindgen = "0.2.97" -harper-core = { path = "../harper-core", version = "0.70.0", features = ["concurrent"] } +harper-core = { path = "../harper-core", version = "0.71.0", features = ["concurrent"] } once_cell = "1.21.3" serde-wasm-bindgen = "0.6.5" serde_json = "1.0.145" serde = { version = "1.0.228", features = ["derive"] } getrandom = { version = "0.3.4", default-features = false, features = ["wasm_js"] } -harper-stats = { path = "../harper-stats", version = "0.70.0", features = ["js"] } +harper-stats = { path = "../harper-stats", version = "0.71.0", features = ["js"] } diff --git a/packages/chrome-plugin/package.json b/packages/chrome-plugin/package.json index 6d48a26b..d4b06325 100644 --- a/packages/chrome-plugin/package.json +++ b/packages/chrome-plugin/package.json @@ -1,7 +1,7 @@ { "name": "chrome-plugin", "displayName": "chrome-plugin", - "version": "0.70.0", + "version": "0.71.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 a774b0c2..ae26d66b 100644 --- a/packages/harper.js/package.json +++ b/packages/harper.js/package.json @@ -1,6 +1,6 @@ { "name": "harper.js", - "version": "0.70.0", + "version": "0.71.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 a48df6d2..9d0fda46 100644 --- a/packages/obsidian-plugin/package.json +++ b/packages/obsidian-plugin/package.json @@ -1,7 +1,7 @@ { "name": "obsidian-plugin", "private": true, - "version": "0.70.0", + "version": "0.71.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 51d68b48..933c2a1d 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": "0.70.0", + "version": "0.71.0", "private": true, "author": "Elijah Potter", "publisher": "elijah-potter", @@ -209,6 +209,12 @@ "default": true, "description": "Corrects the missing article in `after while`, forming `after a while`." }, + "harper.linters.AfterLater": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Checks for the word `later` following `after [a period of time]`." + }, "harper.linters.AheadAnd": { "scope": "resource", "type": "boolean", @@ -219,13 +225,19 @@ "scope": "resource", "type": "boolean", "default": true, - "description": "Finds redundant am/pm indicators used together with time periods such as 'in the morning' or 'at night'." + "description": "Finds and corrects common wrong forms of the phrase 'for all intents and purposes' / 'to all intents and purposes'." }, "harper.linters.AllOfASudden": { "scope": "resource", "type": "boolean", "default": true, - "description": "Corrects `all of the sudden` to `all of a sudden`." + "description": "Guides this expression toward the standard `all of a sudden`." + }, + "harper.linters.Alongside": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Replaces the spaced form `along side` with `alongside`." }, "harper.linters.AlzheimersDisease": { "scope": "resource", @@ -455,6 +467,12 @@ "default": true, "description": "Changes `baited breath` to the correct `bated breath`." }, + "harper.linters.BeAllowed": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Ensures the passive form uses `be allowed` after future negatives." + }, "harper.linters.BeRightBack": { "scope": "resource", "type": "boolean", @@ -509,6 +527,12 @@ "default": false, "description": "This rule looks for particularly boring or overused words. Using varied language is an easy way to keep a reader's attention." }, + "harper.linters.Bought": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Replaces the incorrect past-tense spelling `bough` with `bought` after subject pronouns." + }, "harper.linters.Brutality": { "scope": "resource", "type": "boolean", @@ -569,6 +593,12 @@ "default": true, "description": "Ensures `case-sensitive` is correctly hyphenated." }, + "harper.linters.CautionaryTale": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Corrects confusion between `tale` (story) and `tail` (appendage) in common phrases." + }, "harper.linters.ChampAtTheBit": { "scope": "resource", "type": "boolean", @@ -617,6 +647,12 @@ "default": true, "description": "Detects compound nouns split by a space and suggests merging them when both parts form a valid noun." }, + "harper.linters.CompoundSubjectI": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Promotes `I` in compound subjects headed by a possessive determiner." + }, "harper.linters.CondenseAllThe": { "scope": "resource", "type": "boolean", @@ -773,6 +809,12 @@ "default": true, "description": "Ensures common initialisms (like \"i.e.\") are properly dot-separated." }, + "harper.linters.DoubleClick": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Encourages hyphenating `double-click` and its inflections." + }, "harper.linters.DoubleModal": { "scope": "resource", "type": "boolean", @@ -785,6 +827,12 @@ "default": true, "description": "Corrects `each and everyone` to `each and every one`." }, + "harper.linters.EggYolk": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Corrects the eggcorn `egg yoke`, replacing it with the standard culinary term `egg yolk`." + }, "harper.linters.EllipsisLength": { "scope": "resource", "type": "boolean", @@ -1025,6 +1073,12 @@ "default": true, "description": "Expands an initialism." }, + "harper.linters.FreePredicate": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Helps swap in `free` when a linking verb is followed by the noun `fee`." + }, "harper.linters.FreeRein": { "scope": "resource", "type": "boolean", @@ -1127,6 +1181,12 @@ "default": true, "description": "Flags hedging language (e.g. `I would argue that`, `..., so to speak`, `to a certain degree`)." }, + "harper.linters.HelloGreeting": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Encourages greeting someone with `hello` instead of the homophone `halo`." + }, "harper.linters.Henceforth": { "scope": "resource", "type": "boolean", @@ -1445,6 +1505,12 @@ "default": true, "description": "Changes `let along` to `let alone`." }, + "harper.linters.LetToDo": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Corrects extraneous `to` after `let`." + }, "harper.linters.LetsConfusion": { "scope": "resource", "type": "boolean", @@ -1601,6 +1667,12 @@ "default": true, "description": "Detects `of` mistakenly used with `would`, `could`, `should`, etc." }, + "harper.linters.ModalSeem": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Detects modal verbs followed by `seen` before adjectives and suggests `seem` or `be`." + }, "harper.linters.Months": { "scope": "resource", "type": "boolean", @@ -1625,6 +1697,12 @@ "default": true, "description": "Corrects `most number` and `most amount`" }, + "harper.linters.MostOfTheTimes": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Corrects `a lot of the times` and `most of the times` to use singular `time`." + }, "harper.linters.Multicore": { "scope": "resource", "type": "boolean", @@ -1871,6 +1949,12 @@ "default": true, "description": "Ensures `operating system` is used correctly instead of `operative system`." }, + "harper.linters.OrthographicConsistency": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Ensures word casing matches the dictionary's canonical orthography." + }, "harper.linters.OughtToBe": { "scope": "resource", "type": "boolean", @@ -1919,6 +2003,12 @@ "default": true, "description": "Flags oxymoronic phrases (e.g. `amateur expert`, `increasingly less`, etc.)." }, + "harper.linters.PassersBy": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Corrects `passerbys` and `passer-bys` to `passersby` or `passers-by`." + }, "harper.linters.PeaceOfMind": { "scope": "resource", "type": "boolean", @@ -1997,6 +2087,12 @@ "default": true, "description": "Detects the ungrammatical patterns ` have …ing` (e.g., `I have …ing`) and `'ve …ing` (e.g., `I've …ing`) and suggests either the present progressive (e.g., `I'm/We're/You're/They're …`) or the present perfect progressive (e.g., `I/We/You/They have been …` or `I've/We've/You've/They've been …`)." }, + "harper.linters.PronounAre": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Spots the letter `r` used in place of `are` or `you're` after plural first- or second-person pronouns." + }, "harper.linters.PronounContraction": { "scope": "resource", "type": "boolean", @@ -2033,6 +2129,12 @@ "default": true, "description": "Detects missing `of` after the quantifier “a couple” when it precedes a plural noun" }, + "harper.linters.QuiteMany": { + "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." + }, "harper.linters.QuiteQuiet": { "scope": "resource", "type": "boolean", @@ -2129,6 +2231,12 @@ "default": true, "description": "Corrects pluralizing the wrong noun in `rule of thumb`." }, + "harper.linters.SafeToSave": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Detects `safe` (adjective) when `save` (verb) is intended after modal verbs like `could` or `should`." + }, "harper.linters.SameAs": { "scope": "resource", "type": "boolean", @@ -2279,6 +2387,12 @@ "default": false, "description": "Most style guides recommend that you spell out numbers less than ten." }, + "harper.linters.SplitWords": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Finds missing spaces in improper compound words." + }, "harper.linters.Starving": { "scope": "resource", "type": "boolean", @@ -2387,6 +2501,12 @@ "default": true, "description": "Looks for incorrect spacing inside the closed compound `therefore`." }, + "harper.linters.Theres": { + "scope": "resource", + "type": "boolean", + "default": true, + "description": "Replaces the mistaken possessive `their's` before a determiner with the contraction `there's`." + }, "harper.linters.Thereupon": { "scope": "resource", "type": "boolean",