From 21a67eb32a980116110bf1ead1f45e37d0c40f7d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 9 Mar 2024 22:09:34 -0500 Subject: [PATCH] Add check-spelling --- .github/actions/spelling/README.md | 18 + .github/actions/spelling/advice.md | 31 + .github/actions/spelling/allow.txt | 5 + .../actions/spelling/block-delimiters.list | 19 + .github/actions/spelling/candidate.patterns | 675 ++++++ .github/actions/spelling/excludes.txt | 98 + .github/actions/spelling/expect.txt | 1915 +++++++++++++++++ .../actions/spelling/line_forbidden.patterns | 163 ++ .github/actions/spelling/patterns.txt | 135 ++ .github/actions/spelling/reject.txt | 11 + .github/workflows/spelling.yml | 148 ++ 11 files changed, 3218 insertions(+) create mode 100644 .github/actions/spelling/README.md create mode 100644 .github/actions/spelling/advice.md create mode 100644 .github/actions/spelling/allow.txt create mode 100644 .github/actions/spelling/block-delimiters.list create mode 100644 .github/actions/spelling/candidate.patterns create mode 100644 .github/actions/spelling/excludes.txt create mode 100644 .github/actions/spelling/expect.txt create mode 100644 .github/actions/spelling/line_forbidden.patterns create mode 100644 .github/actions/spelling/patterns.txt create mode 100644 .github/actions/spelling/reject.txt create mode 100644 .github/workflows/spelling.yml diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md new file mode 100644 index 0000000000..da6f2e9d9b --- /dev/null +++ b/.github/actions/spelling/README.md @@ -0,0 +1,18 @@ +# check-spelling/check-spelling configuration + +File | Purpose | Format | Info +-|-|-|- +[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary) +[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow) +[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject) +[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes) +[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only) +[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) +[candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns) +[line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) +[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect) +[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice) +[block-delimiters.list](block-delimiters.list) | Define block begin/end markers to ignore lines of text | line with _literal string_ for **start** followed by line with _literal string_ for **end** | [block ignore](https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Block-Ignore#status) + +Note: you can replace any of these files with a directory by the same name (minus the suffix) +and then include multiple files inside that directory (with that suffix) to merge multiple files together. diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md new file mode 100644 index 0000000000..a32d1090aa --- /dev/null +++ b/.github/actions/spelling/advice.md @@ -0,0 +1,31 @@ + +
If the flagged items are :exploding_head: false positives + +If items relate to a ... +* binary file (or some other file you wouldn't want to check at all). + + Please add a file path to the `excludes.txt` file matching the containing file. + + File paths are Perl 5 Regular Expressions - you can [test]( +https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files. + + `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md]( +../tree/HEAD/README.md) (on whichever branch you're using). + +* well-formed pattern. + + If you can write a [pattern]( +https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns +) that would match it, + try adding it to the `patterns.txt` file. + + Patterns are Perl 5 Regular Expressions - you can [test]( +https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines. + + Note that patterns can't match multiline strings. + +
+ + +:steam_locomotive: If you're seeing this message and your PR is from a branch that doesn't have check-spelling, +please merge to your PR's base branch to get the version configured for your repository. diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt new file mode 100644 index 0000000000..61567618d8 --- /dev/null +++ b/.github/actions/spelling/allow.txt @@ -0,0 +1,5 @@ +github +https +ssh +ubuntu +workarounds diff --git a/.github/actions/spelling/block-delimiters.list b/.github/actions/spelling/block-delimiters.list new file mode 100644 index 0000000000..17a1558fd0 --- /dev/null +++ b/.github/actions/spelling/block-delimiters.list @@ -0,0 +1,19 @@ +# Public Keys +-----BEGIN PUBLIC KEY----- +-----END PUBLIC KEY----- + +# RSA Private Key +-----BEGIN RSA PRIVATE KEY----- +-----END RSA PRIVATE KEY----- + +# GPG Public Key +-----BEGIN PGP PUBLIC KEY BLOCK----- +-----END PGP PUBLIC KEY BLOCK----- + +# Certificates +-----BEGIN CERTIFICATE----- +-----END CERTIFICATE----- + +# Credits +who contributed +, diff --git a/.github/actions/spelling/candidate.patterns b/.github/actions/spelling/candidate.patterns new file mode 100644 index 0000000000..9f44b1a22e --- /dev/null +++ b/.github/actions/spelling/candidate.patterns @@ -0,0 +1,675 @@ +# marker to ignore all code on line +^.*/\* #no-spell-check-line \*/.*$ +# marker to ignore all code on line +^.*\bno-spell-check(?:-line|)(?:\s.*|)$ + +# https://cspell.org/configuration/document-settings/ +# cspell inline +^.*\b[Cc][Ss][Pp][Ee][Ll]{2}:\s*[Dd][Ii][Ss][Aa][Bb][Ll][Ee]-[Ll][Ii][Nn][Ee]\b + +# patch hunk comments +^@@ -\d+(?:,\d+|) \+\d+(?:,\d+|) @@ .* +# git index header +index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40} + +# file permissions +['"`\s][-bcdLlpsw](?:[-r][-w][-Ssx]){2}[-r][-w][-SsTtx]\+?['"`\s] + +# css url wrappings +\burl\([^)]+\) + +# cid urls +(['"])cid:.*?\g{-1} + +# data url in parens +\(data:(?:[^) ][^)]*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})[^)]*\) +# data url in quotes +([`'"])data:(?:[^ `'"].*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1} +# data url +\bdata:[-a-zA-Z=;:/0-9+]*,\S* + +# https/http/file urls +(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|] + +# mailto urls +mailto:[-a-zA-Z=;:/?%&0-9+@._]{3,} + +# magnet urls +magnet:[?=:\w]+ + +# magnet urls +"magnet:[^"]+" + +# obs: +"obs:[^"]*" + +# The `\b` here means a break, it's the fancy way to handle urls, but it makes things harder to read +# In this examples content, I'm using a number of different ways to match things to show various approaches +# asciinema +\basciinema\.org/a/[0-9a-zA-Z]+ + +# asciinema v2 +^\[\d+\.\d+, "[io]", ".*"\]$ + +# apple +\bdeveloper\.apple\.com/[-\w?=/]+ +# Apple music +\bembed\.music\.apple\.com/fr/playlist/usr-share/[-\w.]+ + +# appveyor api +\bci\.appveyor\.com/api/projects/status/[0-9a-z]+ +# appveyor project +\bci\.appveyor\.com/project/(?:[^/\s"]*/){2}builds?/\d+/job/[0-9a-z]+ + +# Amazon + +# Amazon +\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|) +# AWS S3 +\b\w*\.s3[^.]*\.amazonaws\.com/[-\w/&#%_?:=]* +# AWS execute-api +\b[0-9a-z]{10}\.execute-api\.[-0-9a-z]+\.amazonaws\.com\b +# AWS ELB +\b\w+\.[-0-9a-z]+\.elb\.amazonaws\.com\b +# AWS SNS +\bsns\.[-0-9a-z]+.amazonaws\.com/[-\w/&#%_?:=]* +# AWS VPC +vpc-\w+ + +# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there +# YouTube url +\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]* +# YouTube music +\bmusic\.youtube\.com/youtubei/v1/browse(?:[?&]\w+=[-a-zA-Z0-9?&=_]*) +# YouTube tag +<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"] +# YouTube image +\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]* +# Google Accounts +\baccounts.google.com/[-_/?=.:;+%&0-9a-zA-Z]* +# Google Analytics +\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]* +# Google APIs +\bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w+|&]+ +# Google Storage +\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|) +# Google Calendar +\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+ +\w+\@group\.calendar\.google\.com\b +# Google DataStudio +\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|) +# The leading `/` here is as opposed to the `\b` above +# ... a short way to match `https://` or `http://` since most urls have one of those prefixes +# Google Docs +/docs\.google\.com/[a-z]+/(?:ccc\?key=\w+|(?:u/\d+|d/(?:e/|)[0-9a-zA-Z_-]+/)?(?:edit\?[-\w=#.]*|/\?[\w=&]*|)) +# Google Drive +\bdrive\.google\.com/(?:file/d/|open)[-0-9a-zA-Z_?=]* +# Google Groups +\bgroups\.google\.com(?:/[a-z]+/(?:#!|)[^/\s"]+)* +# Google Maps +\bmaps\.google\.com/maps\?[\w&;=]* +# Google themes +themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+. +# Google CDN +\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]* +# Goo.gl +/goo\.gl/[a-zA-Z0-9]+ +# Google Chrome Store +\bchrome\.google\.com/webstore/detail/[-\w]*(?:/\w*|) +# Google Books +\bgoogle\.(?:\w{2,4})/books(?:/\w+)*\?[-\w\d=&#.]* +# Google Fonts +\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]* +# Google Forms +\bforms\.gle/\w+ +# Google Scholar +\bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+ +# Google Colab Research Drive +\bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]* + +# GitHub SHAs (api) +\bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b +# GitHub SHAs (markdown) +(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|) +# GitHub SHAs +\bgithub\.com(?:/[^/\s"]+){2}[@#][0-9a-f]+\b +# GitHub SHA refs +\[([0-9a-f]+)\]\(https://(?:www\.|)github.com/[-\w]+/[-\w]+/commit/\g{-1}[0-9a-f]* +# GitHub wiki +\bgithub\.com/(?:[^/]+/){2}wiki/(?:(?:[^/]+/|)_history|[^/]+(?:/_compare|)/[0-9a-f.]{40,})\b +# githubusercontent +/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]* +# githubassets +\bgithubassets.com/[0-9a-f]+(?:[-/\w.]+) +# gist github +\bgist\.github\.com/[^/\s"]+/[0-9a-f]+ +# git.io +\bgit\.io/[0-9a-zA-Z]+ +# GitHub JSON +"node_id": "[-a-zA-Z=;:/0-9+_]*" +# Contributor +\[[^\]]+\]\(https://github\.com/[^/\s"]+/?\) +# GHSA +GHSA(?:-[0-9a-z]{4}){3} + +# GitHub actions +\buses:\s+[-\w.]+/[-\w./]+@[-\w.]+ + +# GitLab commit +\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b +# GitLab merge requests +\bgitlab\.[^/\s"]*/\S+/\S+/-/merge_requests/\d+/diffs#[0-9a-f]{40}\b +# GitLab uploads +\bgitlab\.[^/\s"]*/uploads/[-a-zA-Z=;:/0-9+]* +# GitLab commits +\bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b + +# binance +accounts\.binance\.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]* + +# bitbucket diff +\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}diff(?:stat|)(?:/[^/\s"]+){2}:[0-9a-f]+ +# bitbucket repositories commits +\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}commits?/[0-9a-f]+ +# bitbucket commits +\bbitbucket\.org/(?:[^/\s"]+/){2}commits?/[0-9a-f]+ + +# bit.ly +\bbit\.ly/\w+ + +# bitrise +\bapp\.bitrise\.io/app/[0-9a-f]*/[\w.?=&]* + +# bootstrapcdn.com +\bbootstrapcdn\.com/[-./\w]+ + +# cdn.cloudflare.com +\bcdnjs\.cloudflare\.com/[./\w]+ + +# circleci +\bcircleci\.com/gh(?:/[^/\s"]+){1,5}.[a-z]+\?[-0-9a-zA-Z=&]+ + +# gitter +\bgitter\.im(?:/[^/\s"]+){2}\?at=[0-9a-f]+ + +# gravatar +\bgravatar\.com/avatar/[0-9a-f]+ + +# ibm +[a-z.]*ibm\.com/[-_#=:%!?~.\\/\d\w]* + +# imgur +\bimgur\.com/[^.]+ + +# Internet Archive +\barchive\.org/web/\d+/(?:[-\w.?,'/\\+&%$#_:]*) + +# discord +/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,} + +# Disqus +\bdisqus\.com/[-\w/%.()!?&=_]* + +# medium link +\blink\.medium\.com/[a-zA-Z0-9]+ +# medium +\bmedium\.com/@?[^/\s"]+/[-\w]+ + +# microsoft +\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]* +# powerbi +\bapp\.powerbi\.com/reportEmbed/[^"' ]* +# vs devops +\bvisualstudio.com(?::443|)/[-\w/?=%&.]* +# microsoft store +\bmicrosoft\.com/store/apps/\w+ + +# mvnrepository.com +\bmvnrepository\.com/[-0-9a-z./]+ + +# now.sh +/[0-9a-z-.]+\.now\.sh\b + +# oracle +\bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]* + +# chromatic.com +/\S+.chromatic.com\S*[")] + +# codacy +\bapi\.codacy\.com/project/badge/Grade/[0-9a-f]+ + +# compai +\bcompai\.pub/v1/png/[0-9a-f]+ + +# mailgun api +\.api\.mailgun\.net/v3/domains/[0-9a-z]+\.mailgun.org/messages/[0-9a-zA-Z=@]* +# mailgun +\b[0-9a-z]+.mailgun.org + +# /message-id/ +/message-id/[-\w@./%]+ + +# Reddit +\breddit\.com/r/[/\w_]* + +# requestb.in +\brequestb\.in/[0-9a-z]+ + +# sched +\b[a-z0-9]+\.sched\.com\b + +# Slack url +slack://[a-zA-Z0-9?&=]+ +# Slack +\bslack\.com/[-0-9a-zA-Z/_~?&=.]* +# Slack edge +\bslack-edge\.com/[-a-zA-Z0-9?&=%./]+ +# Slack images +\bslack-imgs\.com/[-a-zA-Z0-9?&=%.]+ + +# shields.io +\bshields\.io/[-\w/%?=&.:+;,]* + +# stackexchange -- https://stackexchange.com/feeds/sites +\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/) + +# Sentry +[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b + +# Twitter markdown +\[@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\) +# Twitter hashtag +\btwitter\.com/hashtag/[\w?_=&]* +# Twitter status +\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|) +# Twitter profile images +\btwimg\.com/profile_images/[_\w./]* +# Twitter media +\btwimg\.com/media/[-_\w./?=]* +# Twitter link shortened +\bt\.co/\w+ + +# facebook +\bfburl\.com/[0-9a-z_]+ +# facebook CDN +\bfbcdn\.net/[\w/.,]* +# facebook watch +\bfb\.watch/[0-9A-Za-z]+ + +# dropbox +\bdropbox\.com/sh?/[^/\s"]+/[-0-9A-Za-z_.%?=&;]+ + +# ipfs protocol +ipfs://[0-9a-zA-Z]{3,} +# ipfs url +/ipfs/[0-9a-zA-Z]{3,} + +# w3 +\bw3\.org/[-0-9a-zA-Z/#.]+ + +# loom +\bloom\.com/embed/[0-9a-f]+ + +# regex101 +\bregex101\.com/r/[^/\s"]+/\d+ + +# figma +\bfigma\.com/file(?:/[0-9a-zA-Z]+/)+ + +# freecodecamp.org +\bfreecodecamp\.org/[-\w/.]+ + +# image.tmdb.org +\bimage\.tmdb\.org/[/\w.]+ + +# mermaid +\bmermaid\.ink/img/[-\w]+|\bmermaid-js\.github\.io/mermaid-live-editor/#/edit/[-\w]+ + +# Wikipedia +\ben\.wikipedia\.org/wiki/[-\w%.#]+ + +# gitweb +[^"\s]+/gitweb/\S+;h=[0-9a-f]+ + +# HyperKitty lists +/archives/list/[^@/]+@[^/\s"]*/message/[^/\s"]*/ + +# lists +/thread\.html/[^"\s]+ + +# list-management +\blist-manage\.com/subscribe(?:[?&](?:u|id)=[0-9a-f]+)+ + +# kubectl.kubernetes.io/last-applied-configuration +"kubectl.kubernetes.io/last-applied-configuration": ".*" + +# pgp +\bgnupg\.net/pks/lookup[?&=0-9a-zA-Z]* + +# Spotify +\bopen\.spotify\.com/embed/playlist/\w+ + +# Mastodon +\bmastodon\.[-a-z.]*/(?:media/|@)[?&=0-9a-zA-Z_]* + +# scastie +\bscastie\.scala-lang\.org/[^/]+/\w+ + +# images.unsplash.com +\bimages\.unsplash\.com/(?:(?:flagged|reserve)/|)[-\w./%?=%&.;]+ + +# pastebin +\bpastebin\.com/[\w/]+ + +# heroku +\b\w+\.heroku\.com/source/archive/\w+ + +# quip +\b\w+\.quip\.com/\w+(?:(?:#|/issues/)\w+)? + +# badgen.net +\bbadgen\.net/badge/[^")\]'\s]+ + +# statuspage.io +\w+\.statuspage\.io\b + +# media.giphy.com +\bmedia\.giphy\.com/media/[^/]+/[\w.?&=]+ + +# tinyurl +\btinyurl\.com/\w+ + +# codepen +\bcodepen\.io/[\w/]+ + +# registry.npmjs.org +\bregistry\.npmjs\.org/(?:@[^/"']+/|)[^/"']+/-/[-\w@.]+ + +# getopts +\bgetopts\s+(?:"[^"]+"|'[^']+') + +# ANSI color codes +(?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m + +# URL escaped characters +%[0-9A-F][A-F](?=[A-Za-z]) +# lower URL escaped characters +#%[0-9a-f][a-f](?=[a-z]{2,}) +# IPv6 +\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b +# c99 hex digits (not the full format, just one I've seen) +0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP] +# Punycode +\bxn--[-0-9a-z]+ +# sha +sha\d+:[0-9]*[a-f]{3,}[0-9a-f]* +# sha-... -- uses a fancy capture +(\\?['"]|")[0-9a-f]{40,}\g{-1} +# hex runs +\b[0-9a-fA-F]{16,}\b +# hex in url queries +=[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?& +# ssh +(?:ssh-\S+|-nistp256) [-a-zA-Z=;:/0-9+]{12,} + +# PGP +\b(?:[0-9A-F]{4} ){9}[0-9A-F]{4}\b +# GPG keys +\b(?:[0-9A-F]{4} ){5}(?: [0-9A-F]{4}){5}\b +# Well known gpg keys +.well-known/openpgpkey/[\w./]+ + +# pki +-----BEGIN.*-----END + +# uuid: +\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: +(?:[\\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=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1} + +# https://www.gnu.org/software/groff/manual/groff.html +# man troff content +\\f[BCIPR] +# '/" +\\\([ad]q + +# .desktop mime types +^MimeTypes?=.*$ +# .desktop localized entries +^[A-Z][a-z]+\[[a-z]+\]=.*$ +# Localized .desktop content +Name\[[^\]]+\]=.* + +# IServiceProvider / isAThing +\b(?:I|isA)(?=(?:[A-Z][a-z]{2,})+(?:[A-Z]|\b)) + +# crypt +(['"])\$2[ayb]\$.{56}\g{-1} + +# scrypt / argon +\$(?:scrypt|argon\d+[di]*)\$\S+ + +# go.sum +\bh1:\S+ + +# scala modules +("[^"]+"\s*%%?\s*){2,3}"[^"]+" + +# Input to GitHub JSON +content: (['"])[-a-zA-Z=;:/0-9+]*=\g{-1} + +# This does not cover multiline strings, if your repository has them, +# you'll want to remove the `(?=.*?")` suffix. +# The `(?=.*?")` suffix should limit the false positives rate +# 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)(?=.*?['"]) + +# Alternative printf +# %s +%(?:s(?=[a-z]{2,}))(?!%)(?=[_a-zA-Z]+(?!%)\b)(?=.*?['"]) + +# 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 +(?|m([|!/@#,;']).*?\g{-1}) + +# perl qr regex +(?|\(.*?\)|([|!/@#,;']).*?\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 +regexp?\.MustCompile\(`[^`]*`\) + +# regex choice +\(\?:[^)]+\|[^)]+\) + +# proto +^\s*(\w+)\s\g{-1} = + +# sed regular expressions +sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2} + +# node packages +(["'])@[^/'" ]+/[^/'" ]+\g{-1} + +# go install +go install(?:\s+[a-z]+\.[-@\w/.]+)+ + +# jetbrains schema https://youtrack.jetbrains.com/issue/RSRP-489571 +urn:shemas-jetbrains-com + +# kubernetes pod status lists +# https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase +\w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+ + +# kubectl - pods in CrashLoopBackOff +\w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+ + +# kubernetes object suffix +-[0-9a-f]{10}-\w{5}\s + +# posthog secrets +([`'"])phc_[^"',]+\g{-1} + +# xcode + +# xcodeproject scenes +(?:Controller|destination|ID|id)="\w{3}-\w{2}-\w{3}" + +# xcode api botches +customObjectInstantitationMethod + +# configure flags +#.* \| --\w{2,}.*?(?=\w+\s\w+) + +# font awesome classes +\.fa-[-a-z0-9]+ + +# bearer auth +(['"])[Bb]ear[e][r] .*?\g{-1} + +# bearer auth +\b[Bb]ear[e][r]:? [-a-zA-Z=;:/0-9+.]+ + +# basic auth +(['"])[Bb]asic [-a-zA-Z=;:/0-9+]{3,}\g{-1} + +# base64 encoded content +#([`'"])[-a-zA-Z=;:/0-9+]{3,}=\g{-1} +# base64 encoded content in xml/sgml +>[-a-zA-Z=;:/0-9+]{3,}== 0.0.22) +\\\w{2,}\{ + +# American Mathematical Society (AMS) / Doxygen +TeX/AMS + +# File extensions +\*\.[+\w]+, + +# eslint +"varsIgnorePattern": ".+" + +# Windows short paths +[/\\][^/\\]{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 +# printf markers +#(?v# +#(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_])) + +# Compiler flags (Unix, Java/Scala) +# Use if you have things like `-Pdocker` and want to treat them as `docker` +#(?:^|[\t ,>"'`=(])-(?:(?:J-|)[DPWXY]|[Llf])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) + +# Compiler flags (Windows / PowerShell) +# This is a subset of the more general compiler flags pattern. +# It avoids matching `-Path` to prevent it from being treated as `ath` +#(?:^|[\t ,"'`=(])-(?:[DPL](?=[A-Z]{2,})|[WXYlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})) + +# Compiler flags (linker) +,-B + +# libraries +\blib(?!rar(?:ies|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 +\b(?:\\n|)curl(?:\.exe|)(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)* +# set arguments +\b(?:bash|sh|set)(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)* +# tar arguments +\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... +\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b +# macOS temp folders +/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/ +# github runner temp folders +/home/runner/work/_temp/[-_/a-z0-9]+ diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt new file mode 100644 index 0000000000..472720609b --- /dev/null +++ b/.github/actions/spelling/excludes.txt @@ -0,0 +1,98 @@ +# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes +(?:^|/)(?i)COPYRIGHT +(?:^|/)(?i)LICEN[CS]E +(?:^|/)3rdparty/ +(?:^|/)__init__\.pyi$ +(?:^|/)go\.sum$ +(?:^|/)package(?:-lock|)\.json$ +(?:^|/)Pipfile$ +(?:^|/)py\.typed$ +(?:^|/)pyproject.toml +(?:^|/)requirements(?:-dev|-doc|-test|)\.txt$ +(?:^|/)vendor/ +\.a$ +\.ai$ +\.all-contributorsrc$ +\.avi$ +\.bmp$ +\.bz2$ +\.cer$ +\.class$ +\.coveragerc$ +\.crl$ +\.crt$ +\.csr$ +\.dll$ +\.docx?$ +\.drawio$ +\.DS_Store$ +\.eot$ +\.eps$ +\.exe$ +\.gif$ +\.git-blame-ignore-revs$ +\.gitattributes$ +\.gitkeep$ +\.graffle$ +\.gz$ +\.icns$ +\.ico$ +\.ipynb$ +\.jar$ +\.jks$ +\.jpe?g$ +\.key$ +\.lib$ +\.lock$ +\.map$ +\.min\.. +\.mo$ +\.mod$ +\.mp[34]$ +\.o$ +\.ocf$ +\.otf$ +\.p12$ +\.parquet$ +\.pdf$ +\.pem$ +\.pfx$ +\.png$ +\.psd$ +\.pyc$ +\.pylintrc$ +\.qm$ +\.s$ +\.sig$ +\.so$ +\.svgz?$ +\.sys$ +\.tar$ +\.tgz$ +\.tiff?$ +\.ttf$ +\.wav$ +\.webm$ +\.webp$ +\.woff2?$ +\.xcf$ +\.xlsx?$ +\.xpm$ +\.xz$ +\.zip$ +^\.github/actions/spelling/ +^\Q.github/config.yml\E$ +^\Q.github/workflows/spelling.yml\E$ +^\Qdoc/en/example/customdirectory/pytest.ini\E$ +^\Qdoc/en/example/nonpython/__init__.py\E$ +^\Qsrc/_pytest/_py/__init__.py\E$ +^\Qtesting/example_scripts/__init__.py\E$ +^\Qtesting/example_scripts/collect/package_infinite_recursion/tests/__init__.py\E$ +^\Qtesting/example_scripts/customdirectory/pytest.ini\E$ +^\Qtesting/example_scripts/fixtures/custom_item/foo/__init__.py\E$ +^\Qtesting/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/__init__.py\E$ +^\Qtesting/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/__init__.py\E$ +^\Qtesting/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/__init__.py\E$ +^\Qtesting/example_scripts/marks/marks_considered_keywords/conftest.py\E$ +^AUTHORS$ +ignore$ diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt new file mode 100644 index 0000000000..4bbcba5300 --- /dev/null +++ b/.github/actions/spelling/expect.txt @@ -0,0 +1,1915 @@ +aaafoobbb +abacd +abcd +Abdeali +Abhijeet +ABQ +Abramowitz +absfile +absolutepath +accesskeywords +accessmarker +Ackooy +addopts +adir +afile +afterhello +Agopian +Aiohttp +aksjdkasjd +Alayan +alksdjalskdjalkjals +allclose +Allner +allowednames +alltests +almarklein +Alphamoon +alskdjalsdk +analysispipelines +Anatoly +Andreu +Anki +ansible +anticomp +anydbm +anyio +anypython +aostr +apiclass +apigen +APIM +apimod +apipkg +apistellar +aplugin +appendleft +Appengine +appium +applymarker +appname +approvaltests +appsetup +appveyor +Aquilina +arange +Arduino +argcompare +ARGCOMPLETE +argname +argscompat +asarray +asd +asdal +asdalsdkjaslkdjasd +asdasd +asdfa +asdfasdfasdf +asdlkj +aselus +ASGI +asmod +asscalar +Assef +Assurka +astcache +astexpr +astnode +asttrees +asyncbase +asyncgenfunction +asynctest +Atif +atol +atomicwrites +atscope +attrsclass +autoclass +autoexception +autofunction +automagic +autoname +autopath +autosummary +autouse +autousenames +aworld +axfail +azurepipelines +Bachmann +Bachry +backlinks +backlocals +backported +backporting +backslashreplace +badcase +badoutput +badpass +badscope +banansda +Banaszkiewicz +baseid +basekw +basetemp +Batini +bbb +bcde +BCN +bdbquit +bdd +beartype +Bednar +Bednarik +Bekolay +Belchior +bestrelpath +bestrelpathcache +Bestwalter +bfd +bfdadc +bfe +Bieniek +Bigchain +bigquery +binchars +bindir +binop +binwrite +Birtwell +Biswal +bitbucket +BITMIME +bla +blabla +blockfinder +blogposts +Boelsen +Boisgerault +Boissinot +Bolshakov +boolop +bools +Boyarski +bpa +bpaste +bpdb +bpkg +bpo +bpy +bpython +breadthfirst +breakpointhook +breakword +Breekevold +brianna +brokenpipeerror +Bronsen +Bruhin +Bruynooghe +Bubblewrap +bubenkoff +Bubenkov +Budo +bugtong +bugzilla +BUILDDIR +buildout +Bussonnier +byid +bysource +byspec +bytestream +bzr +cacheclear +cachedir +cachefile +cachefuncarg +cacheprovider +cacheshow +cafd +CAKN +callattr +callbinrepr +calledagain +callequal +callinfo +callme +callobj +callreport +callspec +Cansino +capattr +capfd +capfdbinary +capfile +capfs +caplog +capmanager +capouter +capstderr +capstdout +capsys +capwarn +carg +catchlog +cdiff +CEPH +Ceridwen +chainmap +Chainz +Chammas +changedir +changingdir +channelexec +checkconfig +CHECKERMATCH +checkfile +checklength +checklinks +checkversion +chk +chunksize +CIDs +CKAN +classappend +classcheck +classcol +classcount +classinstance +classlevel +classmethods +classnamefilter +classx +CLDF +cleandir +clearcode +clioption +clist +cloudflare +clscol +clslevel +clsname +cmdargs +cmdexec +cmdlineargs +cmdopt +cmdunregister +Cobe +coc +codecov +codemod +CODEOWNERS +codepath +colfail +colitem +collectionfinish +Collectonly +collskip +collwrapper +coloredlogformatter +colorizes +COLOROPTS +colreports +commandline +commondir +compatonly +compgen +computehash +Conditionless +conditionstring +confcut +confcutdir +confg +configargs +configfile +confmod +conftestcutdir +conftestlogging +conftestmodule +conftestpath +conftestplugin +conftests +confval +cookiecutter +copychunked +coroutinefunction +couchdb +couchdbkit +could've +countoutcomes +coveragerc +cpf +crashline +Cricri +crossscope +csh +Cuni +currentdir +currentfspath +currentmodule +customdirectory +CUSTOMENV +customfile +customise +CVS +cython +darcs +Darko +Databricks +datacls +dataerror +dataframe +datatest +dbt +dct +ddd +ddir +debugconfig +debugfile +declaringhooks +decoratored +dedup +deepcov +defaultencoding +defaultget +defaultgetter +deferreds +deindent +Delaby +delenv +delimnl +Demian +Demin +deprecatedwarnings +depthfirst +desel +deselection +detangling +deuxmots +Deza +DHOS +dic +DICOM +diffs +Difido +dinp +directclasses +direntry +dirlist +dirn +dirnoexist +displaypath +distinfo +distshare +djangocachexdist +djangolike +djangorestframework +dlist +dls +dmitry +dnew +dnozay +docgen +docsearch +doctestfile +doctestglob +doctesting +doctestmodule +doctestplus +doctestreport +doctests +documentclass +dogu +domaininfo +dontreadfrominput +dontshow +Dopplinger +dorepr +Dorgueil +doskip +dotdir +dotfile +dottedname +doubledash +downsides +dox +drv +dsadsadsadsa +DSL +dtest +dtmp +dtypes +dummynet +dummypath +dupfile +Dupras +dygalo +Dyuldin +earlyinit +EBICS +edgecase +Edoardo +efa +Ekstazi +eliot +ellipsize +ellipsizing +elon +Eloussi +elts +emaillib +emoji +emscripten +encap +encodedfile +endchar +Endre +endset +ENHANCEDSTATUSCODES +eno +ENOMEDIUM +ensuredirs +ensuremode +ensuresyspath +ensuretemp +ent +entrypoints +entrysep +entrysource +envlist +envnames +envpython +ENx +eoferror +errisinstance +errlines +Errlk +Errlkjqweqwe +errnoclass +errorandfailure +errorcls +errorcode +errorinfo +errorstring +esctable +Esetting +Espressif +Esx +ethereum +ETRN +Europython +evalfalse +evalskip +eventlet +EVM +excepthook +exceptionattributes +exceptiongroup +exceptioninfo +excgroup +exci +excinfo +excinfowriter +excludeglobopt +excludeopt +excludepath +exconly +excontrolskip +excrepr +excs +excstore +execfilepy +execnet +existingtestsuite +exitfirst +exitstatus +exlines +expl +exprinfo +extlinks +extplugins +extrahead +extrakey +extraline +faclist +factoryboy +failedcollections +failedfirst +failedreason +failedt +failfunction +FAILIMPORT +failindent +failingfunc +faillist +failreason +FAILTEST +failureheadline +failurerepr +faketime +falsey +fappend +farg +fastapi +fastjoin +fauxfactory +fbca +fdcapture +fdest +FDinvalid +fdm +fdrake +fef +FEsx +Fexecuting +ffc +FFF +FFfinalizing +Ffn +figleaf +fijalkowski +filedescriptor +fileext +fileloc +filescompleter +filesonly +filestr +filesystempath +filetest +fillfixtures +fillfuncargs +filterfunc +finalbody +findpaths +findpluginname +firefox +firstlineno +firstlinesource +firstresult +fixbugs +fixdir +fixfile +fixfunc +fixingcalls +fixmod +fixturedefs +fixtureinfo +flakefinder +Flakybot +Flaptastic +floatingpoint +fluentbit +fluentd +fnline +fnmatchstring +fnode +fnpats +FOAF +foobarbaz +foocompare +foopkg +Foord +foos +formatchar +formatrepr +FOSDEM +foundanchor +foundlinenumbers +foundsomething +foxx +frameinfo +freezegun +freiburg +fromdictargs +frozenzet +fscollector +fskips +fslineno +fslocation +fspath +fsrc +ftdir +fulldir +fullsource +fulltrace +fullwidth +funcarg +funcargnames +funcargvalue +funcsource +functionnode +fxtr +fzf +Galaczi +gcov +Gedminas +generatorfunction +genfunc +genfunctions +genitems +genscript +gevent +globalfunc +globalid +globaltoc +globalvar +globbed +globf +gluestr +Gmb +gmtoff +Golemon +Goodlet +goodpractices +Gospodneti +Gospodnetic +gots +Greenfeld +grgid +grnam +Groenholm +groupid +Grunnur +Guyzmo +hackish +hackxyz +Hahler +hampkg +Hartmut +hashfile +hashtag +hashtype +hashvalue +hasinit +hasmarkup +hasnew +hasopt +hasplugin +hasrequest +Hattem +HDF +hdrs +headerlines +hellodir +hellopdb +hellow +hellowhatever +helpconfig +helplines +hij +HIL +hoefling +holderobj +holderobjseen +holger +Hollombe +homeassistant +HOMEDRIVE +HOMEPATH +hookcall +hookimpls +hookname +hookorder +hookproxy +hookrec +hookrecorder +hookspecs +hooktype +hookvalidation +hookwrapper +Hoverfly +howto +hpfeeds +hpk +htmlhelp +htmlzip +HTT +httpbin +httpx +Hunsberger +hylang +hypothesispytest +hyv +hyva +Ibutsu +icdiff +ICSE +ICSME +idapython +idfn +idlist +idmaker +idval +ignoredwhen +ignoreglob +ihook +iio +imfunc +impct +imperativeskip +implprefix +IMPORTMISMATCH +inamepart +inbox +includemodule +INCOMPAT +indentstr +indexerror +indexsidebar +indiegogo +inicache +inicfg +iniconfig +inidict +inifile +inifilename +ininames +inipath +initargs +initdir +initialnames +initialnode +initialpaths +initini +initpath +initpkg +initpy +initrequest +initstate +initstdio +initvar +inivalue +inkscape +inkscapeconverter +inlocs +inmanta +innerpkg +inpackage +inprocess +Insper +instafail +installable +installpkg +interchangably +internalerror +internallerrors +interoperate +interp +intersphinx +intest +Invenio +invenv +iocapture +Ionel +ipdb +IPFS +iplweb +ircs +issuecomment +issueid +itemcollected +itemreport +itemstart +iterparentnodeids +itrial +ivar +iwanto +jaksdkasldqwe +Jarko +Javi +Jelastic +jenkins +jenkinsci +jenkinsroot +jgsonesen +jheader +JIRA +jkl +jobserver +joedoe +jos +jsk +JTAG +Jue +junitprefix +junitxml +junix +Jurko +justso +jython +Kamentsky +kargs +Kartik +keepduplicates +keepends +Keleshev +keyboardinterrupt +keywordexpr +Khoshnoody +Kian +Kieft +killproc +Kingdread +Kirpichev +Kivy +klm +Kloeckner +Kluyver +Konira +koopmans +Kozlenok +krekel +krepr +krtech +Kudzelka +Kundert +Kuznetsov +kwparam +Lalchemy +Lamyaa +langchain +Lapierre +lastfailed +lastitem +lastlen +lastmax +layab +Ldiary +legacypath +Legunsen +lenresult +levelname +levelno +lexer +lfnf +lfplugin +ligo +linecomp +linedata +linelist +linematcher +linenum +linesofar +linkcheck +linktemp +linspace +linting +Liskov +listchain +listextrakeywords +Listfield +listnames +listoutcomes +literalinclude +LITF +llo +loadconftestmodules +localplugin +localserver +localsrepr +locationline +locinfo +logassert +logdata +logf +logfinish +logfmt +LOGNAME +logot +logreport +logstart +Loguru +logwarning +logxml +lolz +longrepr +longreprtext +longtestinfo +lookfor +lookupfails +looponfail +looponfailing +lsx +lualatex +luaotfload +Lucene +lvs +maciej +mailinglist +mainwrapper +majorly +makeconftest +makedoctest +makeini +makeit +makeitem +makemodule +makepyfile +makepyprojecttoml +makereport +maketxtfile +manyparam +mappend +mappingproxy +Marinov +markall +markdecorator +markername +markeval +markexpr +markline +markname +marscher +matchexpr +matchfactories +matchline +matchnode +matchobj +matchparts +matchreport +Matplotlib +matthiasha +maxdepth +maxfail +maxfailures +maxlevels +maxlist +maxnum +maxstring +MAXVAL +mayfail +Mehdy +Meilisearch +Memon +merlinux +metafunc +metaprogramming +metatags +methsetup +micromanage +Minecraft +minio +minver +minversion +minverstring +missbehaved +missingarg +mitmproxy +mklinkto +mkpydir +mkrel +mksymlinkto +mktest +mlf +mlns +mochajs +mockito +mockmodule +mockreturn +modarg +modcol +modfile +modifyitems +modindex +modlevel +modname +modpath +moduleauthor +modulecol +modulecollector +modulelevel +modulepath +mojibake +mondata +monkeypatched +monkeypatches +monkeypatching +monkeytype +monty +moto +moveddir +mpatch +mpi +mpiexec +mpytest +mred +mro +msglines +Muenz +multicapture +multicpu +multihost +multil +multinodes +multiparam +multiprocessed +multipython +multmat +munged +Munil +MXWB +mydb +namefilter +NAMEMATCH +nand +narf +nbasename +nbaz +ncall +ncaptured +ncustom +ncx +ndarray +ndeselected +ndindex +ndline +needsdb +needsfiles +nerr +Neuth +newid +newp +newx +nextfixturedef +nextitem +nextline +nfailure +nfc +nfd +nfplugin +ngs +nico +nicoddemus +nini +nitpicky +nltk +NNN +noargfixturedec +nobyte +nocapture +NOCHECKERMATCH +noclass +nocommon +noconftest +nocr +NODA +nodedown +nodeid +nodescription +nodeval +nodotfiles +NOENT +nofilter +nofuncargs +nohooks +noini +nointer +nologging +nomagic +nomatchprinted +noname +NONAMEMATCH +NONINFRINGEMENT +nonlist +nonmatch +nonpkg +nonpython +nonstring +nonwrapper +noraise +noreason +norecurse +norecursedirs +norecursepatterns +normid +noself +nosestyle +nosetest +noshowlocals +notandor +notbasename +notcallable +notdir +notexi +notexist +notexisting +notfile +nothere +notimpl +notimplemented +Noto +notrace +notrelto +NOTRUN +notset +NOTVALIDLEVEL +Nouri +nout +nparray +nprefix +nqweotexistent +nroot +Nsk +ntests +NTLM +ntraceback +nullbyte +numcollected +numdir +numentries +numfailed +numi +numj +numpassed +numskipped +numtest +NUnit +Nwf +nworld +objname +oconsole +ODC +odoo +oformat +ohai +OIDC +ojake +Okken +Okrushko +olderr +oldfd +oldinterpret +oldmode +oldout +oldstat +oldval +oldwrite +oleg +Oliveira +omat +omg +onceregistry +onearg +onefails +oneline +onexc +onwin +opencollective +opensearch +opentestcase +opentestfile +opentmi +optargs +optimisation +optionalhook +optionflags +optionhooks +optmod +optname +optparser +optsort +ordereddict +orelse +orepr +organisations +orgstr +originalname +ospath +osstatresult +otherarg +otherdir +otherfile +otherfunc +otherloc +othermodule +otherpath +otherthing +outcomeexception +outerr +outrep +ovision +OWASP +Owolabi +PACKAGENAME +PACKAGEVERSION +pagename +pagerefs +palaviv +Palomba +pandoc +paramete +parameterise +parameterset +parametrise +parametrizations +parametrizemark +parametrizer +parametrizes +paramexamples +paramset +parentdirmatch +parentnode +parentnodeids +parg +parseable +parseconfig +parseconfigure +parsedoption +parsefactories +parseopt +parseoutcomes +passenv +passfunction +pasteable +pastebin +pastebinfile +pastebinlist +pastebinurl +patchings +patchsysdict +pathlist +pathnode +pathto +patternchars +pdbcls +pdbinvoke +pdblist +pdbpp +pdbshown +pdbtrace +Pedroni +Pelme +Peolzleithner +percentf +perceptualdiff +perclass +perfunction +permethod +Personalkollen +Pfannschmidt +pfctdayelise +pgk +Phatak +phmdoctest +picklefile +pids +Pierzina +pingguo +pkgdir +pkginit +pkgpath +pkgroot +platformdirs +Plone +pluggymain +pluginarg +plugininfo +pluginlist +pluginmake +pluginmanagement +pluginmanager +pluginmodule +pluginname +pluginorder +pluginversioninfo +pmxbot +pmyplugin +pno +pnode +pocoo +Podcast +pointsback +polarion +Polli +Pommranz +poo +popcall +popleft +posarg +positionally +posn +Postgre +Postgresql +postinitialize +pprojecttoml +pqr +Pradet +preferredencoding +preloadconfig +preloadplugins +prepareconfig +preparse +preparsed +presetup +prettypath +printcollecteditems +printdebugging +prm +processargs +processopt +processoption +proja +propname +propvalue +Prunetraceback +Prusse +prysk +pseudofile +pseudofixturedef +pseudopath +psnode +psqlgraph +psutil +Psyco +ptera +Punyashloka +purebasename +purkinje +putaround +pwnam +pwuid +pyarg +pycmd +pycollect +pycon +pyconvert +pycpath +pycs +pydanny +pydir +pyfakefs +pyfile +pyfunc +pyfuncitem +pygment +pygrep +PYI +pyimport +pyinstaller +pylib +pylibcommit +pymakeitem +pymakemodule +pyo +Pyobj +Pyodide +pyopencl +pypa +pypandoc +pypath +pypkgdir +pypkgpath +pyppeteer +pyq +pyreadline +Pyside +pyspark +Pyst +pystack +pytestarg +pytestbot +pytestcmdline +pytestconfig +pytestdebug +pytestdoc +pytestdotorg +pytester +pytestfixturefunction +pytestfunct +pytestini +pytestmark +pytestpm +pytests +pytestx +PYTHONBREAKPOINT +pythoncollection +PYTHONDONTWRITEBYTECODE +PYTHONFAULTHANDLER +pythonics +pythonlist +PYTHONOPTIMIZE +pythonpath +PYTHONPYCACHEPREFIX +PYTHONTRACEMALLOC +PYTHONWARNDEFAULTENCODING +pythonwarnings +pytrace +pyvista +qase +qasync +QGIS +qiu +qlwkej +qlwkejqwlek +QML +qualname +quickfix +quickify +qwe +qweqwe +qweqwex +qweqwx +qwerty +qwlkej +qwoeqiwe +qwpeoip +raiseerror +raiseos +Randomise +Ratnakumar +rawcode +rawentry +rawexcinfo +rbye +rcol +readonlydir +readonlyfile +realfailed +realpassed +realskipped +realtemp +realtests +REANA +recfilter +recindex +recursionindex +recwarn +redhat +redmine +refactorings +regen +regendoc +reindenting +reinterp +reinterpreation +rekt +relbar +reldest +reldir +reldirectory +releaselevel +relfn +relfspath +relline +relroot +relsource +relto +remoteinterp +reparse +replist +reportchar +reportopt +reprcrash +reprec +reprs +reprtb +rerunfailures +reruntests +reslist +resultlog +retcode +revpar +rewritable +rewritemod +rfh +rfx +rget +Ribeiro +rlf +RMsis +Roadmap +robotframework +robustify +rolename +Ronacher +ronny +rootdir +rootid +rootpath +Rossum +rotest +rsession +rsx +rtesting +rtfd +rtol +rtype +RUF +rwhen +rxs +safeformat +Salomaa +sampledir +samplefile +samplepickle +Sanic +sarg +satoru +saucelabs +Savchenko +SAVEALL +saveindent +savesyspath +SBFL +Schampheleire +Schettino +Schlaich +Schlawack +Schnerring +Schwarzer +scm +scopenum +screenshots +searchformwrapper +searchlabel +secname +seealso +segfault +segfaulting +selftests +sendeof +sendline +sepchar +servemain +Setinitial +setuppy +sfile +sfragments +sfxw +sidebarintro +sidebarlogo +siebling +Siegerman +sigabrt +simplenamespace +simpletest +singlehtml +Sinyavskiy +sio +Skipfiles +skipif +slowtest +smartypants +smtpserver +smtpshared +snapmods +snappaths +snc +snode +socio +sontek +sortlist +sourcecode +SOURCEDIR +sourcelineno +sourcelines +sourcelink +SPAMBEFORE +spamegg +spamplugin +spamspam +Specialis +specifictopic +SPHINXBUILD +sphinxcontrib +SPHINXOPTS +spid +spmaeggs +spulec +sqitch +sqlalchemy +sqlfluff +SQLs +squacket +Squadcast +srcpaths +Sridhar +sss +stackcnt +stackframe +stackoverflow +Starikov +starknet +startdir +startend +startingblock +startmodule +startpath +starttime +statcache +statementrange +staticmethods +stdcapture +stder +stdfd +stdlog +stepwiseplugin +stmp +stopatmodule +stoq +strargs +strfn +stringinput +stringio +striptext +strp +strpath +strrelpath +strself +Stufft +subclassobject +subconf +subconftest +subinterpreter +sublogger +submitfeedback +submitplugin +Submitters +subname +subpackages +subrequest +Sudarshan +superclasses +sustainability +SUT +Svetlov +svnurl +svnwc +swc +swp +Symbola +symlinktemp +symlinktests +syntaxerror +SYSTEMROOT +tablefmt +talljosh +Tareq +targetfd +taschini +tatus +Taumoefolau +tbfilter +tbh +tblen +tbline +tblineinfo +tbopt +tbreportdemo +tbstyle +teamcity +teardownclass +teardownlist +tempfiles +tempir +temproot +tensorflow +terminalreporter +terminalwriter +terminalwriting +terraform +Terragrunt +testclass +testfs +testfunc +testfunction +Testgr +testid +testmodule +Testmygroup +TESTPATHS +testplugin +Testrail +Testrun +testscenarios +Tesults +tetamap +textfile +textwrite +tfile +tfunc +Theunert +threadexc +threadexception +tidelift +Tiemo +Tifany +timedistance +tinybird +tmpdirhandler +tmpfiles +tmphome +tmppath +tmproot +tnode +tocdepth +tocdup +toctree +todeleted +todos +tomli +toolongargs +toolpytest +TOOWTDI +topdir +tornasync +torndown +toterminal +Towler +towncrier +toxenv +toxini +toxinidir +tpkg +tpkgwhatv +tqdm +tracebackcutdir +tracebackentry +tracebackhide +tracebacks +traceconfig +tracestyle +trello +TResult +triaging +trialselfskip +tryadd +trycall +tryfirst +trylast +tryshort +Tryton +tspwplib +ttt +ttys +tupleerror +twoargs +twoword +txtfile +typeerror +typeguard +typehints +typerror +typeshed +Typhoontest +typosquating +UAdd +ubersmith +udir +uebersimple +ufunc +uhm +uiautomator +ULP +unboundlocal +unconfigured +unconfiguring +unex +Unflakable +unimportable +unitsetup +unmarshable +unraisableexception +unraisablehook +unregisteredmark +unregistering +unreraise +unserialization +Unterwaditzer +untruncated +upport +upvoted +urgs +usageerror +usecase +usedevelop +usefixtures +usefixturesnames +usepdb +userid +userobjects +ustr +USub +utest +utestconvert +Uwe +Vallbona +valpath +valset +valueorskip +valuepath +VARKEYWORDS +varnames +vcrpy +vdir +vendored +vendoring +verattr +verinfo +Vierra +viewcode +viia +Vinicius +Visualise +vlan +VNC +vnd +vrepr +VSTS +vvv +vxlan +vyper +Waldmann +wana +wanto +warninfo +warningregistry +warningreport +wascalled +wasxfail +wcpath +wcswidth +wcwidth +wdb +WDL +webapplications +webchat +webframework +Webinar +webpage +websites +webtest +Welian +Wesdorp +wfh +whatsapp +widechars +Widman +windowsconsoleio +winerrnomap +winerror +wiremock +withdir +withinit +withoutdir +withunicode +wnick +Wokwi +WORDBREAKS +workerinfoline +would've +wrapcall +wrec +writefail +writeline +writeorg +writeplugins +writinghooks +wronkw +wrt +wsf +wsx +XDIST +XEf +Xephyr +XFailed +XFAILURES +XFailwith +xfs +Xiao +xmo +xpass +XPASSES +Xpy +Xvfb +Xvnc +xwarning +xxy +XYZW +Yalan +yamlwsgi +Yandex +yapf +yieldfixture +YLS +yourpath +yyy +yzsomething +Zafira +Zaidman +zaz +Zearin +Zebao +Zebrunner +Zeebe +zerodivision +Zhen +ZODB +Zookeeper +zope +zopelicious +Zulip +zwei +zweiwort +zzz diff --git a/.github/actions/spelling/line_forbidden.patterns b/.github/actions/spelling/line_forbidden.patterns new file mode 100644 index 0000000000..a80f3a5cfa --- /dev/null +++ b/.github/actions/spelling/line_forbidden.patterns @@ -0,0 +1,163 @@ +# reject `m_data` as VxWorks defined it and that breaks things if it's used elsewhere +# see [fprime](https://github.com/nasa/fprime/commit/d589f0a25c59ea9a800d851ea84c2f5df02fb529) +# and [Qt](https://github.com/qtproject/qt-solutions/blame/fb7bc42bfcc578ff3fa3b9ca21a41e96eb37c1c7/qtscriptclassic/src/qscriptbuffer_p.h#L46) +#\bm_data\b + +# Were you debugging using a framework with `fit()`? +# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test, +# you might not want to check in code where you skip all the other tests. +#\bfit\( + +# Should be `anymore` +\bany more[,.] + +# 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 + +# Should be `GitHub` +(?"'`=(])-(?:(?:J-|)[WX])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) + +# hit-count: 9 file-count: 5 +# hex runs +\b[0-9a-fA-F]{16,}\b + +# hit-count: 8 file-count: 5 +# ANSI color codes +(?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m + +# hit-count: 8 file-count: 2 +# 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 ) +# 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: +# ... 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]...` +# ... or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path) +(?:(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*) + +# hit-count: 6 file-count: 3 +# GitHub actions +\buses:\s+[-\w.]+/[-\w./]+@[-\w.]+ + +# hit-count: 5 file-count: 4 +# IServiceProvider / isAThing +\b(?:I|isA)(?=(?:[A-Z][a-z]{2,})+(?:[A-Z]|\b)) + +# hit-count: 3 file-count: 1 +# Contributor +\[[^\]]+\]\(https://github\.com/[^/\s"]+/?\) + +# hit-count: 2 file-count: 1 +# latex (check-spelling >= 0.0.22) +\\\w{2,}\{ + +# hit-count: 1 file-count: 1 +# Alternative printf +# %s +%(?:s(?=[a-z]{2,}))(?!%)(?=[_a-zA-Z]+(?!%)\b)(?=.*?['"]) + +# hit-count: 1 file-count: 1 +# Windows short paths +[/\\][^/\\]{5,6}~\d{1,2}[/\\] + +# hit-count: 1 file-count: 1 +# set arguments +\b(?:bash|sh|set)(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)* + +:(?:pypi|user):`.*?` + +\([A-Za-z/]+\)[a-z]+ + +^\s*FAILED.*$ + +(?:_|\b)(?:add(?!ition(?:al|)|itive|ress)|aio|another|arg(?!ument)|assert(?:ion|ing|)|auto(?:mati(?:cally|on))|base|by(?:te|)call|cap(?:abilities|ture|turing|fd|log|sys)|collect(?!ing|ion|ive|ors)|fixture|func(?!tion)|get(?:fixture|)|import(?!ing|ant)(?:or|)|is(?!sue|ort|olat)|my|name(?:d|space|)|new|unit(?:test|)|report(?:ing|)(?!ing|ers)|repr(?!od|e[cs])|run(?:test|)(?!ning|ner)|section|session|set(?:up|)(?!tings?|tle|up)|short(?![ceh])|should|show(?!ing)|skip(?:ped|)(?!pe[dr]|ping)|some|sys(?:tem(?!atic)|path|)(?!tem)|test(?:ing|)(?!ing|suite|slide|scenario|support)s?|version|worker(?:info|)|x+(?:code|ml|))(?=[a-z]{3,}) + +# credits +^\*([- ]\w+\.?){1,4}$ + +# thanks +\b[Tt]hanks( [A-Z]\w+)+ + +# compatibility +INCOVATION_DIR + +# 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|[Ss]ign) in to\b + +# to opt in +\bto opt in\b + +# acceptable duplicates +# ls directory listings +[-bcdlpsw](?:[-r][-w][-SsTtx]){3}[\.+*]?\s+\d+\s+\S+\s+\S+\s+\d+\s+ +# mount +\bmount\s+-t\s+(\w+)\s+\g{-1}\b +# C types and repeated CSS values +\s(auto|center|div|head|inherit|long|LONG|none|normal|not|solid|tail|thin|transparent|very)(?: \g{-1})+\s +# C struct +\bstruct\s+(\w+)\s+\g{-1}\b +# go templates +\s(\w+)\s+\g{-1}\s+\`(?:graphql|inject|json|yaml): +# doxygen / javadoc / .net +(?:[\\@](?:brief|groupname|t?param|return|retval)|(?:public|private|\[Parameter(?:\(.+\)|)\])(?:\s+(?:static|override|readonly|required|virtual))*)(?:\s+\{\w+\}|)\s+(\w+)\s+\g{-1}\s + +# Python package registry has incorrect spelling for macOS / Mac OS X +"Operating System :: MacOS :: MacOS X" + +# Commit message -- Signed-off-by and friends +^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$ + +# Autogenerated revert commit message +^This reverts commit [0-9a-f]{40}\.$ + +# ignore long runs of a single character: +\b([A-Za-z])\g{-1}{3,}\b diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt new file mode 100644 index 0000000000..e5e4c3eef8 --- /dev/null +++ b/.github/actions/spelling/reject.txt @@ -0,0 +1,11 @@ +^attache$ +^bellow$ +benefitting +occurences? +^dependan.* +^oer$ +Sorce +^[Ss]pae.* +^untill$ +^untilling$ +^wether.* diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml new file mode 100644 index 0000000000..449b13ec8d --- /dev/null +++ b/.github/workflows/spelling.yml @@ -0,0 +1,148 @@ +name: Check Spelling + +# Comment management is handled through a secondary job, for details see: +# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions +# +# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment +# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare) +# it needs `contents: write` in order to add a comment. +# +# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment +# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment) +# it needs `pull-requests: write` in order to manipulate those comments. + +# Updating pull request branches is managed via comment handling. +# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list +# +# These elements work together to make it happen: +# +# `on.issue_comment` +# This event listens to comments by users asking to update the metadata. +# +# `jobs.update` +# This job runs in response to an issue_comment and will push a new commit +# to update the spelling metadata. +# +# `with.experimental_apply_changes_via_bot` +# Tells the action to support and generate messages that enable it +# to make a commit to update the spelling metadata. +# +# `with.ssh_key` +# In order to trigger workflows when the commit is made, you can provide a +# secret (typically, a write-enabled github deploy key). +# +# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key + +# Sarif reporting +# +# Access to Sarif reports is generally restricted (by GitHub) to members of the repository. +# +# Requires enabling `security-events: write` +# 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 + +# Minimal workflow structure: +# +# on: +# push: +# ... +# pull_request_target: +# ... +# jobs: +# # you only want the spelling job, all others should be omitted +# spelling: +# # remove `security-events: write` and `use_sarif: 1` +# # remove `experimental_apply_changes_via_bot: 1` +# ... otherwise adjust the `with:` as you wish + +on: + push: + branches: + - "**" + tags-ignore: + - "**" + pull_request_target: + branches: + - "**" + types: + - 'opened' + - 'reopened' + - 'synchronize' + issue_comment: + types: + - 'created' + +jobs: + spelling: + name: Check Spelling + permissions: + contents: read + pull-requests: read + actions: read + security-events: write + outputs: + followup: ${{ steps.spelling.outputs.followup }} + runs-on: ubuntu-latest + if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }} + concurrency: + group: spelling-${{ github.event.pull_request.number || github.ref }} + # note: If you use only_check_changed_files, you do not want cancel-in-progress + cancel-in-progress: true + steps: + - name: check-spelling + id: spelling + uses: check-spelling/check-spelling@prerelease + with: + suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }} + checkout: true + check_file_names: 1 + spell_check_this: check-spelling/spell-check-this@prerelease + post_comment: 0 + use_magic_file: 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,unclosed-block-ignore-begin,unclosed-block-ignore-end + experimental_apply_changes_via_bot: 1 + use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }} + check_extra_dictionaries: '' + extra_dictionaries: | + cspell:software-terms/dict/softwareTerms.txt + cspell:python/src/python/python-lib.txt + cspell:python/src/common/extra.txt + cspell:python/src/python/python.txt + cspell:php/dict/php.txt + cspell:npm/dict/npm.txt + cspell:node/dict/node.txt + cspell:html/dict/html.txt + cspell:fullstack/dict/fullstack.txt + cspell:golang/dict/go.txt + cspell:java/src/java.txt + cspell:aws/aws.txt + cspell:typescript/dict/typescript.txt + cspell:k8s/dict/k8s.txt + cspell:django/dict/django.txt + cspell:filetypes/filetypes.txt + cspell:dotnet/dict/dotnet.txt + + update: + name: Update PR + permissions: + contents: write + pull-requests: write + actions: read + runs-on: ubuntu-latest + if: ${{ + github.event_name == 'issue_comment' && + github.event.issue.pull_request && + contains(github.event.comment.body, '@check-spelling-bot apply') + }} + concurrency: + group: spelling-update-${{ github.event.issue.number }} + cancel-in-progress: false + steps: + - name: apply spelling updates + uses: check-spelling/check-spelling@prerelease + with: + experimental_apply_changes_via_bot: 1 + checkout: true + ssh_key: "${{ secrets.CHECK_SPELLING }}"