@redocly/recheck 0.1.0 → 0.3.0

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.
Files changed (595) hide show
  1. package/README.md +1023 -56
  2. package/dist/cli.js +40 -7
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/markdoc-schema.d.ts +17 -0
  5. package/dist/commands/markdoc-schema.d.ts.map +1 -0
  6. package/dist/commands/markdoc-schema.js +127 -0
  7. package/dist/commands/markdoc-schema.js.map +1 -0
  8. package/dist/commands/run.d.ts +2 -1
  9. package/dist/commands/run.d.ts.map +1 -1
  10. package/dist/commands/run.js +87 -10
  11. package/dist/commands/run.js.map +1 -1
  12. package/dist/config/load.d.ts +11 -0
  13. package/dist/config/load.d.ts.map +1 -1
  14. package/dist/config/load.js +12 -2
  15. package/dist/config/load.js.map +1 -1
  16. package/dist/config/presets/google.d.ts +3 -0
  17. package/dist/config/presets/google.d.ts.map +1 -0
  18. package/dist/config/presets/google.js +1671 -0
  19. package/dist/config/presets/google.js.map +1 -0
  20. package/dist/config/presets/inclusive-language.d.ts +3 -0
  21. package/dist/config/presets/inclusive-language.d.ts.map +1 -0
  22. package/dist/config/presets/inclusive-language.js +321 -0
  23. package/dist/config/presets/inclusive-language.js.map +1 -0
  24. package/dist/config/presets/index.d.ts +67 -0
  25. package/dist/config/presets/index.d.ts.map +1 -0
  26. package/dist/config/presets/index.js +137 -0
  27. package/dist/config/presets/index.js.map +1 -0
  28. package/dist/config/presets/markdoc.d.ts +21 -0
  29. package/dist/config/presets/markdoc.d.ts.map +1 -0
  30. package/dist/config/presets/markdoc.js +101 -0
  31. package/dist/config/presets/markdoc.js.map +1 -0
  32. package/dist/config/presets/markdown-relaxed.d.ts +3 -0
  33. package/dist/config/presets/markdown-relaxed.d.ts.map +1 -0
  34. package/dist/config/presets/markdown-relaxed.js +98 -0
  35. package/dist/config/presets/markdown-relaxed.js.map +1 -0
  36. package/dist/config/presets/markdown.d.ts +43 -0
  37. package/dist/config/presets/markdown.d.ts.map +1 -0
  38. package/dist/config/presets/markdown.js +132 -0
  39. package/dist/config/presets/markdown.js.map +1 -0
  40. package/dist/config/presets/microsoft.d.ts +3 -0
  41. package/dist/config/presets/microsoft.d.ts.map +1 -0
  42. package/dist/config/presets/microsoft.js +2268 -0
  43. package/dist/config/presets/microsoft.js.map +1 -0
  44. package/dist/config/presets/minimal.d.ts +3 -0
  45. package/dist/config/presets/minimal.d.ts.map +1 -0
  46. package/dist/config/presets/minimal.js +21 -0
  47. package/dist/config/presets/minimal.js.map +1 -0
  48. package/dist/config/presets/plain-language.d.ts +3 -0
  49. package/dist/config/presets/plain-language.d.ts.map +1 -0
  50. package/dist/config/presets/plain-language.js +351 -0
  51. package/dist/config/presets/plain-language.js.map +1 -0
  52. package/dist/config/presets/prose.d.ts +52 -0
  53. package/dist/config/presets/prose.d.ts.map +1 -0
  54. package/dist/config/presets/prose.js +138 -0
  55. package/dist/config/presets/prose.js.map +1 -0
  56. package/dist/config/schema.d.ts +128 -22
  57. package/dist/config/schema.d.ts.map +1 -1
  58. package/dist/config/schema.js +105 -21
  59. package/dist/config/schema.js.map +1 -1
  60. package/dist/config/validate.d.ts +12 -2
  61. package/dist/config/validate.d.ts.map +1 -1
  62. package/dist/config/validate.js +1200 -44
  63. package/dist/config/validate.js.map +1 -1
  64. package/dist/core/auto-fix.d.ts +8 -13
  65. package/dist/core/auto-fix.d.ts.map +1 -1
  66. package/dist/core/auto-fix.js +94 -75
  67. package/dist/core/auto-fix.js.map +1 -1
  68. package/dist/core/case-preserve.d.ts +46 -0
  69. package/dist/core/case-preserve.d.ts.map +1 -0
  70. package/dist/core/case-preserve.js +57 -0
  71. package/dist/core/case-preserve.js.map +1 -0
  72. package/dist/core/directives.d.ts +9 -0
  73. package/dist/core/directives.d.ts.map +1 -0
  74. package/dist/core/directives.js +73 -0
  75. package/dist/core/directives.js.map +1 -0
  76. package/dist/core/files.d.ts +63 -0
  77. package/dist/core/files.d.ts.map +1 -1
  78. package/dist/core/files.js +185 -0
  79. package/dist/core/files.js.map +1 -1
  80. package/dist/core/inline-code.d.ts +87 -0
  81. package/dist/core/inline-code.d.ts.map +1 -0
  82. package/dist/core/inline-code.js +104 -0
  83. package/dist/core/inline-code.js.map +1 -0
  84. package/dist/core/line-endings.d.ts +32 -0
  85. package/dist/core/line-endings.d.ts.map +1 -0
  86. package/dist/core/line-endings.js +65 -0
  87. package/dist/core/line-endings.js.map +1 -0
  88. package/dist/core/markdoc-tags.d.ts +79 -0
  89. package/dist/core/markdoc-tags.d.ts.map +1 -0
  90. package/dist/core/markdoc-tags.js +131 -0
  91. package/dist/core/markdoc-tags.js.map +1 -0
  92. package/dist/core/rule-filters.d.ts +17 -0
  93. package/dist/core/rule-filters.d.ts.map +1 -1
  94. package/dist/core/rule-filters.js +64 -0
  95. package/dist/core/rule-filters.js.map +1 -1
  96. package/dist/core/runner.d.ts +92 -3
  97. package/dist/core/runner.d.ts.map +1 -1
  98. package/dist/core/runner.js +348 -110
  99. package/dist/core/runner.js.map +1 -1
  100. package/dist/core/timing.d.ts.map +1 -1
  101. package/dist/data/markdoc-realm-schema.d.ts +3 -0
  102. package/dist/data/markdoc-realm-schema.d.ts.map +1 -0
  103. package/dist/data/markdoc-realm-schema.js +760 -0
  104. package/dist/data/markdoc-realm-schema.js.map +1 -0
  105. package/dist/data/proper-nouns.d.ts +2 -0
  106. package/dist/data/proper-nouns.d.ts.map +1 -0
  107. package/dist/data/proper-nouns.js +47 -0
  108. package/dist/data/proper-nouns.js.map +1 -0
  109. package/dist/index.d.ts +90 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +152 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/metrics/formulas.d.ts +17 -0
  114. package/dist/metrics/formulas.d.ts.map +1 -0
  115. package/dist/metrics/formulas.js +70 -0
  116. package/dist/metrics/formulas.js.map +1 -0
  117. package/dist/metrics/index.d.ts +5 -0
  118. package/dist/metrics/index.d.ts.map +1 -0
  119. package/dist/metrics/index.js +3 -0
  120. package/dist/metrics/index.js.map +1 -0
  121. package/dist/metrics/statistics.d.ts +27 -0
  122. package/dist/metrics/statistics.d.ts.map +1 -0
  123. package/dist/metrics/statistics.js +56 -0
  124. package/dist/metrics/statistics.js.map +1 -0
  125. package/dist/parser/index.d.ts +18 -0
  126. package/dist/parser/index.d.ts.map +1 -0
  127. package/dist/parser/index.js +168 -0
  128. package/dist/parser/index.js.map +1 -0
  129. package/dist/parser/markdoc/extract-statics.d.ts +45 -0
  130. package/dist/parser/markdoc/extract-statics.d.ts.map +1 -0
  131. package/dist/parser/markdoc/extract-statics.js +139 -0
  132. package/dist/parser/markdoc/extract-statics.js.map +1 -0
  133. package/dist/parser/markdoc/pairing.d.ts +63 -0
  134. package/dist/parser/markdoc/pairing.d.ts.map +1 -0
  135. package/dist/parser/markdoc/pairing.js +94 -0
  136. package/dist/parser/markdoc/pairing.js.map +1 -0
  137. package/dist/parser/markdoc/schema.d.ts +85 -0
  138. package/dist/parser/markdoc/schema.d.ts.map +1 -0
  139. package/dist/parser/markdoc/schema.js +86 -0
  140. package/dist/parser/markdoc/schema.js.map +1 -0
  141. package/dist/parser/markdoc/span.d.ts +64 -0
  142. package/dist/parser/markdoc/span.d.ts.map +1 -0
  143. package/dist/parser/markdoc/span.js +729 -0
  144. package/dist/parser/markdoc/span.js.map +1 -0
  145. package/dist/parser/markdoc/structure.d.ts +28 -0
  146. package/dist/parser/markdoc/structure.d.ts.map +1 -0
  147. package/dist/parser/markdoc/structure.js +153 -0
  148. package/dist/parser/markdoc/structure.js.map +1 -0
  149. package/dist/parser/markdoc/syntax.d.ts +44 -0
  150. package/dist/parser/markdoc/syntax.d.ts.map +1 -0
  151. package/dist/parser/markdoc/syntax.js +317 -0
  152. package/dist/parser/markdoc/syntax.js.map +1 -0
  153. package/dist/parser/types.d.ts +18 -0
  154. package/dist/parser/types.d.ts.map +1 -0
  155. package/dist/parser/types.js.map +1 -0
  156. package/dist/reporter/fixes.d.ts.map +1 -1
  157. package/dist/reporter/fixes.js +22 -1
  158. package/dist/reporter/fixes.js.map +1 -1
  159. package/dist/reporter/statistics.d.ts +1 -8
  160. package/dist/reporter/statistics.d.ts.map +1 -1
  161. package/dist/reporter/statistics.js.map +1 -1
  162. package/dist/rules/registry.d.ts +15 -0
  163. package/dist/rules/registry.d.ts.map +1 -0
  164. package/dist/rules/registry.js +81 -0
  165. package/dist/rules/registry.js.map +1 -0
  166. package/dist/rules/scope/capitalization.d.ts +3 -0
  167. package/dist/rules/scope/capitalization.d.ts.map +1 -0
  168. package/dist/rules/scope/capitalization.js +163 -0
  169. package/dist/rules/scope/capitalization.js.map +1 -0
  170. package/dist/rules/scope/conditional.d.ts +3 -0
  171. package/dist/rules/scope/conditional.d.ts.map +1 -0
  172. package/dist/rules/scope/conditional.js +112 -0
  173. package/dist/rules/scope/conditional.js.map +1 -0
  174. package/dist/rules/scope/consistency.d.ts +3 -0
  175. package/dist/rules/scope/consistency.d.ts.map +1 -0
  176. package/dist/rules/scope/consistency.js +178 -0
  177. package/dist/rules/scope/consistency.js.map +1 -0
  178. package/dist/rules/scope/length.d.ts +3 -0
  179. package/dist/rules/scope/length.d.ts.map +1 -0
  180. package/dist/rules/scope/length.js +69 -0
  181. package/dist/rules/scope/length.js.map +1 -0
  182. package/dist/rules/scope/max-image-size.d.ts +3 -0
  183. package/dist/rules/scope/max-image-size.d.ts.map +1 -0
  184. package/dist/rules/scope/max-image-size.js +65 -0
  185. package/dist/rules/scope/max-image-size.js.map +1 -0
  186. package/dist/rules/scope/metric.d.ts +17 -0
  187. package/dist/rules/scope/metric.d.ts.map +1 -0
  188. package/dist/rules/scope/metric.js +216 -0
  189. package/dist/rules/scope/metric.js.map +1 -0
  190. package/dist/rules/scope/occurrence.d.ts +3 -0
  191. package/dist/rules/scope/occurrence.d.ts.map +1 -0
  192. package/dist/rules/scope/occurrence.js +48 -0
  193. package/dist/rules/scope/occurrence.js.map +1 -0
  194. package/dist/rules/scope/pattern.d.ts +3 -0
  195. package/dist/rules/scope/pattern.d.ts.map +1 -0
  196. package/dist/rules/scope/pattern.js +75 -0
  197. package/dist/rules/scope/pattern.js.map +1 -0
  198. package/dist/rules/scope/repetition.d.ts +3 -0
  199. package/dist/rules/scope/repetition.d.ts.map +1 -0
  200. package/dist/rules/scope/repetition.js +139 -0
  201. package/dist/rules/scope/repetition.js.map +1 -0
  202. package/dist/rules/scope/semantic-line-breaks.d.ts +3 -0
  203. package/dist/rules/scope/semantic-line-breaks.d.ts.map +1 -0
  204. package/dist/rules/scope/semantic-line-breaks.js +213 -0
  205. package/dist/rules/scope/semantic-line-breaks.js.map +1 -0
  206. package/dist/rules/scope/spelling.d.ts +27 -0
  207. package/dist/rules/scope/spelling.d.ts.map +1 -0
  208. package/dist/rules/scope/spelling.js +227 -0
  209. package/dist/rules/scope/spelling.js.map +1 -0
  210. package/dist/rules/scope/swap.d.ts +3 -0
  211. package/dist/rules/scope/swap.d.ts.map +1 -0
  212. package/dist/rules/scope/swap.js +149 -0
  213. package/dist/rules/scope/swap.js.map +1 -0
  214. package/dist/rules/scope/title-case.d.ts +46 -0
  215. package/dist/rules/scope/title-case.d.ts.map +1 -0
  216. package/dist/rules/scope/title-case.js +301 -0
  217. package/dist/rules/scope/title-case.js.map +1 -0
  218. package/dist/rules/token/blanks-around-fences.d.ts +3 -0
  219. package/dist/rules/token/blanks-around-fences.d.ts.map +1 -0
  220. package/dist/rules/token/blanks-around-fences.js +44 -0
  221. package/dist/rules/token/blanks-around-fences.js.map +1 -0
  222. package/dist/rules/token/blanks-around-headings.d.ts +3 -0
  223. package/dist/rules/token/blanks-around-headings.d.ts.map +1 -0
  224. package/dist/rules/token/blanks-around-headings.js +108 -0
  225. package/dist/rules/token/blanks-around-headings.js.map +1 -0
  226. package/dist/rules/token/blanks-around-lists.d.ts +3 -0
  227. package/dist/rules/token/blanks-around-lists.d.ts.map +1 -0
  228. package/dist/rules/token/blanks-around-lists.js +56 -0
  229. package/dist/rules/token/blanks-around-lists.js.map +1 -0
  230. package/dist/rules/token/blanks-around-tables.d.ts +3 -0
  231. package/dist/rules/token/blanks-around-tables.d.ts.map +1 -0
  232. package/dist/rules/token/blanks-around-tables.js +42 -0
  233. package/dist/rules/token/blanks-around-tables.js.map +1 -0
  234. package/dist/rules/token/code-block-style.d.ts +3 -0
  235. package/dist/rules/token/code-block-style.d.ts.map +1 -0
  236. package/dist/rules/token/code-block-style.js +30 -0
  237. package/dist/rules/token/code-block-style.js.map +1 -0
  238. package/dist/rules/token/code-fence-style.d.ts +3 -0
  239. package/dist/rules/token/code-fence-style.d.ts.map +1 -0
  240. package/dist/rules/token/code-fence-style.js +35 -0
  241. package/dist/rules/token/code-fence-style.js.map +1 -0
  242. package/dist/rules/token/commands-show-output.d.ts +3 -0
  243. package/dist/rules/token/commands-show-output.d.ts.map +1 -0
  244. package/dist/rules/token/commands-show-output.js +38 -0
  245. package/dist/rules/token/commands-show-output.js.map +1 -0
  246. package/dist/rules/token/descriptive-link-text.d.ts +3 -0
  247. package/dist/rules/token/descriptive-link-text.d.ts.map +1 -0
  248. package/dist/rules/token/descriptive-link-text.js +53 -0
  249. package/dist/rules/token/descriptive-link-text.js.map +1 -0
  250. package/dist/rules/token/emphasis-style.d.ts +3 -0
  251. package/dist/rules/token/emphasis-style.d.ts.map +1 -0
  252. package/dist/rules/token/emphasis-style.js +51 -0
  253. package/dist/rules/token/emphasis-style.js.map +1 -0
  254. package/dist/rules/token/fenced-code-language.d.ts +3 -0
  255. package/dist/rules/token/fenced-code-language.d.ts.map +1 -0
  256. package/dist/rules/token/fenced-code-language.js +35 -0
  257. package/dist/rules/token/fenced-code-language.js.map +1 -0
  258. package/dist/rules/token/first-line-h1.d.ts +3 -0
  259. package/dist/rules/token/first-line-h1.d.ts.map +1 -0
  260. package/dist/rules/token/first-line-h1.js +107 -0
  261. package/dist/rules/token/first-line-h1.js.map +1 -0
  262. package/dist/rules/token/heading-increment.d.ts +3 -0
  263. package/dist/rules/token/heading-increment.d.ts.map +1 -0
  264. package/dist/rules/token/heading-increment.js +27 -0
  265. package/dist/rules/token/heading-increment.js.map +1 -0
  266. package/dist/rules/token/heading-start-left.d.ts +3 -0
  267. package/dist/rules/token/heading-start-left.d.ts.map +1 -0
  268. package/dist/rules/token/heading-start-left.js +31 -0
  269. package/dist/rules/token/heading-start-left.js.map +1 -0
  270. package/dist/rules/token/heading-style.d.ts +3 -0
  271. package/dist/rules/token/heading-style.d.ts.map +1 -0
  272. package/dist/rules/token/heading-style.js +41 -0
  273. package/dist/rules/token/heading-style.js.map +1 -0
  274. package/dist/rules/token/helpers.d.ts +313 -0
  275. package/dist/rules/token/helpers.d.ts.map +1 -0
  276. package/dist/rules/token/helpers.js +746 -0
  277. package/dist/rules/token/helpers.js.map +1 -0
  278. package/dist/rules/token/hr-style.d.ts +3 -0
  279. package/dist/rules/token/hr-style.d.ts.map +1 -0
  280. package/dist/rules/token/hr-style.js +28 -0
  281. package/dist/rules/token/hr-style.js.map +1 -0
  282. package/dist/rules/token/index.d.ts +75 -0
  283. package/dist/rules/token/index.d.ts.map +1 -0
  284. package/dist/rules/token/index.js +226 -0
  285. package/dist/rules/token/index.js.map +1 -0
  286. package/dist/rules/token/line-length.d.ts +3 -0
  287. package/dist/rules/token/line-length.d.ts.map +1 -0
  288. package/dist/rules/token/line-length.js +120 -0
  289. package/dist/rules/token/line-length.js.map +1 -0
  290. package/dist/rules/token/link-fragments.d.ts +3 -0
  291. package/dist/rules/token/link-fragments.d.ts.map +1 -0
  292. package/dist/rules/token/link-fragments.js +145 -0
  293. package/dist/rules/token/link-fragments.js.map +1 -0
  294. package/dist/rules/token/link-image-reference-definitions.d.ts +3 -0
  295. package/dist/rules/token/link-image-reference-definitions.d.ts.map +1 -0
  296. package/dist/rules/token/link-image-reference-definitions.js +50 -0
  297. package/dist/rules/token/link-image-reference-definitions.js.map +1 -0
  298. package/dist/rules/token/link-image-style.d.ts +3 -0
  299. package/dist/rules/token/link-image-style.d.ts.map +1 -0
  300. package/dist/rules/token/link-image-style.js +131 -0
  301. package/dist/rules/token/link-image-style.js.map +1 -0
  302. package/dist/rules/token/list-indent.d.ts +3 -0
  303. package/dist/rules/token/list-indent.d.ts.map +1 -0
  304. package/dist/rules/token/list-indent.js +60 -0
  305. package/dist/rules/token/list-indent.js.map +1 -0
  306. package/dist/rules/token/list-length.d.ts +3 -0
  307. package/dist/rules/token/list-length.d.ts.map +1 -0
  308. package/dist/rules/token/list-length.js +55 -0
  309. package/dist/rules/token/list-length.js.map +1 -0
  310. package/dist/rules/token/list-marker-space.d.ts +3 -0
  311. package/dist/rules/token/list-marker-space.d.ts.map +1 -0
  312. package/dist/rules/token/list-marker-space.js +52 -0
  313. package/dist/rules/token/list-marker-space.js.map +1 -0
  314. package/dist/rules/token/markdoc-attributes.d.ts +3 -0
  315. package/dist/rules/token/markdoc-attributes.d.ts.map +1 -0
  316. package/dist/rules/token/markdoc-attributes.js +269 -0
  317. package/dist/rules/token/markdoc-attributes.js.map +1 -0
  318. package/dist/rules/token/markdoc-pairing.d.ts +3 -0
  319. package/dist/rules/token/markdoc-pairing.d.ts.map +1 -0
  320. package/dist/rules/token/markdoc-pairing.js +73 -0
  321. package/dist/rules/token/markdoc-pairing.js.map +1 -0
  322. package/dist/rules/token/markdoc-syntax.d.ts +3 -0
  323. package/dist/rules/token/markdoc-syntax.d.ts.map +1 -0
  324. package/dist/rules/token/markdoc-syntax.js +119 -0
  325. package/dist/rules/token/markdoc-syntax.js.map +1 -0
  326. package/dist/rules/token/markdoc-unknown-tag.d.ts +3 -0
  327. package/dist/rules/token/markdoc-unknown-tag.d.ts.map +1 -0
  328. package/dist/rules/token/markdoc-unknown-tag.js +64 -0
  329. package/dist/rules/token/markdoc-unknown-tag.js.map +1 -0
  330. package/dist/rules/token/messages.d.ts +4 -0
  331. package/dist/rules/token/messages.d.ts.map +1 -0
  332. package/dist/rules/token/messages.js +20 -0
  333. package/dist/rules/token/messages.js.map +1 -0
  334. package/dist/rules/token/no-alt-text.d.ts +3 -0
  335. package/dist/rules/token/no-alt-text.d.ts.map +1 -0
  336. package/dist/rules/token/no-alt-text.js +47 -0
  337. package/dist/rules/token/no-alt-text.js.map +1 -0
  338. package/dist/rules/token/no-bare-urls.d.ts +3 -0
  339. package/dist/rules/token/no-bare-urls.d.ts.map +1 -0
  340. package/dist/rules/token/no-bare-urls.js +88 -0
  341. package/dist/rules/token/no-bare-urls.js.map +1 -0
  342. package/dist/rules/token/no-blanks-blockquote.d.ts +3 -0
  343. package/dist/rules/token/no-blanks-blockquote.d.ts.map +1 -0
  344. package/dist/rules/token/no-blanks-blockquote.js +39 -0
  345. package/dist/rules/token/no-blanks-blockquote.js.map +1 -0
  346. package/dist/rules/token/no-duplicate-heading.d.ts +3 -0
  347. package/dist/rules/token/no-duplicate-heading.d.ts.map +1 -0
  348. package/dist/rules/token/no-duplicate-heading.js +101 -0
  349. package/dist/rules/token/no-duplicate-heading.js.map +1 -0
  350. package/dist/rules/token/no-duplicate-link-destinations.d.ts +3 -0
  351. package/dist/rules/token/no-duplicate-link-destinations.d.ts.map +1 -0
  352. package/dist/rules/token/no-duplicate-link-destinations.js +65 -0
  353. package/dist/rules/token/no-duplicate-link-destinations.js.map +1 -0
  354. package/dist/rules/token/no-emphasis-as-heading.d.ts +3 -0
  355. package/dist/rules/token/no-emphasis-as-heading.d.ts.map +1 -0
  356. package/dist/rules/token/no-emphasis-as-heading.js +44 -0
  357. package/dist/rules/token/no-emphasis-as-heading.js.map +1 -0
  358. package/dist/rules/token/no-empty-headings.d.ts +3 -0
  359. package/dist/rules/token/no-empty-headings.d.ts.map +1 -0
  360. package/dist/rules/token/no-empty-headings.js +28 -0
  361. package/dist/rules/token/no-empty-headings.js.map +1 -0
  362. package/dist/rules/token/no-empty-links.d.ts +3 -0
  363. package/dist/rules/token/no-empty-links.d.ts.map +1 -0
  364. package/dist/rules/token/no-empty-links.js +67 -0
  365. package/dist/rules/token/no-empty-links.js.map +1 -0
  366. package/dist/rules/token/no-hard-tabs.d.ts +3 -0
  367. package/dist/rules/token/no-hard-tabs.d.ts.map +1 -0
  368. package/dist/rules/token/no-hard-tabs.js +76 -0
  369. package/dist/rules/token/no-hard-tabs.js.map +1 -0
  370. package/dist/rules/token/no-inline-html.d.ts +3 -0
  371. package/dist/rules/token/no-inline-html.d.ts.map +1 -0
  372. package/dist/rules/token/no-inline-html.js +45 -0
  373. package/dist/rules/token/no-inline-html.js.map +1 -0
  374. package/dist/rules/token/no-missing-space-atx.d.ts +3 -0
  375. package/dist/rules/token/no-missing-space-atx.d.ts.map +1 -0
  376. package/dist/rules/token/no-missing-space-atx.js +36 -0
  377. package/dist/rules/token/no-missing-space-atx.js.map +1 -0
  378. package/dist/rules/token/no-missing-space-closed-atx.d.ts +3 -0
  379. package/dist/rules/token/no-missing-space-closed-atx.d.ts.map +1 -0
  380. package/dist/rules/token/no-missing-space-closed-atx.js +45 -0
  381. package/dist/rules/token/no-missing-space-closed-atx.js.map +1 -0
  382. package/dist/rules/token/no-multiple-blanks.d.ts +3 -0
  383. package/dist/rules/token/no-multiple-blanks.d.ts.map +1 -0
  384. package/dist/rules/token/no-multiple-blanks.js +35 -0
  385. package/dist/rules/token/no-multiple-blanks.js.map +1 -0
  386. package/dist/rules/token/no-multiple-space-atx.d.ts +13 -0
  387. package/dist/rules/token/no-multiple-space-atx.d.ts.map +1 -0
  388. package/dist/rules/token/no-multiple-space-atx.js +50 -0
  389. package/dist/rules/token/no-multiple-space-atx.js.map +1 -0
  390. package/dist/rules/token/no-multiple-space-blockquote.d.ts +3 -0
  391. package/dist/rules/token/no-multiple-space-blockquote.d.ts.map +1 -0
  392. package/dist/rules/token/no-multiple-space-blockquote.js +43 -0
  393. package/dist/rules/token/no-multiple-space-blockquote.js.map +1 -0
  394. package/dist/rules/token/no-multiple-space-closed-atx.d.ts +3 -0
  395. package/dist/rules/token/no-multiple-space-closed-atx.d.ts.map +1 -0
  396. package/dist/rules/token/no-multiple-space-closed-atx.js +19 -0
  397. package/dist/rules/token/no-multiple-space-closed-atx.js.map +1 -0
  398. package/dist/rules/token/no-reversed-links.d.ts +3 -0
  399. package/dist/rules/token/no-reversed-links.d.ts.map +1 -0
  400. package/dist/rules/token/no-reversed-links.js +52 -0
  401. package/dist/rules/token/no-reversed-links.js.map +1 -0
  402. package/dist/rules/token/no-space-in-code.d.ts +3 -0
  403. package/dist/rules/token/no-space-in-code.d.ts.map +1 -0
  404. package/dist/rules/token/no-space-in-code.js +75 -0
  405. package/dist/rules/token/no-space-in-code.js.map +1 -0
  406. package/dist/rules/token/no-space-in-emphasis.d.ts +3 -0
  407. package/dist/rules/token/no-space-in-emphasis.d.ts.map +1 -0
  408. package/dist/rules/token/no-space-in-emphasis.js +79 -0
  409. package/dist/rules/token/no-space-in-emphasis.js.map +1 -0
  410. package/dist/rules/token/no-space-in-links.d.ts +3 -0
  411. package/dist/rules/token/no-space-in-links.d.ts.map +1 -0
  412. package/dist/rules/token/no-space-in-links.js +48 -0
  413. package/dist/rules/token/no-space-in-links.js.map +1 -0
  414. package/dist/rules/token/no-trailing-punctuation.d.ts +3 -0
  415. package/dist/rules/token/no-trailing-punctuation.d.ts.map +1 -0
  416. package/dist/rules/token/no-trailing-punctuation.js +38 -0
  417. package/dist/rules/token/no-trailing-punctuation.js.map +1 -0
  418. package/dist/rules/token/no-trailing-spaces.d.ts +3 -0
  419. package/dist/rules/token/no-trailing-spaces.d.ts.map +1 -0
  420. package/dist/rules/token/no-trailing-spaces.js +89 -0
  421. package/dist/rules/token/no-trailing-spaces.js.map +1 -0
  422. package/dist/rules/token/ol-prefix.d.ts +3 -0
  423. package/dist/rules/token/ol-prefix.d.ts.map +1 -0
  424. package/dist/rules/token/ol-prefix.js +70 -0
  425. package/dist/rules/token/ol-prefix.js.map +1 -0
  426. package/dist/rules/token/proper-names.d.ts +3 -0
  427. package/dist/rules/token/proper-names.d.ts.map +1 -0
  428. package/dist/rules/token/proper-names.js +93 -0
  429. package/dist/rules/token/proper-names.js.map +1 -0
  430. package/dist/rules/token/reference-links-images.d.ts +3 -0
  431. package/dist/rules/token/reference-links-images.d.ts.map +1 -0
  432. package/dist/rules/token/reference-links-images.js +36 -0
  433. package/dist/rules/token/reference-links-images.js.map +1 -0
  434. package/dist/rules/token/required-headings.d.ts +3 -0
  435. package/dist/rules/token/required-headings.d.ts.map +1 -0
  436. package/dist/rules/token/required-headings.js +83 -0
  437. package/dist/rules/token/required-headings.js.map +1 -0
  438. package/dist/rules/token/single-h1.d.ts +3 -0
  439. package/dist/rules/token/single-h1.d.ts.map +1 -0
  440. package/dist/rules/token/single-h1.js +56 -0
  441. package/dist/rules/token/single-h1.js.map +1 -0
  442. package/dist/rules/token/single-trailing-newline.d.ts +3 -0
  443. package/dist/rules/token/single-trailing-newline.d.ts.map +1 -0
  444. package/dist/rules/token/single-trailing-newline.js +25 -0
  445. package/dist/rules/token/single-trailing-newline.js.map +1 -0
  446. package/dist/rules/token/strong-style.d.ts +3 -0
  447. package/dist/rules/token/strong-style.d.ts.map +1 -0
  448. package/dist/rules/token/strong-style.js +51 -0
  449. package/dist/rules/token/strong-style.js.map +1 -0
  450. package/dist/rules/token/table-column-count.d.ts +3 -0
  451. package/dist/rules/token/table-column-count.d.ts.map +1 -0
  452. package/dist/rules/token/table-column-count.js +44 -0
  453. package/dist/rules/token/table-column-count.js.map +1 -0
  454. package/dist/rules/token/table-column-style.d.ts +3 -0
  455. package/dist/rules/token/table-column-style.d.ts.map +1 -0
  456. package/dist/rules/token/table-column-style.js +179 -0
  457. package/dist/rules/token/table-column-style.js.map +1 -0
  458. package/dist/rules/token/table-pipe-style.d.ts +3 -0
  459. package/dist/rules/token/table-pipe-style.d.ts.map +1 -0
  460. package/dist/rules/token/table-pipe-style.js +54 -0
  461. package/dist/rules/token/table-pipe-style.js.map +1 -0
  462. package/dist/rules/token/ul-indent.d.ts +3 -0
  463. package/dist/rules/token/ul-indent.d.ts.map +1 -0
  464. package/dist/rules/token/ul-indent.js +72 -0
  465. package/dist/rules/token/ul-indent.js.map +1 -0
  466. package/dist/rules/token/ul-style.d.ts +3 -0
  467. package/dist/rules/token/ul-style.d.ts.map +1 -0
  468. package/dist/rules/token/ul-style.js +80 -0
  469. package/dist/rules/token/ul-style.js.map +1 -0
  470. package/dist/rules/types.d.ts +81 -0
  471. package/dist/rules/types.d.ts.map +1 -0
  472. package/dist/rules/types.js +2 -0
  473. package/dist/rules/types.js.map +1 -0
  474. package/dist/rules/utils.d.ts +29 -0
  475. package/dist/rules/utils.d.ts.map +1 -0
  476. package/dist/{assertions → rules}/utils.js +27 -0
  477. package/dist/rules/utils.js.map +1 -0
  478. package/dist/scopes/extractor.d.ts +7 -0
  479. package/dist/scopes/extractor.d.ts.map +1 -0
  480. package/dist/scopes/extractor.js +475 -0
  481. package/dist/scopes/extractor.js.map +1 -0
  482. package/dist/scopes/selector.d.ts +51 -0
  483. package/dist/scopes/selector.d.ts.map +1 -0
  484. package/dist/scopes/selector.js +121 -0
  485. package/dist/scopes/selector.js.map +1 -0
  486. package/dist/scopes/sentences.d.ts +15 -0
  487. package/dist/scopes/sentences.d.ts.map +1 -0
  488. package/dist/scopes/sentences.js +124 -0
  489. package/dist/scopes/sentences.js.map +1 -0
  490. package/dist/scopes/types.d.ts +44 -0
  491. package/dist/scopes/types.d.ts.map +1 -0
  492. package/dist/scopes/types.js +2 -0
  493. package/dist/scopes/types.js.map +1 -0
  494. package/dist/scopes/vocabulary.d.ts +16 -0
  495. package/dist/scopes/vocabulary.d.ts.map +1 -0
  496. package/dist/scopes/vocabulary.js +70 -0
  497. package/dist/scopes/vocabulary.js.map +1 -0
  498. package/dist/types/assertions.d.ts +95 -32
  499. package/dist/types/assertions.d.ts.map +1 -1
  500. package/dist/types/problems.d.ts +4 -5
  501. package/dist/types/problems.d.ts.map +1 -1
  502. package/dist/types/rules.d.ts +4 -6
  503. package/dist/types/rules.d.ts.map +1 -1
  504. package/examples/appendices/google.appendix.yaml +91 -0
  505. package/examples/appendices/inclusive-language.appendix.yaml +61 -0
  506. package/examples/appendices/microsoft.appendix.yaml +99 -0
  507. package/examples/appendices/plain-language.appendix.yaml +88 -0
  508. package/examples/google.yaml +1525 -0
  509. package/examples/inclusive-language.yaml +304 -0
  510. package/examples/microsoft.yaml +1542 -0
  511. package/examples/plain-language.yaml +325 -0
  512. package/package.json +49 -16
  513. package/presets/google/PROVENANCE.md +1022 -0
  514. package/presets/google/sources.json +192 -0
  515. package/presets/inclusive-language/PROVENANCE.md +174 -0
  516. package/presets/inclusive-language/sources.json +107 -0
  517. package/presets/microsoft/PROVENANCE.md +1555 -0
  518. package/presets/microsoft/sources.json +494 -0
  519. package/presets/plain-language/PROVENANCE.md +364 -0
  520. package/presets/plain-language/sources.json +108 -0
  521. package/dist/assertions/bullet-style.d.ts +0 -3
  522. package/dist/assertions/bullet-style.d.ts.map +0 -1
  523. package/dist/assertions/bullet-style.js +0 -60
  524. package/dist/assertions/bullet-style.js.map +0 -1
  525. package/dist/assertions/index.d.ts +0 -21
  526. package/dist/assertions/index.d.ts.map +0 -1
  527. package/dist/assertions/index.js +0 -30
  528. package/dist/assertions/index.js.map +0 -1
  529. package/dist/assertions/max-image-size.d.ts +0 -3
  530. package/dist/assertions/max-image-size.d.ts.map +0 -1
  531. package/dist/assertions/max-image-size.js +0 -73
  532. package/dist/assertions/max-image-size.js.map +0 -1
  533. package/dist/assertions/max-line-length.d.ts +0 -3
  534. package/dist/assertions/max-line-length.d.ts.map +0 -1
  535. package/dist/assertions/max-line-length.js +0 -68
  536. package/dist/assertions/max-line-length.js.map +0 -1
  537. package/dist/assertions/no-broken-fragment-links.d.ts +0 -3
  538. package/dist/assertions/no-broken-fragment-links.d.ts.map +0 -1
  539. package/dist/assertions/no-broken-fragment-links.js +0 -79
  540. package/dist/assertions/no-broken-fragment-links.js.map +0 -1
  541. package/dist/assertions/no-duplicate-headings.d.ts +0 -3
  542. package/dist/assertions/no-duplicate-headings.d.ts.map +0 -1
  543. package/dist/assertions/no-duplicate-headings.js +0 -66
  544. package/dist/assertions/no-duplicate-headings.js.map +0 -1
  545. package/dist/assertions/no-hard-tabs.d.ts +0 -3
  546. package/dist/assertions/no-hard-tabs.d.ts.map +0 -1
  547. package/dist/assertions/no-hard-tabs.js +0 -63
  548. package/dist/assertions/no-hard-tabs.js.map +0 -1
  549. package/dist/assertions/no-trailing-spaces.d.ts +0 -3
  550. package/dist/assertions/no-trailing-spaces.d.ts.map +0 -1
  551. package/dist/assertions/no-trailing-spaces.js +0 -72
  552. package/dist/assertions/no-trailing-spaces.js.map +0 -1
  553. package/dist/assertions/pattern.d.ts +0 -3
  554. package/dist/assertions/pattern.d.ts.map +0 -1
  555. package/dist/assertions/pattern.js +0 -39
  556. package/dist/assertions/pattern.js.map +0 -1
  557. package/dist/assertions/semantic-line-breaks.d.ts +0 -3
  558. package/dist/assertions/semantic-line-breaks.d.ts.map +0 -1
  559. package/dist/assertions/semantic-line-breaks.js +0 -152
  560. package/dist/assertions/semantic-line-breaks.js.map +0 -1
  561. package/dist/assertions/swap.d.ts +0 -3
  562. package/dist/assertions/swap.d.ts.map +0 -1
  563. package/dist/assertions/swap.js +0 -39
  564. package/dist/assertions/swap.js.map +0 -1
  565. package/dist/assertions/utils.d.ts +0 -8
  566. package/dist/assertions/utils.d.ts.map +0 -1
  567. package/dist/assertions/utils.js.map +0 -1
  568. package/dist/core/scope-parser.d.ts +0 -26
  569. package/dist/core/scope-parser.d.ts.map +0 -1
  570. package/dist/core/scope-parser.js +0 -110
  571. package/dist/core/scope-parser.js.map +0 -1
  572. package/dist/files.d.ts +0 -2
  573. package/dist/files.d.ts.map +0 -1
  574. package/dist/files.js +0 -39
  575. package/dist/files.js.map +0 -1
  576. package/dist/load-config.d.ts +0 -25
  577. package/dist/load-config.d.ts.map +0 -1
  578. package/dist/load-config.js +0 -104
  579. package/dist/load-config.js.map +0 -1
  580. package/dist/load.d.ts +0 -25
  581. package/dist/load.d.ts.map +0 -1
  582. package/dist/load.js +0 -112
  583. package/dist/load.js.map +0 -1
  584. package/dist/scope.d.ts +0 -26
  585. package/dist/scope.d.ts.map +0 -1
  586. package/dist/scope.js +0 -110
  587. package/dist/scope.js.map +0 -1
  588. package/dist/types.d.ts +0 -109
  589. package/dist/types.d.ts.map +0 -1
  590. package/dist/types.js.map +0 -1
  591. package/dist/validate.d.ts +0 -31
  592. package/dist/validate.d.ts.map +0 -1
  593. package/dist/validate.js +0 -154
  594. package/dist/validate.js.map +0 -1
  595. /package/dist/{types.js → parser/types.js} +0 -0
