eslint-plugin-traceability 1.22.0 → 1.23.1

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 (247) hide show
  1. package/CHANGELOG.md +8 -7
  2. package/lib/{src/rules → rules}/require-req-annotation.js +51 -45
  3. package/package.json +9 -13
  4. package/user-docs/api-reference.md +2 -2
  5. package/lib/tests/cli-error-handling.test.d.ts +0 -1
  6. package/lib/tests/cli-error-handling.test.js +0 -54
  7. package/lib/tests/config/eslint-config-validation.test.d.ts +0 -9
  8. package/lib/tests/config/eslint-config-validation.test.js +0 -101
  9. package/lib/tests/config/flat-config-presets-integration.test.d.ts +0 -1
  10. package/lib/tests/config/flat-config-presets-integration.test.js +0 -76
  11. package/lib/tests/config/require-story-annotation-config.test.d.ts +0 -10
  12. package/lib/tests/config/require-story-annotation-config.test.js +0 -26
  13. package/lib/tests/fixtures/stale/example.d.ts +0 -0
  14. package/lib/tests/fixtures/stale/example.js +0 -4
  15. package/lib/tests/fixtures/update/example.d.ts +0 -0
  16. package/lib/tests/fixtures/update/example.js +0 -4
  17. package/lib/tests/fixtures/valid-annotations/example.d.ts +0 -0
  18. package/lib/tests/fixtures/valid-annotations/example.js +0 -3
  19. package/lib/tests/integration/annotation-placement-inside-prettier.integration.test.d.ts +0 -1
  20. package/lib/tests/integration/annotation-placement-inside-prettier.integration.test.js +0 -133
  21. package/lib/tests/integration/catch-annotation-prettier.integration.test.d.ts +0 -1
  22. package/lib/tests/integration/catch-annotation-prettier.integration.test.js +0 -121
  23. package/lib/tests/integration/cli-integration.test.d.ts +0 -1
  24. package/lib/tests/integration/cli-integration.test.js +0 -96
  25. package/lib/tests/integration/else-if-annotation-prettier.integration.test.d.ts +0 -1
  26. package/lib/tests/integration/else-if-annotation-prettier.integration.test.js +0 -100
  27. package/lib/tests/integration/no-redundant-annotation.integration.test.d.ts +0 -1
  28. package/lib/tests/integration/no-redundant-annotation.integration.test.js +0 -129
  29. package/lib/tests/integration/prettier-test-helpers.d.ts +0 -9
  30. package/lib/tests/integration/prettier-test-helpers.js +0 -35
  31. package/lib/tests/integration/require-traceability-aliases.integration.test.d.ts +0 -1
  32. package/lib/tests/integration/require-traceability-aliases.integration.test.js +0 -152
  33. package/lib/tests/integration/require-traceability-test-callbacks.integration.test.d.ts +0 -1
  34. package/lib/tests/integration/require-traceability-test-callbacks.integration.test.js +0 -149
  35. package/lib/tests/maintenance/batch.test.d.ts +0 -1
  36. package/lib/tests/maintenance/batch.test.js +0 -80
  37. package/lib/tests/maintenance/cli.test.d.ts +0 -1
  38. package/lib/tests/maintenance/cli.test.js +0 -306
  39. package/lib/tests/maintenance/detect-isolated.test.d.ts +0 -1
  40. package/lib/tests/maintenance/detect-isolated.test.js +0 -187
  41. package/lib/tests/maintenance/detect.test.d.ts +0 -1
  42. package/lib/tests/maintenance/detect.test.js +0 -46
  43. package/lib/tests/maintenance/index.test.d.ts +0 -1
  44. package/lib/tests/maintenance/index.test.js +0 -26
  45. package/lib/tests/maintenance/report.test.d.ts +0 -1
  46. package/lib/tests/maintenance/report.test.js +0 -68
  47. package/lib/tests/maintenance/storyParser.test.d.ts +0 -8
  48. package/lib/tests/maintenance/storyParser.test.js +0 -505
  49. package/lib/tests/maintenance/update-isolated.test.d.ts +0 -1
  50. package/lib/tests/maintenance/update-isolated.test.js +0 -71
  51. package/lib/tests/maintenance/update.test.d.ts +0 -1
  52. package/lib/tests/maintenance/update.test.js +0 -27
  53. package/lib/tests/perf/maintenance-cli-large-workspace.test.d.ts +0 -1
  54. package/lib/tests/perf/maintenance-cli-large-workspace.test.js +0 -229
  55. package/lib/tests/perf/maintenance-large-workspace.test.d.ts +0 -1
  56. package/lib/tests/perf/maintenance-large-workspace.test.js +0 -169
  57. package/lib/tests/perf/require-branch-annotation-large-file.test.d.ts +0 -1
  58. package/lib/tests/perf/require-branch-annotation-large-file.test.js +0 -67
  59. package/lib/tests/perf/valid-annotation-format-large-file.test.d.ts +0 -1
  60. package/lib/tests/perf/valid-annotation-format-large-file.test.js +0 -75
  61. package/lib/tests/plugin-default-export-and-configs.test.d.ts +0 -1
  62. package/lib/tests/plugin-default-export-and-configs.test.js +0 -121
  63. package/lib/tests/plugin-setup-error.test.d.ts +0 -6
  64. package/lib/tests/plugin-setup-error.test.js +0 -38
  65. package/lib/tests/plugin-setup.test.d.ts +0 -1
  66. package/lib/tests/plugin-setup.test.js +0 -63
  67. package/lib/tests/rules/auto-fix-behavior-008.test.d.ts +0 -1
  68. package/lib/tests/rules/auto-fix-behavior-008.test.js +0 -285
  69. package/lib/tests/rules/error-reporting.test.d.ts +0 -1
  70. package/lib/tests/rules/error-reporting.test.js +0 -99
  71. package/lib/tests/rules/no-redundant-annotation.test.d.ts +0 -1
  72. package/lib/tests/rules/no-redundant-annotation.test.js +0 -163
  73. package/lib/tests/rules/prefer-implements-annotation.test.d.ts +0 -1
  74. package/lib/tests/rules/prefer-implements-annotation.test.js +0 -162
  75. package/lib/tests/rules/require-branch-annotation.test.d.ts +0 -1
  76. package/lib/tests/rules/require-branch-annotation.test.js +0 -593
  77. package/lib/tests/rules/require-req-annotation.test.d.ts +0 -1
  78. package/lib/tests/rules/require-req-annotation.test.js +0 -246
  79. package/lib/tests/rules/require-story-annotation.test.d.ts +0 -1
  80. package/lib/tests/rules/require-story-annotation.test.js +0 -376
  81. package/lib/tests/rules/require-story-core-edgecases.test.d.ts +0 -1
  82. package/lib/tests/rules/require-story-core-edgecases.test.js +0 -15
  83. package/lib/tests/rules/require-story-core.autofix.test.d.ts +0 -1
  84. package/lib/tests/rules/require-story-core.autofix.test.js +0 -66
  85. package/lib/tests/rules/require-story-core.test.d.ts +0 -1
  86. package/lib/tests/rules/require-story-core.test.js +0 -65
  87. package/lib/tests/rules/require-story-helpers-edgecases.test.d.ts +0 -7
  88. package/lib/tests/rules/require-story-helpers-edgecases.test.js +0 -80
  89. package/lib/tests/rules/require-story-helpers.test.d.ts +0 -1
  90. package/lib/tests/rules/require-story-helpers.test.js +0 -474
  91. package/lib/tests/rules/require-story-io-behavior.test.d.ts +0 -7
  92. package/lib/tests/rules/require-story-io-behavior.test.js +0 -46
  93. package/lib/tests/rules/require-story-io.edgecases.test.d.ts +0 -7
  94. package/lib/tests/rules/require-story-io.edgecases.test.js +0 -46
  95. package/lib/tests/rules/require-story-utils.test.d.ts +0 -7
  96. package/lib/tests/rules/require-story-utils.test.js +0 -158
  97. package/lib/tests/rules/require-story-visitors-edgecases.test.d.ts +0 -7
  98. package/lib/tests/rules/require-story-visitors-edgecases.test.js +0 -27
  99. package/lib/tests/rules/require-test-traceability.test.d.ts +0 -1
  100. package/lib/tests/rules/require-test-traceability.test.js +0 -95
  101. package/lib/tests/rules/valid-annotation-format-internal.test.d.ts +0 -8
  102. package/lib/tests/rules/valid-annotation-format-internal.test.js +0 -47
  103. package/lib/tests/rules/valid-annotation-format.test.d.ts +0 -1
  104. package/lib/tests/rules/valid-annotation-format.test.js +0 -634
  105. package/lib/tests/rules/valid-req-reference.test.d.ts +0 -1
  106. package/lib/tests/rules/valid-req-reference.test.js +0 -129
  107. package/lib/tests/rules/valid-story-reference.test.d.ts +0 -1
  108. package/lib/tests/rules/valid-story-reference.test.js +0 -413
  109. package/lib/tests/utils/annotation-checker-autofix-behavior.test.d.ts +0 -5
  110. package/lib/tests/utils/annotation-checker-autofix-behavior.test.js +0 -103
  111. package/lib/tests/utils/annotation-checker.test.d.ts +0 -24
  112. package/lib/tests/utils/annotation-checker.test.js +0 -84
  113. package/lib/tests/utils/annotation-scope-analyzer.test.d.ts +0 -1
  114. package/lib/tests/utils/annotation-scope-analyzer.test.js +0 -211
  115. package/lib/tests/utils/branch-annotation-catch-insert-position.test.d.ts +0 -1
  116. package/lib/tests/utils/branch-annotation-catch-insert-position.test.js +0 -69
  117. package/lib/tests/utils/branch-annotation-catch-position.test.d.ts +0 -1
  118. package/lib/tests/utils/branch-annotation-catch-position.test.js +0 -115
  119. package/lib/tests/utils/branch-annotation-else-if-insert-position.test.d.ts +0 -1
  120. package/lib/tests/utils/branch-annotation-else-if-insert-position.test.js +0 -82
  121. package/lib/tests/utils/branch-annotation-else-if-position.test.d.ts +0 -1
  122. package/lib/tests/utils/branch-annotation-else-if-position.test.js +0 -145
  123. package/lib/tests/utils/branch-annotation-helpers.test.d.ts +0 -1
  124. package/lib/tests/utils/branch-annotation-helpers.test.js +0 -462
  125. package/lib/tests/utils/fsTestHelpers.d.ts +0 -7
  126. package/lib/tests/utils/fsTestHelpers.js +0 -26
  127. package/lib/tests/utils/ioTestHelpers.d.ts +0 -7
  128. package/lib/tests/utils/ioTestHelpers.js +0 -24
  129. package/lib/tests/utils/req-annotation-detection.test.d.ts +0 -1
  130. package/lib/tests/utils/req-annotation-detection.test.js +0 -358
  131. package/lib/tests/utils/require-story-core-test-helpers.d.ts +0 -10
  132. package/lib/tests/utils/require-story-core-test-helpers.js +0 -75
  133. package/lib/tests/utils/temp-dir-helpers.d.ts +0 -19
  134. package/lib/tests/utils/temp-dir-helpers.js +0 -62
  135. package/lib/tests/utils/ts-language-options.d.ts +0 -16
  136. package/lib/tests/utils/ts-language-options.js +0 -30
  137. /package/lib/{src/index.d.ts → index.d.ts} +0 -0
  138. /package/lib/{src/index.js → index.js} +0 -0
  139. /package/lib/{src/maintenance → maintenance}/batch.d.ts +0 -0
  140. /package/lib/{src/maintenance → maintenance}/batch.js +0 -0
  141. /package/lib/{src/maintenance → maintenance}/cli.d.ts +0 -0
  142. /package/lib/{src/maintenance → maintenance}/cli.js +0 -0
  143. /package/lib/{src/maintenance → maintenance}/commands.d.ts +0 -0
  144. /package/lib/{src/maintenance → maintenance}/commands.js +0 -0
  145. /package/lib/{src/maintenance → maintenance}/detect.d.ts +0 -0
  146. /package/lib/{src/maintenance → maintenance}/detect.js +0 -0
  147. /package/lib/{src/maintenance → maintenance}/flags.d.ts +0 -0
  148. /package/lib/{src/maintenance → maintenance}/flags.js +0 -0
  149. /package/lib/{src/maintenance → maintenance}/index.d.ts +0 -0
  150. /package/lib/{src/maintenance → maintenance}/index.js +0 -0
  151. /package/lib/{src/maintenance → maintenance}/report.d.ts +0 -0
  152. /package/lib/{src/maintenance → maintenance}/report.js +0 -0
  153. /package/lib/{src/maintenance → maintenance}/storyParser.d.ts +0 -0
  154. /package/lib/{src/maintenance → maintenance}/storyParser.js +0 -0
  155. /package/lib/{src/maintenance → maintenance}/update.d.ts +0 -0
  156. /package/lib/{src/maintenance → maintenance}/update.js +0 -0
  157. /package/lib/{src/maintenance → maintenance}/utils.d.ts +0 -0
  158. /package/lib/{src/maintenance → maintenance}/utils.js +0 -0
  159. /package/lib/{src/rules → rules}/helpers/pattern-validators.d.ts +0 -0
  160. /package/lib/{src/rules → rules}/helpers/pattern-validators.js +0 -0
  161. /package/lib/{src/rules → rules}/helpers/prefer-implements-inline.d.ts +0 -0
  162. /package/lib/{src/rules → rules}/helpers/prefer-implements-inline.js +0 -0
  163. /package/lib/{src/rules → rules}/helpers/require-story-comment-detection.d.ts +0 -0
  164. /package/lib/{src/rules → rules}/helpers/require-story-comment-detection.js +0 -0
  165. /package/lib/{src/rules → rules}/helpers/require-story-core.d.ts +0 -0
  166. /package/lib/{src/rules → rules}/helpers/require-story-core.js +0 -0
  167. /package/lib/{src/rules → rules}/helpers/require-story-helpers.d.ts +0 -0
  168. /package/lib/{src/rules → rules}/helpers/require-story-helpers.js +0 -0
  169. /package/lib/{src/rules → rules}/helpers/require-story-io.d.ts +0 -0
  170. /package/lib/{src/rules → rules}/helpers/require-story-io.js +0 -0
  171. /package/lib/{src/rules → rules}/helpers/require-story-name-extraction.d.ts +0 -0
  172. /package/lib/{src/rules → rules}/helpers/require-story-name-extraction.js +0 -0
  173. /package/lib/{src/rules → rules}/helpers/require-story-node-utils.d.ts +0 -0
  174. /package/lib/{src/rules → rules}/helpers/require-story-node-utils.js +0 -0
  175. /package/lib/{src/rules → rules}/helpers/require-story-utils.d.ts +0 -0
  176. /package/lib/{src/rules → rules}/helpers/require-story-utils.js +0 -0
  177. /package/lib/{src/rules → rules}/helpers/require-story-visitors.d.ts +0 -0
  178. /package/lib/{src/rules → rules}/helpers/require-story-visitors.js +0 -0
  179. /package/lib/{src/rules → rules}/helpers/require-test-traceability-helpers.d.ts +0 -0
  180. /package/lib/{src/rules → rules}/helpers/require-test-traceability-helpers.js +0 -0
  181. /package/lib/{src/rules → rules}/helpers/test-callback-exclusion.d.ts +0 -0
  182. /package/lib/{src/rules → rules}/helpers/test-callback-exclusion.js +0 -0
  183. /package/lib/{src/rules → rules}/helpers/valid-annotation-format-internal.d.ts +0 -0
  184. /package/lib/{src/rules → rules}/helpers/valid-annotation-format-internal.js +0 -0
  185. /package/lib/{src/rules → rules}/helpers/valid-annotation-format-validators.d.ts +0 -0
  186. /package/lib/{src/rules → rules}/helpers/valid-annotation-format-validators.js +0 -0
  187. /package/lib/{src/rules → rules}/helpers/valid-annotation-options.d.ts +0 -0
  188. /package/lib/{src/rules → rules}/helpers/valid-annotation-options.js +0 -0
  189. /package/lib/{src/rules → rules}/helpers/valid-annotation-utils.d.ts +0 -0
  190. /package/lib/{src/rules → rules}/helpers/valid-annotation-utils.js +0 -0
  191. /package/lib/{src/rules → rules}/helpers/valid-implements-utils.d.ts +0 -0
  192. /package/lib/{src/rules → rules}/helpers/valid-implements-utils.js +0 -0
  193. /package/lib/{src/rules → rules}/helpers/valid-req-reference-helpers.d.ts +0 -0
  194. /package/lib/{src/rules → rules}/helpers/valid-req-reference-helpers.js +0 -0
  195. /package/lib/{src/rules → rules}/helpers/valid-story-reference-helpers.d.ts +0 -0
  196. /package/lib/{src/rules → rules}/helpers/valid-story-reference-helpers.js +0 -0
  197. /package/lib/{src/rules → rules}/no-redundant-annotation.d.ts +0 -0
  198. /package/lib/{src/rules → rules}/no-redundant-annotation.js +0 -0
  199. /package/lib/{src/rules → rules}/prefer-implements-annotation.d.ts +0 -0
  200. /package/lib/{src/rules → rules}/prefer-implements-annotation.js +0 -0
  201. /package/lib/{src/rules → rules}/require-branch-annotation.d.ts +0 -0
  202. /package/lib/{src/rules → rules}/require-branch-annotation.js +0 -0
  203. /package/lib/{src/rules → rules}/require-req-annotation.d.ts +0 -0
  204. /package/lib/{src/rules → rules}/require-story-annotation.d.ts +0 -0
  205. /package/lib/{src/rules → rules}/require-story-annotation.js +0 -0
  206. /package/lib/{src/rules → rules}/require-test-traceability.d.ts +0 -0
  207. /package/lib/{src/rules → rules}/require-test-traceability.js +0 -0
  208. /package/lib/{src/rules → rules}/require-traceability.d.ts +0 -0
  209. /package/lib/{src/rules → rules}/require-traceability.js +0 -0
  210. /package/lib/{src/rules → rules}/valid-annotation-format.d.ts +0 -0
  211. /package/lib/{src/rules → rules}/valid-annotation-format.js +0 -0
  212. /package/lib/{src/rules → rules}/valid-req-reference.d.ts +0 -0
  213. /package/lib/{src/rules → rules}/valid-req-reference.js +0 -0
  214. /package/lib/{src/rules → rules}/valid-story-reference.d.ts +0 -0
  215. /package/lib/{src/rules → rules}/valid-story-reference.js +0 -0
  216. /package/lib/{src/utils → utils}/annotation-checker.d.ts +0 -0
  217. /package/lib/{src/utils → utils}/annotation-checker.js +0 -0
  218. /package/lib/{src/utils → utils}/annotation-scope-analyzer.d.ts +0 -0
  219. /package/lib/{src/utils → utils}/annotation-scope-analyzer.js +0 -0
  220. /package/lib/{src/utils → utils}/branch-annotation-catch-helpers.d.ts +0 -0
  221. /package/lib/{src/utils → utils}/branch-annotation-catch-helpers.js +0 -0
  222. /package/lib/{src/utils → utils}/branch-annotation-helpers.d.ts +0 -0
  223. /package/lib/{src/utils → utils}/branch-annotation-helpers.js +0 -0
  224. /package/lib/{src/utils → utils}/branch-annotation-if-helpers.d.ts +0 -0
  225. /package/lib/{src/utils → utils}/branch-annotation-if-helpers.js +0 -0
  226. /package/lib/{src/utils → utils}/branch-annotation-indent-helpers.d.ts +0 -0
  227. /package/lib/{src/utils → utils}/branch-annotation-indent-helpers.js +0 -0
  228. /package/lib/{src/utils → utils}/branch-annotation-loop-helpers.d.ts +0 -0
  229. /package/lib/{src/utils → utils}/branch-annotation-loop-helpers.js +0 -0
  230. /package/lib/{src/utils → utils}/branch-annotation-report-helpers.d.ts +0 -0
  231. /package/lib/{src/utils → utils}/branch-annotation-report-helpers.js +0 -0
  232. /package/lib/{src/utils → utils}/branch-annotation-story-fix-helpers.d.ts +0 -0
  233. /package/lib/{src/utils → utils}/branch-annotation-story-fix-helpers.js +0 -0
  234. /package/lib/{src/utils → utils}/branch-annotation-switch-helpers.d.ts +0 -0
  235. /package/lib/{src/utils → utils}/branch-annotation-switch-helpers.js +0 -0
  236. /package/lib/{src/utils → utils}/branch-validation.d.ts +0 -0
  237. /package/lib/{src/utils → utils}/branch-validation.js +0 -0
  238. /package/lib/{src/utils → utils}/comment-text-helpers.d.ts +0 -0
  239. /package/lib/{src/utils → utils}/comment-text-helpers.js +0 -0
  240. /package/lib/{src/utils → utils}/function-annotation-helpers.d.ts +0 -0
  241. /package/lib/{src/utils → utils}/function-annotation-helpers.js +0 -0
  242. /package/lib/{src/utils → utils}/redundancy-detector.d.ts +0 -0
  243. /package/lib/{src/utils → utils}/redundancy-detector.js +0 -0
  244. /package/lib/{src/utils → utils}/reqAnnotationDetection.d.ts +0 -0
  245. /package/lib/{src/utils → utils}/reqAnnotationDetection.js +0 -0
  246. /package/lib/{src/utils → utils}/storyReferenceUtils.d.ts +0 -0
  247. /package/lib/{src/utils → utils}/storyReferenceUtils.js +0 -0
