mirror of
https://github.com/TecharoHQ/anubis.git
synced 2025-09-21 10:59:09 -04:00

* feat(config): opengraph passthrough configuration Signed-off-by: Xe Iaso <me@xeiaso.net> * chore(ogtags): use config.OpenGraph for configuration Signed-off-by: Xe Iaso <me@xeiaso.net> * chore: wire up ogtags config in most of the app Signed-off-by: Xe Iaso <me@xeiaso.net> * feat(ogtags): return default tags if they are supplied Signed-off-by: Xe Iaso <me@xeiaso.net> * chore: make OpenGraph legal so we have some sanity in reviewing Signed-off-by: Xe Iaso <me@xeiaso.net> * chore: spelling Signed-off-by: Xe Iaso <me@xeiaso.net> * fix(lib): use OpenGraph.Enabled Signed-off-by: Xe Iaso <me@xeiaso.net> * test(lib): load default config file if one is not specified in spawnAnubis Signed-off-by: Xe Iaso <me@xeiaso.net> * chore(config): fix ST1005 Signed-off-by: Xe Iaso <me@xeiaso.net> * docs: document open graph defaults and its new home in the policy file Signed-off-by: Xe Iaso <me@xeiaso.net> * docs(installation): point to weight threshold new home Signed-off-by: Xe Iaso <me@xeiaso.net> * chore: rename default to override Signed-off-by: Xe Iaso <me@xeiaso.net> * chore(default-config): add off-by-default opengraph settings to bot policy file Signed-off-by: Xe Iaso <me@xeiaso.net> * fix(anubis): make build Signed-off-by: Xe Iaso <me@xeiaso.net> * test(lib): fix build Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net>
464 lines
12 KiB
Plaintext
464 lines
12 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|$)
|
||
|
||
# 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 in parentheticals should not have a space before the period.
|
||
\s\.\)(?!.*\}\})
|
||
|
||
# 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-np-rtv-xz]|h(?!our|tml|ttp)|s(?!sh|vg))[a-z])
|
||
|
||
# Should only be one of `a`, `an`, or `the`
|
||
\b(?:(?:an?|the)\s+){2,}\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 `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 `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 `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|link|(?:read |)more)(?:</|\]\()
|
||
|
||
# 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 `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 `GitHub`
|
||
(?<![&*.]|// |\b(?:from|import|type) )\bGithub\b(?![{()])
|
||
|
||
# Should be `GitLab`
|
||
(?<![&*.]|// |\b(?:from|import|type) )\bGitlab\b(?![{()])
|
||
|
||
# Should probably be `https://`...
|
||
# Markdown generally doesn't assume that links are to urls
|
||
\]\(www\.\w
|
||
|
||
# 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 `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(?= own\b)
|
||
|
||
# Should be `its`
|
||
\bit's(?= only purpose\b)
|
||
|
||
# Should be `for its` (possessive) or `because it is`
|
||
\bfor it(?:'s| is)\b
|
||
|
||
# Should be `log in`
|
||
\blogin to the
|
||
|
||
# Should be `long-standing`
|
||
\blong standing\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 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 `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 `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 `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 `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 `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 `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 `we'll`
|
||
\bwe 'll\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
|