@@ -0,0 +1,1542 @@
1
+ # ==============================================================================
2
+ # recheck/microsoft — Microsoft Writing Style Guide, as a config
3
+ # ==============================================================================
4
+ # Source: Microsoft Writing Style Guide
5
+ # https://learn.microsoft.com/en-us/style-guide/welcome/
6
+ # License: CC BY 4.0 — granted by the guide's backing GitHub repository,
7
+ # NOT by any learn.microsoft.com page (none states a licence):
8
+ # https://github.com/MicrosoftDocs/microsoft-style-guide/blob/main/LICENSE
9
+ # Synced: 2026-07-29
10
+ # Provenance: packages/recheck/presets/microsoft/PROVENANCE.md
11
+ #
12
+ # Rules are adapted to Recheck's own assertion vocabulary (swap, pattern,
13
+ # capitalization, length, occurrence); wording is paraphrased in each rule's
14
+ # `message`, never quoted verbatim from the guide.
15
+ #
16
+ # Generated file — do not hand-edit. Regenerate with `pnpm examples:generate`
17
+ # after changing src/config/presets/microsoft.ts or this file's appendix
18
+ # (examples/appendices/microsoft.appendix.yaml).
19
+
20
+ # ------------------------------------------------------------------------------
21
+ # What to paste
22
+ # ------------------------------------------------------------------------------
23
+ # This is the entire adoption cost: two lines. `recheck/markdown` is the
24
+ # 53-rule markdownlint-parity structural set; `recheck/microsoft` layers the
25
+ # Writing Style Guide's own opinions on top — it ships its own
26
+ # heading/list/table/alt-text structural rules too, so the two are
27
+ # complementary, not duplicates.
28
+
29
+ extends:
30
+ - recheck/markdown
31
+ - recheck/microsoft
32
+
33
+ # ------------------------------------------------------------------------------
34
+ # How to tune it
35
+ # ------------------------------------------------------------------------------
36
+ # Your own rule keys always win over the preset's (`extends` resolves
37
+ # first, then your top-level keys are merged on top, per rule key).
38
+ #
39
+ # Turn a rule off entirely:
40
+ #
41
+ # microsoft/az-navigation:
42
+ # severity: off
43
+ #
44
+ # Downgrade an error to a warning:
45
+ #
46
+ # microsoft/heading-sentence-case:
47
+ # severity: warn
48
+ #
49
+ # Silence one occurrence instead of the whole rule, with an inline HTML
50
+ # comment directive — works on any rule, from any preset:
51
+ #
52
+ # <!-- recheck-disable-next-line microsoft/az-navigation -->
53
+ # Click the hot link to continue.
54
+ #
55
+ # <!-- recheck-disable microsoft/az-navigation -->
56
+ # ...several occurrences here are all silenced...
57
+ # <!-- recheck-enable microsoft/az-navigation -->
58
+ #
59
+ # <!-- recheck-disable-file -->
60
+ #
61
+ # THE SHARP EDGE — read this before reaching for a per-term override.
62
+ # Merging happens per ASSERTION ID, not per option inside it.
63
+ # Setting:
64
+ #
65
+ # microsoft/spelling-hyphenation:
66
+ # assertions:
67
+ # swap:
68
+ # ignoreCase: false
69
+ #
70
+ # does not just flip `ignoreCase` — it REPLACES the whole `swap` assertion
71
+ # object, silently dropping the preset's 25-entry `pairs` map along with
72
+ # it, and the config then fails validation outright:
73
+ #
74
+ # Rule "microsoft/spelling-hyphenation": swap requires a "pairs" object
75
+ # mapping find -> replace strings
76
+ #
77
+ # (verified against this exact rule).
78
+ # So today, to reject one term out of a bundled swap/pattern rule, your
79
+ # options are: turn the whole rule off, restate its entire pairs/tokens
80
+ # yourself, or inline-disable each occurrence as shown above. A per-term
81
+ # opt-out for swap/pattern is a known follow-up, not a promise.
82
+ #
83
+ # Two assertion types DO already have a per-term escape hatch:
84
+ # `capitalization`'s `exceptions` (an array of allowed terms that COMPOSES
85
+ # with the built-in technical-proper-noun vocabulary and anything else you
86
+ # add — it does not replace either) and `spelling`'s `ignore` (spelling
87
+ # itself isn't shipped by any of these four presets — see the README's
88
+ # "Opt-in prose assertions").
89
+ # For example, to stop this preset's own sentence-case rule from flagging
90
+ # your product's name:
91
+ #
92
+ # microsoft/heading-sentence-case:
93
+ # assertions:
94
+ # capitalization:
95
+ # match: $sentence
96
+ # exceptions: [Your Product Name]
97
+ #
98
+ # Verified: this reports zero findings on a heading using "Your Product
99
+ # Name" while every other sentence-case violation still fires normally.
100
+
101
+ # ------------------------------------------------------------------------------
102
+ # Full expansion (reference)
103
+ # ------------------------------------------------------------------------------
104
+ # This is what `extends: [recheck/microsoft]` resolves to today: all 93 rules,
105
+ # alphabetized by rule id, generated straight from the live preset (`pnpm
106
+ # examples:generate`). You do not need to copy any of it — the extends
107
+ # block above already gives you all of this. Read it to see exactly what
108
+ # you are adopting, or as a starting point if you would rather pin or fork
109
+ # specific rules into your own config instead of extending the preset.
110
+ #
111
+ # `fix: false` on every rule below means what it says: detection-only, no
112
+ # exceptions — see "How to tune it" above and PROVENANCE.md for why.
113
+
114
+ microsoft/accessibility-terms:
115
+ severity: error
116
+ message: Use people-first language instead of "%s" — see the accessibility term collection (Microsoft).
117
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/accessibility-terms
118
+ scope: summary
119
+ fix: false
120
+ assertions:
121
+ pattern:
122
+ tokens:
123
+ - \bcrippled\b
124
+ - \bhandicapped\b
125
+ - \bthe handicapped\b
126
+ - \bpeople with handicaps\b
127
+ - \bslow learner\b
128
+ - \bmentally handicapped\b
129
+ - \bdifferently abled\b
130
+ - \bspecial needs\b
131
+ - \baffected by\b
132
+ - \bstricken with\b
133
+ - \bsuffers from\b
134
+ - \ba victim of\b
135
+ - \bsight-impaired\b
136
+ - \bvision-impaired\b
137
+ - \bhearing-impaired\b
138
+ - \bnon-verbal\b
139
+ - \bmaimed\b
140
+ - \bmissing a limb\b
141
+ - \bbirth defect\b
142
+ - \bSpecial Ed person\b
143
+ - \bnormal person\b
144
+ - \bhealthy person\b
145
+ - \bAsperger['’]s\b
146
+ - \bdumb\b
147
+ - \b(?:is|was|are|were|being|been)\s+mute\b
148
+ - \bdeaf and mute\b
149
+ - \bdeaf-mute\b
150
+ - \blame\b
151
+ - \bstupid\b
152
+ - \ban epileptic\b(?!\s+(?:seizure|episode|fit|attack|event))
153
+ ignoreCase: true
154
+ microsoft/actionable:
155
+ severity: warn
156
+ message: Avoid "%s"; rewrite using "that you can act on" (Microsoft).
157
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/actionable
158
+ scope: summary
159
+ fix: false
160
+ assertions:
161
+ pattern:
162
+ tokens:
163
+ - \bactionable\b
164
+ ignoreCase: true
165
+ microsoft/alt-text-format:
166
+ severity: warn
167
+ message: Alt text should start with a capital letter and end with a period (Microsoft).
168
+ link: https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text
169
+ scope: alt
170
+ fix: false
171
+ assertions:
172
+ capitalization:
173
+ match: ^[A-Z].*\.$
174
+ microsoft/alt-text-generic-opener:
175
+ severity: warn
176
+ message: Don't start alt text with a generic word such as "%s" (Microsoft).
177
+ link: https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text
178
+ scope: alt
179
+ fix: false
180
+ assertions:
181
+ pattern:
182
+ tokens:
183
+ - ^(?:Image|Icon|Graphic|Button|Link)\b
184
+ ignoreCase: true
185
+ microsoft/alt-text-length:
186
+ severity: warn
187
+ message: Alt text is %s %s long; Microsoft limits it to 150 characters (max %s).
188
+ link: https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text
189
+ scope: alt
190
+ fix: false
191
+ assertions:
192
+ length:
193
+ unit: characters
194
+ max: 150
195
+ microsoft/alt-text-no-filename:
196
+ severity: warn
197
+ message: Don't use an image's file name as its alt text (Microsoft).
198
+ link: https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text
199
+ scope: alt
200
+ fix: false
201
+ assertions:
202
+ pattern:
203
+ tokens:
204
+ - \.(?:png|jpe?g|gif|svg|webp)$
205
+ ignoreCase: true
206
+ microsoft/article-before-acronym:
207
+ severity: warn
208
+ message: 'Use "%s" instead of "%s" (Microsoft: article choice follows pronunciation).'
209
+ link: https://learn.microsoft.com/en-us/style-guide/acronyms
210
+ scope: summary
211
+ fix: false
212
+ assertions:
213
+ swap:
214
+ pairs:
215
+ an URL: a URL
216
+ a ISP: an ISP
217
+ an SQL database: a SQL database
218
+ an SQL: a SQL
219
+ ignoreCase: true
220
+ wordBoundary: true
221
+ microsoft/avoid-please:
222
+ severity: warn
223
+ message: Avoid "%s" except when asking the customer to do something inconvenient (Microsoft).
224
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/please
225
+ scope: summary
226
+ fix: false
227
+ assertions:
228
+ pattern:
229
+ tokens:
230
+ - \bplease\b
231
+ ignoreCase: true
232
+ microsoft/az-abbreviations-names:
233
+ severity: error
234
+ message: 'Microsoft style: use "%s" instead of "%s".'
235
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/hexadecimal
236
+ scope: summary
237
+ fix: false
238
+ assertions:
239
+ swap:
240
+ pairs:
241
+ defrag: defragment
242
+ okay: OK
243
+ ignoreCase: true
244
+ wordBoundary: true
245
+ microsoft/az-abbreviations-names-detect:
246
+ severity: error
247
+ message: 'Microsoft style: use "number sign" instead of "%s" — except for the literal phone-keypad key (Microsoft).'
248
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/n/number-sign
249
+ scope: summary
250
+ fix: false
251
+ assertions:
252
+ pattern:
253
+ tokens:
254
+ - \bpound sign\b
255
+ ignoreCase: true
256
+ microsoft/az-abbreviations-substitutions:
257
+ severity: warn
258
+ message: 'Microsoft style: use "%s" instead of "%s".'
259
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/hexadecimal
260
+ scope: summary
261
+ fix: false
262
+ assertions:
263
+ swap:
264
+ pairs:
265
+ hex: hexadecimal
266
+ (?<!\bon\s)\bspec\b: specification
267
+ MSFT: Microsoft
268
+ alright: OK
269
+ all right: OK
270
+ ignoreCase: true
271
+ wordBoundary: true
272
+ keysAreRegex: true
273
+ microsoft/az-case-fixable:
274
+ severity: error
275
+ message: Use "%s" instead of "%s" (Microsoft).
276
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/i/internet-intranet-extranet
277
+ scope: summary
278
+ fix: false
279
+ assertions:
280
+ swap:
281
+ pairs:
282
+ Big Data: big data
283
+ Dark Mode: dark mode
284
+ darkmode: dark mode
285
+ Devops: DevOps
286
+ devops: DevOps
287
+ bluetooth: Bluetooth
288
+ Javascript: JavaScript
289
+ javascript: JavaScript
290
+ ignoreCase: false
291
+ wordBoundary: true
292
+ microsoft/az-case-fixable-detect:
293
+ severity: error
294
+ message: Use "%s" instead of "%s" (Microsoft) in ordinary prose -- but lowercase "boolean" is correct and expected when naming the OpenAPI/JSON Schema type.
295
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/i/internet-intranet-extranet
296
+ scope: summary
297
+ fix: false
298
+ assertions:
299
+ swap:
300
+ pairs:
301
+ boolean: Boolean
302
+ ignoreCase: false
303
+ wordBoundary: true
304
+ microsoft/az-case-only:
305
+ severity: error
306
+ message: 'Use "%s" instead of "%s" (Microsoft): rewrite, this fix would silently no-op.'
307
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/i/internet-intranet-extranet
308
+ scope: summary
309
+ fix: false
310
+ assertions:
311
+ swap:
312
+ pairs:
313
+ Internet: internet
314
+ Intranet: intranet
315
+ Extranet: extranet
316
+ Euro: euro
317
+ WWW: www
318
+ Registry: registry
319
+ Spam: spam
320
+ ignoreCase: false
321
+ wordBoundary: true
322
+ microsoft/az-direction-layout:
323
+ severity: warn
324
+ message: 'Microsoft style: use "%s" instead of "%s".'
325
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/far-left-far-right
326
+ scope: summary
327
+ fix: false
328
+ assertions:
329
+ swap:
330
+ pairs:
331
+ top left: upper left
332
+ top right: upper right
333
+ far-left: leftmost
334
+ far-right: rightmost
335
+ left-justified: left-aligned
336
+ right-justified: right-aligned
337
+ ragged right: left-aligned
338
+ ignoreCase: true
339
+ wordBoundary: true
340
+ microsoft/az-direction-layout-detect:
341
+ severity: error
342
+ message: 'Microsoft style: use "lower left"/"lower right" instead of "%s" — except when discussing the BottomLeft/BottomRight API properties (Microsoft).'
343
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/b/bottom-left-bottom-right
344
+ scope: summary
345
+ fix: false
346
+ assertions:
347
+ pattern:
348
+ tokens:
349
+ - \bbottom left\b
350
+ - \bbottom right\b
351
+ ignoreCase: true
352
+ microsoft/az-filesystem:
353
+ severity: warn
354
+ message: 'Microsoft style: use "%s" instead of "%s".'
355
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/child-folder
356
+ scope: summary
357
+ fix: false
358
+ assertions:
359
+ swap:
360
+ pairs:
361
+ child folder: subfolder
362
+ \bhome directory\b(?!\s+for\s+(?:its|the|your|his|her|their)?\s*config): root directory
363
+ graphics adapter: video card
364
+ display adapter: video card
365
+ video adapter: video card
366
+ graphics card: video card
367
+ display driver: video driver
368
+ graphics driver: video driver
369
+ remote drive: network drive
370
+ ignoreCase: true
371
+ wordBoundary: true
372
+ keysAreRegex: true
373
+ microsoft/az-geography:
374
+ severity: warn
375
+ message: 'Microsoft style: use "%s" instead of "%s".'
376
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/far-east
377
+ scope: summary
378
+ fix: false
379
+ assertions:
380
+ swap:
381
+ pairs:
382
+ \bFar East\b: East Asia
383
+ ignoreCase: true
384
+ wordBoundary: false
385
+ keysAreRegex: true
386
+ microsoft/az-geography-detect:
387
+ severity: error
388
+ message: 'Microsoft style: prefer "thanks" over "%s" in most content — see the a-z word list for the formal/serious-content exception.'
389
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/t/thanks-thank-you
390
+ scope: summary
391
+ fix: false
392
+ assertions:
393
+ pattern:
394
+ tokens:
395
+ - \bthank you\b
396
+ ignoreCase: true
397
+ microsoft/az-grammar-usage:
398
+ severity: error
399
+ message: 'Microsoft style: use "%s" instead of "%s".'
400
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/as-well-as
401
+ scope: summary
402
+ fix: false
403
+ assertions:
404
+ swap:
405
+ pairs:
406
+ towards: toward
407
+ upwards: upward
408
+ afterwards: afterward
409
+ useable: usable
410
+ moveable: movable
411
+ broadcasted: broadcast
412
+ matrixes: matrices
413
+ appendixes: appendices
414
+ zeroes: zeros
415
+ ignoreCase: true
416
+ wordBoundary: true
417
+ microsoft/az-grammar-usage-detect:
418
+ severity: error
419
+ message: 'Microsoft style: "%s" needs a context-specific rewrite, not a blind substitution — "as well as" is a caution against treating it as a synonym for "and", not an instruction to replace it; "or greater/higher/lower" only becomes "or later/earlier" when identifying program or app version numbers, not general magnitude (Microsoft).'
420
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/as-well-as
421
+ scope: summary
422
+ fix: false
423
+ assertions:
424
+ pattern:
425
+ tokens:
426
+ - \bas well as\b
427
+ - \bor greater\b
428
+ - \bor higher\b
429
+ - \bor lower\b
430
+ ignoreCase: true
431
+ microsoft/az-grammar-usage-substitutions:
432
+ severity: warn
433
+ message: 'Microsoft style: use "%s" instead of "%s".'
434
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/as-well-as
435
+ scope: summary
436
+ fix: false
437
+ assertions:
438
+ swap:
439
+ pairs:
440
+ whether or not: whether
441
+ center around: center on
442
+ different to: different from
443
+ inside of: inside
444
+ outside of: outside
445
+ off of: 'off'
446
+ administrate: administer
447
+ alphabetic: alphabetical
448
+ mathematic: mathematical
449
+ numerical: numeric
450
+ ignoreCase: true
451
+ wordBoundary: true
452
+ microsoft/az-judgment-words:
453
+ severity: warn
454
+ message: 'Microsoft style: use "%s" instead of "%s".'
455
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/finalize
456
+ scope: summary
457
+ fix: false
458
+ assertions:
459
+ swap:
460
+ pairs:
461
+ \bfinalize\b: finish
462
+ \bbug fix\b: software update
463
+ \bbeta\b(?!\s+(?:distribution|function|coefficient|particle|blocker|decay)\b): preview
464
+ \bEULA\b: license terms
465
+ \bEnd-User License Agreement\b: license terms
466
+ ignoreCase: true
467
+ wordBoundary: false
468
+ keysAreRegex: true
469
+ microsoft/az-lifecycle-verbs:
470
+ severity: warn
471
+ message: 'Microsoft style: use "%s" instead of "%s".'
472
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/b/boot
473
+ scope: summary
474
+ fix: false
475
+ assertions:
476
+ swap:
477
+ pairs:
478
+ \bcarry out\b: run
479
+ (?<!\b(?:the|an|no|emergency)\s)\bexit\b(?!\s+(?:code|status|button|sign|strategy|interview|poll|ramp|velocity|row)\b): close
480
+ (?<!\b(?:product|software|game|website|app|feature|rocket|mission)\s)\blaunch\b(?!\s+(?:date|event|party|window|site|pad|day|plan|schedule|announcement)\b): open
481
+ \bboot\b(?!\s+(?:disk|sector|loader|sequence|process|time|options?|record|partition|menu|order|camera)\b): turn on
482
+ \bundelete\b: restore
483
+ \binstantiate\b: create an instance of
484
+ \biconize\b: minimize
485
+ ignoreCase: true
486
+ wordBoundary: false
487
+ keysAreRegex: true
488
+ microsoft/az-lifecycle-verbs-detect:
489
+ severity: error
490
+ message: 'Microsoft style: "%s" needs a context-specific replacement or carries a conditional exception — see the a-z word list before rewriting.'
491
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/q/quit
492
+ scope: summary
493
+ fix: false
494
+ assertions:
495
+ pattern:
496
+ tokens:
497
+ - \bquit\b
498
+ - \bdeinstall\b
499
+ - \breinitialize\b
500
+ ignoreCase: true
501
+ microsoft/az-navigation:
502
+ severity: warn
503
+ message: 'Microsoft style: use "%s" instead of "%s".'
504
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/v/visit
505
+ scope: summary
506
+ fix: false
507
+ assertions:
508
+ swap:
509
+ pairs:
510
+ \bhot link\b: link
511
+ ignoreCase: true
512
+ wordBoundary: false
513
+ keysAreRegex: true
514
+ microsoft/az-navigation-detect:
515
+ severity: error
516
+ message: 'Microsoft style: use "go to" instead of "%s" in most cases — but "visit" is OK for a suggestion/browsing tone (Microsoft); see the a-z word list before rewriting.'
517
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/v/visit
518
+ scope: summary
519
+ fix: false
520
+ assertions:
521
+ pattern:
522
+ tokens:
523
+ - \bvisit\b(?!\s+(?:count|counts|duration|frequency|history|log|data)\b)
524
+ ignoreCase: true
525
+ microsoft/az-no-replacement:
526
+ severity: error
527
+ message: Don't use "%s" (Microsoft); be specific instead.
528
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/b/black-box
529
+ scope: summary
530
+ fix: false
531
+ assertions:
532
+ pattern:
533
+ tokens:
534
+ - \bblack box\b
535
+ - \bdot-com\b
536
+ - \bedutainment\b
537
+ - \bhoneypot\b
538
+ - \bbackbone\b
539
+ - \bwordwrap\b
540
+ - \bnatural user interface\b
541
+ - \bNUI\b
542
+ - \bsubaddress\b
543
+ ignoreCase: true
544
+ microsoft/az-real-replacements:
545
+ severity: warn
546
+ message: 'Microsoft style: use "%s" instead of "%s".'
547
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/friendly-name
548
+ scope: summary
549
+ fix: false
550
+ assertions:
551
+ swap:
552
+ pairs:
553
+ \bfriendly name\b: display name
554
+ \bprint queue\b: list of documents
555
+ \bprinter queue\b: list of documents
556
+ \bdata record\b: record
557
+ \be-form\b: form
558
+ \bupsize\b: scale up
559
+ \bworking memory\b: available memory
560
+ \bsoft copy\b: file
561
+ (?<!\b(?:a|an|the|this|that|your|my|its|his|her|their|our)\s)\bprint out\b(?!\s+of\b): print
562
+ \bsearch and replace\b: find and replace
563
+ \btarget drive\b: destination drive
564
+ \btarget file\b: destination file
565
+ ignoreCase: true
566
+ wordBoundary: false
567
+ keysAreRegex: true
568
+ microsoft/az-state-failure:
569
+ severity: warn
570
+ message: 'Microsoft style: use "%s" instead of "%s".'
571
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/hang
572
+ scope: summary
573
+ fix: false
574
+ assertions:
575
+ swap:
576
+ pairs:
577
+ \bhangs\b(?!\s+(?:on|up|around|out|together|of|in|tight|loose|fire|from|over)\b): stops responding
578
+ \bhang\b(?!\s+(?:on|up|around|out|together|of|in|tight|loose|fire|from|over)\b): stop responding
579
+ ignoreCase: true
580
+ wordBoundary: false
581
+ keysAreRegex: true
582
+ microsoft/az-state-failure-detect:
583
+ severity: error
584
+ message: 'Microsoft style: "%s" needs a context-specific replacement (fail for hardware, stop responding for programs).'
585
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/c/crash
586
+ scope: summary
587
+ fix: false
588
+ assertions:
589
+ pattern:
590
+ tokens:
591
+ - \bcrash\b(?!\s+(?:dump|report|log|course|test|site)\b)
592
+ - \block up\b
593
+ ignoreCase: true
594
+ microsoft/az-typography:
595
+ severity: warn
596
+ message: 'Microsoft style: use "%s" instead of "%s".'
597
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/r/roman
598
+ scope: summary
599
+ fix: false
600
+ assertions:
601
+ swap:
602
+ pairs:
603
+ \btypeface\b: font
604
+ \btype style\b: font style
605
+ \bbolded\b: bold
606
+ \bboldface\b: bold
607
+ \broman\b(?!\s+(?:numeral|numerals|empire|alphabet|calendar|law|catholic|republic|mythology|god|gods|ruins?|coins?|holiday|road|roads|bath|baths|army|legion|forum|senate|aqueduct)\b): regular type
608
+ ignoreCase: true
609
+ wordBoundary: false
610
+ keysAreRegex: true
611
+ microsoft/az-ui-nouns:
612
+ severity: warn
613
+ message: 'Microsoft style: use "%s" instead of "%s".'
614
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/b/blade
615
+ scope: summary
616
+ fix: false
617
+ assertions:
618
+ swap:
619
+ pairs:
620
+ \bblade\b(?!\s+(?:server|servers|enclosure|chassis|centers?|centres?)\b): pane
621
+ \binsertion point\b: pointer
622
+ ignoreCase: true
623
+ wordBoundary: false
624
+ keysAreRegex: true
625
+ microsoft/az-ui-nouns-detect:
626
+ severity: error
627
+ message: 'Microsoft style: "%s" carries a conditional exception — see the a-z word list before rewriting.'
628
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/hierarchical-menu
629
+ scope: summary
630
+ fix: false
631
+ assertions:
632
+ pattern:
633
+ tokens:
634
+ - \bhierarchical menu\b
635
+ - \bsecondary menu\b
636
+ - \brunning head\b
637
+ - \brunning foot\b
638
+ ignoreCase: true
639
+ microsoft/az-verb-able:
640
+ severity: error
641
+ message: 'Rewrite "%s" using "%s" (Microsoft): a direct substitution may be ungrammatical.'
642
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/b/blacklist
643
+ scope: summary
644
+ fix: false
645
+ assertions:
646
+ swap:
647
+ pairs:
648
+ blacklist: block list
649
+ whitelist: allow list
650
+ allowlist: allow list
651
+ blocklist: block list
652
+ ignoreCase: true
653
+ wordBoundary: true
654
+ microsoft/bias-free-terms:
655
+ severity: error
656
+ message: 'Use "%s" instead of "%s" (Microsoft: bias-free communication).'
657
+ link: https://learn.microsoft.com/en-us/style-guide/bias-free-communication
658
+ scope: summary
659
+ fix: false
660
+ assertions:
661
+ swap:
662
+ pairs:
663
+ chairman: chair
664
+ chairwoman: chair
665
+ mankind: humanity
666
+ manmade: synthetic
667
+ man-made: synthetic
668
+ manpower: workforce
669
+ salesman: sales representative
670
+ salesmen: sales representatives
671
+ demilitarized zone: perimeter network
672
+ \bDMZ\b(?!\s+(?:dividing|between|separating)\b): perimeter network
673
+ screened subnet: perimeter network
674
+ ignoreCase: true
675
+ wordBoundary: true
676
+ keysAreRegex: true
677
+ microsoft/bookmark-favorite:
678
+ severity: error
679
+ message: 'Rewrite "%s" using "%s" (Microsoft): a direct substitution may be ungrammatical.'
680
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/b/bookmark
681
+ scope: summary
682
+ fix: false
683
+ assertions:
684
+ swap:
685
+ pairs:
686
+ bookmark: favorite
687
+ ignoreCase: true
688
+ wordBoundary: true
689
+ microsoft/bucketize:
690
+ severity: warn
691
+ message: Use "%s" instead of "%s" (Microsoft).
692
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/dont-use-common-words-in-new-ways
693
+ scope: summary
694
+ fix: false
695
+ assertions:
696
+ swap:
697
+ pairs:
698
+ bucketize: group
699
+ ignoreCase: true
700
+ wordBoundary: true
701
+ microsoft/capitalize-after-heading-colon:
702
+ severity: warn
703
+ message: Capitalize the first word after a colon in a heading (Microsoft).
704
+ link: https://learn.microsoft.com/en-us/style-guide/punctuation/colons
705
+ scope: heading
706
+ fix: false
707
+ assertions:
708
+ pattern:
709
+ tokens:
710
+ - ':\s+[a-z]'
711
+ microsoft/checkbox-verbs:
712
+ severity: warn
713
+ message: Use "%s" instead of "%s" for checkboxes (Microsoft).
714
+ link: https://learn.microsoft.com/en-us/style-guide/procedures-instructions/describing-interactions-with-ui
715
+ scope: summary
716
+ fix: false
717
+ assertions:
718
+ swap:
719
+ pairs:
720
+ uncheck: clear
721
+ unmark: clear
722
+ unselect: clear
723
+ ignoreCase: true
724
+ wordBoundary: true
725
+ microsoft/comma-density:
726
+ severity: warn
727
+ message: Sentence has %s commas; Microsoft suggests at most %s.
728
+ link: https://learn.microsoft.com/en-us/style-guide/punctuation/
729
+ scope: sentence
730
+ fix: false
731
+ assertions:
732
+ occurrence:
733
+ pattern: ','
734
+ max: 2
735
+ microsoft/contraction-consistency:
736
+ severity: warn
737
+ message: '"%s" conflicts with the first-used form "%s" in this file (Microsoft).'
738
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/use-contractions
739
+ scope: summary
740
+ fix: false
741
+ assertions:
742
+ consistency:
743
+ ignoreCase: true
744
+ either:
745
+ can't: cannot
746
+ don't: do not
747
+ won't: will not
748
+ isn't: is not
749
+ it's: it is
750
+ microsoft/cyberattack-spelling:
751
+ severity: error
752
+ message: Use "%s" instead of "%s" (Microsoft).
753
+ link: https://learn.microsoft.com/en-us/style-guide/militaristic-language
754
+ scope: summary
755
+ fix: false
756
+ assertions:
757
+ swap:
758
+ pairs:
759
+ cyber attack: cyberattack
760
+ cyber-attack: cyberattack
761
+ cyber threat: cyberthreat
762
+ cyber-threat: cyberthreat
763
+ ignoreCase: true
764
+ wordBoundary: true
765
+ microsoft/descriptive-link-text:
766
+ severity: error
767
+ message: Link text should be descriptive, not a generic phrase (Microsoft).
768
+ link: https://learn.microsoft.com/en-us/style-guide/urls-web-addresses
769
+ scope: all
770
+ fix: false
771
+ assertions:
772
+ descriptive-link-text: {}
773
+ microsoft/dialog-terminology:
774
+ severity: warn
775
+ message: Use "%s" instead of "%s" (Microsoft).
776
+ link: https://learn.microsoft.com/en-us/style-guide/procedures-instructions/formatting-text-in-instructions
777
+ scope: summary
778
+ fix: false
779
+ assertions:
780
+ swap:
781
+ pairs:
782
+ pop-up window: dialog
783
+ dialog box: dialog
784
+ dialogue box: dialog
785
+ ignoreCase: true
786
+ wordBoundary: true
787
+ microsoft/glyph:
788
+ severity: error
789
+ message: Use "%s" instead of "%s" (Microsoft) when referring generically to a UI icon/image — but it's OK to use "glyph" in a technical discussion of fonts and characters.
790
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/avoid-jargon
791
+ scope: summary
792
+ fix: false
793
+ assertions:
794
+ swap:
795
+ pairs:
796
+ glyph: symbol
797
+ ignoreCase: true
798
+ wordBoundary: true
799
+ microsoft/heading-sentence-case:
800
+ severity: error
801
+ message: '"%s" should use %s capitalization (Microsoft: sentence case for headings).'
802
+ link: https://learn.microsoft.com/en-us/style-guide/capitalization
803
+ scope: heading
804
+ fix: false
805
+ assertions:
806
+ capitalization:
807
+ match: $sentence
808
+ microsoft/impact-verb:
809
+ severity: warn
810
+ message: 'Use "affect" instead of "impact" as a verb (Microsoft): "%s"'
811
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/dont-use-common-words-in-new-ways
812
+ scope: summary
813
+ fix: false
814
+ assertions:
815
+ pattern:
816
+ tokens:
817
+ - \bimpact(?:s|ed|ing)?\s+(?:performance|productivity|quality|reliability|availability|latency|throughput)\b
818
+ microsoft/italic-as-noun:
819
+ severity: error
820
+ message: Avoid "%s"; rewrite using "italic" as an adjective, e.g. "italic text" (Microsoft).
821
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/i/italic
822
+ scope: summary
823
+ fix: false
824
+ assertions:
825
+ pattern:
826
+ tokens:
827
+ - \bitalics\b
828
+ - \bitalicized\b
829
+ ignoreCase: true
830
+ microsoft/keyboard-shortcut-plus-spacing:
831
+ severity: warn
832
+ message: 'Don''t put a space around "+" in a keyboard shortcut (Microsoft): "%s"'
833
+ link: https://learn.microsoft.com/en-us/style-guide/procedures-instructions/formatting-text-in-instructions
834
+ scope: summary
835
+ fix: false
836
+ assertions:
837
+ pattern:
838
+ tokens:
839
+ - \b(?:Ctrl|Alt|Shift|Cmd)\s+\+\s+
840
+ microsoft/left-hand-right-hand:
841
+ severity: error
842
+ message: 'Rewrite "%s" using "%s" (Microsoft): no replacement is stated for the modifier sense.'
843
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/l/left-leftmost-left-hand
844
+ scope: summary
845
+ fix: false
846
+ assertions:
847
+ swap:
848
+ pairs:
849
+ left-hand: left
850
+ right-hand: right
851
+ ignoreCase: true
852
+ wordBoundary: true
853
+ microsoft/leverage:
854
+ severity: error
855
+ message: 'Rewrite "%s" using "%s" (Microsoft): only the VERB sense ("leverage the API") is targeted — "leverage"/"leveraged" are also common, correct nouns/adjectives ("financial leverage", "a leveraged buyout") a blind substitution would corrupt.'
856
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/avoid-jargon
857
+ scope: summary
858
+ fix: false
859
+ assertions:
860
+ swap:
861
+ pairs:
862
+ leverage: use
863
+ leveraging: using
864
+ leveraged: used
865
+ ignoreCase: true
866
+ wordBoundary: true
867
+ microsoft/list-item-capital:
868
+ severity: error
869
+ message: '"%s" should start with a capital letter (Microsoft).'
870
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/lists
871
+ scope: list-item
872
+ fix: false
873
+ assertions:
874
+ capitalization:
875
+ match: ^[^a-z].*
876
+ microsoft/list-length:
877
+ severity: warn
878
+ message: List has %s item(s); Microsoft recommends 2-7 (Microsoft).
879
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/lists
880
+ scope: all
881
+ fix: false
882
+ assertions:
883
+ list-length:
884
+ min: 2
885
+ max: 7
886
+ microsoft/master-slave:
887
+ severity: error
888
+ message: 'Avoid "%s" (Microsoft): the guide''s two pages disagree on the replacement — use "primary/subordinate" (bias-free-communication) or "primary/replica" (also acceptable: primary/secondary, principal/agent, controller/worker; a-z/master-slave) depending on context.'
889
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/m/master-slave
890
+ scope: summary
891
+ fix: false
892
+ assertions:
893
+ pattern:
894
+ tokens:
895
+ - \bmaster\s*/\s*slave\b
896
+ - \bmaster-slave\b
897
+ ignoreCase: true
898
+ microsoft/mouse-over:
899
+ severity: warn
900
+ message: Use "%s" instead of "%s" (Microsoft).
901
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/mouse-mouse-interaction-terms
902
+ scope: summary
903
+ fix: false
904
+ assertions:
905
+ swap:
906
+ pairs:
907
+ mouse over: hover over
908
+ ignoreCase: true
909
+ wordBoundary: true
910
+ microsoft/no-alt-text:
911
+ severity: error
912
+ message: 'Every image needs alt text (Microsoft: accessibility).'
913
+ link: https://learn.microsoft.com/en-us/style-guide/accessibility/alternative-text
914
+ scope: all
915
+ fix: false
916
+ assertions:
917
+ no-alt-text: {}
918
+ microsoft/no-ampersand-in-headings:
919
+ severity: warn
920
+ message: Spell out "and"; avoid & and + in headings (Microsoft).
921
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/headings
922
+ scope: heading
923
+ exceptions:
924
+ lines:
925
+ - C++
926
+ - A+
927
+ - .NET
928
+ fix: false
929
+ assertions:
930
+ pattern:
931
+ tokens:
932
+ - '&(?!amp;|nbsp;|lt;|gt;|quot;|#)'
933
+ - \+
934
+ microsoft/no-apostrophe-plural-decade:
935
+ severity: warn
936
+ message: 'Don''t use an apostrophe to form a plural decade (Microsoft): "%s"'
937
+ link: https://learn.microsoft.com/en-us/style-guide/punctuation/apostrophes
938
+ scope: summary
939
+ fix: false
940
+ assertions:
941
+ pattern:
942
+ tokens:
943
+ - \b(?:19|20)\d0['’]s\b
944
+ microsoft/no-awkward-contractions:
945
+ severity: warn
946
+ message: Avoid the ambiguous contraction "%s" (Microsoft).
947
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/use-contractions
948
+ scope: summary
949
+ fix: false
950
+ assertions:
951
+ pattern:
952
+ tokens:
953
+ - \b(?:there['’]d|it['’]ll|they['’]d|that['’]ll|there['’]ll)\b
954
+ ignoreCase: true
955
+ microsoft/no-blank-table-cell:
956
+ severity: warn
957
+ message: Use "Not applicable" or "None" instead of an em dash in a table cell (Microsoft).
958
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/tables
959
+ scope: table.cell
960
+ fix: false
961
+ assertions:
962
+ pattern:
963
+ tokens:
964
+ - ^\s*(?:—\s*)?$
965
+ microsoft/no-click:
966
+ severity: warn
967
+ message: 'Use "%s" instead of "%s" (Microsoft: avoid input-specific verbs).'
968
+ link: https://learn.microsoft.com/en-us/style-guide/procedures-instructions/describing-interactions-with-ui
969
+ scope: summary
970
+ fix: false
971
+ assertions:
972
+ swap:
973
+ pairs:
974
+ click on: select
975
+ (?<![\w-])click(?![a-zA-Z])(?!\s+(?:count|counts|rate|rates|event|events|tracking|data|metrics?|history|id|ids|per)\b): select
976
+ (?<![\w-])clicks(?![a-zA-Z])(?!\s+(?:count|counts|rate|rates|event|events|tracking|data|metrics?|history|per)\b): selects
977
+ (?<![\w-])clicking(?![a-zA-Z]): selecting
978
+ (?<![\w-])clicked(?![a-zA-Z]): selected
979
+ ignoreCase: true
980
+ wordBoundary: false
981
+ keysAreRegex: true
982
+ microsoft/no-derogatory-slang:
983
+ severity: error
984
+ message: Avoid the derogatory or culturally appropriative term "%s" (Microsoft).
985
+ link: https://learn.microsoft.com/en-us/style-guide/bias-free-communication
986
+ scope: summary
987
+ fix: false
988
+ assertions:
989
+ pattern:
990
+ tokens:
991
+ - \bpimp\b
992
+ - \bbitch\b
993
+ - \bspirit animal\b
994
+ ignoreCase: true
995
+ microsoft/no-ellipsis-column-header:
996
+ severity: warn
997
+ message: 'Don''t end a table column header with an ellipsis (Microsoft): "%s"'
998
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/tables
999
+ scope: table.header
1000
+ fix: false
1001
+ assertions:
1002
+ pattern:
1003
+ tokens:
1004
+ - (?:\.\.\.|…)$
1005
+ microsoft/no-emphasis-as-heading:
1006
+ severity: error
1007
+ message: Use a heading level, not bold or italic text, to show hierarchy (Microsoft).
1008
+ link: https://learn.microsoft.com/en-us/style-guide/accessibility/writing-all-abilities
1009
+ scope: all
1010
+ fix: false
1011
+ assertions:
1012
+ no-emphasis-as-heading: {}
1013
+ microsoft/no-from-before-en-dash-range:
1014
+ severity: warn
1015
+ message: 'Don''t use "from" before an en-dash number range (Microsoft): "%s"'
1016
+ link: https://learn.microsoft.com/en-us/style-guide/numbers
1017
+ scope: summary
1018
+ fix: false
1019
+ assertions:
1020
+ pattern:
1021
+ tokens:
1022
+ - \bfrom\s+\d+\s*[–—]\s*\d+
1023
+ microsoft/no-latin-abbreviations:
1024
+ severity: warn
1025
+ message: Use "%s" instead of "%s" (Microsoft).
1026
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words
1027
+ scope: summary
1028
+ fix: false
1029
+ assertions:
1030
+ swap:
1031
+ pairs:
1032
+ \be\.g\.,?: for example
1033
+ \bi\.e\.,?: that is
1034
+ \bviz\.: namely
1035
+ \bergo\b: therefore
1036
+ ignoreCase: true
1037
+ wordBoundary: false
1038
+ keysAreRegex: true
1039
+ microsoft/no-latin-abbreviations-detect:
1040
+ severity: error
1041
+ message: 'Microsoft style: avoid the non-English phrase "%s" — no single replacement is prescribed; rewrite for the context (Microsoft).'
1042
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words
1043
+ scope: summary
1044
+ fix: false
1045
+ assertions:
1046
+ pattern:
1047
+ tokens:
1048
+ - \bde facto\b
1049
+ - \bad hoc\b
1050
+ - \bvis-[àa]-vis\b
1051
+ ignoreCase: true
1052
+ microsoft/no-multiple-blanks:
1053
+ severity: error
1054
+ message: Don't use extra blank lines to create heading spacing (Microsoft).
1055
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/headings
1056
+ scope: all
1057
+ fix: false
1058
+ assertions:
1059
+ no-multiple-blanks: {}
1060
+ microsoft/no-space-around-em-dash:
1061
+ severity: warn
1062
+ message: Don't use spaces around an em dash (Microsoft).
1063
+ link: https://learn.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/
1064
+ scope: summary
1065
+ fix: false
1066
+ assertions:
1067
+ pattern:
1068
+ tokens:
1069
+ - \s—\s
1070
+ microsoft/no-trailing-conjunction-list:
1071
+ severity: warn
1072
+ message: 'Don''t end a list item with a semicolon, comma, or conjunction (Microsoft): "%s"'
1073
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/lists
1074
+ scope: list-item
1075
+ fix: false
1076
+ assertions:
1077
+ pattern:
1078
+ tokens:
1079
+ - '[,;]$'
1080
+ - \b(?:and|or)$
1081
+ ignoreCase: true
1082
+ microsoft/no-trailing-punctuation:
1083
+ severity: error
1084
+ message: Don't end headings with punctuation (Microsoft).
1085
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/headings
1086
+ scope: all
1087
+ fix: false
1088
+ assertions:
1089
+ no-trailing-punctuation: {}
1090
+ microsoft/no-weak-phrasing:
1091
+ severity: warn
1092
+ message: Avoid weak phrasing such as "%s"; start the sentence with a verb (Microsoft).
1093
+ link: https://learn.microsoft.com/en-us/style-guide/top-10-tips-style-voice
1094
+ scope:
1095
+ - paragraph
1096
+ - list-item
1097
+ fix: false
1098
+ assertions:
1099
+ pattern:
1100
+ tokens:
1101
+ - \bthere (?:is|are|was|were)\b
1102
+ ignoreCase: true
1103
+ microsoft/noon-midnight:
1104
+ severity: warn
1105
+ message: Use "noon" or "midnight" instead of "%s" (Microsoft).
1106
+ link: https://learn.microsoft.com/en-us/style-guide/numbers
1107
+ scope: summary
1108
+ fix: false
1109
+ assertions:
1110
+ pattern:
1111
+ tokens:
1112
+ - \b12:00\s*(?:AM|PM|am|pm)\b
1113
+ microsoft/ordinal-no-ly:
1114
+ severity: warn
1115
+ message: Use "%s" instead of "%s" (Microsoft).
1116
+ link: https://learn.microsoft.com/en-us/style-guide/numbers
1117
+ scope: summary
1118
+ fix: false
1119
+ assertions:
1120
+ swap:
1121
+ pairs:
1122
+ firstly: first
1123
+ secondly: second
1124
+ thirdly: third
1125
+ ignoreCase: true
1126
+ wordBoundary: true
1127
+ microsoft/paragraph-length:
1128
+ severity: warn
1129
+ message: Paragraph is %s %s long; Microsoft suggests at most 7 (sentences, as a proxy for lines).
1130
+ link: https://learn.microsoft.com/en-us/style-guide/scannable-content/
1131
+ scope: paragraph
1132
+ fix: false
1133
+ assertions:
1134
+ length:
1135
+ unit: sentences
1136
+ max: 7
1137
+ microsoft/press-key-verb:
1138
+ severity: warn
1139
+ message: Use "select" to describe pressing a key, not "%s" (Microsoft).
1140
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/h/hit
1141
+ scope: summary
1142
+ fix: false
1143
+ assertions:
1144
+ pattern:
1145
+ tokens:
1146
+ - \b(?:press|hit|strike)\s+(?:the\s+)?(?:Enter|Tab|Esc|Escape|Delete|Backspace|spacebar|Ctrl|Shift|Alt)\b
1147
+ - \b(?:press|hit|strike)\s+the\s+\S+\s+key\b
1148
+ ignoreCase: true
1149
+ microsoft/racial-ethnic-capitalization:
1150
+ severity: error
1151
+ message: 'Use title-style capitalization: "%s" instead of "%s" (Microsoft).'
1152
+ link: https://learn.microsoft.com/en-us/style-guide/bias-free-communication
1153
+ scope: summary
1154
+ fix: false
1155
+ assertions:
1156
+ swap:
1157
+ pairs:
1158
+ asian: Asian
1159
+ black and african american: Black and African American
1160
+ hispanic and latinx: Hispanic and Latinx
1161
+ native american: Native American
1162
+ alaska native: Alaska Native
1163
+ native hawaiian: Native Hawaiian
1164
+ pacific islander: Pacific Islander
1165
+ indigenous peoples: Indigenous Peoples
1166
+ ignoreCase: false
1167
+ wordBoundary: true
1168
+ microsoft/sign-in-sign-out:
1169
+ severity: warn
1170
+ message: 'Rewrite "%s" as "%s" (Microsoft): "login"/"logon" as a noun needs a sentence rewrite.'
1171
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/l/log-on-log-off
1172
+ scope: summary
1173
+ fix: false
1174
+ assertions:
1175
+ swap:
1176
+ pairs:
1177
+ log into: sign in to
1178
+ log onto: sign in to
1179
+ log in: sign in
1180
+ login: sign in
1181
+ log on: sign in
1182
+ logon: sign in
1183
+ log off: sign out
1184
+ log out: sign out
1185
+ logout: sign out
1186
+ sign into: sign in to
1187
+ signin: sign in
1188
+ sign off: sign out
1189
+ ignoreCase: true
1190
+ wordBoundary: true
1191
+ microsoft/simple-words:
1192
+ severity: warn
1193
+ message: Use "%s" instead of "%s" (Microsoft).
1194
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences
1195
+ scope: summary
1196
+ fix: false
1197
+ assertions:
1198
+ swap:
1199
+ pairs:
1200
+ \butilize\b: use
1201
+ \butilise\b: use
1202
+ \bmake use of\b: use
1203
+ \bin order to\b: to
1204
+ \bas a means to\b: to
1205
+ \bin addition\b(?!\s+to\b): also
1206
+ \bestablish connectivity\b: connect
1207
+ \binform\b: tell
1208
+ ignoreCase: true
1209
+ wordBoundary: false
1210
+ keysAreRegex: true
1211
+ microsoft/single-space-after-punctuation:
1212
+ severity: warn
1213
+ message: Use one space, not two, after end punctuation (Microsoft).
1214
+ link: https://learn.microsoft.com/en-us/style-guide/punctuation/periods
1215
+ scope: summary
1216
+ fix: false
1217
+ assertions:
1218
+ pattern:
1219
+ tokens:
1220
+ - '[.!?:]\s{2,}(?=[A-Z])'
1221
+ microsoft/spell-out-ordinals:
1222
+ severity: warn
1223
+ message: Spell out ordinal numbers; avoid "%s" (Microsoft).
1224
+ link: https://learn.microsoft.com/en-us/style-guide/numbers
1225
+ scope: summary
1226
+ fix: false
1227
+ assertions:
1228
+ pattern:
1229
+ tokens:
1230
+ - \b\d+(?:st|nd|rd|th)\b
1231
+ microsoft/spelling-hyphenation:
1232
+ severity: error
1233
+ message: Microsoft style spells this "%s", not "%s".
1234
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/e/email
1235
+ scope: summary
1236
+ fix: false
1237
+ assertions:
1238
+ swap:
1239
+ pairs:
1240
+ \be-?mail\b(?<!email): email
1241
+ \bdata ?base\b(?<!database): database
1242
+ \bend ?point\b(?<!endpoint): endpoint
1243
+ \bweb ?site\b(?<!website): website
1244
+ \bweb ?page\b(?<!webpage): webpage
1245
+ \bwork ?station\b(?<!workstation): workstation
1246
+ \bscreen ?shot\b(?<!screenshot): screenshot
1247
+ \btask ?bar\b(?<!taskbar): taskbar
1248
+ \bname ?space\b(?<!namespace): namespace
1249
+ \bplug-in\b: plugin
1250
+ \becommerce\b: e-commerce
1251
+ \belearning\b: e-learning
1252
+ \bebook\b: e-book
1253
+ \bcyber-security\b: cybersecurity
1254
+ \bco-author\b: coauthor
1255
+ \bdial ?up\b: dial-up
1256
+ \bread only\b: read-only
1257
+ \bcontext sensitive\b: context-sensitive
1258
+ \bsingle sign ?on\b: single sign-on
1259
+ \bmulti-factor\b: multifactor
1260
+ \bmulti-cloud\b: multicloud
1261
+ \bmulti-tenant\b: multitenant
1262
+ \bwell-being\b: wellbeing
1263
+ \btool ?tip\b(?<!tooltip): tooltip
1264
+ \bimbed\b: embed
1265
+ ignoreCase: true
1266
+ wordBoundary: false
1267
+ keysAreRegex: true
1268
+ microsoft/straight-quotes:
1269
+ severity: warn
1270
+ message: Use straight quotation marks, not curly ones (Microsoft).
1271
+ link: https://learn.microsoft.com/en-us/style-guide/punctuation/quotation-marks
1272
+ scope: summary
1273
+ fix: false
1274
+ assertions:
1275
+ swap:
1276
+ pairs:
1277
+ “: '"'
1278
+ ”: '"'
1279
+ ‘: "'"
1280
+ ’: "'"
1281
+ microsoft/the-ask:
1282
+ severity: warn
1283
+ message: Use "%s" instead of "%s" (Microsoft).
1284
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/dont-use-common-words-in-new-ways
1285
+ scope: summary
1286
+ fix: false
1287
+ assertions:
1288
+ swap:
1289
+ pairs:
1290
+ \bthe ask\b(?!\s+(?:tick|ticks|price|prices|spread|spreads|size|quote|quotes)\b): the request
1291
+ ignoreCase: true
1292
+ wordBoundary: false
1293
+ keysAreRegex: true
1294
+ microsoft/tooltip-capitalization:
1295
+ severity: error
1296
+ message: 'Use "%s", not "%s" (Microsoft: tooltip is one word, lowercase).'
1297
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/t/tooltip
1298
+ scope: summary
1299
+ fix: false
1300
+ assertions:
1301
+ swap:
1302
+ pairs:
1303
+ ToolTip: tooltip
1304
+ ignoreCase: false
1305
+ wordBoundary: true
1306
+ microsoft/us-spelling:
1307
+ severity: error
1308
+ message: Use the US spelling "%s" instead of "%s" (Microsoft).
1309
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words
1310
+ scope: summary
1311
+ fix: false
1312
+ assertions:
1313
+ swap:
1314
+ pairs:
1315
+ \bcentred\b: centered
1316
+ \bcentring\b: centering
1317
+ \bcatalogued\b: cataloged
1318
+ \bcataloguing\b: cataloging
1319
+ \bcancelled\b: canceled
1320
+ \bcancelling\b: canceling
1321
+ \bfavourite\b: favorite
1322
+ \bauthorise\b: authorize
1323
+ \bauthorises\b: authorizes
1324
+ \bauthorised\b: authorized
1325
+ \bauthorising\b: authorizing
1326
+ \bauthorisation\b: authorization
1327
+ \bcustomise\b: customize
1328
+ \bcustomises\b: customizes
1329
+ \bcustomised\b: customized
1330
+ \bcustomising\b: customizing
1331
+ \bcustomisation\b: customization
1332
+ \blabelled\b: labeled
1333
+ \blabelling\b: labeling
1334
+ \bmodelled\b: modeled
1335
+ \bmodelling\b: modeling
1336
+ ignoreCase: true
1337
+ wordBoundary: false
1338
+ keysAreRegex: true
1339
+ microsoft/us-spelling-detect:
1340
+ severity: error
1341
+ message: Use the US spelling "%s" instead of "%s" (Microsoft).
1342
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words
1343
+ scope: summary
1344
+ fix: false
1345
+ assertions:
1346
+ swap:
1347
+ pairs:
1348
+ \bcentre\b: center
1349
+ \bcentres\b: centers
1350
+ \bcatalogue\b: catalog
1351
+ \bcatalogues\b: catalogs
1352
+ ignoreCase: true
1353
+ wordBoundary: false
1354
+ keysAreRegex: true
1355
+ microsoft/usa-abbreviation:
1356
+ severity: warn
1357
+ message: 'Microsoft style: use "%s" instead of "%s".'
1358
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/f/far-east
1359
+ scope: summary
1360
+ fix: false
1361
+ assertions:
1362
+ swap:
1363
+ pairs:
1364
+ \bUSA\b: US
1365
+ \bU\.S\.A\.: US
1366
+ \bU\.S\.: US
1367
+ ignoreCase: true
1368
+ wordBoundary: false
1369
+ keysAreRegex: true
1370
+ microsoft/use-contractions:
1371
+ severity: warn
1372
+ message: Microsoft style prefers the contraction "%s" over "%s".
1373
+ link: https://learn.microsoft.com/en-us/style-guide/word-choice/use-contractions
1374
+ scope: summary
1375
+ fix: false
1376
+ assertions:
1377
+ swap:
1378
+ pairs:
1379
+ cannot: can't
1380
+ can not: can't
1381
+ do not: don't
1382
+ does not: doesn't
1383
+ did not: didn't
1384
+ is not: isn't
1385
+ are not: aren't
1386
+ was not: wasn't
1387
+ were not: weren't
1388
+ will not: won't
1389
+ would not: wouldn't
1390
+ should not: shouldn't
1391
+ could not: couldn't
1392
+ have not: haven't
1393
+ has not: hasn't
1394
+ had not: hadn't
1395
+ it is: it's
1396
+ you are: you're
1397
+ we are: we're
1398
+ they are: they're
1399
+ you will: you'll
1400
+ let us: let's
1401
+ ignoreCase: true
1402
+ wordBoundary: true
1403
+ microsoft/versus-in-text:
1404
+ severity: warn
1405
+ message: Use "%s" instead of "%s" in body text (Microsoft).
1406
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/v/versus-vs
1407
+ scope:
1408
+ - paragraph
1409
+ - list-item
1410
+ - table.cell
1411
+ fix: false
1412
+ assertions:
1413
+ swap:
1414
+ pairs:
1415
+ \bvs\.: versus
1416
+ ignoreCase: true
1417
+ wordBoundary: false
1418
+ keysAreRegex: true
1419
+ microsoft/vs-in-headings:
1420
+ severity: warn
1421
+ message: Use "%s" instead of "%s" in headings (Microsoft).
1422
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/v/versus-vs
1423
+ scope: heading
1424
+ fix: false
1425
+ assertions:
1426
+ swap:
1427
+ pairs:
1428
+ versus: vs.
1429
+ ignoreCase: true
1430
+ wordBoundary: true
1431
+ microsoft/world-wide-web:
1432
+ severity: warn
1433
+ message: Use "%s" instead of "%s" (Microsoft).
1434
+ link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/i/internet-intranet-extranet
1435
+ scope: summary
1436
+ fix: false
1437
+ assertions:
1438
+ swap:
1439
+ pairs:
1440
+ World Wide Web: web
1441
+ ignoreCase: false
1442
+ wordBoundary: true
1443
+
1444
+ # ==============================================================================
1445
+ # Appendix — candidates NOT shipped by recheck/microsoft (hand-maintained)
1446
+ # ==============================================================================
1447
+ # This file is appended verbatim to the generated example above by
1448
+ # `pnpm examples:generate` (see scripts/generate-examples.mjs). Editing it
1449
+ # makes examples/microsoft.yaml stale until you regenerate — the drift
1450
+ # test's failure message says so, so this doesn't read as a generator bug.
1451
+ #
1452
+ # Full detail, every candidate, and why: packages/recheck/presets/microsoft/PROVENANCE.md
1453
+ #
1454
+ # ------------------------------------------------------------------------------
1455
+ # TOO-RISKY / NOISY — real, guide-confirmed content, judged too broad or too
1456
+ # audience-conditional to enforce mechanically. Shown here as the rule it
1457
+ # WOULD be if shipped, commented out, so you can see the shape being avoided.
1458
+ # ------------------------------------------------------------------------------
1459
+
1460
+ # TOO-RISKY: "deprecated" is confirmed guide content ("avoid in content for a
1461
+ # technical audience"), but it's itself load-bearing OpenAPI vocabulary (the
1462
+ # `deprecated: true` field) — shipping this would misfire on Redocly's own
1463
+ # API-documentation domain.
1464
+ # microsoft/deprecated-obsolete:
1465
+ # severity: warn
1466
+ # message: 'Use "%s" instead of "%s" (Microsoft).'
1467
+ # assertions:
1468
+ # swap:
1469
+ # ignoreCase: true
1470
+ # wordBoundary: true
1471
+ # pairs: { deprecated: obsolete }
1472
+
1473
+ # TOO-RISKY: Microsoft's own page carves out exactly Redocly's audience —
1474
+ # "it's OK to use header as a short form of file header, as in HTML header"
1475
+ # — the standard, correct term for an HTTP/API header throughout API docs.
1476
+ # microsoft/header-heading:
1477
+ # severity: warn
1478
+ # message: 'Use "%s" instead of "%s" (Microsoft) — except in developer content.'
1479
+ # assertions:
1480
+ # swap:
1481
+ # ignoreCase: true
1482
+ # wordBoundary: true
1483
+ # pairs: { header: heading }
1484
+
1485
+ # TOO-RISKY: "context menu" is developer-audience-conditional per Microsoft's
1486
+ # own page ("use context menu only in content for developers") — Redocly's
1487
+ # docs ARE developer content, so this would misfire if shipped unconditionally.
1488
+ # microsoft/context-menu:
1489
+ # severity: warn
1490
+ # message: 'Use "%s" instead of "%s" (Microsoft) — except in developer content.'
1491
+ # assertions:
1492
+ # swap:
1493
+ # ignoreCase: true
1494
+ # wordBoundary: true
1495
+ # pairs: { context menu: shortcut menu }
1496
+
1497
+ # TOO-RISKY: "that" referring to people is one of the most common words in
1498
+ # English; only a small fraction of occurrences refer to people at all, so a
1499
+ # literal swap toward "who" would be extraordinarily noisy.
1500
+ # microsoft/that-who:
1501
+ # severity: warn
1502
+ # message: 'Consider "%s" instead of "%s" when referring to a person (Microsoft).'
1503
+ # assertions:
1504
+ # pattern:
1505
+ # tokens: ['\bthat\b']
1506
+
1507
+ # TOO-RISKY: "star" is an ordinary English word (star rating, star
1508
+ # performer) with a narrow, Microsoft-documented exception (OK for a
1509
+ # phone-keypad key) a blanket swap would miss in both directions.
1510
+ # microsoft/star-asterisk:
1511
+ # severity: warn
1512
+ # message: 'Use "%s" instead of "%s" (Microsoft), except for the phone-keypad key.'
1513
+ # assertions:
1514
+ # swap:
1515
+ # ignoreCase: true
1516
+ # wordBoundary: true
1517
+ # pairs: { star: asterisk }
1518
+
1519
+ # ------------------------------------------------------------------------------
1520
+ # NEEDS HUMAN REVIEW — real guide content with no safe mechanical detection
1521
+ # (NOT-ENFORCEABLE). Recheck cannot check these; review them yourself:
1522
+ # ------------------------------------------------------------------------------
1523
+ # [ ] Active voice, subjunctive mood, verb-first sentences, modifier
1524
+ # stacks, that/who omission — all require POS tagging or grammatical-
1525
+ # role judgment beyond regex/AST primitives
1526
+ # [ ] Table cells in sentence case — reference tables are dense with
1527
+ # identifiers and proper nouns that don't fit cleanly
1528
+ # [ ] "Name" as a column header — genuinely correct in many API reference
1529
+ # tables; Microsoft's own objection needs context this preset doesn't have
1530
+ # [ ] Second-level headings need at least two siblings; no two headings in
1531
+ # a row; list-item parallelism
1532
+ # [ ] En dash for a minus sign; "from"/"through" ranges; closing-quote
1533
+ # placement; mid-sentence colon rules
1534
+ # [ ] Spell out single-digit numbers; no sentence-initial numerals; no
1535
+ # K/M/B abbreviations; spell out months
1536
+ # [ ] Bare-URL/link-formatting rules (available generically via
1537
+ # `recheck/markdown`'s `no-bare-urls` if you want them, just not
1538
+ # attributed to Microsoft specifically here)
1539
+ # [ ] House-rule structural conventions (link fragments, fenced-code
1540
+ # language, single H1, consistent bullet/fence/emphasis style) — real
1541
+ # and worth having, but the guide itself never states them, so they
1542
+ # don't ship under a Microsoft attribution