ci: upgrade to check-spelling v0.0.24 (#18261)

This upgrades to [check-spelling v0.0.24].

A number of GitHub APIs are being turned off shortly, so we need to
upgrade or various uncertain outcomes will occur.

There are some minor bugs that I'm aware of and which I've fixed since
this release (including a couple I discovered while preparing this PR).

There's a new accessibility forbidden pattern:

#### 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
```

[check-spelling v0.0.24]: https://github.com/check-spelling/check-spelling/releases/tag/v0.0.24

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
This commit is contained in:
Josh Soref 2024-12-04 08:06:31 -10:00 committed by GitHub
parent 0d846aeb4d
commit 774f74258f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
61 changed files with 695 additions and 368 deletions

View File

@ -8,6 +8,7 @@ clickable
cmark cmark
CMMI CMMI
colorbrewer colorbrewer
commandlines
consvc consvc
copyable copyable
dalet dalet
@ -27,6 +28,7 @@ gfm
ghe ghe
gje gje
godbolt godbolt
hstrings
hyperlinking hyperlinking
hyperlinks hyperlinks
Kbds Kbds
@ -46,8 +48,8 @@ mkmk
mnt mnt
mru mru
nje nje
NTMTo
notwrapped notwrapped
NTMTo
ogonek ogonek
overlined overlined
perlw perlw
@ -87,6 +89,7 @@ und
vsdevcmd vsdevcmd
westus westus
workarounds workarounds
WSLs
wtconfig wtconfig
XBox XBox
YBox YBox

View File

@ -8,7 +8,7 @@
^.*\b[Cc][Ss][Pp][Ee][Ll]{2}:\s*[Dd][Ii][Ss][Aa][Bb][Ll][Ee]-[Ll][Ii][Nn][Ee]\b ^.*\b[Cc][Ss][Pp][Ee][Ll]{2}:\s*[Dd][Ii][Ss][Aa][Bb][Ll][Ee]-[Ll][Ii][Nn][Ee]\b
# patch hunk comments # patch hunk comments
^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .* ^@@ -\d+(?:,\d+|) \+\d+(?:,\d+|) @@ .*
# git index header # git index header
index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40} index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40}
@ -27,13 +27,16 @@ index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40}
# data url in quotes # data url in quotes
([`'"])data:(?:[^ `'"].*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1} ([`'"])data:(?:[^ `'"].*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1}
# data url # data url
data:[-a-zA-Z=;:/0-9+]*,\S* \bdata:[-a-zA-Z=;:/0-9+]*,\S*
# https/http/file urls
(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/*%?=~_|!:,.;]+[-A-Za-z0-9+&@#/*%=~_|]
# https/http/file urls # https/http/file urls
(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|] (?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
# mailto urls # mailto urls
mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,} mailto:[-a-zA-Z=;:/?%&0-9+@._]{3,}
# magnet urls # magnet urls
magnet:[?=:\w]+ magnet:[?=:\w]+
@ -153,6 +156,9 @@ themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+.
# GHSA # GHSA
GHSA(?:-[0-9a-z]{4}){3} GHSA(?:-[0-9a-z]{4}){3}
# GitHub actions
\buses:\s+[-\w.]+/[-\w./]+@[-\w.]+
# GitLab commit # GitLab commit
\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b \bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b
# GitLab merge requests # GitLab merge requests
@ -211,7 +217,7 @@ accounts\.binance\.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]*
# medium link # medium link
\blink\.medium\.com/[a-zA-Z0-9]+ \blink\.medium\.com/[a-zA-Z0-9]+
# medium # medium
\bmedium\.com/\@?[^/\s"]+/[-\w]+ \bmedium\.com/@?[^/\s"]+/[-\w]+
# microsoft # microsoft
\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]* \b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]*
@ -276,7 +282,7 @@ slack://[a-zA-Z0-9?&=]+
[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b [0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b
# Twitter markdown # Twitter markdown
\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\) \[@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\)
# Twitter hashtag # Twitter hashtag
\btwitter\.com/hashtag/[\w?_=&]* \btwitter\.com/hashtag/[\w?_=&]*
# Twitter status # Twitter status
@ -331,7 +337,7 @@ ipfs://[0-9a-zA-Z]{3,}
[^"\s]+/gitweb/\S+;h=[0-9a-f]+ [^"\s]+/gitweb/\S+;h=[0-9a-f]+
# HyperKitty lists # HyperKitty lists
/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/ /archives/list/[^@/]+@[^/\s"]*/message/[^/\s"]*/
# lists # lists
/thread\.html/[^"\s]+ /thread\.html/[^"\s]+
@ -349,7 +355,7 @@ ipfs://[0-9a-zA-Z]{3,}
\bopen\.spotify\.com/embed/playlist/\w+ \bopen\.spotify\.com/embed/playlist/\w+
# Mastodon # Mastodon
\bmastodon\.[-a-z.]*/(?:media/|\@)[?&=0-9a-zA-Z_]* \bmastodon\.[-a-z.]*/(?:media/|@)[?&=0-9a-zA-Z_]*
# scastie # scastie
\bscastie\.scala-lang\.org/[^/]+/\w+ \bscastie\.scala-lang\.org/[^/]+/\w+
@ -391,9 +397,9 @@ ipfs://[0-9a-zA-Z]{3,}
(?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m (?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m
# URL escaped characters # URL escaped characters
\%[0-9A-F][A-F](?=[A-Za-z]) %[0-9A-F][A-F](?=[A-Za-z])
# lower URL escaped characters # lower URL escaped characters
\%[0-9a-f][a-f](?=[a-z]{2,}) %[0-9a-f][a-f](?=[a-z]{2,})
# IPv6 # IPv6
#\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b #\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b
@ -402,7 +408,7 @@ ipfs://[0-9a-zA-Z]{3,}
# Punycode # Punycode
\bxn--[-0-9a-z]+ \bxn--[-0-9a-z]+
# sha # sha
sha\d+:[0-9]*[a-f]{3,}[0-9a-f]* sha\d+:[0-9a-f]*?[a-f]{3,}[0-9a-f]*
# sha-... -- uses a fancy capture # sha-... -- uses a fancy capture
(\\?['"]|&quot;)[0-9a-f]{40,}\g{-1} (\\?['"]|&quot;)[0-9a-f]{40,}\g{-1}
# hex runs # hex runs
@ -422,10 +428,13 @@ sha\d+:[0-9]*[a-f]{3,}[0-9a-f]*
# pki # pki
-----BEGIN.*-----END -----BEGIN.*-----END
# pki (base64)
LS0tLS1CRUdJT.*
# uuid: # uuid:
\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b \b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b
# hex digits including css/html color classes: # hex digits including css/html color classes:
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b (?:[\\0][xX]|\\u|[uU]\+|#x?|%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b
# integrity # integrity
integrity=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1} integrity=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1}
@ -443,20 +452,47 @@ integrity=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1}
Name\[[^\]]+\]=.* Name\[[^\]]+\]=.*
# IServiceProvider / isAThing # IServiceProvider / isAThing
\b(?:I|isA)(?=(?:[A-Z][a-z]{2,})+\b) (?:\b|_)(?:(?:ns|)I|isA)(?=(?:[A-Z][a-z]{2,})+(?:[A-Z\d]|\b))
# crypt # crypt
(['"])\$2[ayb]\$.{56}\g{-1} (['"])\$2[ayb]\$.{56}\g{-1}
# apache/old crypt
#(['"]|)\$+(?:apr|)1\$+.{8}\$+.{22}\g{-1}
# sha1 hash
\{SHA\}[-a-zA-Z=;:/0-9+]{3,}
# machine learning (?)
\b(?i)ml(?=[a-z]{2,})
# python
\b(?i)py(?!gments|gmy|lon|ramid|ro|th)(?=[a-z]{2,})
# scrypt / argon # scrypt / argon
\$(?:scrypt|argon\d+[di]*)\$\S+ \$(?:scrypt|argon\d+[di]*)\$\S+
# go.sum # go.sum
\bh1:\S+ \bh1:\S+
# scala imports
^import (?:[\w.]|\{\w*?(?:,\s*(?:\w*|\*))+\})+
# scala modules # scala modules
("[^"]+"\s*%%?\s*){2,3}"[^"]+" ("[^"]+"\s*%%?\s*){2,3}"[^"]+"
# container images
image: [-\w./:@]+
# Docker images
^\s*FROM\s+\S+:\S+(?:\s+AS\s+\S+|)
# `docker images` REPOSITORY TAG IMAGE ID CREATED SIZE
\s*\S+/\S+\s+\S+\s+[0-9a-f]{8,}\s+\d+\s+(?:hour|day|week)s ago\s+[\d.]+[KMGT]B
# Intel intrinsics
_mm_(?!dd)\w+
# Input to GitHub JSON # Input to GitHub JSON
content: (['"])[-a-zA-Z=;:/0-9+]*=\g{-1} content: (['"])[-a-zA-Z=;:/0-9+]*=\g{-1}
@ -464,34 +500,43 @@ content: (['"])[-a-zA-Z=;:/0-9+]*=\g{-1}
# you'll want to remove the `(?=.*?")` suffix. # you'll want to remove the `(?=.*?")` suffix.
# The `(?=.*?")` suffix should limit the false positives rate # The `(?=.*?")` suffix should limit the false positives rate
# printf # printf
#%(?:(?:(?:hh?|ll?|[jzt])?[diuoxn]|l?[cs]|L?[fega]|p)(?=[a-z]{2,})|(?:X|L?[FEGA]|p)(?=[a-zA-Z]{2,}))(?=[_a-zA-Z]+\b)(?!%)(?=.*?['"]) #%(?:(?:(?:hh?|ll?|[jzt])?[diuoxn]|l?[cs]|L?[fega]|p)(?=[a-z]{2,})|(?:X|L?[FEGA])(?=[a-zA-Z]{2,}))(?!%)(?=[_a-zA-Z]+(?!%)\b)(?=.*?['"])
# Alternative printf
# %s
%(?:s(?=[a-z]{2,}))(?!%)(?=[_a-zA-Z]+(?!%[^s])\b)(?=.*?['"])
# Python string prefix / binary prefix # Python string prefix / binary prefix
# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings # Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings
(?<!')\b(?:B|BR|Br|F|FR|Fr|R|RB|RF|Rb|Rf|U|UR|Ur|b|bR|br|f|fR|fr|r|rB|rF|rb|rf|u|uR|ur)'(?=[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}) (?<!['"])\b(?:B|BR|Br|F|FR|Fr|R|RB|RF|Rb|Rf|U|UR|Ur|b|bR|br|f|fR|fr|r|rB|rF|rb|rf|u|uR|ur)['"](?=[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})
# Regular expressions for (P|p)assword # Regular expressions for (P|p)assword
\([A-Z]\|[a-z]\)[a-z]+ \([A-Z]\|[a-z]\)[a-z]+
# JavaScript regular expressions # JavaScript regular expressions
# javascript test regex # javascript test regex
/.*/[gim]*\.test\( /.{3,}/[gim]*\.test\(
# javascript match regex # javascript match regex
\.match\(/[^/\s"]*/[gim]*\s* \.match\(/[^/\s"]{3,}/[gim]*\s*
# javascript match regex # javascript match regex
\.match\(/\\[b].*?/[gim]*\s*\)(?:;|$) \.match\(/\\[b].{3,}?/[gim]*\s*\)(?:;|$)
# javascript regex # javascript regex
^\s*/\\[b].*/[gim]*\s*(?:\)(?:;|$)|,$) ^\s*/\\[b].{3,}?/[gim]*\s*(?:\)(?:;|$)|,$)
# javascript replace regex # javascript replace regex
\.replace\(/[^/\s"]*/[gim]*\s*, \.replace\(/[^/\s"]{3,}/[gim]*\s*,
# assign regex # assign regex
= /[^*]*?(?:[a-z]{3,}|[A-Z]{3,}|[A-Z][a-z]{2,}).*/ = /[^*].*?(?:[a-z]{3,}|[A-Z]{3,}|[A-Z][a-z]{2,}).*/[gi]?(?=\W|$)
# perl regex test # perl regex test
[!=]~ (?:/.*/|m\{.*?\}|m<.*?>|m([|!/@#,;']).*?\g{-1}) [!=]~ (?:/.*/|m\{.*?\}|m<.*?>|m([|!/@#,;']).*?\g{-1})
# perl qr regex # perl qr regex
(?<!\$)\bqr(?:\{.*?\}|<.*?>|\(.*?\)|([|!/@#,;']).*?\g{-1}) (?<!\$)\bqr(?:\{.*?\}|<.*?>|\(.*?\)|([|!/@#,;']).*?\g{-1})
# perl run
perl(?:\s+-[a-zA-Z]\w*)+
# C network byte conversions
(?:\d|\bh)to(?!ken)(?=[a-z])|to(?=[adhiklpun]\()
# Go regular expressions # Go regular expressions
regexp?\.MustCompile\(`[^`]*`\) regexp?\.MustCompile\(`[^`]*`\)
@ -505,14 +550,20 @@ regexp?\.MustCompile\(`[^`]*`\)
sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2} sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2}
# node packages # node packages
(["'])\@[^/'" ]+/[^/'" ]+\g{-1} (["'])@[^/'" ]+/[^/'" ]+\g{-1}
# go install # go install
go install(?:\s+[a-z]+\.[-@\w/.]+)+ go install(?:\s+[a-z]+\.[-@\w/.]+)+
# pom.xml
<(?:group|artifact)Id>.*?<
# jetbrains schema https://youtrack.jetbrains.com/issue/RSRP-489571 # jetbrains schema https://youtrack.jetbrains.com/issue/RSRP-489571
urn:shemas-jetbrains-com urn:shemas-jetbrains-com
# Debian changelog severity
[-\w]+ \(.*\) (?:\w+|baseline|unstable|experimental); urgency=(?:low|medium|high|emergency|critical)\b
# kubernetes pod status lists # kubernetes pod status lists
# https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase
\w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+ \w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+
@ -520,9 +571,15 @@ urn:shemas-jetbrains-com
# kubectl - pods in CrashLoopBackOff # kubectl - pods in CrashLoopBackOff
\w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+ \w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+
# kubernetes applications
\.apps/[-\w]+
# kubernetes object suffix # kubernetes object suffix
-[0-9a-f]{10}-\w{5}\s -[0-9a-f]{10}-\w{5}\s
# kubernetes crd patterns
^\s*pattern: .*$
# posthog secrets # posthog secrets
([`'"])phc_[^"',]+\g{-1} ([`'"])phc_[^"',]+\g{-1}
@ -534,6 +591,9 @@ urn:shemas-jetbrains-com
# xcode api botches # xcode api botches
customObjectInstantitationMethod customObjectInstantitationMethod
# msvc api botches
PrependWithABINamepsace
# configure flags # configure flags
.* \| --\w{2,}.*?(?=\w+\s\w+) .* \| --\w{2,}.*?(?=\w+\s\w+)
@ -541,21 +601,34 @@ customObjectInstantitationMethod
\.fa-[-a-z0-9]+ \.fa-[-a-z0-9]+
# bearer auth # bearer auth
(['"])Bear[e][r] .*?\g{-1} (['"])[Bb]ear[e][r] .*?\g{-1}
# bearer auth
\b[Bb]ear[e][r]:? [-a-zA-Z=;:/0-9+.]+
# basic auth # basic auth
(['"])Basic [-a-zA-Z=;:/0-9+]{3,}\g{-1} (['"])[Bb]asic [-a-zA-Z=;:/0-9+]{3,}\g{-1}
# base64 encoded content # base64 encoded content
#([`'"])[-a-zA-Z=;:/0-9+]+=\g{-1} #([`'"])[-a-zA-Z=;:/0-9+]{3,}=\g{-1}
# base64 encoded content in xml/sgml # base64 encoded content in xml/sgml
>[-a-zA-Z=;:/0-9+]+=</ >[-a-zA-Z=;:/0-9+]{3,}=</
# base64 encoded content, possibly wrapped in mime # base64 encoded content, possibly wrapped in mime
#(?:^|[\s=;:?])[-a-zA-Z=;:/0-9+]{50,}(?:[\s=;:?]|$) #(?:^|[\s=;:?])[-a-zA-Z=;:/0-9+]{50,}(?:[\s=;:?]|$)
# base64 encoded json
\beyJ[-a-zA-Z=;:/0-9+]+
# base64 encoded pkcs
#\bMII[-a-zA-Z=;:/0-9+]+
# DNS rr data
#(?:\d+\s+){3}(?:[-+/=.\w]{2,}\s*){1,2}
# encoded-word # encoded-word
=\?[-a-zA-Z0-9"*%]+\?[BQ]\?[^?]{0,75}\?= =\?[-a-zA-Z0-9"*%]+\?[BQ]\?[^?]{0,75}\?=
# numerator
\bnumer\b(?=.*denom)
# Time Zones # Time Zones
\b(?:Africa|Atlantic|America|Antarctica|Asia|Australia|Europe|Indian|Pacific)(?:/\w+)+ \b(?:Africa|Atlantic|America|Antarctica|Asia|Australia|Europe|Indian|Pacific)(?:/\w+)+
@ -565,16 +638,22 @@ customObjectInstantitationMethod
# systemd mode # systemd mode
systemd.*?running in system mode \([-+].*\)$ systemd.*?running in system mode \([-+].*\)$
# Lorem
# Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally ) # Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally )
# grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review - # grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review -
# Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into: # Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into:
## Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary). # ... Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary).
## You could manually change `(?i)X...` to use `[Xx]...` # ... You could manually change `(?i)X...` to use `[Xx]...`
## or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path) # ... or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path)
# Lorem (?:(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*)
(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*
# Non-English # Non-English
# Even repositories expecting pure English content can unintentionally have Non-English content... People will occasionally mistakenly enter [homoglyphs](https://en.wikipedia.org/wiki/Homoglyph) which are essentially typos, and using this pattern will mean check-spelling will not complain about them.
#
# If the content to be checked should be written in English and the only Non-English items will be people's names, then you can consider adding this.
#
# Alternatively, if you're using check-spelling v0.0.25+, and you would like to _check_ the Non-English content for spelling errors, you can. For information on how to do so, see:
# https://docs.check-spelling.dev/Feature:-Configurable-word-characters.html#unicode
[a-zA-Z]*[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*|[a-zA-Z]{3,}[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]|[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3,} [a-zA-Z]*[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*|[a-zA-Z]{3,}[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]|[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3,}
# highlighted letters # highlighted letters
@ -584,34 +663,49 @@ systemd.*?running in system mode \([-+].*\)$
# This corpus only had capital letters, but you probably want lowercase ones as well. # This corpus only had capital letters, but you probably want lowercase ones as well.
\b[LN]'+[a-z]{2,}\b \b[LN]'+[a-z]{2,}\b
# latex (check-spelling <= 0.0.21)
#\\(?:n(?:ew|ormal|osub)|r(?:enew)|t(?:able(?:of|)|he|itle))(?=[a-z]+)
# latex (check-spelling >= 0.0.22) # latex (check-spelling >= 0.0.22)
\\\w{2,}\{ \\\w{2,}\{
# American Mathematical Society (AMS) / Doxygen
TeX/AMS
# File extensions
\*\.[+\w]+,
# eslint # eslint
"varsIgnorePattern": ".+" "varsIgnorePattern": ".+"
# nolint
nolint:\w+
# Windows short paths # Windows short paths
[/\\][^/\\]{5,6}~\d{1,2}[/\\] [/\\][^/\\]{5,6}~\d{1,2}(?=[/\\])
# cygwin paths
/cygdrive/[a-zA-Z]/(?:Program Files(?: \(.*?\)| ?)(?:/[-+.~\\/()\w ]+)*|[-+.~\\/()\w])+
# in check-spelling@v0.0.22+, printf markers aren't automatically consumed # in check-spelling@v0.0.22+, printf markers aren't automatically consumed
# printf markers # printf markers
#(?<!\\)\\[nrt](?=[a-z]{2,}) #(?<!\\)\\[nrt](?=[a-z]{2,})
# alternate markers if you run into latex and friends # alternate printf markers if you run into latex and friends
#(?<!\\)\\[nrt](?=[a-z]{2,})(?=.*['"`]) #(?<!\\)\\[nrt](?=[a-z]{2,})(?=.*['"`])
# Markdown anchor links
\(#\S*?[a-zA-Z]\S*?\)
# apache # apache
a2(?:en|dis) a2(?:en|dis)
# weak e-tag # weak e-tag
W/"[^"]+" W/"[^"]+"
# authors/credits
^\*(?: [A-Z](?:\w+|\.)){2,} (?=\[|$)
# the negative lookahead here is to allow catching 'templatesz' as a misspelling # the negative lookahead here is to allow catching 'templatesz' as a misspelling
# but to otherwise recognize a Windows path with \templates\foo.template or similar: # but to otherwise recognize a Windows path with \templates\foo.template or similar:
#\\(?:necessary|r(?:eport|esolve[dr]?|esult)|t(?:arget|emplates?))(?![a-z]) #\\(?:necessary|r(?:elease|eport|esolve[dr]?|esult)|t(?:arget|emplates?))(?![a-z])
# ignore long runs of a single character: # ignore long runs of a single character:
\b([A-Za-z])\g{-1}{3,}\b \b([A-Za-z])\g{-1}{3,}\b
@ -631,13 +725,24 @@ W/"[^"]+"
# Compiler flags (linker) # Compiler flags (linker)
,-B ,-B
# libraries
#(?:\b|_)lib(?:re(?=office)|)(?!era[lt]|ero|erty|rar(?:i(?:an|es)|y))(?=[a-z])
# WWNN/WWPN (NAA identifiers)
\b(?:0x)?10[0-9a-f]{14}\b|\b(?:0x|3)?[25][0-9a-f]{15}\b|\b(?:0x|3)?6[0-9a-f]{31}\b
# iSCSI iqn (approximate regex)
\biqn\.[0-9]{4}-[0-9]{2}(?:[\.-][a-z][a-z0-9]*)*\b
# curl arguments # curl arguments
\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)* \b(?:\\n|)curl(?:\.exe|)(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)*
# set arguments # set arguments
\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)* \b(?:bash|sh|set)(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)*
# tar arguments # tar arguments
\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+ \b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+
# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long... # tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long...
\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b \btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b
# macOS temp folders # macOS temp folders
/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/ /var/folders/\w\w/[+\w]+/(?:T|-Caches-)/
# github runner temp folders
/home/runner/work/_temp/[-_/a-z0-9]+

View File

@ -1,8 +1,10 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes # See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
(?:^|/)(?i)COPYRIGHT (?:^|/)(?i)COPYRIGHT
(?:^|/)(?i)LICEN[CS]E (?:^|/)(?i)LICEN[CS]E
(?:^|/)(?i)third[-_]?party/
(?:^|/)3rdparty/ (?:^|/)3rdparty/
(?:^|/)dirs$ (?:^|/)dirs$
(?:^|/)generated/
(?:^|/)go\.sum$ (?:^|/)go\.sum$
(?:^|/)package(?:-lock|)\.json$ (?:^|/)package(?:-lock|)\.json$
(?:^|/)Pipfile$ (?:^|/)Pipfile$
@ -10,17 +12,20 @@
(?:^|/)requirements(?:-dev|-doc|-test|)\.txt$ (?:^|/)requirements(?:-dev|-doc|-test|)\.txt$
(?:^|/)sources(?:|\.dep)$ (?:^|/)sources(?:|\.dep)$
(?:^|/)vendor/ (?:^|/)vendor/
(?:^|/|\b)requirements(?:-dev|-doc|-test|)\.txt$
ignore$
Resources/(?!en)
[^/]\.vsdx$
\.a$ \.a$
\.ai$ \.ai$
\.all-contributorsrc$ \.all-contributorsrc$
\.avi$ \.avi$
\.bmp$ \.bmp$
\.bz2$ \.bz2$
\.cer$ \.cert?$|\.crt$
\.class$ \.class$
\.coveragerc$ \.coveragerc$
\.crl$ \.crl$
\.crt$
\.csr$ \.csr$
\.dll$ \.dll$
\.docx?$ \.docx?$
@ -32,7 +37,6 @@
\.gif$ \.gif$
\.git-blame-ignore-revs$ \.git-blame-ignore-revs$
\.gitattributes$ \.gitattributes$
\.gitignore$
\.gitkeep$ \.gitkeep$
\.graffle$ \.graffle$
\.gz$ \.gz$
@ -41,8 +45,7 @@
\.ipynb$ \.ipynb$
\.jar$ \.jar$
\.jks$ \.jks$
\.jpeg$ \.jpe?g$
\.jpg$
\.key$ \.key$
\.lib$ \.lib$
\.lock$ \.lock$
@ -50,8 +53,7 @@
\.min\.. \.min\..
\.mo$ \.mo$
\.mod$ \.mod$
\.mp3$ \.mp[34]$
\.mp4$
\.o$ \.o$
\.ocf$ \.ocf$
\.otf$ \.otf$
@ -70,8 +72,7 @@
\.s$ \.s$
\.sig$ \.sig$
\.so$ \.so$
\.svg$ \.svgz?$
\.svgz$
\.sys$ \.sys$
\.tar$ \.tar$
\.tgz$ \.tgz$
@ -88,14 +89,6 @@
\.xpm$ \.xpm$
\.xz$ \.xz$
\.zip$ \.zip$
^\.github/actions/spelling/
^\Q.github/workflows/spelling.yml\E$
^\Qbuild/config/release.gdnbaselines\E$
^\Qsrc/host/ft_host/chafa.txt\E$
^\Qsrc/host/ft_uia/run.bat\E$
^\Qsrc/host/runft.bat\E$
^\Qsrc/tools/lnkd/lnkd.bat\E$
^\Qsrc/tools/pixels/pixels.bat\E$
^build/config/ ^build/config/
^build/StoreSubmission/ ^build/StoreSubmission/
^consolegit2gitfilters\.json$ ^consolegit2gitfilters\.json$
@ -103,8 +96,8 @@
^doc/reference/master-sequence-list\.csv$ ^doc/reference/master-sequence-list\.csv$
^doc/reference/UTF8-torture-test\.txt$ ^doc/reference/UTF8-torture-test\.txt$
^doc/reference/windows-terminal-logo\.ans$ ^doc/reference/windows-terminal-logo\.ans$
^oss/
^NOTICE.md ^NOTICE.md
^oss/
^samples/PixelShaders/Screenshots/ ^samples/PixelShaders/Screenshots/
^src/interactivity/onecore/BgfxEngine\. ^src/interactivity/onecore/BgfxEngine\.
^src/renderer/atlas/ ^src/renderer/atlas/
@ -118,7 +111,6 @@
^src/terminal/parser/ut_parser/run\.bat$ ^src/terminal/parser/ut_parser/run\.bat$
^src/tools/benchcat ^src/tools/benchcat
^src/tools/ConsoleBench ^src/tools/ConsoleBench
^src/tools/integrity/dirs$
^src/tools/integrity/packageuwp/ConsoleUWP\.appxSources$ ^src/tools/integrity/packageuwp/ConsoleUWP\.appxSources$
^src/tools/RenderingTests/main\.cpp$ ^src/tools/RenderingTests/main\.cpp$
^src/tools/texttests/fira\.txt$ ^src/tools/texttests/fira\.txt$
@ -127,6 +119,16 @@
^src/types/ut_types/UtilsTests\.cpp$ ^src/types/ut_types/UtilsTests\.cpp$
^tools/ReleaseEngineering/ServicingPipeline\.ps1$ ^tools/ReleaseEngineering/ServicingPipeline\.ps1$
^XamlStyler\.json$ ^XamlStyler\.json$
ignore$ ^\.github/actions/spelling/
Resources/(?!en)
^\.vsconfig$ ^\.vsconfig$
^\Q.github/workflows/spelling.yml\E$
^\Qbuild/config/release.gdnbaselines\E$
^\Qdep/WinAppDriver/EULA.rtf\E$
^\Qdoc/reference/windows-terminal-logo.ans\E$
^\Qsrc/host/ft_host/chafa.txt\E$
^\Qsrc/host/ft_uia/run.bat\E$
^\Qsrc/host/runft.bat\E$
^\Qsrc/terminal/parser/ft_fuzzer/run.bat\E$
^\Qsrc/terminal/parser/ft_fuzzwrapper/run.bat\E$
^\Qsrc/tools/lnkd/lnkd.bat\E$
^\Qsrc/tools/pixels/pixels.bat\E$

View File

@ -1,11 +1,11 @@
AAAAAABBBBBBCCC AAAAAABBBBBBCCC
AAAAABBBBBBCCC AAAAABBBBBBCCC
abcd abcd
abcd
ABCDEFGHIJ ABCDEFGHIJ
abcdefghijk abcdefghijk
ABCDEFGHIJKLMNOPQRS ABCDEFGHIJKLMNOPQRS
ABCDEFGHIJKLMNOPQRST ABCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRSTUVWXY
ABCG ABCG
ABE ABE
abf abf
@ -13,10 +13,10 @@ BBBBB
BBBBBCCC BBBBBCCC
BBBBCCCCC BBBBCCCCC
BBGGRR BBGGRR
efg
EFG EFG
efgh efg
EFGh EFGh
efgh
KLMNOQQQQQQQQQQ KLMNOQQQQQQQQQQ
QQQQQQQQQQABCDEFGHIJ QQQQQQQQQQABCDEFGHIJ
QQQQQQQQQQABCDEFGHIJKLMNOPQRS QQQQQQQQQQABCDEFGHIJKLMNOPQRS

View File

@ -2,7 +2,6 @@ aaaaabbb
aabbcc aabbcc
ABANDONFONT ABANDONFONT
abbcc abbcc
ABCDEFGHIJKLMNOPQRSTUVWXY
ABCF ABCF
abgr abgr
ABORTIFHUNG ABORTIFHUNG
@ -94,7 +93,6 @@ Backgrounder
backgrounding backgrounding
backported backported
backstory backstory
barbaz
Bazz Bazz
bbb bbb
bbccb bbccb
@ -210,6 +208,7 @@ cmw
CNL CNL
cnn cnn
Codeflow Codeflow
codenav
codepages codepages
codepath codepath
coinit coinit
@ -221,6 +220,7 @@ colortable
colortbl colortbl
colortest colortest
colortool colortool
COLORVALUE
combaseapi combaseapi
comctl comctl
commandline commandline
@ -363,9 +363,7 @@ dbh
dblclk dblclk
Dcd Dcd
DColor DColor
DCOLORVALUE
dcommon dcommon
dcompiler
DComposition DComposition
dde dde
DDESHARE DDESHARE
@ -422,7 +420,6 @@ DECPCTERM
DECPS DECPS
DECRARA DECRARA
decrc decrc
DECRC
DECREQTPARM DECREQTPARM
DECRLM DECRLM
DECRPM DECRPM
@ -438,7 +435,6 @@ decrst
DECSACE DECSACE
DECSASD DECSASD
decsc decsc
DECSC
DECSCA DECSCA
DECSCNM DECSCNM
DECSCPP DECSCPP
@ -464,7 +460,6 @@ DECXCPR
DEFAPP DEFAPP
DEFAULTBACKGROUND DEFAULTBACKGROUND
DEFAULTFOREGROUND DEFAULTFOREGROUND
defaultsettings
DEFAULTTONEAREST DEFAULTTONEAREST
DEFAULTTONULL DEFAULTTONULL
DEFAULTTOPRIMARY DEFAULTTOPRIMARY
@ -797,10 +792,8 @@ hmon
homoglyph homoglyph
hostable hostable
hostlib hostlib
Hostx
HPA HPA
hpcon hpcon
HPCON
hpen hpen
HPR HPR
HProvider HProvider
@ -828,7 +821,6 @@ HWNDPARENT
iccex iccex
ICONERROR ICONERROR
ICONINFORMATION ICONINFORMATION
IConsole
ICONSTOP ICONSTOP
ICONWARNING ICONWARNING
IDCANCEL IDCANCEL
@ -841,12 +833,9 @@ IDR
idth idth
IDTo IDTo
IDXGI IDXGI
IEnd
IEnum
IFACEMETHODIMP IFACEMETHODIMP
ification ification
IGNORELANGUAGE IGNORELANGUAGE
IHosted
iid iid
IIo IIo
ILC ILC
@ -859,7 +848,6 @@ inclusivity
INCONTEXT INCONTEXT
INFOEX INFOEX
inheritcursor inheritcursor
inheritfrom
INITCOMMONCONTROLSEX INITCOMMONCONTROLSEX
INITDIALOG INITDIALOG
initguid initguid
@ -880,13 +868,9 @@ INVALIDARG
INVALIDATERECT INVALIDATERECT
Ioctl Ioctl
ipch ipch
IProperty
ipsp ipsp
IShell
ISwap
iterm iterm
itermcolors itermcolors
ITerminal
itf itf
Ith Ith
IUI IUI
@ -895,7 +879,6 @@ ivalid
IWIC IWIC
IXP IXP
jconcpp jconcpp
JLO
JOBOBJECT JOBOBJECT
JOBOBJECTINFOCLASS JOBOBJECTINFOCLASS
JONGSEONG JONGSEONG
@ -951,9 +934,6 @@ LCONTROL
LCTRL LCTRL
lcx lcx
LEFTALIGN LEFTALIGN
libsancov
libtickit
licate
LIMITTEXT LIMITTEXT
LINEDOWN LINEDOWN
LINESELECTION LINESELECTION
@ -1265,7 +1245,6 @@ openconsoleproxy
openps openps
openvt openvt
ORIGINALFILENAME ORIGINALFILENAME
orking
osc osc
OSDEPENDSROOT OSDEPENDSROOT
OSG OSG
@ -1292,7 +1271,6 @@ PAINTSTRUCT
PALPC PALPC
pankaj pankaj
parentable parentable
parms
PATCOPY PATCOPY
pathcch pathcch
PATTERNID PATTERNID
@ -1401,6 +1379,7 @@ prealigned
prect prect
prefast prefast
preflighting preflighting
prepopulate
presorted presorted
PREVENTPINNING PREVENTPINNING
PREVIEWLABEL PREVIEWLABEL
@ -1465,7 +1444,6 @@ QWER
Qxxxxxxxxxxxxxxx Qxxxxxxxxxxxxxxx
qzmp qzmp
RAII RAII
Ralph
RALT RALT
rasterbar rasterbar
rasterfont rasterfont
@ -1516,7 +1494,6 @@ replatformed
Replymessage Replymessage
reportfileaccesses reportfileaccesses
repositorypath repositorypath
Requiresx
rerasterize rerasterize
rescap rescap
RESETCONTENT RESETCONTENT
@ -1543,7 +1520,6 @@ RIGHTALIGN
RIGHTBUTTON RIGHTBUTTON
riid riid
ris ris
RIS
roadmap roadmap
robomac robomac
rodata rodata
@ -1574,6 +1550,7 @@ rvpa
RWIN RWIN
rxvt rxvt
safemath safemath
sancov
sba sba
SBCS SBCS
SBCSDBCS SBCSDBCS
@ -1716,7 +1693,6 @@ STARTUPINFOW
STARTWPARMS STARTWPARMS
STARTWPARMSA STARTWPARMSA
STARTWPARMSW STARTWPARMSW
stb
stdafx stdafx
STDAPI STDAPI
stdc stdc
@ -1735,8 +1711,6 @@ SUA
subcompartment subcompartment
subkeys subkeys
SUBLANG SUBLANG
subsystemconsole
subsystemwindows
swapchain swapchain
swapchainpanel swapchainpanel
SWMR SWMR
@ -1816,6 +1790,7 @@ texttests
TFunction TFunction
THUMBPOSITION THUMBPOSITION
THUMBTRACK THUMBTRACK
tickit
TIcon TIcon
tilunittests tilunittests
titlebars titlebars
@ -1823,7 +1798,6 @@ TITLEISLINKNAME
TJson TJson
TLambda TLambda
TLDP TLDP
tldr
TLEN TLEN
TMAE TMAE
TMPF TMPF
@ -1881,7 +1855,6 @@ uiacore
uiautomationcore uiautomationcore
uielem uielem
UINTs UINTs
ul
uld uld
uldash uldash
uldb uldb
@ -1995,6 +1968,7 @@ wch
wchars wchars
WCIA WCIA
WCIW WCIW
wcs
WCSHELPER WCSHELPER
wcsrev wcsrev
wcswidth wcswidth
@ -2121,7 +2095,6 @@ WTest
WTEXT WTEXT
WTo WTo
wtof wtof
wtoi
WTs WTs
WTSOFTFONT WTSOFTFONT
wtw wtw
@ -2163,7 +2136,6 @@ XResource
xsi xsi
xstyler xstyler
XSubstantial XSubstantial
xtended
XTest XTest
XTPOPSGR XTPOPSGR
XTPUSHSGR XTPUSHSGR

View File

@ -1,119 +1,292 @@
# reject `m_data` as VxWorks defined it and that breaks things if it's used elsewhere # 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) # 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) # and [Qt](https://github.com/qtproject/qt-solutions/blame/fb7bc42bfcc578ff3fa3b9ca21a41e96eb37c1c7/qtscriptclassic/src/qscriptbuffer_p.h#L46)
# \bm_data\b #\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, # 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 were debugging w/ `fit()`, in which case, you might want # you might not want to check in code where you skip all the other tests.
# to use this:
#\bfit\( #\bfit\(
# s.b. anymore # 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 only be one of `a`, `an`, or `the`
\b(?:(?:an?|the)\s+){2,}\b
# Should be `anymore`
\bany more[,.] \bany more[,.]
# s.b. GitHub # Should be `'`
(?<![&*.]|// |\btype )\bGithub\b(?![{)]) (?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
# s.b. GitLab # Should be `briefcase`
(?<![&*.]|// |\btype )\bGitlab\b(?![{)]) \bbrief-case\b
# s.b. JavaScript # 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
# 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)(?:</|\]\()
# Should be `equals` to `is equal to`
\bequals 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 \bJavascript\b
# s.b. macOS or Mac OS X or ... # Should be `macOS` or `Mac OS X` or ...
\bMacOS\b \bMacOS\b
# s.b. Microsoft # Should be `Microsoft`
\bMicroSoft\b \bMicroSoft\b
# s.b. TypeScript # Should be `OAuth`
(?:^|[^-/*$])[ '"]oAuth(?: [a-z]|\d+ |[^ a-zA-Z0-9:;_.()])
# Should be `RabbitMQ`
\bRabbitmq\b
# Should be `TypeScript`
\bTypescript\b \bTypescript\b
# s.b. another # Should be `another`
\ban[- ]other\b \ban[- ]other\b
# s.b. deprecation warning # 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 \b[Dd]epreciation [Ww]arnings?\b
# s.b. greater than # Should be `greater than`
\bgreater then\b \bgreater then\b
# s.b. in front of # 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`
#\bId\b
# Should be `in front of`
\bin from of\b \bin from of\b
# s.b. into # Should be `into`
# when not phrasal and when `in order to` would be wrong: # when not phrasal and when `in order to` would be wrong:
# https://thewritepractice.com/into-vs-in-to/ # https://thewritepractice.com/into-vs-in-to/
#\sin to\s(?!if\b) #\sin to\s(?!if\b)
# s.b. is obsolete # Should be `use`
\sin used by\b
# Should be `is obsolete`
\bis obsolescent\b \bis obsolescent\b
# s.b. it's or its # Should be `it's` or `its`
\bits['] \bits[']
# s.b. opt-in # Should be `its`
#(?<!\sfor)\sopt in\s \bit's(?= own\b)
# s.b. less than # Should be `log in`
\blogin to the
# Should be `long-standing`
\blong standing\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)(?<!\sif)\sopt in\s
# Should be `less than`
\bless then\b \bless then\b
# s.b. one of # Should be `load balancer`
\bon of\b \b[Ll]oud balancer
# s.b. otherwise # 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
# Most people only have two hands. Reword.
\b(?i)on the third hand\b
# Should be `otherwise`
\bother[- ]wise\b \bother[- ]wise\b
# s.b. or (more|less) # Should be `or (more|less)`
\bore (?:more|less)\b \bore (?:more|less)\b
# s.b. nonexistent # Should be `rather than`
\brather then\b
# Should be `regardless, ...` or `regardless of (whether)`
\b[Rr]egardless if you\b
# Should be `no longer needed`
\bno more needed\b(?! than\b)
# Should be `did not exist`
\bwere not existent\b
# Should be `nonexistent`
\bnon existing\b \bnon existing\b
# Should be `nonexistent`
\b[Nn]o[nt][- ]existent\b \b[Nn]o[nt][- ]existent\b
# s.b. brief / details/ param / return / retval # Should be `@brief` / `@details` / `@param` / `@return` / `@retval`
(?:^\s*|(?:\*|//|/*)\s+`)[\\@](?:breif|(?:detail|detials)|(?:params(?!\.)|prama?)|ret(?:uns?)|retvl)\b (?:^\s*|(?:\*|//|/*)\s+`)[\\@](?:breif|(?:detail|detials)|(?:params(?!\.)|prama?)|ret(?:uns?)|retvl)\b
# s.b. preexisting # Should be `preexisting`
[Pp]re[- ]existing [Pp]re[- ]existing
# s.b. preempt # Should be `preempt`
[Pp]re[- ]empt\b [Pp]re[- ]empt\b
# s.b. preemptively # Should be `preemptively`
[Pp]re[- ]emptively [Pp]re[- ]emptively
# s.b. recently changed or recent changes # Should be `prepopulate`
[Pp]re[- ]populate
# Should be `prerequisite`
[Pp]re[- ]requisite
# Should be `recently changed` or `recent changes`
[Rr]ecent changed [Rr]ecent changed
# s.b. reentrancy # Should be `reentrancy`
[Rr]e[- ]entrancy [Rr]e[- ]entrancy
# s.b. reentrant # Should be `reentrant`
[Rr]e[- ]entrant [Rr]e[- ]entrant
# s.b. understand # Should be `strong suit`
\b(?:my|his|her|their) strong suite\b
# Should be `understand`
\bunder stand\b \bunder stand\b
# s.b. workarounds # Should be `URI` or `uri` unless it refers to a person named `Uri`
#(?<!\.)\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 `vCenter`
\bV[Cc]enter\b
# Should be `VM`
\bVm\b
# Should be `workarounds`
#\bwork[- ]arounds\b #\bwork[- ]arounds\b
# s.b. workaround # Should be `workaround`
(?:(?:[Aa]|[Tt]he|ugly)\swork[- ]around\b|\swork[- ]around\s+for) (?:(?:[Aa]|[Tt]he|ugly)\swork[- ]around\b|\swork[- ]around\s+for)
# s.b. (coarse|fine)-grained # Should be `workaround`
\b[Ww]alk[- ]around\b
# 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 \b(?:coarse|fine) grained\b
# s.b. neither/nor -- or reword # Homoglyph (Cyrillic) should be `A`/`B`/`C`/`E`/`H`/`I`/`I`/`J`/`K`/`M`/`O`/`P`/`S`/`T`/`Y`
#\bnot\b[^.?!"/(]+\bnor\b # It's possible that your content is intentionally mixing Cyrllic 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]|$))
# probably a double negative # Homoglyph (Cyrillic) should be `a`/`b`/`e`
# s.b. neither/nor (plus rewording the beginning) # It's possible that your content is intentionally mixing Cyrllic and Latin scripts, but if it isn't, you definitely want to correct this.
\bnot\b[^.?!"/]*\bneither\b[^.?!"/(]*\bnor\b [аве](?=[A-Za-z]{2,})|(?<=[A-Za-z]{2})[аве]|(?<=[A-Za-z])[аве](?=[A-Za-z])
# In English, it is generally wrong to have the same word twice in a row without punctuation. # Should be `neither/nor` -- or reword
# Duplicated words are generally mistakes. #(?!<do )\bnot\b([^.?!"/(](?!neither|,.*?,))+\bnor\b
# There are a few exceptions where it is acceptable (e.g. "that that").
# If the highlighted doubled word pair is in a code snippet, you can write a pattern to mask it. # Should be `neither/nor` (plus rewording the beginning)
# If the highlighted doubled word pair is in prose, have someone read the English before you dismiss this error. # 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 \s([A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})\s\g{-1}\s

View File

@ -1,5 +1,47 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns # See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
# Direct 2D/3D
\b(?:d[23]d(?=[a-z])|D[23]D(?=[A-Z]))
# x86/x64
(?<=[a-z])x(?:86|64)
# Windows Resources with accelerators
\b[A-Z]&[a-z]+\b(?!;)
# bug in check-spelling v0.0.24 (fixed later)
\bok'd\b
# Automatically suggested patterns
# hit-count: 83 file-count: 18
# C network byte conversions
(?:\d|\bh)to(?!ken)(?=[a-z])|to(?=[adhiklpun]\()
# hit-count: 59 file-count: 36
# IServiceProvider / isAThing
(?:\b|_)(?:(?:ns|)I|isA)(?=(?:[A-Z][a-z]{2,})+(?:[A-Z\d]|\b))
# hit-count: 9 file-count: 6
# Markdown anchor links
\(#\S*?[a-zA-Z]\S*?\)
# hit-count: 5 file-count: 5
# libraries
(?:\b|_)lib(?:re(?=office)|)(?!era[lt]|ero|ert(?:ies|y)|rar(?:i(?:an|es)|y))(?=[a-z])
# hit-count: 3 file-count: 3
# File extensions
\*\.[+\w]+,
# hit-count: 2 file-count: 1
# kubernetes crd patterns
^\s*pattern: .*$
# hit-count: 1 file-count: 1
# curl arguments
\b(?:\\n|)curl(?:\.exe|)(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)*
https?://\S+ https?://\S+
[Pp]ublicKeyToken="?[0-9a-fA-F]{16}"? [Pp]ublicKeyToken="?[0-9a-fA-F]{16}"?
(?:[{"]|UniqueIdentifier>)[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(?:[}"]|</UniqueIdentifier) (?:[{"]|UniqueIdentifier>)[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(?:[}"]|</UniqueIdentifier)
@ -58,7 +100,7 @@ equals_insensitive_ascii\("\w+", "\w+"
# hit-count: 109 file-count: 62 # hit-count: 109 file-count: 62
# Compiler flags (Unix, Java/Scala) # Compiler flags (Unix, Java/Scala)
# Use if you have things like `-Pdocker` and want to treat them as `docker` # Use if you have things like `-Pdocker` and want to treat them as `docker`
(?:^|[\t ,>"'`=(])-(?:D(?=[A-Z])|[WX]|f(?=[ms]))(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) (?:^|[\t ,>"'`=(])-(?:D(?=[A-Z])|W(?!ork)|X|f(?=[ms]))(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
# hit-count: 60 file-count: 35 # hit-count: 60 file-count: 35
# version suffix <word>v# # version suffix <word>v#
@ -134,19 +176,38 @@ mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,}
# to opt in # to opt in
\bto opt in\b \bto opt in\b
# Questionably acceptable forms of `in to`
# Personally, I prefer `log into`, but people object
# https://www.tprteaching.com/log-into-log-in-to-login/
\b(?:(?:[Ll]og(?:g(?=[a-z])|)|[Ss]ign)(?:ed|ing)?) in to\b
# to opt in
\bto opt in\b
# acceptable duplicates # acceptable duplicates
# ls directory listings # ls directory listings
[-bcdlpsw](?:[-r][-w][-Ssx]){3}\s+\d+\s+\S+\s+\S+\s+\d+\s+ [-bcdlpsw](?:[-r][-w][-SsTtx]){3}[\.+*]?\s+\d+\s+\S+\s+\S+\s+[.\d]+(?:[KMGT]|)\s+
# mount # mount
\bmount\s+-t\s+(\w+)\s+\g{-1}\b \bmount\s+-t\s+(\w+)\s+\g{-1}\b
# C types and repeated CSS values # C/idl types, repeated CSS values, + English ...
\s(auto|center|div|Guid|inherit|long|LONG|none|normal|solid|that|thin|transparent|very)(?: \g{-1})+\s \s(auto|buffalo|center|div|Guid|GUID|inherit|long|LONG|none|normal|solid|that|thin|transparent|very)(?: \g{-1})+\s
# C struct # C enum and struct
\bstruct\s+(\w+)\s+\g{-1}\b \b(?:enum|struct)\s+(\w+)\s+\g{-1}\b
# go templates # go templates
\s(\w+)\s+\g{-1}\s+\`(?:graphql|inject|json|yaml): \s(\w+)\s+\g{-1}\s+\`(?:graphql|inject|json|yaml):
# doxygen / javadoc / .net # doxygen / javadoc / .net
(?:[\\@](?:brief|groupname|t?param|return|retval)|(?:public|private|\[Parameter(?:\(.+\)|)\])(?:\s+static|\s+override|\s+readonly)*)(?:\s+\{\w+\}|)\s+(\w+)\s+\g{-1}\s (?:[\\@](?:brief|defgroup|groupname|link|t?param|return|retval)|(?:public|private|\[Parameter(?:\(.+\)|)\])(?:\s+(?:static|override|readonly|required|virtual))*)(?:\s+\{\w+\}|)\s+(\w+)\s+\g{-1}\s
# macOS file path
(?:Contents\W+|(?!iOS)/)MacOS\b
# Python package registry has incorrect spelling for macOS / Mac OS X
"Operating System :: MacOS :: MacOS X"
# "company" in Germany
\bGmbH\b
# IntelliJ
\bIntelliJ\b
# Commit message -- Signed-off-by and friends # Commit message -- Signed-off-by and friends
^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$ ^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$

View File

@ -5,9 +5,11 @@
benefitting benefitting
occurences? occurences?
^dependan.* ^dependan.*
^diables?$
^oer$ ^oer$
Sorce Sorce
^[Ss]pae.* ^[Ss]pae.*
^Teh$
^untill$ ^untill$
^untilling$ ^untilling$
^wether.* ^wether.*

View File

@ -34,14 +34,14 @@ name: Spell checking
# #
# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key # For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key
# Sarif reporting # SARIF reporting
# #
# Access to Sarif reports is generally restricted (by GitHub) to members of the repository. # Access to SARIF reports is generally restricted (by GitHub) to members of the repository.
# #
# Requires enabling `security-events: write` # Requires enabling `security-events: write`
# and configuring the action with `use_sarif: 1` # and configuring the action with `use_sarif: 1`
# #
# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output # For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-SARIF-output
# Minimal workflow structure: # Minimal workflow structure:
# #
@ -67,16 +67,16 @@ on:
branches: branches:
- "**" - "**"
types: types:
- 'opened' - "opened"
- 'reopened' - "reopened"
- 'synchronize' - "synchronize"
issue_comment: issue_comment:
types: types:
- 'created' - "created"
jobs: jobs:
spelling: spelling:
name: Spell checking name: Check Spelling
permissions: permissions:
contents: read contents: read
pull-requests: read pull-requests: read
@ -93,7 +93,7 @@ jobs:
steps: steps:
- name: check-spelling - name: check-spelling
id: spelling id: spelling
uses: check-spelling/check-spelling@v0.0.22 uses: check-spelling/check-spelling@v0.0.24
with: with:
suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }} suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }}
checkout: true checkout: true
@ -102,41 +102,46 @@ jobs:
post_comment: 0 post_comment: 0
use_magic_file: 1 use_magic_file: 1
report-timing: 1 report-timing: 1
warnings: bad-regex,binary-file,deprecated-feature,ignored-expect-variant,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check warnings: bad-regex,binary-file,deprecated-feature,ignored-expect-variant,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check,unclosed-block-ignore-begin,unclosed-block-ignore-end
experimental_apply_changes_via_bot: ${{ github.repository_owner != 'microsoft' && 1 }} experimental_apply_changes_via_bot: ${{ github.repository_owner != 'microsoft' && 1 }}
use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }} use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }}
extra_dictionary_limit: 20 check_extra_dictionaries: ""
extra_dictionaries: dictionary_source_prefixes: >
cspell:software-terms/dict/softwareTerms.txt {
cspell:cpp/src/stdlib-cpp.txt "cspell": "https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20241114/dictionaries/"
}
extra_dictionaries: |
cspell:software-terms/softwareTerms.txt
cspell:cpp/stdlib-cpp.txt
cspell:cpp/stdlib-c.txt
cspell:lorem-ipsum/dictionary.txt cspell:lorem-ipsum/dictionary.txt
cspell:cpp/src/stdlib-c.txt cspell:php/php.txt
cspell:php/dict/php.txt
cspell:filetypes/filetypes.txt cspell:filetypes/filetypes.txt
cspell:java/src/java.txt cspell:java/java.txt
cspell:python/src/common/extra.txt cspell:node/node.txt
cspell:node/dict/node.txt cspell:golang/go.txt
cspell:java/src/java-terms.txt cspell:java/java-terms.txt
cspell:mnemonics/mnemonics.txt
cspell:npm/npm.txt
cspell:fullstack/fullstack.txt
cspell:python/python/python-lib.txt
cspell:dotnet/dotnet.txt
cspell:dart/dart.txt
cspell:aws/aws.txt cspell:aws/aws.txt
cspell:typescript/dict/typescript.txt cspell:python/common/extra.txt
cspell:dotnet/dict/dotnet.txt cspell:css/css.txt
cspell:golang/dict/go.txt cspell:cpp/stdlib-cmath.txt
cspell:fullstack/dict/fullstack.txt cspell:typescript/typescript.txt
cspell:cpp/src/compiler-msvc.txt cspell:cpp/compiler-msvc.txt
cspell:python/src/python/python-lib.txt cspell:django/django.txt
cspell:mnemonics/src/mnemonics.txt cspell:html/html.txt
cspell:cpp/src/stdlib-cmath.txt cspell:cpp/lang-keywords.txt
cspell:css/dict/css.txt cspell:cpp/ecosystem.txt
cspell:cpp/src/lang-keywords.txt cspell:r/r.txt
cspell:django/dict/django.txt cspell:cpp/compiler-clang-attributes.txt
cspell:python/src/python/python.txt cspell:powershell/powershell.txt
cspell:html/dict/html.txt
cspell:cpp/src/ecosystem.txt
cspell:cpp/src/compiler-clang-attributes.txt
cspell:npm/dict/npm.txt
cspell:r/src/r.txt
cspell:powershell/dict/powershell.txt
cspell:csharp/csharp.txt cspell:csharp/csharp.txt
cspell:python/python/python.txt
comment-push: comment-push:
name: Report (Push) name: Report (Push)
@ -144,11 +149,12 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: spelling needs: spelling
permissions: permissions:
actions: read
contents: write contents: write
if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push' if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push'
steps: steps:
- name: comment - name: comment
uses: check-spelling/check-spelling@v0.0.22 uses: check-spelling/check-spelling@v0.0.24
with: with:
checkout: true checkout: true
spell_check_this: microsoft/terminal@main spell_check_this: microsoft/terminal@main
@ -160,12 +166,13 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: spelling needs: spelling
permissions: permissions:
actions: read
contents: read contents: read
pull-requests: write pull-requests: write
if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request')
steps: steps:
- name: comment - name: comment
uses: check-spelling/check-spelling@v0.0.22 uses: check-spelling/check-spelling@v0.0.24
with: with:
checkout: true checkout: true
spell_check_this: microsoft/terminal@main spell_check_this: microsoft/terminal@main
@ -183,14 +190,15 @@ jobs:
github.repository_owner != 'microsoft' && github.repository_owner != 'microsoft' &&
github.event_name == 'issue_comment' && github.event_name == 'issue_comment' &&
github.event.issue.pull_request && github.event.issue.pull_request &&
contains(github.event.comment.body, '@check-spelling-bot apply') contains(github.event.comment.body, '@check-spelling-bot apply') &&
contains(github.event.comment.body, 'https://')
}} }}
concurrency: concurrency:
group: spelling-update-${{ github.event.issue.number }} group: spelling-update-${{ github.event.issue.number }}
cancel-in-progress: false cancel-in-progress: false
steps: steps:
- name: apply spelling updates - name: apply spelling updates
uses: check-spelling/check-spelling@v0.0.22 uses: check-spelling/check-spelling@v0.0.24
with: with:
experimental_apply_changes_via_bot: ${{ github.repository_owner != 'microsoft' && 1 }} experimental_apply_changes_via_bot: ${{ github.repository_owner != 'microsoft' && 1 }}
checkout: true checkout: true

View File

@ -109,7 +109,7 @@ We'll be using tags, primarily, to help us understand what needs attention, what
- Will use Squash merge strategy - Will use Squash merge strategy
- Will attempt to delete branch after merge, if possible - Will attempt to delete branch after merge, if possible
- Will automatically remove the `AutoMerge` label if changes are pushed by someone *without* Write Access. - Will automatically remove the `AutoMerge` label if changes are pushed by someone *without* Write Access.
- More information on bot-logic that can be controlled with comments is [here](https://github.com/OfficeDev/office-ui-fabric-react/wiki/Advanced-auto-merge) - See more [information on bot-logic that can be controlled with comments](https://github.com/OfficeDev/office-ui-fabric-react/wiki/Advanced-auto-merge)
#### Mark issues with an active PR #### Mark issues with an active PR
- If there is an active PR for an issue, label that issue with the `In-PR` label - If there is an active PR for an issue, label that issue with the `In-PR` label

View File

@ -1917,7 +1917,7 @@
}, },
"useCommandline": { "useCommandline": {
"default": false, "default": false,
"description": "When set to `true`, the current commandline the user has typed will pre-populate the filter of the Suggestions UI. This requires that the user has enabled shell integration in their shell's config. When set to false, the filter will start empty." "description": "When set to `true`, the current commandline the user has typed will prepopulate the filter of the Suggestions UI. This requires that the user has enabled shell integration in their shell's config. When set to false, the filter will start empty."
} }
} }
} }
@ -2869,7 +2869,7 @@
"description": "When true, this profile should always open in an elevated context. If the window isn't running as an Administrator, then a new elevated window will be created." "description": "When true, this profile should always open in an elevated context. If the window isn't running as an Administrator, then a new elevated window will be created."
}, },
"environment": { "environment": {
"description": "Key-value pairs representing environment variables to set. Environment variable names are not case sensitive. You can reference existing environment variable names by enclosing them in literal percent characters (e.g. %PATH%).", "description": "Key-value pairs representing environment variables to set. Environment variable names are not case-sensitive. You can reference existing environment variable names by enclosing them in literal percent characters (e.g. %PATH%).",
"type": "object", "type": "object",
"additionalProperties": { "additionalProperties": {
"type": "string" "type": "string"

View File

@ -25,12 +25,12 @@ Two new properties should be added in the json settings file:
1. All spaces will be ignored. 1. All spaces will be ignored.
2. Both X value and Y values are optional. If anyone of them is missing, or the value is invalid, system default value will be used. Examples: 2. Both X value and Y values are optional. If any one of them is missing, or the value is invalid, system default value will be used. Examples:
", 1000" equals to (default, 1000) ", 1000" equals (default, 1000)
"1000, " equals to (1000, default) "1000, " equals (1000, default)
"," equals to (default, default) "," equals (default, default)
"abc, 1000" equals to (default, 1000) "abc, 1000" equals (default, 1000)
**launchMode**: string. Determine the launch mode. There are two modes for now **launchMode**: string. Determine the launch mode. There are two modes for now

View File

@ -447,7 +447,7 @@ Another reason we shouldn't support keys being able to be lazy-bound to local
snippets: It's entirely too easy for `malicious.exe` to create a file in snippets: It's entirely too easy for `malicious.exe` to create a file in
`%HomePath%` that creates a snippet for `\u003pwn-your-machine.exe\r` (or `%HomePath%` that creates a snippet for `\u003pwn-your-machine.exe\r` (or
similar). Any app can read your settings file, and it is again too easy for that similar). Any app can read your settings file, and it is again too easy for that
malicious app to set it's own action `id` to the same as some other well-meaning malicious app to set its own action `id` to the same as some other well-meaning
local snippet's ID which you DO have bound to a key. local snippet's ID which you DO have bound to a key.
When we first load the snippets from the `.wt.json` file, we'll want to also ask When we first load the snippets from the `.wt.json` file, we'll want to also ask
@ -563,9 +563,9 @@ their own workflows.
* We'd have inputs for the commandline, name, description. * We'd have inputs for the commandline, name, description.
* Obviously, it'd be easy to have a "Add new" button (to open that dialog) on * Obviously, it'd be easy to have a "Add new" button (to open that dialog) on
the snippets pane. the snippets pane.
* We could have `wt save` open that dialog pre-populated, rather than just * We could have `wt save` open that dialog prepopulated, rather than just
saving the command directly. saving the command directly.
* We could even also find a way to pre-populate that dialog with the recent * We could even also find a way to prepopulate that dialog with the recent
commands (from shell integration)! commands (from shell integration)!
* As a potential v2.0 of the snippets file schema, we may look to the * As a potential v2.0 of the snippets file schema, we may look to the
`.vscode/tasks.json` schema for inspiration. That file supports much more `.vscode/tasks.json` schema for inspiration. That file supports much more

View File

@ -240,7 +240,7 @@ Not listed above is [shell-driven autocompletion]. These aren't something that
the Terminal can invoke all on its own - these are something the shell would the Terminal can invoke all on its own - these are something the shell would
need to invoke themselves. need to invoke themselves.
#### Pre-populate the current commandline context #### Prepopulate the current commandline context
Consider the following scenario. A user has typed `git c` in their shell, and Consider the following scenario. A user has typed `git c` in their shell, and
has [shell integration] enabled for their shell. They want to open the has [shell integration] enabled for their shell. They want to open the
@ -248,7 +248,7 @@ Suggestions UI filtered to their recent history, but starting with what they've
already typed. To support this scenario, we'll add an additional property: already typed. To support this scenario, we'll add an additional property:
* `"useCommandline"`: `bool` (**default**: `true`) * `"useCommandline"`: `bool` (**default**: `true`)
* `true`: the current commandline the user has typed will pre-populate the * `true`: the current commandline the user has typed will prepopulate the
filter of the Suggestions UI. This requires that the user has enabled shell filter of the Suggestions UI. This requires that the user has enabled shell
integration in their shell's config. integration in their shell's config.
* `false`: the filter will start empty, regardless of what the user has typed. * `false`: the filter will start empty, regardless of what the user has typed.
@ -388,7 +388,7 @@ spec's review.
* [ ] Enable the `SuggestionsControl` to open with or without a search box * [ ] Enable the `SuggestionsControl` to open with or without a search box
* [ ] Plumb support for shell-driven completions through the core up to the app * [ ] Plumb support for shell-driven completions through the core up to the app
* [ ] Expose the _current_ commandline from the `TermControl` * [ ] Expose the _current_ commandline from the `TermControl`
* [ ] Add a `useCommandline` property to `suggestions`, to pre-populate the search with the current commandline. * [ ] Add a `useCommandline` property to `suggestions`, to prepopulate the search with the current commandline.
* [ ] Persist recent commands / directories accordingly * [ ] Persist recent commands / directories accordingly
### 🏃‍♂️ Run ### 🏃‍♂️ Run
@ -436,7 +436,7 @@ Here's a sample json schema for the settings discussed here.
}, },
"useCommandline": { "useCommandline": {
"default": false, "default": false,
"description": "When set to `true`, the current commandline the user has typed will pre-populate the filter of the Suggestions UI. This requires that the user has enabled shell integration in their shell's config. When set to false, the filter will start empty." "description": "When set to `true`, the current commandline the user has typed will prepopulate the filter of the Suggestions UI. This requires that the user has enabled shell integration in their shell's config. When set to false, the filter will start empty."
}, },
"nesting": { "nesting": {
"default": true, "default": true,
@ -591,7 +591,7 @@ We'll probably want a way for recent commands to be saved across sessions. That
* If they're saved per-profile, maybe a profile can opt-in to loading all the commands? * If they're saved per-profile, maybe a profile can opt-in to loading all the commands?
* How does defterm play with this? Do we "layer" by concatenating per-profile commands with `profiles.defaults` ones? * How does defterm play with this? Do we "layer" by concatenating per-profile commands with `profiles.defaults` ones?
* A button in the Settings UI for clearing these commands * A button in the Settings UI for clearing these commands
* Should fragments be able to pre-populate "recent commands"? * Should fragments be able to prepopulate "recent commands"?
* I'm just gonna say _no_. That would be a better idea for Tasks (aka just a `sendInput` Action that we load from the fragment normally as a Task), or a specific suggestion source for the fragment extension. * I'm just gonna say _no_. That would be a better idea for Tasks (aka just a `sendInput` Action that we load from the fragment normally as a Task), or a specific suggestion source for the fragment extension.
#### Inline mode #### Inline mode

View File

@ -698,7 +698,7 @@ This would define three commands, each with a number of nested commands undernea
* The second command: * The second command:
- It uses the string literal `"Connect to ssh..."` as it's name - It uses the string literal `"Connect to ssh..."` as it's name
- It contains two nested commands: - It contains two nested commands:
- Each nested command has it's own literal name - Each nested command has its own literal name
- Activating these commands would cause us to open a new tab with the - Activating these commands would cause us to open a new tab with the
provided `commandline` instead of the default profile's `commandline` provided `commandline` instead of the default profile's `commandline`
* The third command: * The third command:

View File

@ -10,7 +10,7 @@ issue id: 2046
## Abstract ## Abstract
This document is intended to serve as an addition to the [Command Palette Spec]. This document is intended to serve as an addition to the [Command Palette Spec].
While that spec is complete in it's own right, subsequent discussion revealed While that spec is complete in its own right, subsequent discussion revealed
additional ways to improve the functionality and usability of the command additional ways to improve the functionality and usability of the command
palette. This document builds largely on the topics already introduced in the palette. This document builds largely on the topics already introduced in the
original spec, so readers should first familiarize themselves with that original spec, so readers should first familiarize themselves with that

View File

@ -253,7 +253,7 @@ After much discussion as a team, we decided that **Proposal D** would be the
best option. We felt that there wasn't a need to add any extra configuration to best option. We felt that there wasn't a need to add any extra configuration to
invoke the "pane switcher" as anything different than the "tab switcher". The invoke the "pane switcher" as anything different than the "tab switcher". The
"pane switcher" should really just exist as a part of the functionality of the "pane switcher" should really just exist as a part of the functionality of the
advanced tab switcher, not as it's own thing. advanced tab switcher, not as its own thing.
Additionally, we concurred that the new "direction" value should be `prev`, not Additionally, we concurred that the new "direction" value should be `prev`, not
`last`, for consistency's sake. `last`, for consistency's sake.

View File

@ -225,7 +225,7 @@ The window process can listen for that event to indicate that the swapchain
changed. The window will then query for the content process's PID and create a changed. The window will then query for the content process's PID and create a
handle to the content process. The window will query the current value of the handle to the content process. The window will query the current value of the
content process's `HANDLE` to the swapchain. The window will then duplicate that content process's `HANDLE` to the swapchain. The window will then duplicate that
`HANDLE` into it's own process space. Now that the window has a handle to the `HANDLE` into its own process space. Now that the window has a handle to the
swapchain, it can use [`ISwapChainPanelNative2::SetSwapChainHandle`] to set the swapchain, it can use [`ISwapChainPanelNative2::SetSwapChainHandle`] to set the
SwapChainPanel to use the same swapchain. SwapChainPanel to use the same swapchain.
@ -449,7 +449,7 @@ schemes for the commandline parameters. The following is given as an example of
how these arguments _might_ be authored and implemented to satisfy some of these how these arguments _might_ be authored and implemented to satisfy some of these
scenarios. scenarios.
Since each window process will have it's own unique ID assigned to it by the Since each window process will have its own unique ID assigned to it by the
monarch, then running a command in a given window with ID `N` should be as easy monarch, then running a command in a given window with ID `N` should be as easy
as something like: as something like:
@ -627,7 +627,7 @@ Then we have two paths forward:
It should create a new content process to handle this connection. It should create a new content process to handle this connection.
- the content process will need a way of being invoked by passing it handles - the content process will need a way of being invoked by passing it handles
to the new client. This way, the content process can dupe these handles into to the new client. This way, the content process can dupe these handles into
it's own process space, to be able to create the `ITerminalConnection` in its own process space, to be able to create the `ITerminalConnection` in
its own process space. its own process space.
3. If this new window process is the monarch, then great! There are no other 3. If this new window process is the monarch, then great! There are no other
@ -808,7 +808,7 @@ The Settings UI is something we intend on shipping in the Terminal as a part of
also plan on hopefully making the Settings UI appear as its own tab within the also plan on hopefully making the Settings UI appear as its own tab within the
Terminal. This would be the first example of having non-terminal content Terminal. This would be the first example of having non-terminal content
directly in the application. How would we support tearing out the Settings UI directly in the application. How would we support tearing out the Settings UI
tab into it's own window? tab into its own window?
Options available here include: Options available here include:
@ -967,7 +967,7 @@ of each other.
- Summon the nearest window - Summon the nearest window
- make the window "drop down" from the top - make the window "drop down" from the top
- Summon the MRU window - Summon the MRU window
- It would need to track a the MRU for windows, so pressing the shortcut when - It would need to track the MRU for windows, so pressing the shortcut when
no window is active summons the MRU one. no window is active summons the MRU one.
<hr> <hr>

View File

@ -46,7 +46,7 @@ application, and each tab has a set of panes that are visible within the context
of that tab. of that tab.
Panes are implemented as a binary tree of panes. A Pane can either be a leaf Panes are implemented as a binary tree of panes. A Pane can either be a leaf
pane, with it's own terminal control that it displays, or it could be a parent pane, with its own terminal control that it displays, or it could be a parent
pane, where it has two children, each with their own terminal control. pane, where it has two children, each with their own terminal control.
When a pane is a parent, its two children are either split vertically or When a pane is a parent, its two children are either split vertically or
@ -211,7 +211,7 @@ no means a comprehensive list.
### Why not top-level panes, and nested tabs? ### Why not top-level panes, and nested tabs?
If each pane were to have it's own set of tabs, then each pane would need to If each pane were to have its own set of tabs, then each pane would need to
reserve screen real estate for a row of tabs. As a user continued to split the reserve screen real estate for a row of tabs. As a user continued to split the
window, more and more of the screen would be dedicated to just displaying a row window, more and more of the screen would be dedicated to just displaying a row
of tabs, which isn't really the important part of the application, the terminal of tabs, which isn't really the important part of the application, the terminal
@ -223,10 +223,10 @@ user would need to somehow close the other panes, to be able to make the split
the size of the dull window. the size of the dull window.
One con of this design is that if a control is hosted in a pane, the current One con of this design is that if a control is hosted in a pane, the current
design makes it hard to move out of a pane into it's own tab, or into another design makes it hard to move out of a pane into its own tab, or into another
pane. This could be solved a number of ways. There could be keyboard shortcuts pane. This could be solved a number of ways. There could be keyboard shortcuts
for swapping the positions of tabs, or a shortcut for both "zooming" a tab for swapping the positions of tabs, or a shortcut for both "zooming" a tab
(temporarily making it the full size) or even popping a pane out to it's own (temporarily making it the full size) or even popping a pane out to its own
tab. Additionally, a right-click menu option could be added to do the tab. Additionally, a right-click menu option could be added to do the
aforementioned actions. Discoverability of these two actions is not as high as aforementioned actions. Discoverability of these two actions is not as high as
just dragging a tab from one pane to another; however, it's believed that panes just dragging a tab from one pane to another; however, it's believed that panes

View File

@ -21,12 +21,12 @@ Our ultimate goal is to provide both search within one tab and search from all t
1. The search is triggered by KeyBindings. A new setting property named "find" will be enabled in the Json file. The user can set their own key bindings for search. The default is <kbd>ctrl+shift+f</kbd>. 1. The search is triggered by KeyBindings. A new setting property named "find" will be enabled in the Json file. The user can set their own key bindings for search. The default is <kbd>ctrl+shift+f</kbd>.
2. The user search in a XAML TextBox, which is contained in a custom `SearchBoxControl`. The default position of the search box is the top right corner. 2. The user search in a XAML TextBox, which is contained in a custom `SearchBoxControl`. The default position of the search box is the top right corner.
3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phase, we will focus on case sensitive/insensitive text exact match. 3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phase, we will focus on case-sensitive/insensitive text exact match.
4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search.
5. The user should be able to fully interact with the terminal when the search box is on screen. 5. The user should be able to fully interact with the terminal when the search box is on screen.
6. For accessibility concerns, the user should be able to navigate all the interactive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually bound to Esc. 6. For accessibility concerns, the user should be able to navigate all the interactive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually bound to Esc.
Conhost already has a module for search. It implements case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. Conhost already has a module for search. It implements case-sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency.
We will create a `SearchBoxControl` Xaml `UserControl` element. When a search process begins, a `SearchBoxControl` object will be created and attached to `TermControl` root grid. In other words, one SearchBox is added for each `TermControl`. The reasons for this design is: We will create a `SearchBoxControl` Xaml `UserControl` element. When a search process begins, a `SearchBoxControl` object will be created and attached to `TermControl` root grid. In other words, one SearchBox is added for each `TermControl`. The reasons for this design is:
@ -39,7 +39,7 @@ We will create a `SearchBoxControl` Xaml `UserControl` element. When a search pr
2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next search will start before or after the previous searched text. 2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next search will start before or after the previous searched text.
3. We re-use the Search module in conhost. It performs the search in a brute-force approach. Starting from every position in the text buffer, the search algorithm compares the span of the searched string with buffer characters, and if the current buffer text matches the whole string, it will return store the position of the text in the buffer and return. The stored position information will be used for selection. 3. We re-use the Search module in conhost. It performs the search in a brute-force approach. Starting from every position in the text buffer, the search algorithm compares the span of the searched string with buffer characters, and if the current buffer text matches the whole string, it will return store the position of the text in the buffer and return. The stored position information will be used for selection.
3. The user can choose to search up or down. Search module realizes this, we just need to set a boolean flag. Default is search up. 3. The user can choose to search up or down. Search module realizes this, we just need to set a boolean flag. Default is search up.
4. The user can choose to do case sensitive or insensitive match. This also realized by Search module by setting a boolean flag. Default is search case-insensitively. 4. The user can choose to do case-sensitive or insensitive match. This also realized by Search module by setting a boolean flag. Default is search case-insensitively.
5. Tab navigation is realized by XAML. We just need to set TabNavigation="Cycle" in `SearchBoxControl`. 5. Tab navigation is realized by XAML. We just need to set TabNavigation="Cycle" in `SearchBoxControl`.
6. If the user clicks on the "X" button or press <kbd>Esc</kbd>, the search box will disappear and the object will be destructed and detached from the `TermControl` XAML tree. In phase one we do not store any state. 6. If the user clicks on the "X" button or press <kbd>Esc</kbd>, the search box will disappear and the object will be destructed and detached from the `TermControl` XAML tree. In phase one we do not store any state.
7. We need to guarantee full interaction with the terminal when the search box is open. To achieve this, search box and terminal input should be separated. If the current keyboard focus is on the search box, then keydown events will be handled on "search box level". 7. We need to guarantee full interaction with the terminal when the search box is open. To achieve this, search box and terminal input should be separated. If the current keyboard focus is on the search box, then keydown events will be handled on "search box level".
@ -61,8 +61,8 @@ The search box defaults to be on the top right corner of the Terminal window. If
1. The user presses <kbd>ctrl+shift+f</kbd> (or user's custom key binding) to open the search box. Focus will move to the TextBox. 1. The user presses <kbd>ctrl+shift+f</kbd> (or user's custom key binding) to open the search box. Focus will move to the TextBox.
2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, the search starts and searched text will be selected. Next search will be performed beginning from the current selection and go towards up/down. 2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, the search starts and searched text will be selected. Next search will be performed beginning from the current selection and go towards up/down.
3. The user can choose to search up or down by selecting up arrow or down arrow buttons. The chosen button will be styled to indicate it is selected. If the user does not click the arrows buttons, the default direction is up. 3. The user can choose to search up or down by selecting up arrow or down arrow buttons. The chosen button will be styled to indicate it is selected. If the user does not click the arrows buttons, the default direction is up.
4. The user can choose to do case sensitive or insensitive match by checking a check box. The default is case insensitive. 4. The user can choose to do case-sensitive or insensitive match by checking a check box. The default is case-insensitive.
5. If the search box is focused, the user can navigate all the elements on the search box using tab. When selected, press Enter equals to click. 5. If the search box is focused, the user can navigate all the elements on the search box using tab. When selected, pressing Enter is equivalent to clicking.
6. If the user click the "X" button or press <kbd>Esc</kbd>, the search stopped and the search box disappears and focus will move back to Terminal. 6. If the user click the "X" button or press <kbd>Esc</kbd>, the search stopped and the search box disappears and focus will move back to Terminal.
7. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. 7. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window.
8. If the user clicks on the terminal when the search box is open, it will draw focus back to the terminal from the search box. The search box will still stay open. 8. If the user clicks on the terminal when the search box is open, it will draw focus back to the terminal from the search box. The search box will still stay open.
@ -72,7 +72,7 @@ The search box defaults to be on the top right corner of the Terminal window. If
## Capabilities ## Capabilities
1. The user can search exact matched text in the text buffer of the Terminal Screen. 1. The user can search exact matched text in the text buffer of the Terminal Screen.
2. The user can choose to search case sensitively and insensitively. 2. The user can choose to search case-sensitively and insensitively.
3. The user can search up or down. 3. The user can search up or down.
4. Found text will be selected. 4. Found text will be selected.
5. The search will start from the active selected text (inclusive) if there is one, or the end of the written text. 5. The search will start from the active selected text (inclusive) if there is one, or the end of the written text.
@ -110,7 +110,7 @@ This feature only launches in need. It does not impact the performance of Termin
## Future considerations ## Future considerations
In version 1, we want realize a case sensitive/insensitive exact text match. But we may consider the following features in version 2: In version 1, we want realize a case-sensitive/insensitive exact text match. But we may consider the following features in version 2:
1. Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phase one. 1. Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phase one.
2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phase. To implement multi-tab search, we can let TerminalPage or App own a `SearchBoxControl` object, and provide the text buffer of the current focused terminal. We need to change the search algorithm. 2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phase. To implement multi-tab search, we can let TerminalPage or App own a `SearchBoxControl` object, and provide the text buffer of the current focused terminal. We need to change the search algorithm.

View File

@ -346,7 +346,7 @@ asked for these features, then it's inevitable that our users will too 😉
panes, not just key strokes. But which actions would those be? Moving the panes, not just key strokes. But which actions would those be? Moving the
selection anchors? Copy doesn't really make sense. Paste _does_ though. selection anchors? Copy doesn't really make sense. Paste _does_ though.
Maybe the open find dialog / next&prev search match actions? Maybe the open find dialog / next&prev search match actions?
- This probably would require it's own spec. - This probably would require its own spec.
* [iterm2#6007] - Different stripe color for different broadcast modes * [iterm2#6007] - Different stripe color for different broadcast modes
- Have one color to indicate when broadcasting in `global` scope, another in - Have one color to indicate when broadcasting in `global` scope, another in
`tab` scope, a third in `pane` scope. `tab` scope, a third in `pane` scope.

View File

@ -11,7 +11,7 @@ issue id: #10509
## Abstract ## Abstract
This document serves as a companion doc to the [Theming Spec], rather than a This document serves as a companion doc to the [Theming Spec], rather than a
spec on it's own. The context of broader application-level theming support is spec on its own. The context of broader application-level theming support is
necessary to understand the big picture of the designs in this discussion. necessary to understand the big picture of the designs in this discussion.

View File

@ -264,12 +264,12 @@ whatever client application (`cmd`, `powershell`, `bash`, `vim`) that is
connected to it. WT doesn't know when the user is typing in commands to the connected to it. WT doesn't know when the user is typing in commands to the
shell, or if the user is just typing in text in `emacs` or something. There's no shell, or if the user is just typing in text in `emacs` or something. There's no
way for the terminal to know that. It's _typically_ the client application's way for the terminal to know that. It's _typically_ the client application's
responsibility to save it's own command history. `bash` and `powershell` both do responsibility to save its own command history. `bash` and `powershell` both do
a pretty good job of saving this to another file to restore across sessions, a pretty good job of saving this to another file to restore across sessions,
while `cmd.exe` doesn't. while `cmd.exe` doesn't.
Windows is a messy world and this model gets a little tricky here. `cmd.exe` Windows is a messy world and this model gets a little tricky here. `cmd.exe`
isn't actually managing it's own command history _at all_. `conhost` is doing isn't actually managing its own command history _at all_. `conhost` is doing
that work on behalf of the client applications. Some long time ago someone that work on behalf of the client applications. Some long time ago someone
thought it would be a good idea to have the `readline` functionality baked thought it would be a good idea to have the `readline` functionality baked
directly into the console host. Whether that was a good idea or not remains to directly into the console host. Whether that was a good idea or not remains to

View File

@ -70,7 +70,7 @@ With more possible controls in a pane than just a terminal, it's possible that
crashes in those controls could impact the entire Terminal app's reliability. crashes in those controls could impact the entire Terminal app's reliability.
This would largely be out of our control, as we only author the TermControl. This would largely be out of our control, as we only author the TermControl.
We may want to consider hosting each pane in it's own process, similar to how We may want to consider hosting each pane in its own process, similar to how
moder browsers will host each tab in its own process, to help isolate tabs. This moder browsers will host each tab in its own process, to help isolate tabs. This
is a bigger discussion than the feature at hand, however. is a bigger discussion than the feature at hand, however.

View File

@ -33,7 +33,8 @@ The jumplist has to be created/modified during the life-cycle of the application
UWP provides an API to access to the jumplist through the [Windows.UI.StartScreen.JumpList class](https://docs.microsoft.com/en-us/uwp/api/windows.ui.startscreen.jumplist), however from previous attempts [1], the api does not work for the project architecture. UWP provides an API to access to the jumplist through the [Windows.UI.StartScreen.JumpList class](https://docs.microsoft.com/en-us/uwp/api/windows.ui.startscreen.jumplist), however from previous attempts [1], the api does not work for the project architecture.
Instead, we'll use the COM interface [ICustomDestinationList](https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nn-shobjidl_core-icustomdestinationlist) [2] directly to create the jumplist. Since we are using Win32 apis, the work should be done in the `WindowsTerminal` project. Instead, we'll use the COM interface [ICustomDestinationList](https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nn-shobjidl_core-icustomdestinationlist) [2] directly to create the jumplist. Since we are using Win32 apis, the work should be done in the `WindowsTerminal` project.
Using `ICustomDestinationList` is straightforward with a few additions discussed in this section [below](#Implementation-notes). Resources for using the jumplist can be found [here](https://msdn.microsoft.com/en-us/library/windows/desktop/gg281362.aspx) and [here](https://www.codeproject.com/Articles/36561/Windows-7-Goodies-in-C-Jump-Lists). Using `ICustomDestinationList` is straightforward with a few additions discussed in this section [below](#Implementation-notes). See [Adding Support for Windows 7 Jump Lists & Taskbar Tabs](https://msdn.microsoft.com/en-us/library/windows/desktop/gg281362.aspx) and [Windows 7 Goodies in C++: Jump Lists](https://www.codeproject.com/Articles/36561/Windows-7-Goodies-in-C-Jump-Lists).
The basic overview: The basic overview:
1. Get an instance of the `ICustomDestinationList` COM object 1. Get an instance of the `ICustomDestinationList` COM object

View File

@ -110,7 +110,7 @@ class CheckedNumeric {
} }
// This friend method is available solely for providing more detailed logging // This friend method is available solely for providing more detailed logging
// in the the tests. Do not implement it in production code, because the // in the tests. Do not implement it in production code, because the
// underlying values may change at any time. // underlying values may change at any time.
template <typename U> template <typename U>
friend U GetNumericValueForTest(const CheckedNumeric<U>& src); friend U GetNumericValueForTest(const CheckedNumeric<U>& src);

View File

@ -25,7 +25,7 @@
#include <wil/cppwinrt.h> #include <wil/cppwinrt.h>
#include <unknwn.h> #include <Unknwn.h>
#include <hstring.h> #include <hstring.h>

View File

@ -23,7 +23,7 @@ Abstract:
#define NOHELP #define NOHELP
#define NOCOMM #define NOCOMM
#include <unknwn.h> #include <Unknwn.h>
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)

View File

@ -50,7 +50,7 @@ namespace TerminalAppLocalTests
VERIFY_IS_FALSE(segments.GetAt(0).IsHighlighted()); VERIFY_IS_FALSE(segments.GetAt(0).IsHighlighted());
} }
{ {
Log::Comment(L"Testing command name segmentation with filter equals to the string"); Log::Comment(L"Testing command name segmentation with filter equal to the string");
const auto filteredCommand = winrt::make_self<winrt::TerminalApp::implementation::FilteredCommand>(paletteItem); const auto filteredCommand = winrt::make_self<winrt::TerminalApp::implementation::FilteredCommand>(paletteItem);
filteredCommand->_Filter = L"AAAAAABBBBBBCCC"; filteredCommand->_Filter = L"AAAAAABBBBBBCCC";
auto segments = filteredCommand->_computeHighlightedName().Segments(); auto segments = filteredCommand->_computeHighlightedName().Segments();
@ -129,7 +129,7 @@ namespace TerminalAppLocalTests
VERIFY_ARE_EQUAL(weight, 0); VERIFY_ARE_EQUAL(weight, 0);
} }
{ {
Log::Comment(L"Testing weight of command with filter equals to the string"); Log::Comment(L"Testing weight of command with filter equal to the string");
const auto filteredCommand = winrt::make_self<winrt::TerminalApp::implementation::FilteredCommand>(paletteItem); const auto filteredCommand = winrt::make_self<winrt::TerminalApp::implementation::FilteredCommand>(paletteItem);
filteredCommand->_Filter = L"AAAAAABBBBBBCCC"; filteredCommand->_Filter = L"AAAAAABBBBBBCCC";
filteredCommand->_HighlightedName = filteredCommand->_computeHighlightedName(); filteredCommand->_HighlightedName = filteredCommand->_computeHighlightedName();

View File

@ -28,7 +28,7 @@ Author(s):
#endif #endif
#include <wil/cppwinrt.h> #include <wil/cppwinrt.h>
#include <unknwn.h> #include <Unknwn.h>
#include <hstring.h> #include <hstring.h>
#include <WexTestClass.h> #include <WexTestClass.h>

View File

@ -15,7 +15,7 @@
#define NOHELP #define NOHELP
#define NOCOMM #define NOCOMM
#include <unknwn.h> #include <Unknwn.h>
#include <ShObjIdl.h> #include <ShObjIdl.h>
// Manually include til after we include Windows.Foundation to give it winrt superpowers // Manually include til after we include Windows.Foundation to give it winrt superpowers

View File

@ -22,7 +22,7 @@ Abstract:
#define NOMCX #define NOMCX
#define NOHELP #define NOHELP
#define NOCOMM #define NOCOMM
#include <unknwn.h> #include <Unknwn.h>
#include <windows.h> #include <windows.h>

View File

@ -18,7 +18,7 @@
#include <LibraryIncludes.h> #include <LibraryIncludes.h>
// Must be included before any WinRT headers. // Must be included before any WinRT headers.
#include <unknwn.h> #include <Unknwn.h>
#include <winrt/Windows.Foundation.h> #include <winrt/Windows.Foundation.h>
#include <wil/cppwinrt.h> #include <wil/cppwinrt.h>

View File

@ -1703,7 +1703,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// Arguments: // Arguments:
// - text: the text to search // - text: the text to search
// - goForward: boolean that represents if the current search direction is forward // - goForward: boolean that represents if the current search direction is forward
// - caseSensitive: boolean that represents if the current search is case sensitive // - caseSensitive: boolean that represents if the current search is case-sensitive
// - resetOnly: If true, only Reset() will be called, if anything. FindNext() will never be called. // - resetOnly: If true, only Reset() will be called, if anything. FindNext() will never be called.
// Return Value: // Return Value:
// - <none> // - <none>

View File

@ -225,11 +225,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation
} }
// Method Description: // Method Description:
// - Check if the current search is case sensitive // - Check if the current search is case-sensitive
// Arguments: // Arguments:
// - <none> // - <none>
// Return Value: // Return Value:
// - bool: whether the current search is case sensitive (case button is checked ) // - bool: whether the current search is case-sensitive (case button is checked )
// or not // or not
bool SearchBoxControl::CaseSensitive() bool SearchBoxControl::CaseSensitive()
{ {

View File

@ -691,7 +691,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// Arguments: // Arguments:
// - text: the text to search // - text: the text to search
// - goForward: boolean that represents if the current search direction is forward // - goForward: boolean that represents if the current search direction is forward
// - caseSensitive: boolean that represents if the current search is case sensitive // - caseSensitive: boolean that represents if the current search is case-sensitive
// Return Value: // Return Value:
// - <none> // - <none>
void TermControl::_Search(const winrt::hstring& text, void TermControl::_Search(const winrt::hstring& text,
@ -711,7 +711,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// Arguments: // Arguments:
// - text: the text to search // - text: the text to search
// - goForward: indicates whether the search should be performed forward (if set to true) or backward // - goForward: indicates whether the search should be performed forward (if set to true) or backward
// - caseSensitive: boolean that represents if the current search is case sensitive // - caseSensitive: boolean that represents if the current search is case-sensitive
// Return Value: // Return Value:
// - <none> // - <none>
void TermControl::_SearchChanged(const winrt::hstring& text, void TermControl::_SearchChanged(const winrt::hstring& text,
@ -4186,7 +4186,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
SelectionContextMenu().Hide(); SelectionContextMenu().Hide();
// CreateSearchBoxControl will actually create the search box and // CreateSearchBoxControl will actually create the search box and
// pre-populate the box with the currently selected text. // prepopulate the box with the currently selected text.
CreateSearchBoxControl(); CreateSearchBoxControl();
} }

View File

@ -25,7 +25,7 @@
#include <wil/cppwinrt.h> #include <wil/cppwinrt.h>
#include <unknwn.h> #include <Unknwn.h>
#include <winrt/Windows.Foundation.h> #include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h> #include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.system.h> #include <winrt/Windows.system.h>

View File

@ -72,7 +72,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
if (_IsInEditMode) if (_IsInEditMode)
{ {
// if we're in edit mode, // if we're in edit mode,
// - pre-populate the text box with the current keys // - prepopulate the text box with the current keys
// - reset the combo box with the current action // - reset the combo box with the current action
ProposedKeys(_CurrentKeys); ProposedKeys(_CurrentKeys);
ProposedAction(box_value(_CurrentAction)); ProposedAction(box_value(_CurrentAction));

View File

@ -1766,7 +1766,7 @@
</data> </data>
<data name="Profile_CreateUnfocusedAppearanceButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="Profile_CreateUnfocusedAppearanceButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>Create Appearance</value> <value>Create Appearance</value>
<comment>Name for a control which creates an the unfocused appearance settings for this profile. Text must match that of "Profile_AddAppearanceButton.Text".</comment> <comment>Name for a control which creates the unfocused appearance settings for this profile. Text must match that of "Profile_AddAppearanceButton.Text".</comment>
</data> </data>
<data name="Profile_CreateUnfocusedAppearanceButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="Profile_CreateUnfocusedAppearanceButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>Create an unfocused appearance for this profile. This will be the appearance of the profile when it is inactive.</value> <value>Create an unfocused appearance for this profile. This will be the appearance of the profile when it is inactive.</value>
@ -1774,7 +1774,7 @@
</data> </data>
<data name="Profile_DeleteUnfocusedAppearanceButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="Profile_DeleteUnfocusedAppearanceButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>Delete Appearance</value> <value>Delete Appearance</value>
<comment>Name for a control which deletes an the unfocused appearance settings for this profile.</comment> <comment>Name for a control which deletes the unfocused appearance settings for this profile.</comment>
</data> </data>
<data name="Profile_DeleteUnfocusedAppearanceButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="Profile_DeleteUnfocusedAppearanceButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>Delete the unfocused appearance for this profile.</value> <value>Delete the unfocused appearance for this profile.</value>

View File

@ -9,7 +9,7 @@ static constexpr std::wstring_view PACKAGED_PROFILE_ICON_PATH{ L"ms-appx:///Prof
static constexpr std::wstring_view PACKAGED_PROFILE_ICON_EXTENSION{ L".png" }; static constexpr std::wstring_view PACKAGED_PROFILE_ICON_EXTENSION{ L".png" };
// Method Description: // Method Description:
// - Helper function for creating a skeleton default profile with a pre-populated // - Helper function for creating a skeleton default profile with a prepopulated
// guid and name. // guid and name.
// Arguments: // Arguments:
// - name: the name of the new profile. // - name: the name of the new profile.

View File

@ -13,7 +13,7 @@ Licensed under the MIT license.
#define NOHELP #define NOHELP
#define NOCOMM #define NOCOMM
#include <unknwn.h> #include <Unknwn.h>
#include <ShObjIdl.h> #include <ShObjIdl.h>
// Manually include til after we include Windows.Foundation to give it winrt superpowers // Manually include til after we include Windows.Foundation to give it winrt superpowers
@ -29,7 +29,7 @@ Licensed under the MIT license.
#endif #endif
#include <wil/cppwinrt.h> #include <wil/cppwinrt.h>
#include <unknwn.h> #include <Unknwn.h>
#include <hstring.h> #include <hstring.h>
#include <WexTestClass.h> #include <WexTestClass.h>

View File

@ -13,7 +13,7 @@ Licensed under the MIT license.
#define NOHELP #define NOHELP
#define NOCOMM #define NOCOMM
#include <unknwn.h> #include <Unknwn.h>
#include <ShObjIdl.h> #include <ShObjIdl.h>
// Manually include til after we include Windows.Foundation to give it winrt superpowers // Manually include til after we include Windows.Foundation to give it winrt superpowers
@ -29,7 +29,7 @@ Licensed under the MIT license.
#endif #endif
#include <wil/cppwinrt.h> #include <wil/cppwinrt.h>
#include <unknwn.h> #include <Unknwn.h>
#include <hstring.h> #include <hstring.h>
#include <WexTestClass.h> #include <WexTestClass.h>

View File

@ -217,7 +217,7 @@ namespace SettingsModelUnitTests
static constexpr std::array testCases{ static constexpr std::array testCases{
// Base test. // Base test.
TestCase{ L"cmd.exe", 0 }, TestCase{ L"cmd.exe", 0 },
// SearchPathW() normalization + case insensitive matching. // SearchPathW() normalization + case-insensitive matching.
TestCase{ L"cmd.exe /a", 1 }, TestCase{ L"cmd.exe /a", 1 },
TestCase{ L"%SystemRoot%\\System32\\cmd.exe /A", 1 }, TestCase{ L"%SystemRoot%\\System32\\cmd.exe /A", 1 },
// Test that we don't pick the equally long but different "/A /B" variant. // Test that we don't pick the equally long but different "/A /B" variant.

View File

@ -48,7 +48,7 @@ Author(s):
#endif #endif
#include <wil/cppwinrt.h> #include <wil/cppwinrt.h>
#include <unknwn.h> #include <Unknwn.h>
#include <hstring.h> #include <hstring.h>
#include <WexTestClass.h> #include <WexTestClass.h>

View File

@ -23,7 +23,7 @@
#include <wil/cppwinrt.h> #include <wil/cppwinrt.h>
#include <unknwn.h> #include <Unknwn.h>
#include <hstring.h> #include <hstring.h>

View File

@ -528,7 +528,7 @@ void AppHost::AppTitleChanged(const winrt::Windows::Foundation::IInspectable& /*
_windowManager.UpdateActiveTabTitle(newTitle, _peasant); _windowManager.UpdateActiveTabTitle(newTitle, _peasant);
} }
// The terminal page is responsible for persisting it's own state, but it does // The terminal page is responsible for persisting its own state, but it does
// need to ask us where exactly on the screen the window is. // need to ask us where exactly on the screen the window is.
void AppHost::_HandleRequestLaunchPosition(const winrt::Windows::Foundation::IInspectable& /*sender*/, void AppHost::_HandleRequestLaunchPosition(const winrt::Windows::Foundation::IInspectable& /*sender*/,
winrt::TerminalApp::LaunchPositionRequest args) winrt::TerminalApp::LaunchPositionRequest args)

View File

@ -23,7 +23,7 @@ Abstract:
#define NOHELP #define NOHELP
#define NOCOMM #define NOCOMM
#include <unknwn.h> #include <Unknwn.h>
#include <windows.h> #include <windows.h>
#include <UIAutomation.h> #include <UIAutomation.h>

View File

@ -38,7 +38,7 @@ Author(s):
// need to be added to the LocalTests. // need to be added to the LocalTests.
// These however are okay, for some _basic_ winrt things: // These however are okay, for some _basic_ winrt things:
#include <unknwn.h> #include <Unknwn.h>
#include <hstring.h> #include <hstring.h>
#include <winrt/Windows.Foundation.h> #include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h> #include <winrt/Windows.Foundation.Collections.h>

View File

@ -275,7 +275,7 @@
<VcpkgOSTarget>windows</VcpkgOSTarget> <VcpkgOSTarget>windows</VcpkgOSTarget>
<VcpkgUseStatic>true</VcpkgUseStatic> <VcpkgUseStatic>true</VcpkgUseStatic>
<!-- BODGY - work around DD#2302065. vcpkg now validates target triplets, and is *case sensitive* --> <!-- BODGY - work around DD#2302065. vcpkg now validates target triplets, and is *case-sensitive* -->
<VcpkgPlatformTarget Condition="'$(Platform)'=='ARM64'">arm64</VcpkgPlatformTarget> <VcpkgPlatformTarget Condition="'$(Platform)'=='ARM64'">arm64</VcpkgPlatformTarget>
<VcpkgAdditionalInstallOptions>--x-feature=terminal</VcpkgAdditionalInstallOptions> <VcpkgAdditionalInstallOptions>--x-feature=terminal</VcpkgAdditionalInstallOptions>

View File

@ -244,7 +244,7 @@ std::unordered_map<std::wstring,
exeNameW)); exeNameW));
// Set the return size copied to the size given before we attempt to copy. // Set the return size copied to the size given before we attempt to copy.
// Then multiply by sizeof(wchar_t) due to a long standing bug that we must preserve for compatibility. // Then multiply by sizeof(wchar_t) due to a long-standing bug that we must preserve for compatibility.
// On failure, the API has historically given back this value. // On failure, the API has historically given back this value.
written = target.size() * sizeof(wchar_t); written = target.size() * sizeof(wchar_t);

View File

@ -507,7 +507,7 @@ void DimensionsTests::TestSetConsoleScreenBufferInfoEx()
// NOTE: Ignore cursor position. It can change or not depending on the word wrap mode and the API set doesn't do anything. // NOTE: Ignore cursor position. It can change or not depending on the word wrap mode and the API set doesn't do anything.
// BUG: This is a long standing bug in the console which some of our customers have documented on the MSDN page. // BUG: This is a long-standing bug in the console which some of our customers have documented on the MSDN page.
// The console driver (\minkernel\console\client\getset.c) is treating the viewport as an "exclusive" rectangle where it is actually "inclusive" // The console driver (\minkernel\console\client\getset.c) is treating the viewport as an "exclusive" rectangle where it is actually "inclusive"
// of its edges. This means when it does a width calculation, it has an off-by-one error and will shrink the window in height and width by 1 each // of its edges. This means when it does a width calculation, it has an off-by-one error and will shrink the window in height and width by 1 each
// trip around. For example, normally we do viewport width as Right-Left+1, and the driver does it as Right-Left. // trip around. For example, normally we do viewport width as Right-Left+1, and the driver does it as Right-Left.

View File

@ -1182,7 +1182,7 @@ void DbcsTests::TestDbcsBisect()
// NOTE: This is a change in behavior from the legacy behavior. // NOTE: This is a change in behavior from the legacy behavior.
// V1 console would allow a lead byte to be stored in the final cell and then display it improperly. // V1 console would allow a lead byte to be stored in the final cell and then display it improperly.
// It would also allow this data to be read back. // It would also allow this data to be read back.
// I believe this was a long standing bug because every other API entry fastidiously checked that it wasn't possible to // I believe this was a long-standing bug because every other API entry fastidiously checked that it wasn't possible to
// "bisect" a cell and all sorts of portions of the rest of the console code try to enforce that bisects across lines can't happen. // "bisect" a cell and all sorts of portions of the rest of the console code try to enforce that bisects across lines can't happen.
// For the most recent revision of the V2 console (approx November 2018), we're trying to make sure that the TextBuffer's internal state // For the most recent revision of the V2 console (approx November 2018), we're trying to make sure that the TextBuffer's internal state
// is always correct at insert (instead of correcting it on every read). // is always correct at insert (instead of correcting it on every read).

View File

@ -87,7 +87,7 @@ class AliasTests
L"pipe $1$boutput $2=pipe one|output two%," L"pipe $1$boutput $2=pipe one|output two%,"
L"PIPE $1$BOUTPUT $2=PIPE one|OUTPUT two%," L"PIPE $1$BOUTPUT $2=PIPE one|OUTPUT two%,"
L"run$tmultiple$tcommands=run%multiple%commands%," L"run$tmultiple$tcommands=run%multiple%commands%,"
L"MyMoney$$$$$$App=MyMoney$$$$$$App%," // this is a long standing bug, $$ isn't replaced with $. L"MyMoney$$$$$$App=MyMoney$$$$$$App%," // this is a long-standing bug, $$ isn't replaced with $.
L"Invalid$Apple=Invalid$Apple%," // An invalid macro $A is copied through L"Invalid$Apple=Invalid$Apple%," // An invalid macro $A is copied through
L"IEndInA$=IEndInA$%," // Ending in a $ is copied through. L"IEndInA$=IEndInA$%," // Ending in a $ is copied through.
L"megamix $7$Gfun $1 $b test $9 $L $2.txt$tall$$the$$things $*$tat$g$gonce.log=megamix seven>fun one | test nine < two.txt%all$$the$$things one two three four five six seven eight nine ten eleven twelve%at>>once.log%" L"megamix $7$Gfun $1 $b test $9 $L $2.txt$tall$$the$$things $*$tat$g$gonce.log=megamix seven>fun one | test nine < two.txt%all$$the$$things one two three four five six seven eight nine ten eleven twelve%at>>once.log%"

View File

@ -90,7 +90,7 @@ void _LoadString(const UINT id, std::wstring& out)
// - wLangId - Language ID of resources that we should retrieve. // - wLangId - Language ID of resources that we should retrieve.
UINT s_LoadStringEx(_In_ HINSTANCE hModule, _In_ UINT wID, _Out_writes_(cchBufferMax) LPWSTR lpBuffer, _In_ UINT cchBufferMax, _In_ WORD wLangId) UINT s_LoadStringEx(_In_ HINSTANCE hModule, _In_ UINT wID, _Out_writes_(cchBufferMax) LPWSTR lpBuffer, _In_ UINT cchBufferMax, _In_ WORD wLangId)
{ {
// Make sure the parms are valid. // Make sure the params are valid.
if (lpBuffer == nullptr) if (lpBuffer == nullptr)
{ {
return 0; return 0;

View File

@ -78,7 +78,7 @@ namespace til // Terminal Implementation Library. Also: "Today I Learned"
#endif #endif
// Method Description: // Method Description:
// - Converting constructor for any other color structure type containing integral R, G, B, A (case sensitive.) // - Converting constructor for any other color structure type containing integral R, G, B, A (case-sensitive.)
// Notes: // Notes:
// - This and all below conversions make use of std::enable_if and a default parameter to disambiguate themselves. // - This and all below conversions make use of std::enable_if and a default parameter to disambiguate themselves.
// enable_if will result in an <error-type> if the constraint within it is not met, which will make this // enable_if will result in an <error-type> if the constraint within it is not met, which will make this
@ -93,7 +93,7 @@ namespace til // Terminal Implementation Library. Also: "Today I Learned"
} }
// Method Description: // Method Description:
// - Converting constructor for any other color structure type containing integral r, g, b, a (case sensitive.) // - Converting constructor for any other color structure type containing integral r, g, b, a (case-sensitive.)
template<typename TOther> template<typename TOther>
constexpr color(const TOther& other, std::enable_if_t<std::is_integral_v<decltype(std::declval<TOther>().r)> && std::is_integral_v<decltype(std::declval<TOther>().a)>, int> /*sentinel*/ = 0) : constexpr color(const TOther& other, std::enable_if_t<std::is_integral_v<decltype(std::declval<TOther>().r)> && std::is_integral_v<decltype(std::declval<TOther>().a)>, int> /*sentinel*/ = 0) :
r{ static_cast<uint8_t>(other.r) }, r{ static_cast<uint8_t>(other.r) },
@ -104,7 +104,7 @@ namespace til // Terminal Implementation Library. Also: "Today I Learned"
} }
// Method Description: // Method Description:
// - Converting constructor for any other color structure type containing floating-point R, G, B, A (case sensitive.) // - Converting constructor for any other color structure type containing floating-point R, G, B, A (case-sensitive.)
template<typename TOther> template<typename TOther>
constexpr color(const TOther& other, std::enable_if_t<std::is_floating_point_v<decltype(std::declval<TOther>().R)> && std::is_floating_point_v<decltype(std::declval<TOther>().A)>, float> /*sentinel*/ = 1.0f) : constexpr color(const TOther& other, std::enable_if_t<std::is_floating_point_v<decltype(std::declval<TOther>().R)> && std::is_floating_point_v<decltype(std::declval<TOther>().A)>, float> /*sentinel*/ = 1.0f) :
r{ static_cast<uint8_t>(other.R * 255.0f) }, r{ static_cast<uint8_t>(other.R * 255.0f) },
@ -115,7 +115,7 @@ namespace til // Terminal Implementation Library. Also: "Today I Learned"
} }
// Method Description: // Method Description:
// - Converting constructor for any other color structure type containing floating-point r, g, b, a (case sensitive.) // - Converting constructor for any other color structure type containing floating-point r, g, b, a (case-sensitive.)
template<typename TOther> template<typename TOther>
constexpr color(const TOther& other, std::enable_if_t<std::is_floating_point_v<decltype(std::declval<TOther>().r)> && std::is_floating_point_v<decltype(std::declval<TOther>().a)>, float> /*sentinel*/ = 1.0f) : constexpr color(const TOther& other, std::enable_if_t<std::is_floating_point_v<decltype(std::declval<TOther>().r)> && std::is_floating_point_v<decltype(std::declval<TOther>().a)>, float> /*sentinel*/ = 1.0f) :
r{ static_cast<uint8_t>(other.r * 255.0f) }, r{ static_cast<uint8_t>(other.r * 255.0f) },

View File

@ -19,7 +19,7 @@
#include <condrv.h> #include <condrv.h>
#else #else
#include <Windows.h> #include <Windows.h>
#include <unknwn.h> #include <Unknwn.h>
#endif #endif
#include <dxgi1_2.h> #include <dxgi1_2.h>

View File

@ -994,7 +994,7 @@ bool OutputStateMachineEngine::_ParseHyperlink(const std::wstring_view string,
// - OSC 10, 11, 12 ; spec ST // - OSC 10, 11, 12 ; spec ST
// spec: The colors are specified by name or RGB specification as per XParseColor // spec: The colors are specified by name or RGB specification as per XParseColor
// //
// It's possible to have multiple "spec", which by design equals to a series of OSC command // It's possible to have multiple "spec", which by design equals a series of OSC command
// with accumulated Ps. For example "OSC 10;color1;color2" is effectively an "OSC 10;color1" // with accumulated Ps. For example "OSC 10;color1;color2" is effectively an "OSC 10;color1"
// and an "OSC 11;color2". // and an "OSC 11;color2".
// //

View File

@ -194,7 +194,7 @@ try
{ {
auto prefix = std::wstring(string.substr(0, 4)); auto prefix = std::wstring(string.substr(0, 4));
// The "rgb:" indicator should be case insensitive. To prevent possible issues under // The "rgb:" indicator should be case-insensitive. To prevent possible issues under
// different locales, transform only ASCII range latin characters. // different locales, transform only ASCII range latin characters.
std::transform(prefix.begin(), prefix.end(), prefix.begin(), [](const auto x) { std::transform(prefix.begin(), prefix.end(), prefix.begin(), [](const auto x) {
return x >= L'A' && x <= L'Z' ? static_cast<wchar_t>(std::towlower(x)) : x; return x >= L'A' && x <= L'Z' ? static_cast<wchar_t>(std::towlower(x)) : x;

View File

@ -466,7 +466,7 @@ Viewport Viewport::ToOrigin() const noexcept
// Arguments: // Arguments:
// - other: the viewport to convert to this coordinate space // - other: the viewport to convert to this coordinate space
// Return Value: // Return Value:
// - the input viewport in a the coordinate space with origin at (this.top, this.left) // - the input viewport in the coordinate space with origin at (this.top, this.left)
[[nodiscard]] Viewport Viewport::ConvertToOrigin(const Viewport& other) const noexcept [[nodiscard]] Viewport Viewport::ConvertToOrigin(const Viewport& other) const noexcept
{ {
auto returnVal = other; auto returnVal = other;
@ -483,7 +483,7 @@ Viewport Viewport::ToOrigin() const noexcept
// Arguments: // Arguments:
// - other: the viewport to convert out of this coordinate space // - other: the viewport to convert out of this coordinate space
// Return Value: // Return Value:
// - the input viewport in a the coordinate space with origin at (0, 0) // - the input viewport in the coordinate space with origin at (0, 0)
[[nodiscard]] Viewport Viewport::ConvertFromOrigin(const Viewport& other) const noexcept [[nodiscard]] Viewport Viewport::ConvertFromOrigin(const Viewport& other) const noexcept
{ {
auto returnVal = other; auto returnVal = other;

View File

@ -5,7 +5,7 @@
# (we use the null coalescing operator) # (we use the null coalescing operator)
################################################################################ ################################################################################
# This script generates the an array suitable for replacing the body of # This script generates an array suitable for replacing the body of
# src/types/CodepointWidthDetector.cpp from a Unicode UCD XML document[1] # src/types/CodepointWidthDetector.cpp from a Unicode UCD XML document[1]
# compliant with UAX#42[2]. # compliant with UAX#42[2].
# #

View File

@ -2,7 +2,7 @@
# Licensed under the MIT license. # Licensed under the MIT license.
################################################################################ ################################################################################
# This script generates the an array of UiaTextRange tests suitable for replacing the body of # This script generates an array of UiaTextRange tests suitable for replacing the body of
# src\interactivity\win32\ut_interactivity_win32\UiaTextRangeTests.cpp TEST_METHOD(GeneratedMovementTests) # src\interactivity\win32\ut_interactivity_win32\UiaTextRangeTests.cpp TEST_METHOD(GeneratedMovementTests)
# #
# See tools\TestTableWriter\README.md for more details on how to use this script. # See tools\TestTableWriter\README.md for more details on how to use this script.