@@ -1,634 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- /**
7
- * Tests for: docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md
8
- * @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md
9
- * @req REQ-FORMAT-SPECIFICATION - Verify valid-annotation-format rule enforces annotation format syntax
10
- * Tests for: docs/stories/007.0-DEV-ERROR-REPORTING.story.md
11
- * @story docs/stories/007.0-DEV-ERROR-REPORTING.story.md
12
- * @req REQ-ERROR-MESSAGES-CONSISTENT - Verify invalid annotation errors use consistent wording and structure
13
- * @req REQ-ERROR-MESSAGES-ACTIONABLE - Verify invalid annotation errors provide actionable guidance and examples
14
- * @req REQ-ERROR-MESSAGES-IDENTIFIERS - Verify invalid annotation errors echo the offending identifier/path in the message
15
- * Tests for: docs/stories/010.1-DEV-CONFIGURABLE-PATTERNS.story.md
16
- * @story docs/stories/010.1-DEV-CONFIGURABLE-PATTERNS.story.md
17
- * @req REQ-CONFIGURABLE-PATTERNS-STORY - Rule supports configurable story path regex patterns
18
- * @req REQ-CONFIGURABLE-PATTERNS-REQ - Rule supports configurable requirement ID regex patterns
19
- * @req REQ-CONFIGURABLE-PATTERNS-EXAMPLES - Rule supports configurable example strings in error messages
20
- * @req REQ-CONFIGURABLE-PATTERNS-FALLBACK - Invalid regex patterns fall back to default behavior without crashing
21
- * Tests for: docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md
22
- * @story docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md
23
- * @req REQ-SUPPORTS-PARSE - Rule parses @supports annotations with story and requirement references
24
- * @req REQ-FORMAT-VALIDATION - Rule validates story and requirement formats inside @supports annotations
25
- * @req REQ-MIXED-SUPPORT - Rule supports mixed @story/@req/@supports usage in the same comment
26
- * Tests for: docs/stories/022.0-DEV-JSDOC-COEXISTENCE.story.md
27
- * @story docs/stories/022.0-DEV-JSDOC-COEXISTENCE.story.md
28
- * @req REQ-JSDOC-TAG-COEXISTENCE - Rule allows traceability annotations to coexist with other JSDoc tags
29
- * @req REQ-ANNOTATION-TERMINATION - Rule correctly terminates traceability annotation values at JSDoc tag boundaries
30
- * @req REQ-JSDOC-BOUNDARY-DETECTION - Rule detects @param/@returns and similar tags as boundaries
31
- * @req REQ-CONTINUATION-LOGIC - Rule correctly decides when to continue or stop multi-line traceability values
32
- * @req REQ-NO-FALSE-POSITIVES - Rule does not report false positives when JSDoc tags follow traceability tags
33
- * @req REQ-PRESERVE-MULTILINE - Rule preserves multi-line story/req values without including following JSDoc tags
34
- */
35
- const eslint_1 = require("eslint");
36
- const valid_annotation_format_1 = __importDefault(require("../../src/rules/valid-annotation-format"));
37
- const ruleTester = new eslint_1.RuleTester({
38
- languageOptions: { parserOptions: { ecmaVersion: 2020 } },
39
- });
40
- const makeInvalid = ({ name, code, output, messageId, details, options, }) => ({
41
- name,
42
- code,
43
- ...(output ? { output } : {}),
44
- ...(options ? { options } : {}),
45
- errors: [
46
- {
47
- messageId,
48
- data: {
49
- details,
50
- },
51
- },
52
- ],
53
- });
54
- /**
55
- * Test-only convenience for Story 005.0 error messaging consistency.
56
- * Preconfigures the invalidStoryFormat messageId so tests only specify
57
- * name, code, and details (plus optional output/options).
58
- */
59
- const makeInvalidStory = ({ name, code, details, output, options, }) => makeInvalid({
60
- name,
61
- code,
62
- output,
63
- options,
64
- messageId: "invalidStoryFormat",
65
- details,
66
- });
67
- describe("Valid Annotation Format Rule (Story 005.0-DEV-ANNOTATION-VALIDATION)", () => {
68
- ruleTester.run("valid-annotation-format", valid_annotation_format_1.default, {
69
- valid: [
70
- {
71
- name: "[REQ-PATH-FORMAT] valid story annotation format (single-line)",
72
- code: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md`,
73
- },
74
- {
75
- name: "[REQ-REQ-FORMAT] valid req annotation format (single-line)",
76
- code: `// @req REQ-EXAMPLE`,
77
- },
78
- {
79
- name: "[REQ-FORMAT-SPECIFICATION] valid block annotations (single-line values)",
80
- code: `/**
81
- * @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md
82
- * @req REQ-VALID-EXAMPLE
83
- */`,
84
- },
85
- {
86
- name: "[REQ-MULTILINE-SUPPORT] valid multi-line @story annotation value in block comment",
87
- code: `/**
88
- * @story docs/stories/005.0-
89
- * DEV-ANNOTATION-VALIDATION.story.md
90
- */`,
91
- },
92
- {
93
- name: "[REQ-MULTILINE-SUPPORT] valid multi-line @req annotation value in block comment",
94
- code: `/**
95
- * @req REQ-
96
- * EXAMPLE
97
- */`,
98
- },
99
- {
100
- name: "[REQ-FLEXIBLE-PARSING] valid JSDoc-style comment with leading stars and spacing",
101
- code: `/**
102
- * @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md
103
- * @req REQ-FLEXIBLE-PARSING
104
- */`,
105
- },
106
- {
107
- name: "[REQ-CONFIGURABLE-PATTERNS-STORY] custom storyPathPattern accepts alternate extension",
108
- code: `// @story stories/feature-010.1-CUSTOM.story.mdx`,
109
- options: [
110
- {
111
- story: {
112
- pattern: "^stories\\/[^\\s]+\\.story\\.mdx$",
113
- example: "stories/example-010.1-CUSTOM.story.mdx",
114
- },
115
- },
116
- ],
117
- },
118
- {
119
- name: "[REQ-CONFIGURABLE-PATTERNS-REQ] custom requirementIdPattern accepts PROJECT-123 style IDs",
120
- code: `// @req PROJECT-123`,
121
- options: [
122
- {
123
- req: {
124
- pattern: "^[A-Z]+-[0-9]+$",
125
- example: "PROJECT-123",
126
- },
127
- },
128
- ],
129
- },
130
- {
131
- name: "[REQ-CONFIGURABLE-PATTERNS-BOTH] custom patterns accept alternative story and req shapes",
132
- code: `/**
133
- * @story stories/010.1-DEV-CONFIGURABLE-PATTERNS.story.mdx
134
- * @req STORY-10
135
- */`,
136
- options: [
137
- {
138
- story: {
139
- pattern: "^stories\\/[^\\s]+\\.story\\.mdx$",
140
- example: "stories/010.1-DEV-CONFIGURABLE-PATTERNS.story.mdx",
141
- },
142
- req: {
143
- pattern: "^[A-Z]+-[0-9]+$",
144
- example: "STORY-10",
145
- },
146
- },
147
- ],
148
- },
149
- {
150
- name: "[REQ-CONFIGURABLE-PATTERNS-STORY-FLAT] flat storyPathPattern accepts alternate extension when nested config not provided",
151
- code: `// @story stories/feature-010.1-CUSTOM.story.mdx`,
152
- options: [
153
- {
154
- storyPathPattern: "^stories\\/[^\\s]+\\.story\\.mdx$",
155
- storyPathExample: "stories/example-010.1-CUSTOM.story.mdx",
156
- },
157
- ],
158
- },
159
- {
160
- name: "[REQ-CONFIGURABLE-PATTERNS-REQ-FLAT] flat requirementIdPattern accepts PROJECT-123 style IDs when nested config not provided",
161
- code: `// @req PROJECT-123`,
162
- options: [
163
- {
164
- requirementIdPattern: "^[A-Z]+-[0-9]+$",
165
- requirementIdExample: "PROJECT-123",
166
- },
167
- ],
168
- },
169
- {
170
- name: "[REQ-CONFIGURABLE-PATTERNS-BOTH-FLAT] flat patterns accept alternative story and req shapes when nested config not provided",
171
- code: `/**
172
- * @story stories/010.1-DEV-CONFIGURABLE-PATTERNS.story.mdx
173
- * @req STORY-10
174
- */`,
175
- options: [
176
- {
177
- storyPathPattern: "^stories\\/[^\\s]+\\.story\\.mdx$",
178
- storyPathExample: "stories/010.1-DEV-CONFIGURABLE-PATTERNS.story.mdx",
179
- requirementIdPattern: "^[A-Z]+-[0-9]+$",
180
- requirementIdExample: "STORY-10",
181
- },
182
- ],
183
- },
184
- {
185
- name: "[REQ-IMPLEMENTS-PARSE] valid single @supports with one story and one requirement (default patterns)",
186
- code: `/**
187
- * @supports docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md REQ-IMPLEMENTS-PARSE
188
- */`,
189
- },
190
- {
191
- name: "[REQ-IMPLEMENTS-PARSE] valid multiple @supports lines with different stories and requirements",
192
- code: `/**
193
- * @supports docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md REQ-IMPLEMENTS-PARSE REQ-FORMAT-VALIDATION
194
- * @supports docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md REQ-FORMAT-SPECIFICATION
195
- */`,
196
- },
197
- {
198
- name: "[REQ-MIXED-SUPPORT] valid mixed @story/@req/@supports usage in same block comment",
199
- code: `/**
200
- * @story docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md
201
- * @req REQ-MIXED-SUPPORT
202
- * @supports docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md REQ-IMPLEMENTS-PARSE REQ-FORMAT-VALIDATION REQ-MIXED-SUPPORT
203
- */`,
204
- },
205
- {
206
- name: "[REQ-JSDOC-TAG-COEXISTENCE] traceability before other JSDoc tags",
207
- code: `/**
208
- * @story docs/stories/022.0-DEV-JSDOC-COEXISTENCE.story.md
209
- * @req REQ-JSDOC-TAG-COEXISTENCE
210
- * @param {string} id - Identifier for the lookup.
211
- * @returns {Promise<void>} - Completes when finished.
212
- */
213
- function fetchById(id) {
214
- return Promise.resolve();
215
- }`,
216
- },
217
- {
218
- name: "[REQ-JSDOC-TAG-COEXISTENCE] traceability after other JSDoc tags",
219
- code: `/**
220
- * Fetch a user by id.
221
- *
222
- * @param {string} id - Identifier for the lookup.
223
- * @returns {Promise<void>} - Completes when finished.
224
- * @story docs/stories/022.0-DEV-JSDOC-COEXISTENCE.story.md
225
- * @req REQ-ANNOTATION-TERMINATION
226
- */
227
- function fetchUser(id) {
228
- return Promise.resolve();
229
- }`,
230
- },
231
- {
232
- name: "[REQ-JSDOC-TAG-COEXISTENCE] mixed positions of traceability and other JSDoc tags",
233
- code: `/**
234
- * Update a record with new data.
235
- *
236
- * @story docs/stories/022.0-DEV-JSDOC-COEXISTENCE.story.md
237
- * @param {string} id - Identifier.
238
- * @req REQ-JSDOC-BOUNDARY-DETECTION
239
- * @param {object} payload - Updated fields.
240
- * @returns {boolean} - True if updated.
241
- * @req REQ-CONTINUATION-LOGIC
242
- */
243
- function updateRecord(id, payload) {
244
- return true;
245
- }`,
246
- },
247
- {
248
- name: "[REQ-PRESERVE-MULTILINE] multi-line @story annotation before other JSDoc tags",
249
- code: `/**
250
- * @story docs/stories/022.0-DEV-
251
- * JSDOC-COEXISTENCE.story.md
252
- * @param {string} id - Identifier for the lookup.
253
- * @returns {Promise<void>} - Completes when finished.
254
- */
255
- function loadForStory(id) {
256
- return Promise.resolve();
257
- }`,
258
- },
259
- {
260
- name: "[REQ-NO-FALSE-POSITIVES] JSDoc tags do not pollute requirement ID when following @req",
261
- code: `/**
262
- * @req REQ-OPTIMIZATION
263
- * @param {object} data - Input payload.
264
- * @returns {void}
265
- */
266
- function optimize(data) {}`,
267
- },
268
- ],
269
- invalid: [
270
- makeInvalidStory({
271
- name: "[REQ-PATH-FORMAT] missing story path (single line)",
272
- code: `// @story`,
273
- details: 'Missing story path for @story annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
274
- }),
275
- makeInvalidStory({
276
- name: "[REQ-PATH-FORMAT] invalid story file extension",
277
- code: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story`,
278
- output: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md`,
279
- details: 'Invalid story path "docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story" for @story annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
280
- }),
281
- makeInvalidStory({
282
- name: "[REQ-PATH-FORMAT] missing extension in story path",
283
- code: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION`,
284
- output: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md`,
285
- details: 'Invalid story path "docs/stories/005.0-DEV-ANNOTATION-VALIDATION" for @story annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
286
- }),
287
- makeInvalidStory({
288
- name: "[REQ-PATH-FORMAT] story path must not use path traversal",
289
- code: `// @story ../docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md`,
290
- details: 'Invalid story path "../docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md" for @story annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
291
- }),
292
- makeInvalid({
293
- name: "[REQ-REQ-FORMAT] missing req id (single line)",
294
- code: `// @req`,
295
- messageId: "invalidReqFormat",
296
- details: 'Missing requirement ID for @req annotation. Expected an identifier like "REQ-EXAMPLE".',
297
- }),
298
- makeInvalid({
299
- name: "[REQ-REQ-FORMAT] invalid req id format (single line)",
300
- code: `// @req invalid-format`,
301
- messageId: "invalidReqFormat",
302
- details: 'Invalid requirement ID "invalid-format" for @req annotation. Expected an identifier like "REQ-EXAMPLE" (uppercase letters, numbers, and dashes only).',
303
- }),
304
- makeInvalid({
305
- name: "[REQ-REQ-FORMAT] missing req identifier with trailing space",
306
- code: `// @req `,
307
- messageId: "invalidReqFormat",
308
- details: 'Missing requirement ID for @req annotation. Expected an identifier like "REQ-EXAMPLE".',
309
- }),
310
- makeInvalidStory({
311
- name: "[REQ-MULTILINE-SUPPORT] missing story path with multi-line block comment",
312
- code: `/**
313
- * @story
314
- */`,
315
- details: 'Missing story path for @story annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
316
- }),
317
- makeInvalidStory({
318
- name: "[REQ-MULTILINE-SUPPORT] invalid multi-line story path after collapsing whitespace",
319
- code: `/**
320
- * @story docs/stories/005.0-
321
- * DEV-ANNOTATION-VALIDATION.story
322
- */`,
323
- details: 'Invalid story path "docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story" for @story annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
324
- }),
325
- makeInvalid({
326
- name: "[REQ-MULTILINE-SUPPORT] missing req id with multi-line block comment",
327
- code: `/**
328
- * @req
329
- */`,
330
- messageId: "invalidReqFormat",
331
- details: 'Missing requirement ID for @req annotation. Expected an identifier like "REQ-EXAMPLE".',
332
- }),
333
- makeInvalid({
334
- name: "[REQ-MULTILINE-SUPPORT] invalid multi-line req id after collapsing whitespace",
335
- code: `/**
336
- * @req invalid-
337
- * format
338
- */`,
339
- messageId: "invalidReqFormat",
340
- details: 'Invalid requirement ID "invalid-format" for @req annotation. Expected an identifier like "REQ-EXAMPLE" (uppercase letters, numbers, and dashes only).',
341
- }),
342
- {
343
- name: "[REQ-CONFIGURABLE-PATTERNS-EXAMPLES] custom story example appears in error message",
344
- code: `// @story invalid/path.txt`,
345
- options: [
346
- {
347
- story: {
348
- pattern: "^stories\\/[^\\s]+\\.story\\.mdx$",
349
- example: "stories/example-010.1-CUSTOM.story.mdx",
350
- },
351
- },
352
- ],
353
- errors: [
354
- {
355
- messageId: "invalidStoryFormat",
356
- data: {
357
- details: 'Invalid story path "invalid/path.txt" for @story annotation. Expected a path like "stories/example-010.1-CUSTOM.story.mdx".',
358
- },
359
- },
360
- ],
361
- },
362
- {
363
- name: "[REQ-CONFIGURABLE-PATTERNS-EXAMPLES] custom requirement example appears in error message",
364
- code: `// @req not-matching`,
365
- options: [
366
- {
367
- req: {
368
- pattern: "^[A-Z]+-[0-9]+$",
369
- example: "PROJECT-123",
370
- },
371
- },
372
- ],
373
- errors: [
374
- {
375
- messageId: "invalidReqFormat",
376
- data: {
377
- details: 'Invalid requirement ID "not-matching" for @req annotation. Expected an identifier like "PROJECT-123" (uppercase letters, numbers, and dashes only).',
378
- },
379
- },
380
- ],
381
- },
382
- {
383
- name: "[REQ-CONFIGURABLE-PATTERNS-FALLBACK] invalid storyPathPattern falls back to default behavior",
384
- code: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story`,
385
- options: [
386
- {
387
- // invalid regex should be caught by the rule and ignored
388
- story: {
389
- pattern: "[unclosed",
390
- },
391
- },
392
- ],
393
- output: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md`,
394
- errors: [
395
- {
396
- // Configuration error should also be reported
397
- messageId: "invalidRuleConfiguration",
398
- data: {
399
- details: 'Invalid regular expression for option "story.pattern": "[unclosed"',
400
- },
401
- },
402
- {
403
- messageId: "invalidStoryFormat",
404
- data: {
405
- // Because we fall back, we still use the default example text
406
- details: 'Invalid story path "docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story" for @story annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
407
- },
408
- },
409
- ],
410
- },
411
- {
412
- name: "[REQ-CONFIGURABLE-PATTERNS-FALLBACK] invalid requirementIdPattern falls back to default behavior",
413
- code: `// @req invalid-format`,
414
- options: [
415
- {
416
- // invalid regex should be caught by the rule and ignored
417
- req: {
418
- pattern: "(unclosed",
419
- },
420
- },
421
- ],
422
- errors: [
423
- {
424
- // Configuration error should also be reported
425
- messageId: "invalidRuleConfiguration",
426
- data: {
427
- details: 'Invalid regular expression for option "req.pattern": "(unclosed"',
428
- },
429
- },
430
- {
431
- messageId: "invalidReqFormat",
432
- data: {
433
- // Because we fall back, we still use the default example text
434
- details: 'Invalid requirement ID "invalid-format" for @req annotation. Expected an identifier like "REQ-EXAMPLE" (uppercase letters, numbers, and dashes only).',
435
- },
436
- },
437
- ],
438
- },
439
- {
440
- name: "[REQ-CONFIGURABLE-PATTERNS-FALLBACK-FLAT] invalid flat storyPathPattern falls back to default and reports config error",
441
- code: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story`,
442
- options: [
443
- {
444
- // invalid regex should be caught by the rule and ignored
445
- storyPathPattern: "[unclosed",
446
- },
447
- ],
448
- output: `// @story docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story.md`,
449
- errors: [
450
- {
451
- // Configuration error should also be reported
452
- messageId: "invalidRuleConfiguration",
453
- data: {
454
- details: 'Invalid regular expression for option "storyPathPattern": "[unclosed"',
455
- },
456
- },
457
- {
458
- // Because we fall back, we still use the default example text
459
- messageId: "invalidStoryFormat",
460
- data: {
461
- details: 'Invalid story path "docs/stories/005.0-DEV-ANNOTATION-VALIDATION.story" for @story annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
462
- },
463
- },
464
- ],
465
- },
466
- {
467
- name: "[REQ-CONFIGURABLE-PATTERNS-FALLBACK-FLAT] invalid flat requirementIdPattern falls back to default and reports config error",
468
- code: `// @req invalid-format`,
469
- options: [
470
- {
471
- // invalid regex should be caught by the rule and ignored
472
- requirementIdPattern: "(unclosed",
473
- },
474
- ],
475
- errors: [
476
- {
477
- // Configuration error should also be reported
478
- messageId: "invalidRuleConfiguration",
479
- data: {
480
- details: 'Invalid regular expression for option "requirementIdPattern": "(unclosed"',
481
- },
482
- },
483
- {
484
- // Because we fall back, we still use the default example text
485
- messageId: "invalidReqFormat",
486
- data: {
487
- details: 'Invalid requirement ID "invalid-format" for @req annotation. Expected an identifier like "REQ-EXAMPLE" (uppercase letters, numbers, and dashes only).',
488
- },
489
- },
490
- ],
491
- },
492
- {
493
- name: "[REQ-PATTERN-CONFIG] nested story.pattern takes precedence over flat storyPathPattern and its example",
494
- code: `// @story not-matching.mdx`,
495
- options: [
496
- {
497
- story: {
498
- pattern: "^stories\\/nested-only\\.story\\.mdx$",
499
- example: "stories/nested-only.story.mdx",
500
- },
501
- storyPathPattern: "^docs\\/stories\\/should-not-apply\\.story\\.mdx$",
502
- storyPathExample: "docs/stories/should-not-apply.story.mdx",
503
- },
504
- ],
505
- errors: [
506
- {
507
- messageId: "invalidStoryFormat",
508
- data: {
509
- details: 'Invalid story path "not-matching.mdx" for @story annotation. Expected a path like "stories/nested-only.story.mdx".',
510
- },
511
- },
512
- ],
513
- },
514
- {
515
- name: "[REQ-PATTERN-CONFIG] nested req.pattern takes precedence over flat requirementIdPattern and its example",
516
- code: `// @req DOES-NOT-MATCH`,
517
- options: [
518
- {
519
- req: {
520
- pattern: "^REQ-[0-9]{4}$",
521
- example: "REQ-0001",
522
- },
523
- requirementIdPattern: "^[A-Z]+-[0-9]+$",
524
- requirementIdExample: "PROJECT-123",
525
- },
526
- ],
527
- errors: [
528
- {
529
- messageId: "invalidReqFormat",
530
- data: {
531
- details: 'Invalid requirement ID "DOES-NOT-MATCH" for @req annotation. Expected an identifier like "REQ-0001" (uppercase letters, numbers, and dashes only).',
532
- },
533
- },
534
- ],
535
- },
536
- {
537
- name: "[REQ-EXAMPLE-MESSAGES] nested story example text overrides flat storyPathExample in error messages",
538
- code: `// @story invalid/path.txt`,
539
- options: [
540
- {
541
- story: {
542
- pattern: "^stories\\/special\\/.+\\.story\\.mdx$",
543
- example: "stories/special/example.story.mdx",
544
- },
545
- storyPathPattern: "^stories\\/ignored\\/.+\\.story\\.mdx$",
546
- storyPathExample: "stories/ignored/example.story.mdx",
547
- },
548
- ],
549
- errors: [
550
- {
551
- messageId: "invalidStoryFormat",
552
- data: {
553
- details: 'Invalid story path "invalid/path.txt" for @story annotation. Expected a path like "stories/special/example.story.mdx".',
554
- },
555
- },
556
- ],
557
- },
558
- {
559
- name: "[REQ-EXAMPLE-MESSAGES] nested req example text overrides flat requirementIdExample in error messages",
560
- code: `// @req bad-id`,
561
- options: [
562
- {
563
- req: {
564
- pattern: "^REQ-[A-Z]+-[0-9]{3}$",
565
- example: "REQ-FOO-001",
566
- },
567
- requirementIdPattern: "^[A-Z]+-[0-9]+$",
568
- requirementIdExample: "PROJECT-123",
569
- },
570
- ],
571
- errors: [
572
- {
573
- messageId: "invalidReqFormat",
574
- data: {
575
- details: 'Invalid requirement ID "bad-id" for @req annotation. Expected an identifier like "REQ-FOO-001" (uppercase letters, numbers, and dashes only).',
576
- },
577
- },
578
- ],
579
- },
580
- makeInvalid({
581
- name: "[REQ-SUPPORTS-PARSE] @supports with no value is invalid",
582
- code: `/**
583
- * @supports
584
- */`,
585
- messageId: "invalidImplementsFormat",
586
- details: 'Missing story path and requirement IDs for @supports annotation. Expected a value like "docs/stories/005.0-DEV-EXAMPLE.story.md REQ-EXAMPLE".',
587
- }),
588
- makeInvalid({
589
- name: "[REQ-SUPPORTS-PARSE] @supports with only story path and no requirement IDs is invalid",
590
- code: `/**
591
- * @supports docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md
592
- */`,
593
- messageId: "invalidImplementsFormat",
594
- details: 'Missing requirement IDs for @supports annotation. Expected a value like "docs/stories/005.0-DEV-EXAMPLE.story.md REQ-EXAMPLE".',
595
- }),
596
- makeInvalid({
597
- name: "[REQ-FORMAT-VALIDATION] @supports with invalid story path format",
598
- code: `/**
599
- * @supports invalid/path.txt REQ-IMPLEMENTS-PARSE
600
- */`,
601
- messageId: "invalidImplementsFormat",
602
- details: 'Invalid story path "invalid/path.txt" for @supports annotation. Expected a path like "docs/stories/005.0-DEV-EXAMPLE.story.md".',
603
- }),
604
- {
605
- name: "[REQ-FORMAT-VALIDATION] @supports with invalid requirement ID format",
606
- code: `/**
607
- * @supports docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md REQ-VALID invalid-format
608
- */`,
609
- errors: [
610
- {
611
- messageId: "invalidReqFormat",
612
- data: {
613
- details: 'Invalid requirement ID "invalid-format" for @req annotation. Expected an identifier like "REQ-EXAMPLE" (uppercase letters, numbers, and dashes only).',
614
- },
615
- },
616
- ],
617
- },
618
- {
619
- name: "[REQ-FORMAT-VALIDATION] @supports with multiple requirement IDs where one is invalid",
620
- code: `/**
621
- * @supports docs/stories/010.2-DEV-MULTI-STORY-SUPPORT.story.md REQ-VALID-1 REQ-VALID-2 bad-id
622
- */`,
623
- errors: [
624
- {
625
- messageId: "invalidReqFormat",
626
- data: {
627
- details: 'Invalid requirement ID "bad-id" for @req annotation. Expected an identifier like "REQ-EXAMPLE" (uppercase letters, numbers, and dashes only).',
628
- },
629
- },
630
- ],
631
- },
632
- ],
633
- });
634
- });
@@ -1 +0,0 @@
1
- export {};