testdriverai 5.3.13 → 5.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent.js +18 -16
- package/docs/30x30.mdx +1 -1
- package/docs/action/secrets.mdx +1 -1
- package/docs/commands/assert.mdx +4 -4
- package/docs/commands/exec.mdx +33 -23
- package/docs/commands/focus-application.mdx +3 -3
- package/docs/commands/hover-image.mdx +6 -6
- package/docs/commands/hover-text.mdx +3 -3
- package/docs/commands/if.mdx +1 -1
- package/docs/commands/match-image.mdx +4 -4
- package/docs/commands/run.mdx +1 -1
- package/docs/commands/scroll-until-image.mdx +6 -3
- package/docs/commands/scroll-until-text.mdx +3 -3
- package/docs/commands/type.mdx +1 -1
- package/docs/commands/wait-for-image.mdx +1 -1
- package/docs/commands/wait-for-text.mdx +1 -1
- package/docs/docs.json +1 -1
- package/docs/features/auto-healing.mdx +1 -1
- package/docs/features/cross-platform.mdx +1 -1
- package/docs/features/generation.mdx +76 -142
- package/docs/features/parallel-testing.mdx +1 -1
- package/docs/features/selectorless.mdx +1 -1
- package/docs/getting-started/generating.mdx +90 -30
- package/docs/getting-started/vscode.mdx +1 -1
- package/docs/guide/assertions.mdx +1 -1
- package/docs/guide/authentication.mdx +10 -26
- package/docs/guide/code.mdx +31 -141
- package/docs/guide/lifecycle.mdx +41 -0
- package/docs/guide/locating.mdx +1 -1
- package/docs/guide/variables.mdx +35 -121
- package/docs/guide/waiting.mdx +26 -101
- package/docs/interactive/assert.mdx +2 -2
- package/docs/interactive/undo.mdx +1 -1
- package/docs/overview/what-is-testdriver.mdx +1 -1
- package/docs/quickstart.mdx +3 -1
- package/docs/security/action.mdx +2 -2
- package/docs/security/agent.mdx +4 -4
- package/docs/security/platform.mdx +1 -1
- package/lib/init.js +0 -1
- package/lib/upload-secrets.js +1 -0
- package/package.json +3 -3
- package/styles/.vale-config/2-MDX.ini +5 -0
- package/styles/Microsoft/AMPM.yml +9 -0
- package/styles/Microsoft/Accessibility.yml +30 -0
- package/styles/Microsoft/Acronyms.yml +64 -0
- package/styles/Microsoft/Adverbs.yml +272 -0
- package/styles/Microsoft/Auto.yml +11 -0
- package/styles/Microsoft/Avoid.yml +14 -0
- package/styles/Microsoft/Contractions.yml +50 -0
- package/styles/Microsoft/Dashes.yml +13 -0
- package/styles/Microsoft/DateFormat.yml +8 -0
- package/styles/Microsoft/DateNumbers.yml +40 -0
- package/styles/Microsoft/DateOrder.yml +8 -0
- package/styles/Microsoft/Ellipses.yml +9 -0
- package/styles/Microsoft/FirstPerson.yml +16 -0
- package/styles/Microsoft/Foreign.yml +13 -0
- package/styles/Microsoft/Gender.yml +8 -0
- package/styles/Microsoft/GenderBias.yml +42 -0
- package/styles/Microsoft/GeneralURL.yml +11 -0
- package/styles/Microsoft/HeadingAcronyms.yml +7 -0
- package/styles/Microsoft/HeadingColons.yml +8 -0
- package/styles/Microsoft/HeadingPunctuation.yml +13 -0
- package/styles/Microsoft/Headings.yml +28 -0
- package/styles/Microsoft/Hyphens.yml +14 -0
- package/styles/Microsoft/Negative.yml +13 -0
- package/styles/Microsoft/Ordinal.yml +13 -0
- package/styles/Microsoft/OxfordComma.yml +8 -0
- package/styles/Microsoft/Passive.yml +183 -0
- package/styles/Microsoft/Percentages.yml +7 -0
- package/styles/Microsoft/Plurals.yml +7 -0
- package/styles/Microsoft/Quotes.yml +7 -0
- package/styles/Microsoft/RangeTime.yml +13 -0
- package/styles/Microsoft/Semicolon.yml +8 -0
- package/styles/Microsoft/SentenceLength.yml +7 -0
- package/styles/Microsoft/Spacing.yml +8 -0
- package/styles/Microsoft/Suspended.yml +7 -0
- package/styles/Microsoft/Terms.yml +42 -0
- package/styles/Microsoft/URLFormat.yml +9 -0
- package/styles/Microsoft/Units.yml +16 -0
- package/styles/Microsoft/Vocab.yml +25 -0
- package/styles/Microsoft/We.yml +11 -0
- package/styles/Microsoft/Wordiness.yml +127 -0
- package/styles/Microsoft/meta.json +4 -0
- package/styles/alex/Ablist.yml +245 -0
- package/styles/alex/Condescending.yml +16 -0
- package/styles/alex/Gendered.yml +108 -0
- package/styles/alex/LGBTQ.yml +55 -0
- package/styles/alex/OCD.yml +10 -0
- package/styles/alex/Press.yml +11 -0
- package/styles/alex/ProfanityLikely.yml +1289 -0
- package/styles/alex/ProfanityMaybe.yml +282 -0
- package/styles/alex/ProfanityUnlikely.yml +251 -0
- package/styles/alex/README.md +27 -0
- package/styles/alex/Race.yml +83 -0
- package/styles/alex/Suicide.yml +24 -0
- package/styles/alex/meta.json +4 -0
- package/styles/config/vocabularies/Docs/accept.txt +6 -0
- package/styles/proselint/Airlinese.yml +8 -0
- package/styles/proselint/AnimalLabels.yml +48 -0
- package/styles/proselint/Annotations.yml +9 -0
- package/styles/proselint/Apologizing.yml +8 -0
- package/styles/proselint/Archaisms.yml +52 -0
- package/styles/proselint/But.yml +8 -0
- package/styles/proselint/Cliches.yml +782 -0
- package/styles/proselint/CorporateSpeak.yml +30 -0
- package/styles/proselint/Currency.yml +5 -0
- package/styles/proselint/Cursing.yml +15 -0
- package/styles/proselint/DateCase.yml +7 -0
- package/styles/proselint/DateMidnight.yml +7 -0
- package/styles/proselint/DateRedundancy.yml +10 -0
- package/styles/proselint/DateSpacing.yml +7 -0
- package/styles/proselint/DenizenLabels.yml +52 -0
- package/styles/proselint/Diacritical.yml +95 -0
- package/styles/proselint/GenderBias.yml +45 -0
- package/styles/proselint/GroupTerms.yml +39 -0
- package/styles/proselint/Hedging.yml +8 -0
- package/styles/proselint/Hyperbole.yml +6 -0
- package/styles/proselint/Jargon.yml +11 -0
- package/styles/proselint/LGBTOffensive.yml +13 -0
- package/styles/proselint/LGBTTerms.yml +15 -0
- package/styles/proselint/Malapropisms.yml +8 -0
- package/styles/proselint/Needless.yml +358 -0
- package/styles/proselint/Nonwords.yml +38 -0
- package/styles/proselint/Oxymorons.yml +22 -0
- package/styles/proselint/P-Value.yml +6 -0
- package/styles/proselint/RASSyndrome.yml +30 -0
- package/styles/proselint/README.md +12 -0
- package/styles/proselint/Skunked.yml +13 -0
- package/styles/proselint/Spelling.yml +17 -0
- package/styles/proselint/Typography.yml +11 -0
- package/styles/proselint/Uncomparables.yml +50 -0
- package/styles/proselint/Very.yml +6 -0
- package/styles/proselint/meta.json +17 -0
- package/styles/write-good/Cliches.yml +702 -0
- package/styles/write-good/E-Prime.yml +32 -0
- package/styles/write-good/Illusions.yml +11 -0
- package/styles/write-good/Passive.yml +183 -0
- package/styles/write-good/README.md +27 -0
- package/styles/write-good/So.yml +5 -0
- package/styles/write-good/ThereIs.yml +6 -0
- package/styles/write-good/TooWordy.yml +221 -0
- package/styles/write-good/Weasel.yml +29 -0
- package/styles/write-good/meta.json +4 -0
- package/testdriver/testdriver_2025-04-17T16-04-30-454Z.yaml +6 -0
- package/vale.ini +18 -0
- package/docs/guide/setup-teardown.mdx +0 -162
- package/docs/reference/interactive/assert.mdx +0 -0
- /package/{docs/reference/commands/scroll.mdx → styles/config/vocabularies/Docs/reject.txt} +0 -0
package/docs/quickstart.mdx
CHANGED
|
@@ -5,7 +5,9 @@ title: "Quickstart"
|
|
|
5
5
|
<Steps>
|
|
6
6
|
|
|
7
7
|
<Step title="Install TestDriver">
|
|
8
|
+
|
|
8
9
|
Install the TestDriver CLI globally:
|
|
10
|
+
|
|
9
11
|
```bash
|
|
10
12
|
npm install -g testdriverai@beta
|
|
11
13
|
```
|
|
@@ -63,4 +65,4 @@ testdriverai run path/to/test.yml
|
|
|
63
65
|
|
|
64
66
|
---
|
|
65
67
|
|
|
66
|
-
**Pro Tip:** Always start with interactive mode (`testdriverai`) to explore and refine your tests before saving them. It
|
|
68
|
+
**Pro Tip:** Always start with interactive mode (`testdriverai`) to explore and refine your tests before saving them. It's faster and more intuitive!
|
package/docs/security/action.mdx
CHANGED
|
@@ -30,9 +30,9 @@ A common workflow involves using prerun scripts to securely access a private sta
|
|
|
30
30
|
|
|
31
31
|
### Production
|
|
32
32
|
Testing production environments is the simplest and most secure starting point.
|
|
33
|
-
- Production testing
|
|
33
|
+
- Production testing doesn't require any private information from your team.
|
|
34
34
|
- Simply provide the tests to TestDriver and point them toward publicly available endpoints.
|
|
35
|
-
- TestDriver
|
|
35
|
+
- TestDriver doesn't need access to any private or sensitive information for production testing.
|
|
36
36
|
|
|
37
37
|
### Staging
|
|
38
38
|
Testing staging environments may require secure information, such as credentials or tokens.
|
package/docs/security/agent.mdx
CHANGED
|
@@ -9,7 +9,7 @@ icon: "robot"
|
|
|
9
9
|
The TestDriver Agent is open-source and available on NPM. You can browse the source code to see all the data collected and understand how everything works.
|
|
10
10
|
|
|
11
11
|
## API
|
|
12
|
-
The TestDriver Agent
|
|
12
|
+
The TestDriver Agent doesn't contain any AI models within it. Instead, it uploads desktop context to the TestDriver API, which uses that context to make decisions about what actions to perform.
|
|
13
13
|
|
|
14
14
|
The TestDriver API leverages OpenAI models behind the scenes. For more information about OpenAI and its privacy practices, visit their [privacy center](https://openai.com/privacy).
|
|
15
15
|
|
|
@@ -24,15 +24,15 @@ During execution, the TestDriver Agent uploads the following information to the
|
|
|
24
24
|
|
|
25
25
|
### Data Persistence
|
|
26
26
|
- **Desktop Context**: All collected desktop context, except for screenshots, is persisted in the TestDriver database.
|
|
27
|
-
- **Desktop Screenshots**: Screenshots are uploaded to the server for processing but
|
|
27
|
+
- **Desktop Screenshots**: Screenshots are uploaded to the server for processing but aren't stored in the database.
|
|
28
28
|
|
|
29
29
|
### Desktop Screenshots
|
|
30
|
-
TestDriver frequently captures screenshots of the desktop to provide the AI with decision-making context. These screenshots are uploaded to the API but
|
|
30
|
+
TestDriver frequently captures screenshots of the desktop to provide the AI with decision-making context. These screenshots are uploaded to the API but aren't persisted in the database.
|
|
31
31
|
|
|
32
32
|
- **Primary Display Only**: Screenshots are limited to the primary display.
|
|
33
33
|
- **Privacy Recommendation**: For complete privacy, it is recommended to run TestDriver within a virtual machine on your desktop.
|
|
34
34
|
|
|
35
|
-
**Important**: TestDriver
|
|
35
|
+
**Important**: TestDriver can't operate without visual context. don't install TestDriver if you are uncomfortable with capturing images of the desktop.
|
|
36
36
|
|
|
37
37
|
## Collected Data Details
|
|
38
38
|
|
|
@@ -27,7 +27,7 @@ Dashcam and TestDriver share the same API and web application back end, which in
|
|
|
27
27
|
- Administrators:
|
|
28
28
|
- Are the only users who can view the API key.
|
|
29
29
|
- Can manage team settings.
|
|
30
|
-
-
|
|
30
|
+
- can't be removed from the team.
|
|
31
31
|
- All other users are normal members with limited access.
|
|
32
32
|
|
|
33
33
|
### API Key Rotation
|
package/lib/init.js
CHANGED
package/lib/upload-secrets.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "testdriverai",
|
|
3
|
-
"version": "5.3.
|
|
3
|
+
"version": "5.3.14",
|
|
4
4
|
"description": "Next generation autonomous AI agent for end-to-end testing of web & desktop",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"dev": "DEV=true node index.js",
|
|
12
12
|
"debug": "DEV=true VERBOSE=true node index.js",
|
|
13
13
|
"bundle": "node build.mjs",
|
|
14
|
-
"test": "mocha test/*"
|
|
14
|
+
"test": "mocha test/*",
|
|
15
|
+
"runall": "dotenv testdriverai run --config testdriver.config.yaml --path './testdriver/*.testdriver.yaml'"
|
|
15
16
|
},
|
|
16
17
|
"author": "",
|
|
17
18
|
"license": "ISC",
|
|
@@ -22,7 +23,6 @@
|
|
|
22
23
|
"axios": "^1.7.7",
|
|
23
24
|
"chalk": "^4.1.2",
|
|
24
25
|
"cli-progress": "^3.12.0",
|
|
25
|
-
"cli-table3": "^0.6.5",
|
|
26
26
|
"datadog-winston": "^1.6.0",
|
|
27
27
|
"decompress": "^4.2.1",
|
|
28
28
|
"dotenv": "^16.4.5",
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: Use 'AM' or 'PM' (preceded by a space).
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms
|
|
4
|
+
level: error
|
|
5
|
+
nonword: true
|
|
6
|
+
tokens:
|
|
7
|
+
- '\d{1,2}[AP]M'
|
|
8
|
+
- '\d{1,2} ?[ap]m'
|
|
9
|
+
- '\d{1,2} ?[aApP]\.[mM]\.'
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Don't use language (such as '%s') that defines people by their disability."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/accessibility-terms
|
|
4
|
+
level: suggestion
|
|
5
|
+
ignorecase: true
|
|
6
|
+
tokens:
|
|
7
|
+
- a victim of
|
|
8
|
+
- able-bodied
|
|
9
|
+
- an epileptic
|
|
10
|
+
- birth defect
|
|
11
|
+
- crippled
|
|
12
|
+
- differently abled
|
|
13
|
+
- disabled
|
|
14
|
+
- dumb
|
|
15
|
+
- handicapped
|
|
16
|
+
- handicaps
|
|
17
|
+
- healthy person
|
|
18
|
+
- hearing-impaired
|
|
19
|
+
- lame
|
|
20
|
+
- maimed
|
|
21
|
+
- mentally handicapped
|
|
22
|
+
- missing a limb
|
|
23
|
+
- mute
|
|
24
|
+
- non-verbal
|
|
25
|
+
- normal person
|
|
26
|
+
- sight-impaired
|
|
27
|
+
- slow learner
|
|
28
|
+
- stricken with
|
|
29
|
+
- suffers from
|
|
30
|
+
- vision-impaired
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
extends: conditional
|
|
2
|
+
message: "'%s' has no definition."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/acronyms
|
|
4
|
+
level: suggestion
|
|
5
|
+
ignorecase: false
|
|
6
|
+
# Ensures that the existence of 'first' implies the existence of 'second'.
|
|
7
|
+
first: '\b([A-Z]{3,5})\b'
|
|
8
|
+
second: '(?:\b[A-Z][a-z]+ )+\(([A-Z]{3,5})\)'
|
|
9
|
+
# ... with the exception of these:
|
|
10
|
+
exceptions:
|
|
11
|
+
- API
|
|
12
|
+
- ASP
|
|
13
|
+
- CLI
|
|
14
|
+
- CPU
|
|
15
|
+
- CSS
|
|
16
|
+
- CSV
|
|
17
|
+
- DEBUG
|
|
18
|
+
- DOM
|
|
19
|
+
- DPI
|
|
20
|
+
- FAQ
|
|
21
|
+
- GCC
|
|
22
|
+
- GDB
|
|
23
|
+
- GET
|
|
24
|
+
- GPU
|
|
25
|
+
- GTK
|
|
26
|
+
- GUI
|
|
27
|
+
- HTML
|
|
28
|
+
- HTTP
|
|
29
|
+
- HTTPS
|
|
30
|
+
- IDE
|
|
31
|
+
- JAR
|
|
32
|
+
- JSON
|
|
33
|
+
- JSX
|
|
34
|
+
- LESS
|
|
35
|
+
- LLDB
|
|
36
|
+
- NET
|
|
37
|
+
- NOTE
|
|
38
|
+
- NVDA
|
|
39
|
+
- OSS
|
|
40
|
+
- PATH
|
|
41
|
+
- PDF
|
|
42
|
+
- PHP
|
|
43
|
+
- POST
|
|
44
|
+
- RAM
|
|
45
|
+
- REPL
|
|
46
|
+
- RSA
|
|
47
|
+
- SCM
|
|
48
|
+
- SCSS
|
|
49
|
+
- SDK
|
|
50
|
+
- SQL
|
|
51
|
+
- SSH
|
|
52
|
+
- SSL
|
|
53
|
+
- SVG
|
|
54
|
+
- TBD
|
|
55
|
+
- TCP
|
|
56
|
+
- TODO
|
|
57
|
+
- URI
|
|
58
|
+
- URL
|
|
59
|
+
- USB
|
|
60
|
+
- UTF
|
|
61
|
+
- XML
|
|
62
|
+
- XSS
|
|
63
|
+
- YAML
|
|
64
|
+
- ZIP
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Remove '%s' if it's not important to the meaning of the statement."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences
|
|
4
|
+
ignorecase: true
|
|
5
|
+
level: warning
|
|
6
|
+
action:
|
|
7
|
+
name: remove
|
|
8
|
+
tokens:
|
|
9
|
+
- abnormally
|
|
10
|
+
- absentmindedly
|
|
11
|
+
- accidentally
|
|
12
|
+
- adventurously
|
|
13
|
+
- anxiously
|
|
14
|
+
- arrogantly
|
|
15
|
+
- awkwardly
|
|
16
|
+
- bashfully
|
|
17
|
+
- beautifully
|
|
18
|
+
- bitterly
|
|
19
|
+
- bleakly
|
|
20
|
+
- blindly
|
|
21
|
+
- blissfully
|
|
22
|
+
- boastfully
|
|
23
|
+
- boldly
|
|
24
|
+
- bravely
|
|
25
|
+
- briefly
|
|
26
|
+
- brightly
|
|
27
|
+
- briskly
|
|
28
|
+
- broadly
|
|
29
|
+
- busily
|
|
30
|
+
- calmly
|
|
31
|
+
- carefully
|
|
32
|
+
- carelessly
|
|
33
|
+
- cautiously
|
|
34
|
+
- cheerfully
|
|
35
|
+
- cleverly
|
|
36
|
+
- closely
|
|
37
|
+
- coaxingly
|
|
38
|
+
- colorfully
|
|
39
|
+
- continually
|
|
40
|
+
- coolly
|
|
41
|
+
- courageously
|
|
42
|
+
- crossly
|
|
43
|
+
- cruelly
|
|
44
|
+
- curiously
|
|
45
|
+
- daintily
|
|
46
|
+
- dearly
|
|
47
|
+
- deceivingly
|
|
48
|
+
- deeply
|
|
49
|
+
- defiantly
|
|
50
|
+
- deliberately
|
|
51
|
+
- delightfully
|
|
52
|
+
- diligently
|
|
53
|
+
- dimly
|
|
54
|
+
- doubtfully
|
|
55
|
+
- dreamily
|
|
56
|
+
- easily
|
|
57
|
+
- effectively
|
|
58
|
+
- elegantly
|
|
59
|
+
- energetically
|
|
60
|
+
- enormously
|
|
61
|
+
- enthusiastically
|
|
62
|
+
- excitedly
|
|
63
|
+
- extremely
|
|
64
|
+
- fairly
|
|
65
|
+
- faithfully
|
|
66
|
+
- famously
|
|
67
|
+
- ferociously
|
|
68
|
+
- fervently
|
|
69
|
+
- fiercely
|
|
70
|
+
- fondly
|
|
71
|
+
- foolishly
|
|
72
|
+
- fortunately
|
|
73
|
+
- frankly
|
|
74
|
+
- frantically
|
|
75
|
+
- freely
|
|
76
|
+
- frenetically
|
|
77
|
+
- frightfully
|
|
78
|
+
- furiously
|
|
79
|
+
- generally
|
|
80
|
+
- generously
|
|
81
|
+
- gently
|
|
82
|
+
- gladly
|
|
83
|
+
- gleefully
|
|
84
|
+
- gracefully
|
|
85
|
+
- gratefully
|
|
86
|
+
- greatly
|
|
87
|
+
- greedily
|
|
88
|
+
- happily
|
|
89
|
+
- hastily
|
|
90
|
+
- healthily
|
|
91
|
+
- heavily
|
|
92
|
+
- helplessly
|
|
93
|
+
- honestly
|
|
94
|
+
- hopelessly
|
|
95
|
+
- hungrily
|
|
96
|
+
- innocently
|
|
97
|
+
- inquisitively
|
|
98
|
+
- intensely
|
|
99
|
+
- intently
|
|
100
|
+
- interestingly
|
|
101
|
+
- inwardly
|
|
102
|
+
- irritably
|
|
103
|
+
- jaggedly
|
|
104
|
+
- jealously
|
|
105
|
+
- jovially
|
|
106
|
+
- joyfully
|
|
107
|
+
- joyously
|
|
108
|
+
- jubilantly
|
|
109
|
+
- judgmentally
|
|
110
|
+
- justly
|
|
111
|
+
- keenly
|
|
112
|
+
- kiddingly
|
|
113
|
+
- kindheartedly
|
|
114
|
+
- knavishly
|
|
115
|
+
- knowingly
|
|
116
|
+
- knowledgeably
|
|
117
|
+
- lazily
|
|
118
|
+
- lightly
|
|
119
|
+
- limply
|
|
120
|
+
- lively
|
|
121
|
+
- loftily
|
|
122
|
+
- longingly
|
|
123
|
+
- loosely
|
|
124
|
+
- loudly
|
|
125
|
+
- lovingly
|
|
126
|
+
- loyally
|
|
127
|
+
- madly
|
|
128
|
+
- majestically
|
|
129
|
+
- meaningfully
|
|
130
|
+
- mechanically
|
|
131
|
+
- merrily
|
|
132
|
+
- miserably
|
|
133
|
+
- mockingly
|
|
134
|
+
- mortally
|
|
135
|
+
- mysteriously
|
|
136
|
+
- naturally
|
|
137
|
+
- nearly
|
|
138
|
+
- neatly
|
|
139
|
+
- nervously
|
|
140
|
+
- nicely
|
|
141
|
+
- noisily
|
|
142
|
+
- obediently
|
|
143
|
+
- obnoxiously
|
|
144
|
+
- oddly
|
|
145
|
+
- offensively
|
|
146
|
+
- optimistically
|
|
147
|
+
- overconfidently
|
|
148
|
+
- painfully
|
|
149
|
+
- partially
|
|
150
|
+
- patiently
|
|
151
|
+
- perfectly
|
|
152
|
+
- playfully
|
|
153
|
+
- politely
|
|
154
|
+
- poorly
|
|
155
|
+
- positively
|
|
156
|
+
- potentially
|
|
157
|
+
- powerfully
|
|
158
|
+
- promptly
|
|
159
|
+
- properly
|
|
160
|
+
- punctually
|
|
161
|
+
- quaintly
|
|
162
|
+
- queasily
|
|
163
|
+
- queerly
|
|
164
|
+
- questionably
|
|
165
|
+
- quickly
|
|
166
|
+
- quietly
|
|
167
|
+
- quirkily
|
|
168
|
+
- quite
|
|
169
|
+
- quizzically
|
|
170
|
+
- randomly
|
|
171
|
+
- rapidly
|
|
172
|
+
- rarely
|
|
173
|
+
- readily
|
|
174
|
+
- really
|
|
175
|
+
- reassuringly
|
|
176
|
+
- recklessly
|
|
177
|
+
- regularly
|
|
178
|
+
- reluctantly
|
|
179
|
+
- repeatedly
|
|
180
|
+
- reproachfully
|
|
181
|
+
- restfully
|
|
182
|
+
- righteously
|
|
183
|
+
- rightfully
|
|
184
|
+
- rigidly
|
|
185
|
+
- roughly
|
|
186
|
+
- rudely
|
|
187
|
+
- safely
|
|
188
|
+
- scarcely
|
|
189
|
+
- scarily
|
|
190
|
+
- searchingly
|
|
191
|
+
- sedately
|
|
192
|
+
- seemingly
|
|
193
|
+
- selfishly
|
|
194
|
+
- separately
|
|
195
|
+
- seriously
|
|
196
|
+
- shakily
|
|
197
|
+
- sharply
|
|
198
|
+
- sheepishly
|
|
199
|
+
- shrilly
|
|
200
|
+
- shyly
|
|
201
|
+
- silently
|
|
202
|
+
- sleepily
|
|
203
|
+
- slowly
|
|
204
|
+
- smoothly
|
|
205
|
+
- softly
|
|
206
|
+
- solemnly
|
|
207
|
+
- solidly
|
|
208
|
+
- speedily
|
|
209
|
+
- stealthily
|
|
210
|
+
- sternly
|
|
211
|
+
- strictly
|
|
212
|
+
- suddenly
|
|
213
|
+
- supposedly
|
|
214
|
+
- surprisingly
|
|
215
|
+
- suspiciously
|
|
216
|
+
- sweetly
|
|
217
|
+
- swiftly
|
|
218
|
+
- sympathetically
|
|
219
|
+
- tenderly
|
|
220
|
+
- tensely
|
|
221
|
+
- terribly
|
|
222
|
+
- thankfully
|
|
223
|
+
- thoroughly
|
|
224
|
+
- thoughtfully
|
|
225
|
+
- tightly
|
|
226
|
+
- tremendously
|
|
227
|
+
- triumphantly
|
|
228
|
+
- truthfully
|
|
229
|
+
- ultimately
|
|
230
|
+
- unabashedly
|
|
231
|
+
- unaccountably
|
|
232
|
+
- unbearably
|
|
233
|
+
- unethically
|
|
234
|
+
- unexpectedly
|
|
235
|
+
- unfortunately
|
|
236
|
+
- unimpressively
|
|
237
|
+
- unnaturally
|
|
238
|
+
- unnecessarily
|
|
239
|
+
- urgently
|
|
240
|
+
- usefully
|
|
241
|
+
- uselessly
|
|
242
|
+
- utterly
|
|
243
|
+
- vacantly
|
|
244
|
+
- vaguely
|
|
245
|
+
- vainly
|
|
246
|
+
- valiantly
|
|
247
|
+
- vastly
|
|
248
|
+
- verbally
|
|
249
|
+
- very
|
|
250
|
+
- viciously
|
|
251
|
+
- victoriously
|
|
252
|
+
- violently
|
|
253
|
+
- vivaciously
|
|
254
|
+
- voluntarily
|
|
255
|
+
- warmly
|
|
256
|
+
- weakly
|
|
257
|
+
- wearily
|
|
258
|
+
- wetly
|
|
259
|
+
- wholly
|
|
260
|
+
- wildly
|
|
261
|
+
- willfully
|
|
262
|
+
- wisely
|
|
263
|
+
- woefully
|
|
264
|
+
- wonderfully
|
|
265
|
+
- worriedly
|
|
266
|
+
- yawningly
|
|
267
|
+
- yearningly
|
|
268
|
+
- yieldingly
|
|
269
|
+
- youthfully
|
|
270
|
+
- zealously
|
|
271
|
+
- zestfully
|
|
272
|
+
- zestily
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "In general, don't hyphenate '%s'."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/auto
|
|
4
|
+
ignorecase: true
|
|
5
|
+
level: error
|
|
6
|
+
action:
|
|
7
|
+
name: convert
|
|
8
|
+
params:
|
|
9
|
+
- simple
|
|
10
|
+
tokens:
|
|
11
|
+
- 'auto-\w+'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Don't use '%s'. See the A-Z word list for details."
|
|
3
|
+
# See the A-Z word list
|
|
4
|
+
link: https://docs.microsoft.com/en-us/style-guide
|
|
5
|
+
ignorecase: true
|
|
6
|
+
level: error
|
|
7
|
+
tokens:
|
|
8
|
+
- abortion
|
|
9
|
+
- and so on
|
|
10
|
+
- app(?:lication)?s? (?:developer|program)
|
|
11
|
+
- app(?:lication)? file
|
|
12
|
+
- backbone
|
|
13
|
+
- backend
|
|
14
|
+
- contiguous selection
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
extends: substitution
|
|
2
|
+
message: "Use '%s' instead of '%s'."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-contractions
|
|
4
|
+
level: error
|
|
5
|
+
ignorecase: true
|
|
6
|
+
action:
|
|
7
|
+
name: replace
|
|
8
|
+
swap:
|
|
9
|
+
are not: aren't
|
|
10
|
+
cannot: can't
|
|
11
|
+
could not: couldn't
|
|
12
|
+
did not: didn't
|
|
13
|
+
do not: don't
|
|
14
|
+
does not: doesn't
|
|
15
|
+
has not: hasn't
|
|
16
|
+
have not: haven't
|
|
17
|
+
how is: how's
|
|
18
|
+
is not: isn't
|
|
19
|
+
|
|
20
|
+
'it is(?!\.)': it's
|
|
21
|
+
'it''s(?=\.)': it is
|
|
22
|
+
|
|
23
|
+
should not: shouldn't
|
|
24
|
+
|
|
25
|
+
"that is(?![.,])": that's
|
|
26
|
+
'that''s(?=\.)': that is
|
|
27
|
+
|
|
28
|
+
'they are(?!\.)': they're
|
|
29
|
+
'they''re(?=\.)': they are
|
|
30
|
+
|
|
31
|
+
was not: wasn't
|
|
32
|
+
|
|
33
|
+
'we are(?!\.)': we're
|
|
34
|
+
'we''re(?=\.)': we are
|
|
35
|
+
|
|
36
|
+
'we have(?!\.)': we've
|
|
37
|
+
'we''ve(?=\.)': we have
|
|
38
|
+
|
|
39
|
+
were not: weren't
|
|
40
|
+
|
|
41
|
+
'what is(?!\.)': what's
|
|
42
|
+
'what''s(?=\.)': what is
|
|
43
|
+
|
|
44
|
+
'when is(?!\.)': when's
|
|
45
|
+
'when''s(?=\.)': when is
|
|
46
|
+
|
|
47
|
+
'where is(?!\.)': where's
|
|
48
|
+
'where''s(?=\.)': where is
|
|
49
|
+
|
|
50
|
+
will not: won't
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Remove the spaces around '%s'."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/emes
|
|
4
|
+
ignorecase: true
|
|
5
|
+
nonword: true
|
|
6
|
+
level: error
|
|
7
|
+
action:
|
|
8
|
+
name: edit
|
|
9
|
+
params:
|
|
10
|
+
- trim
|
|
11
|
+
- " "
|
|
12
|
+
tokens:
|
|
13
|
+
- '\s[—–]\s|\s[—–]|[—–]\s'
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: Use 'July 31, 2016' format, not '%s'.
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms
|
|
4
|
+
ignorecase: true
|
|
5
|
+
level: error
|
|
6
|
+
nonword: true
|
|
7
|
+
tokens:
|
|
8
|
+
- '\d{1,2} (?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?) \d{4}'
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Don't use ordinal numbers for dates."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/numbers#numbers-in-dates
|
|
4
|
+
level: error
|
|
5
|
+
nonword: true
|
|
6
|
+
ignorecase: true
|
|
7
|
+
raw:
|
|
8
|
+
- \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?)\b\s*
|
|
9
|
+
tokens:
|
|
10
|
+
- first
|
|
11
|
+
- second
|
|
12
|
+
- third
|
|
13
|
+
- fourth
|
|
14
|
+
- fifth
|
|
15
|
+
- sixth
|
|
16
|
+
- seventh
|
|
17
|
+
- eighth
|
|
18
|
+
- ninth
|
|
19
|
+
- tenth
|
|
20
|
+
- eleventh
|
|
21
|
+
- twelfth
|
|
22
|
+
- thirteenth
|
|
23
|
+
- fourteenth
|
|
24
|
+
- fifteenth
|
|
25
|
+
- sixteenth
|
|
26
|
+
- seventeenth
|
|
27
|
+
- eighteenth
|
|
28
|
+
- nineteenth
|
|
29
|
+
- twentieth
|
|
30
|
+
- twenty-first
|
|
31
|
+
- twenty-second
|
|
32
|
+
- twenty-third
|
|
33
|
+
- twenty-fourth
|
|
34
|
+
- twenty-fifth
|
|
35
|
+
- twenty-sixth
|
|
36
|
+
- twenty-seventh
|
|
37
|
+
- twenty-eighth
|
|
38
|
+
- twenty-ninth
|
|
39
|
+
- thirtieth
|
|
40
|
+
- thirty-first
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Use first person (such as '%s') sparingly."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/grammar/person
|
|
4
|
+
ignorecase: true
|
|
5
|
+
level: warning
|
|
6
|
+
nonword: true
|
|
7
|
+
tokens:
|
|
8
|
+
- (?:^|\s)I(?=\s)
|
|
9
|
+
- (?:^|\s)I(?=,\s)
|
|
10
|
+
- \bI'd\b
|
|
11
|
+
- \bI'll\b
|
|
12
|
+
- \bI'm\b
|
|
13
|
+
- \bI've\b
|
|
14
|
+
- \bme\b
|
|
15
|
+
- \bmy\b
|
|
16
|
+
- \bmine\b
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
extends: substitution
|
|
2
|
+
message: "Use '%s' instead of '%s'."
|
|
3
|
+
link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words
|
|
4
|
+
ignorecase: true
|
|
5
|
+
level: error
|
|
6
|
+
nonword: true
|
|
7
|
+
action:
|
|
8
|
+
name: replace
|
|
9
|
+
swap:
|
|
10
|
+
'\b(?:eg|e\.g\.)[\s,]': for example
|
|
11
|
+
'\b(?:ie|i\.e\.)[\s,]': that is
|
|
12
|
+
'\b(?:viz\.)[\s,]': namely
|
|
13
|
+
'\b(?:ergo)[\s,]': therefore
|