mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 03:07:56 +01:00
## Summary of the Pull Request - #39572 updated check-spelling but ignored: > 🐣 Breaking Changes [Code Scanning action requires a Code Scanning Ruleset](https://github.com/check-spelling/check-spelling/wiki/Breaking-Change:-Code-Scanning-action-requires-a-Code-Scanning-Ruleset) If you use SARIF reporting, then instead of the workflow yielding an ❌ when it fails, it will rely on [github-advanced-security 🤖](https://github.com/apps/github-advanced-security) to report the failure. You will need to adjust your checks for PRs. This means that check-spelling hasn't been properly doing its job 😦. I'm sorry, I should have pushed a thing to this repo earlier,... Anyway, as with most refreshes, this comes with a number of fixes, some are fixes for typos that snuck in before the 0.0.25 upgrade, some are for things that snuck in after, some are based on new rules in spell-check-this, and some are hand written patterns based on running through this repository a few times. About the 🐣 **breaking change**: someone needs to create a ruleset for this repository (see [Code Scanning action requires a Code Scanning Ruleset: Sample ruleset ](https://github.com/check-spelling/check-spelling/wiki/Breaking-Change:-Code-Scanning-action-requires-a-Code-Scanning-Ruleset#sample-ruleset)). The alternative to adding a ruleset is to change the condition to not use sarif for this repository. In general, I think the github integration from sarif is prettier/more helpful, so I think that it's the better choice. You can see an example of it working in: - https://github.com/check-spelling-sandbox/PowerToys/pull/23 --------- Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> Co-authored-by: Mike Griese <migrie@microsoft.com> Co-authored-by: Dustin L. Howett <dustin@howett.net>
571 lines
15 KiB
Plaintext
571 lines
15 KiB
Plaintext
# reject `m_data` as VxWorks defined it and that breaks things if it's used elsewhere
|
||
# see [fprime](https://github.com/nasa/fprime/commit/d589f0a25c59ea9a800d851ea84c2f5df02fb529)
|
||
# and [Qt](https://github.com/qtproject/qt-solutions/blame/fb7bc42bfcc578ff3fa3b9ca21a41e96eb37c1c7/qtscriptclassic/src/qscriptbuffer_p.h#L46)
|
||
#\bm_data\b
|
||
|
||
# Were you debugging using a framework with `fit()`?
|
||
# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test,
|
||
# you might not want to check in code where you skip all the other tests.
|
||
#\bfit\(
|
||
|
||
# English does not use a hyphen between adverbs and nouns
|
||
# https://twitter.com/nyttypos/status/1894815686192685239
|
||
(?:^|\s)[A-Z]?[a-z]+ly-(?=[a-z]{3,})(?:[.,?!]?\s|$)
|
||
|
||
# Smart quotes should match
|
||
\s’[^.?!‘’]+’[^.?!‘’]+‘[^.?!‘’]+’|\s‘[^.?!‘’]+’[^.?!‘’]+’[^.?!‘’]+’|\s”[^.?!“”]+”[^.?!“”]+“[^.?!“”]+”|\s“[^.?!“”]+”[^.?!“”]+”[^.?!“”]+”
|
||
|
||
# Don't use `requires that` + `to be`
|
||
# https://twitter.com/nyttypos/status/1894816551435641027
|
||
\brequires that \w+\b[^.]+to be\b
|
||
|
||
# A fully parenthetical sentence’s period goes inside the parentheses, not outside.
|
||
# https://twitter.com/nyttypos/status/1898844061873639490
|
||
\([A-Z][a-z]{2,}(?: [a-z]+){3,}\)\.\s
|
||
|
||
# Complete sentences shouldn't be in the middle of another sentence as a parenthetical.
|
||
(?<!\.)(?<!\betc)\.\),
|
||
|
||
# Complete sentences in parentheticals should not have a space before the period.
|
||
\s\.\)(?!.*\}\})
|
||
|
||
# This probably indicates Mojibake https://en.wikipedia.org/wiki/Mojibake
|
||
# You probably should try to unbake this content
|
||
Ã(?:Â[¤¶¥]|[£¢])|Ã
|
||
|
||
# Should be `HH:MM:SS`
|
||
\bHH:SS:MM\b
|
||
|
||
# Should be `86400` (seconds in a standard day)
|
||
\b84600\b(?:.*\bday\b)
|
||
|
||
# Should probably be `2006-01-02` (yyyy-mm-dd)
|
||
# Assuming that the time is being passed to https://go.dev/src/time/format.go
|
||
\b2006-02-01\b
|
||
|
||
# Should probably be `YYYYMMDD`
|
||
\b[Yy]{4}[Dd]{2}[Mm]{2}(?!.*[Yy]{4}[Dd]{2}[Mm]{2}).*$
|
||
|
||
# Should be `a priori` or `and prior`
|
||
(?i)(?<!posteriori)\sand priori\s
|
||
|
||
# Should be `a`
|
||
\san (?=(?:[b-df-gj-npqtv-xz]|h(?!our|tml|ttp)|r(?!c\b)|s(?!sh|vg))[a-z])
|
||
|
||
# Articles generally shouldn't be used without a noun and a verb
|
||
# - Perhaps you're missing a verb between the noun and the second article.
|
||
# - Or, perhaps you should remove the first verb and treat the intervening word as a verb?
|
||
# - In some cases you should add a `,` between the noun and the second article.
|
||
\s(?:an?|the(?! action))\s(?!way|wh|how\b)[A-Za-z][a-z]+[a-qs-z]\s(?:a(?! bit)n?|the)\s
|
||
|
||
# Should only be one of `a`, `an`, or `the`
|
||
\b(?:(?:an?|the)\s+){2,}\b
|
||
|
||
# Should be a list `something, a second thing, or a third thing` or `something, a thing to do a thing`
|
||
# -- This rule is experimental, if you find it has a high false-positive rate, please let the maintainer know
|
||
#(?:^|[?!.] )[^()?!;,.]+, a(?:\s+(?!to\b)\w+)+?\s+an?\b
|
||
|
||
# Should only be `are` or `can`, not both
|
||
\b(?:(?:are|can)\s+){2,}\b
|
||
|
||
# Should probably be `ABCDEFGHIJKLMNOPQRSTUVWXYZ`
|
||
(?i)(?!ABCDEFGHIJKLMNOPQRSTUVWXYZ)ABC[A-Z]{21}YZ
|
||
|
||
# Should be `an`
|
||
#(?<!\b[Ii] |\.)\bam\b
|
||
|
||
# Should be `anymore`
|
||
\bany more[,.]
|
||
|
||
# Should be `Ask`
|
||
(?:^|[.?]\s+)As\s+[A-Z][a-z]{2,}\s[^.?]*?(?:how|if|wh\w+)\b
|
||
|
||
# Should be `at one fell swoop`
|
||
# and only when talking about killing, not some other completion
|
||
# Act 4 Scene 3, Macbeth
|
||
# https://www.opensourceshakespeare.org/views/plays/play_view.php?WorkID=macbeth&Act=4&Scene=3&Scope=scene
|
||
\bin one fell s[lw]?oop\b
|
||
|
||
# Should be `'`
|
||
(?i)\b(?:(?:i|s?he|they|what|who|you)[`"]ll|(?:are|ca|did|do|does|ha[ds]|have|is|should|were|wo|would)n[`"]t|(?:s?he|let|that|there|what|where|who)[`"]s|(?:i|they|we|what|who|you)[`"]ve)\b
|
||
|
||
# Should be `background` / `intro text` / `introduction` / `prologue` unless it's a brand or relates to _subterfuge_
|
||
(?i)\bpretext\b
|
||
|
||
# Should be `bearer`
|
||
\b(?<=the )burden(?= of bad news\b)
|
||
|
||
# Should be `bona`
|
||
# unless talking about bones
|
||
\bbone(?= fide\b)
|
||
|
||
# Should be `branches`
|
||
# ... unless it's really about the meal that replaces breakfast and lunch.
|
||
\b[Bb]runches\b
|
||
|
||
# Should be `briefcase`
|
||
\bbrief-case\b
|
||
|
||
# Should be `by far` or `far and away`
|
||
\bby far and away\b
|
||
|
||
# Should be `by and large`
|
||
\bby in large\b
|
||
|
||
# Should be `bytes`
|
||
# unless talking about sports where a team gets to skip a game, or
|
||
# saying `goodbyes` (even this is questionable)
|
||
(?<!\\)\bbyes\b
|
||
|
||
# Should be `can, not only ..., ... also...`
|
||
\bcan not only.*can also\b
|
||
|
||
# Should be `cannot` (or `can't`)
|
||
# See https://www.grammarly.com/blog/cannot-or-can-not/
|
||
# > Don't use `can not` when you mean `cannot`. The only time you're likely to see `can not` written as separate words is when the word `can` happens to precede some other phrase that happens to start with `not`.
|
||
# > `Can't` is a contraction of `cannot`, and it's best suited for informal writing.
|
||
# > In formal writing and where contractions are frowned upon, use `cannot`.
|
||
# > It is possible to write `can not`, but you generally find it only as part of some other construction, such as `not only . . . but also.`
|
||
# - if you encounter such a case, add a pattern for that case to patterns.txt.
|
||
\b[Cc]an not\b(?! only\b)
|
||
|
||
# Should be `chart`
|
||
(?i)\bhelm\b.*\bchard\b
|
||
|
||
# Do not use `(click) here` links
|
||
# For more information, see:
|
||
# * https://www.w3.org/QA/Tips/noClickHere
|
||
# * https://webaim.org/techniques/hypertext/link_text
|
||
# * https://granicus.com/blog/why-click-here-links-are-bad/
|
||
# * https://heyoka.medium.com/dont-use-click-here-f32f445d1021
|
||
(?i)(?:>|\[)(?:(?:click |)here|this(?=\]\([^\)]+:/)|link|(?:read |)more(?!</value))(?:</|\]\()
|
||
|
||
# Including "image of" or "picture of" in alt text is unnecessary.
|
||
\balt=['"](?:an? |)(?:image|picture) of
|
||
|
||
# Alt text should be short
|
||
\balt=(?:'[^']{126,}'|"[^"]{126,}")
|
||
|
||
# Should be `effect`
|
||
(?<=\btake )affect\b
|
||
|
||
# Should be `-endian`
|
||
\b(?i)(?<=big|little) endian\b
|
||
|
||
# Should be `equals` to `is equal to`
|
||
\bequals to\b
|
||
|
||
# Should be `ECMA` 262 (JavaScript)
|
||
(?i)\bTS\/EMCA\b|\bEMCA(?: \d|\s*Script)|\bEMCA\b(?=.*\bTS\b)
|
||
|
||
# Should be `ECMA` 340 (Near Field Communications)
|
||
(?i)EMCA[- ]340
|
||
|
||
# Should be `fall back`
|
||
\bfallback(?= to)\b
|
||
|
||
# Should be `for`, `for, to` or `to`
|
||
\b(?:for to|to for)\b
|
||
|
||
# Should be `GitHub`
|
||
(?<![&*.]|// |\b(?:from|import|type) )\bGithub\b(?![{()])
|
||
|
||
# Should be `GitLab`
|
||
(?<![&*.]|// |\b(?:from|import|type) )\bGitlab\b(?![{()])
|
||
|
||
# Should be `heartrending` unless talking about drawing hearts
|
||
\b(?i)heart[- ]rendering\b(?![^.?!]*(?:hearts|quirk))
|
||
|
||
# Should probably be `https://`...
|
||
# Markdown generally doesn't assume that links are to urls
|
||
\]\(www\.\w
|
||
|
||
# Should be `intents and purposes`
|
||
(?<=[Ff]or all )intensive purposes\b
|
||
|
||
# Should be `JavaScript`
|
||
\bJavascript\b
|
||
|
||
# Should be `macOS` or `Mac OS X` or ...
|
||
\bMacOS\b
|
||
|
||
# Should be `Microsoft`
|
||
\bMicroSoft\b
|
||
|
||
# Should be `OAuth`
|
||
(?:^|[^-/*$])[ '"]oAuth(?: [a-z]|\d+ |[^ a-zA-Z0-9:;_.()])
|
||
|
||
# Should be `RabbitMQ`
|
||
\bRabbitmq\b
|
||
|
||
# Should be `TensorFlow`
|
||
\bTensorflow\b
|
||
|
||
# Should be `TypeScript`
|
||
\bTypescript\b
|
||
|
||
# Should be `another`
|
||
\ban[- ]other(?!-)\b
|
||
|
||
# Should be `case-(in)sensitive`
|
||
\bcase (?:in|)sensitive\b
|
||
|
||
# Should be `coinciding`
|
||
\bco-inciding\b
|
||
|
||
# Should be `deprecation warning(s)`
|
||
\b[Dd]epreciation [Ww]arnings?\b
|
||
|
||
# Should be `greater than`
|
||
\bgreater then\b
|
||
|
||
# Should be `has`
|
||
\b[Ii]t only have\b
|
||
|
||
# Should be `here-in`, `the`, `them`, `this`, `these` or reworded in some other way
|
||
\bthe here(?:\.|,| (?!and|defined))
|
||
|
||
# Should be `going to bed` or `going to a bad`
|
||
\bgoing to bad(?!-)\b
|
||
|
||
# Should be `greater than`
|
||
#\bhigher than\b
|
||
|
||
# Should be `ID` (unless it's a flag/property)
|
||
#(?<![-\.])\bId\b(?![(])
|
||
|
||
# Should be `in front of`
|
||
\bin from of\b
|
||
|
||
# Should be `into`
|
||
# when not phrasal and when `in order to` would be wrong:
|
||
# https://thewritepractice.com/into-vs-in-to/
|
||
\sin to\s(?!if\b)
|
||
|
||
# Should be `use`
|
||
\sin used by\b
|
||
|
||
# Should be `in-depth` if used as an adjective (but `in depth` when used as an adverb)
|
||
\bin depth\s(?!rather\b)\w{6,}
|
||
|
||
# Should be `in-flight` or `on the fly` (unless actually talking about airline flights)
|
||
\bon[- ]flight\b(?!=\s+(?:(?:\w{2}|)\d+|availability|booking|computer|data|delay|departure|management|performance|radar|reservation|scheduling|software|status|ticket|time|type|.*(?:hotel|taxi)))
|
||
|
||
# Should be `is obsolete`
|
||
\bis obsolescent\b
|
||
|
||
# Should be `it's` or `its`
|
||
(?<![.'])\bits['’]
|
||
|
||
# Should be `its`
|
||
\bit's(?= (?:child|only purpose|own(?:er|)|parent|sibling)\b)
|
||
|
||
# Should be `for its` (possessive) or `because it is`
|
||
\bfor it(?:'s| is)\b
|
||
|
||
# Should be `lends`
|
||
\bleads(?= credence)
|
||
|
||
# Should be `log in`
|
||
\blogin to the
|
||
|
||
# Should be `long-standing`
|
||
\blong standing\b
|
||
|
||
# Should be `lose`
|
||
(?<=\bwill )loose\b
|
||
|
||
# `apt-key` is deprecated
|
||
# ... instead you should be writing a pair of files:
|
||
# ... * the gpg key added to a distinct key ring file based on your project/distro/key...
|
||
# ... * the sources.list in a district file -- not simply appended to `/etc/apt/sources.list` -- (there is a newer format [DEB822](https://manpages.debian.org/bookworm/dpkg-dev/deb822.5.en.html)) that references the gpg key.
|
||
# Consider:
|
||
# ````sh
|
||
# curl http://download.something.example.com/$DISTRO/Release.key | \
|
||
# gpg --dearmor --yes --output /usr/share/keyrings/something-distro.gpg
|
||
# echo "deb [signed-by=/usr/share/keyrings/something-distro.gpg] http://download.something.example.com/repositories/home:/$DISTRO ./" \
|
||
# >> /etc/apt/sources.list.d/something-distro.list
|
||
# ````
|
||
\bapt-key add\b
|
||
|
||
# Should be `nearby`
|
||
\bnear by\b
|
||
|
||
# Should probably be a person named `Nick` or the abbreviation `NIC`
|
||
\bNic\b
|
||
|
||
# Should be `not supposed`
|
||
\bsupposed not\b
|
||
|
||
# Should be `Once this` or `On this` or even `One that`. Rarely `One, this`
|
||
[?!.] One this\b
|
||
|
||
# Should probably be `much more`
|
||
\bmore much\b
|
||
|
||
# Should be `perform its`
|
||
\bperform it's\b
|
||
|
||
# Should be `opt-in`
|
||
(?<!\scan|for)(?<!\smust)(?<!\sif)\sopt in\s
|
||
|
||
# Should be `out-of-date` if acting as an adjective before a noun
|
||
\bout of date(?= \w{3,}\b)
|
||
|
||
# Should be `less than`
|
||
\bless then\b
|
||
|
||
# Should be `load balancer`
|
||
\b[Ll]oud balancer
|
||
|
||
# Should be `moot`
|
||
\bmute point\b
|
||
|
||
# Should be `one of`
|
||
(?<!-)\bon of\b
|
||
|
||
# Should be `on the other hand`
|
||
\b(?i)on another hand\b
|
||
|
||
# Reword to `on at runtime` or `enabled at launch`
|
||
# The former if you mean it can be changed dynamically.
|
||
# The latter if you mean that it can be changed without recompiling but not after the program starts.
|
||
\bswitched on runtime\b
|
||
|
||
# Should be `Of course,`
|
||
[?.!]\s+Of course\s(?=[-\w\s]+[.?;!,])
|
||
|
||
# Most people only have two hands. Reword.
|
||
\b(?i)on the third hand\b
|
||
|
||
# Should be `Open Graph`
|
||
# unless talking about a specific Open Graph implementation:
|
||
# - Java
|
||
# - Node
|
||
# - Py
|
||
# - Ruby
|
||
\bOpenGraph\b
|
||
|
||
# Should be `OpenShift`
|
||
\bOpenshift\b
|
||
|
||
# Should be `otherwise`
|
||
\bother[- ]wise\b
|
||
|
||
# Should be `; otherwise` or `. Otherwise`
|
||
# https://study.com/learn/lesson/otherwise-in-a-sentence.html
|
||
, [Oo]therwise\b
|
||
|
||
# Should probably be `Otherwise,`
|
||
(?<=\. )Otherwise\s
|
||
|
||
# Should be `or (more|less)`
|
||
\bore (?:more|less)\b
|
||
|
||
# Should be `or`
|
||
\b(?i)true of .*false\b
|
||
|
||
# Should be `pale`
|
||
\b(?<=beyond the )pail\b
|
||
|
||
# Should be reworded.
|
||
# `passthrough` is an adjective
|
||
# `pass-through` could be a noun
|
||
# `pass through` would be a verb phrase
|
||
\b(?i)passthrough(?= an?\b)
|
||
|
||
# Should be `rather than`
|
||
\brather then\b
|
||
|
||
# Should be `Red Hat`
|
||
\bRed[Hh]at\b
|
||
|
||
# Should be `regardless, ...` or `regardless of (whether)`
|
||
\b[Rr]egardless if you\b
|
||
|
||
# Should be `self-signed`
|
||
\bself signed\b
|
||
|
||
# Should be `SendGrid`
|
||
\bSendgrid\b
|
||
|
||
# Should be `set up` (`setup` is a noun / `set up` is a verb)
|
||
\b[Ss]etup(?= (?:an?|the)\b)
|
||
|
||
# Should be `state`
|
||
\bsate(?=\b|[A-Z])|(?<=[a-z])Sate(?=\b|[A-Z])|(?<=[A-Z]{2})Sate(?=\b|[A-Z])
|
||
|
||
# Should be `this`
|
||
\b[Tt]oday(?= morning\b)
|
||
|
||
# Should be `let's` or `let us`
|
||
\b[Ll]ets (?=throw\.)
|
||
|
||
# Should be `no longer needed`
|
||
\bno more needed\b(?! than\b)
|
||
|
||
# Should be `<see|look> below for the`
|
||
(?i)\bfind below the\b
|
||
|
||
# Should be `then any` unless there's a comparison before the `,`
|
||
, than any\b
|
||
|
||
# Should be `did not exist`
|
||
\bwere not existent\b
|
||
|
||
# Should be `nonexistent`
|
||
\bnon existing\b
|
||
|
||
# Should be `nonexistent`
|
||
\b[Nn]o[nt][- ]existent\b
|
||
|
||
# Should be `our`
|
||
\bspending out time\b
|
||
|
||
# Should be `@brief` / `@details` / `@param` / `@return` / `@retval`
|
||
(?:^\s*|(?:\*|//|/*)\s+`)[\\@](?:breif|(?:detail|detials)|(?:params(?!\.)|prama?)|ret(?:uns?)|retvl)\b
|
||
|
||
# Should be `more than` or `more, then`
|
||
\bmore then\b
|
||
|
||
# Should be `Pipeline`/`pipeline`
|
||
(?:(?<=\b|[A-Z])p|P)ipeLine(?:\b|(?=[A-Z]))
|
||
|
||
# Should be `preexisting`
|
||
[Pp]re[- ]existing
|
||
|
||
# Should be `preempt`
|
||
[Pp]re[- ]empt\b
|
||
|
||
# Should be `preemptively`
|
||
[Pp]re[- ]emptively
|
||
|
||
# Should be `prepopulate`
|
||
[Pp]re[- ]populate
|
||
|
||
# Should be `prerequisite`
|
||
[Pp]re[- ]requisite
|
||
|
||
# Should be `QuickTime`
|
||
\bQuicktime\b
|
||
|
||
# Should be `recently changed` or `recent changes`
|
||
[Rr]ecent changed
|
||
|
||
# Should be `reentrancy`
|
||
[Rr]e[- ]entrancy
|
||
|
||
# Should be `reentrant`
|
||
[Rr]e[- ]entrant
|
||
|
||
# Should be `room for`
|
||
\brooms for (?!lease|rent|sale)
|
||
|
||
# Should be `socioeconomic`
|
||
# https://dictionary.cambridge.org/us/dictionary/english/socioeconomic
|
||
socio-economic
|
||
|
||
# Should be `strong suit`
|
||
\b(?:my|his|her|their) strong suite\b
|
||
|
||
# Should probably be `temperatures` unless actually talking about thermal drafts (things birds may fly on)
|
||
\bthermals\b
|
||
|
||
# Should be `there are` or `they are` (or `they're`)
|
||
(?i)\btheir are\b
|
||
|
||
# Should be `understand`
|
||
\bunder stand\b
|
||
|
||
# Should be `URI` or `uri` unless it refers to a person named `Uri` (or a flag)
|
||
#(?<![-\.])\bUri\b(?![(])
|
||
|
||
# Should be `true`
|
||
(?i)(?<![\[\]()])\brue(?:= or false)
|
||
|
||
# Should be `it uses is`
|
||
/\bis uses is\b/
|
||
|
||
# Should be `uses it as`
|
||
(?:^|\. |and )uses is as (?!an?\b|follows|livestock|[^.]+\s+as\b)
|
||
|
||
# Should be `was`
|
||
\bhas been(?= removed in v?\d)
|
||
|
||
# Should be `where`
|
||
\bwere they are\b
|
||
|
||
# Should be `why`
|
||
, way(?= is [^.]*\?)
|
||
|
||
# should be `vCenter`
|
||
\bV[Cc]enter\b
|
||
|
||
# Should be `VM`
|
||
\bVm\b
|
||
|
||
# Should be `walkthrough(s)`
|
||
\bwalk-throughs?\b
|
||
|
||
# Should be `want`
|
||
\bdon't ant\b
|
||
|
||
# Should be `we'll`
|
||
\bwe 'll\b
|
||
|
||
# Should be `week`
|
||
# unless you're really talking about people or pointers
|
||
\bevery weak[.,?!]
|
||
|
||
# Should be `well`
|
||
\b[Yy]ou(?:'re| are) doing good\b
|
||
|
||
# Should be `whereas`
|
||
\bwhere as\b
|
||
|
||
# Should be `WinGet`
|
||
\bWinget\b
|
||
|
||
# Should be `without` (unless `out` is a modifier of the next word)
|
||
\bwith out\b(?!-)
|
||
|
||
# Should be `work around`
|
||
\b[Ww]orkaround(?= an?\b)
|
||
|
||
# Should be `workarounds`
|
||
#\bwork[- ]arounds\b
|
||
|
||
# Should be `workaround`
|
||
(?:(?:[Aa]|[Tt]he|ugly)\swork[- ]around\b|\swork[- ]around\s+for)
|
||
|
||
# Should be `worst`
|
||
(?i)worse-case
|
||
|
||
# Should be `you are not` or reworded
|
||
\byour not\b
|
||
|
||
# Should be `(coarse|fine)-grained`
|
||
\b(?:coarse|fine) grained\b
|
||
|
||
# Homoglyph (Cyrillic) should be `A`/`B`/`C`/`E`/`H`/`I`/`I`/`J`/`K`/`M`/`O`/`P`/`S`/`T`/`Y`
|
||
# It's possible that your content is intentionally mixing Cyrillic and Latin scripts, but if it isn't, you definitely want to correct this.
|
||
(?<=[A-Z]{2})[АВСЕНІӀЈКМОРЅТУ]|[АВСЕНІӀЈКМОРЅТУ](?=[A-Z]+(?:\b|[a-z]+)|[a-z]+(?:[^a-z]|$))
|
||
|
||
# Homoglyph (Cyrillic) should be `a`/`b`/`c`/`e`/`o`/`p`/`x`/`y`
|
||
# It's possible that your content is intentionally mixing Cyrillic and Latin scripts, but if it isn't, you definitely want to correct this.
|
||
[авсеорху](?=[A-Za-z]{2,})|(?<=[A-Za-z]{2})[авсеорху]|(?<=[A-Za-z])[авсеорху](?=[A-Za-z])
|
||
|
||
# Should be `neither/nor` -- or reword
|
||
#(?<!do )\bnot\b([^.?!"/(](?!neither|,.*?,))+\bnor\b
|
||
|
||
# Should be `neither/nor` (plus rewording the beginning)
|
||
# This is probably a double negative...
|
||
\bnot\b[^.?!"/(]*\bneither\b[^.?!"/(]*\bnor\b
|
||
|
||
# In English, duplicated words are generally mistakes
|
||
# There are a few exceptions (e.g. "that that").
|
||
# If the highlighted doubled word pair is in:
|
||
# * code, write a pattern to mask it.
|
||
# * prose, have someone read the English before you dismiss this error.
|
||
\s([A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})\s\g{-1}\s
|