@codeperfect/eslint-plugin 1.0.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 (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +128 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +16 -0
  5. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  6. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +131 -0
  7. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +48 -0
  8. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  9. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +126 -0
  10. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +40 -0
  11. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  12. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +90 -0
  13. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts +11 -0
  14. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  15. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +218 -0
  16. package/dist/architecture/consistent-barrel-files/index.d.ts +5 -0
  17. package/dist/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  18. package/dist/architecture/consistent-barrel-files/index.js +4 -0
  19. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +11 -0
  20. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  21. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +100 -0
  22. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +40 -0
  23. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  24. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +90 -0
  25. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +65 -0
  26. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  27. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +154 -0
  28. package/dist/architecture/consistent-barrel-files/rule.d.ts +11 -0
  29. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  30. package/dist/architecture/consistent-barrel-files/rule.js +58 -0
  31. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts +141 -0
  32. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  33. package/dist/architecture/consistent-barrel-files/test-helpers.js +229 -0
  34. package/dist/architecture/consistent-barrel-files/types.d.ts +25 -0
  35. package/dist/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  36. package/dist/architecture/consistent-barrel-files/types.js +2 -0
  37. package/dist/architecture/index.d.ts +2 -0
  38. package/dist/architecture/index.d.ts.map +1 -0
  39. package/dist/architecture/index.js +2 -0
  40. package/dist/benchmark-rules.d.ts +83 -0
  41. package/dist/benchmark-rules.d.ts.map +1 -0
  42. package/dist/benchmark-rules.js +175 -0
  43. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  44. package/dist/codeperfect-plugin.d.ts +46 -0
  45. package/dist/codeperfect-plugin.d.ts.map +1 -0
  46. package/dist/codeperfect-plugin.js +29 -0
  47. package/dist/core/index.d.ts +3 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +3 -0
  50. package/dist/core/no-multiple-declarators/index.d.ts +2 -0
  51. package/dist/core/no-multiple-declarators/index.d.ts.map +1 -0
  52. package/dist/core/no-multiple-declarators/index.js +2 -0
  53. package/dist/core/no-multiple-declarators/rule.d.ts +4 -0
  54. package/dist/core/no-multiple-declarators/rule.d.ts.map +1 -0
  55. package/dist/core/no-multiple-declarators/rule.js +100 -0
  56. package/dist/core/prefer-interface-types/index.d.ts +2 -0
  57. package/dist/core/prefer-interface-types/index.d.ts.map +1 -0
  58. package/dist/core/prefer-interface-types/index.js +2 -0
  59. package/dist/core/prefer-interface-types/rule.d.ts +5 -0
  60. package/dist/core/prefer-interface-types/rule.d.ts.map +1 -0
  61. package/dist/core/prefer-interface-types/rule.js +145 -0
  62. package/dist/core/prefer-interface-types/test-helpers.d.ts +110 -0
  63. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  64. package/dist/core/prefer-interface-types/test-helpers.js +116 -0
  65. package/dist/custom-rule-documentation.d.ts +36 -0
  66. package/dist/custom-rule-documentation.d.ts.map +1 -0
  67. package/dist/custom-rule-documentation.js +35 -0
  68. package/dist/custom-rules.d.ts +61 -0
  69. package/dist/custom-rules.d.ts.map +1 -0
  70. package/dist/custom-rules.js +70 -0
  71. package/dist/docs/index.d.ts +4 -0
  72. package/dist/docs/index.d.ts.map +1 -0
  73. package/dist/docs/index.js +4 -0
  74. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts +89 -0
  75. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  76. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  77. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts +48 -0
  78. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  79. package/dist/docs/no-interface-member-docs/comment-utilities.js +146 -0
  80. package/dist/docs/no-interface-member-docs/index.d.ts +2 -0
  81. package/dist/docs/no-interface-member-docs/index.d.ts.map +1 -0
  82. package/dist/docs/no-interface-member-docs/index.js +2 -0
  83. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts +13 -0
  84. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  85. package/dist/docs/no-interface-member-docs/parameter-tags.js +101 -0
  86. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts +24 -0
  87. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  88. package/dist/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  89. package/dist/docs/no-interface-member-docs/rule.d.ts +5 -0
  90. package/dist/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  91. package/dist/docs/no-interface-member-docs/rule.js +168 -0
  92. package/dist/docs/no-interface-member-docs/test-helpers.d.ts +103 -0
  93. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  94. package/dist/docs/no-interface-member-docs/test-helpers.js +157 -0
  95. package/dist/docs/no-interface-member-docs/types.d.ts +30 -0
  96. package/dist/docs/no-interface-member-docs/types.d.ts.map +1 -0
  97. package/dist/docs/no-interface-member-docs/types.js +2 -0
  98. package/dist/docs/require-example-language/empty-fence-fixes.d.ts +29 -0
  99. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  100. package/dist/docs/require-example-language/empty-fence-fixes.js +169 -0
  101. package/dist/docs/require-example-language/example-utilities.d.ts +70 -0
  102. package/dist/docs/require-example-language/example-utilities.d.ts.map +1 -0
  103. package/dist/docs/require-example-language/example-utilities.js +76 -0
  104. package/dist/docs/require-example-language/examples.d.ts +36 -0
  105. package/dist/docs/require-example-language/examples.d.ts.map +1 -0
  106. package/dist/docs/require-example-language/examples.js +181 -0
  107. package/dist/docs/require-example-language/fixes.d.ts +49 -0
  108. package/dist/docs/require-example-language/fixes.d.ts.map +1 -0
  109. package/dist/docs/require-example-language/fixes.js +182 -0
  110. package/dist/docs/require-example-language/index.d.ts +3 -0
  111. package/dist/docs/require-example-language/index.d.ts.map +1 -0
  112. package/dist/docs/require-example-language/index.js +2 -0
  113. package/dist/docs/require-example-language/reporting.d.ts +60 -0
  114. package/dist/docs/require-example-language/reporting.d.ts.map +1 -0
  115. package/dist/docs/require-example-language/reporting.js +145 -0
  116. package/dist/docs/require-example-language/rule.d.ts +7 -0
  117. package/dist/docs/require-example-language/rule.d.ts.map +1 -0
  118. package/dist/docs/require-example-language/rule.js +34 -0
  119. package/dist/docs/require-example-language/types.d.ts +22 -0
  120. package/dist/docs/require-example-language/types.d.ts.map +1 -0
  121. package/dist/docs/require-example-language/types.js +2 -0
  122. package/dist/docs/single-line-jsdoc/index.d.ts +2 -0
  123. package/dist/docs/single-line-jsdoc/index.d.ts.map +1 -0
  124. package/dist/docs/single-line-jsdoc/index.js +2 -0
  125. package/dist/docs/single-line-jsdoc/rule.d.ts +5 -0
  126. package/dist/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  127. package/dist/docs/single-line-jsdoc/rule.js +196 -0
  128. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts +16 -0
  129. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  130. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  131. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +25 -0
  132. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  133. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  134. package/dist/docs/test-helpers.d.ts +50 -0
  135. package/dist/docs/test-helpers.d.ts.map +1 -0
  136. package/dist/docs/test-helpers.js +107 -0
  137. package/dist/index.d.ts +6 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +6 -0
  140. package/dist/presets.d.ts +10 -0
  141. package/dist/presets.d.ts.map +1 -0
  142. package/dist/presets.js +50 -0
  143. package/dist/rules/index.d.ts +5 -0
  144. package/dist/rules/index.d.ts.map +1 -0
  145. package/dist/rules/index.js +6 -0
  146. package/dist/testing/aaa/analyzer.d.ts +36 -0
  147. package/dist/testing/aaa/analyzer.d.ts.map +1 -0
  148. package/dist/testing/aaa/analyzer.js +490 -0
  149. package/dist/testing/aaa/index.d.ts +3 -0
  150. package/dist/testing/aaa/index.d.ts.map +1 -0
  151. package/dist/testing/aaa/index.js +2 -0
  152. package/dist/testing/aaa/types.d.ts +31 -0
  153. package/dist/testing/aaa/types.d.ts.map +1 -0
  154. package/dist/testing/aaa/types.js +2 -0
  155. package/dist/testing/assert-actual-expected-names/index.d.ts +2 -0
  156. package/dist/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  157. package/dist/testing/assert-actual-expected-names/index.js +2 -0
  158. package/dist/testing/assert-actual-expected-names/rule.d.ts +4 -0
  159. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  160. package/dist/testing/assert-actual-expected-names/rule.js +54 -0
  161. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  162. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  163. package/dist/testing/enforce-aaa-phase-purity/index.js +2 -0
  164. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts +4 -0
  165. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  166. package/dist/testing/enforce-aaa-phase-purity/rule.js +110 -0
  167. package/dist/testing/enforce-aaa-structure/index.d.ts +2 -0
  168. package/dist/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  169. package/dist/testing/enforce-aaa-structure/index.js +2 -0
  170. package/dist/testing/enforce-aaa-structure/rule.d.ts +4 -0
  171. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  172. package/dist/testing/enforce-aaa-structure/rule.js +48 -0
  173. package/dist/testing/index.d.ts +9 -0
  174. package/dist/testing/index.d.ts.map +1 -0
  175. package/dist/testing/index.js +9 -0
  176. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +16 -0
  177. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  178. package/dist/testing/prefer-vi-mocked-import/fix.js +224 -0
  179. package/dist/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  180. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  181. package/dist/testing/prefer-vi-mocked-import/index.js +2 -0
  182. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts +16 -0
  183. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  184. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  185. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts +16 -0
  186. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  187. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +99 -0
  188. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts +66 -0
  189. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  190. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  191. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts +17 -0
  192. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  193. package/dist/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  194. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts +42 -0
  195. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  196. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  197. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts +13 -0
  198. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  199. package/dist/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  200. package/dist/testing/prefer-vi-mocked-import/match.d.ts +15 -0
  201. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  202. package/dist/testing/prefer-vi-mocked-import/match.js +193 -0
  203. package/dist/testing/prefer-vi-mocked-import/rule.d.ts +5 -0
  204. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  205. package/dist/testing/prefer-vi-mocked-import/rule.js +32 -0
  206. package/dist/testing/prefer-vi-mocked-import/types.d.ts +83 -0
  207. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  208. package/dist/testing/prefer-vi-mocked-import/types.js +2 -0
  209. package/dist/testing/require-aaa-sections/index.d.ts +2 -0
  210. package/dist/testing/require-aaa-sections/index.d.ts.map +1 -0
  211. package/dist/testing/require-aaa-sections/index.js +2 -0
  212. package/dist/testing/require-aaa-sections/rule.d.ts +4 -0
  213. package/dist/testing/require-aaa-sections/rule.d.ts.map +1 -0
  214. package/dist/testing/require-aaa-sections/rule.js +111 -0
  215. package/dist/testing/require-act-result-capture/index.d.ts +2 -0
  216. package/dist/testing/require-act-result-capture/index.d.ts.map +1 -0
  217. package/dist/testing/require-act-result-capture/index.js +2 -0
  218. package/dist/testing/require-act-result-capture/rule.d.ts +4 -0
  219. package/dist/testing/require-act-result-capture/rule.d.ts.map +1 -0
  220. package/dist/testing/require-act-result-capture/rule.js +34 -0
  221. package/dist/testing/require-test-companion/index.d.ts +3 -0
  222. package/dist/testing/require-test-companion/index.d.ts.map +1 -0
  223. package/dist/testing/require-test-companion/index.js +3 -0
  224. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts +16 -0
  225. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  226. package/dist/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  227. package/dist/testing/require-test-companion/require-test-companion-options.d.ts +54 -0
  228. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  229. package/dist/testing/require-test-companion/require-test-companion-options.js +112 -0
  230. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts +51 -0
  231. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  232. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +183 -0
  233. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts +28 -0
  234. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  235. package/dist/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  236. package/dist/testing/require-test-companion/rule.d.ts +5 -0
  237. package/dist/testing/require-test-companion/rule.d.ts.map +1 -0
  238. package/dist/testing/require-test-companion/rule.js +57 -0
  239. package/dist/testing/require-test-companion/types.d.ts +11 -0
  240. package/dist/testing/require-test-companion/types.d.ts.map +1 -0
  241. package/dist/testing/require-test-companion/types.js +2 -0
  242. package/dist/testing/single-act-statement/index.d.ts +2 -0
  243. package/dist/testing/single-act-statement/index.d.ts.map +1 -0
  244. package/dist/testing/single-act-statement/index.js +2 -0
  245. package/dist/testing/single-act-statement/rule.d.ts +4 -0
  246. package/dist/testing/single-act-statement/rule.d.ts.map +1 -0
  247. package/dist/testing/single-act-statement/rule.js +33 -0
  248. package/package.json +106 -0
@@ -0,0 +1,168 @@
1
+ import { createRuleDocumentation } from "../../custom-rule-documentation";
2
+ import { buildRemovalRange, getCommentLines, getCommentText, getJsdocComment, } from "./comment-utilities";
3
+ import { parseParameterTagLine } from "./parameter-tags";
4
+ import { getParameterTypeLookup, isNamedTypeReference, } from "./parameter-utilities";
5
+ /**
6
+ * Checks whether a parameter member tag matches a named type reference.
7
+ * @param tag Parsed parameter member tag.
8
+ * @param parameterTypes Parameter type lookup.
9
+ * @returns True when the tag matches a named type reference.
10
+ * @example
11
+ * ```typescript
12
+ * const ok = isMatchingMemberTag(tag, parameterTypes);
13
+ * ```
14
+ */
15
+ const isMatchingMemberTag = (tag, parameterTypes) => {
16
+ if (tag === void 0) {
17
+ return false;
18
+ }
19
+ const parameterType = parameterTypes.get(tag.baseName);
20
+ return isNamedTypeReference(parameterType);
21
+ };
22
+ /**
23
+ * Collects member tags from a JSDoc comment.
24
+ * @param commentText Full comment text.
25
+ * @param parameterTypes Parameter type lookup.
26
+ * @returns Member tags that match named type references.
27
+ * @example
28
+ * ```typescript
29
+ * const tags = collectMemberTags(commentText, parameterTypes);
30
+ * ```
31
+ */
32
+ const collectMemberTags = (commentText, parameterTypes) => getCommentLines(commentText)
33
+ .map((line) => parseParameterTagLine(line))
34
+ .filter((tag) => isMatchingMemberTag(tag, parameterTypes));
35
+ /**
36
+ * Reports interface member documentation entries for removal.
37
+ * @param context Rule execution context.
38
+ * @param details Collected rule details.
39
+ * @example
40
+ * ```typescript
41
+ * reportMemberDocumentation(context, details);
42
+ * ```
43
+ */
44
+ const reportMemberDocumentation = (context, details) => {
45
+ const { commentStart, commentText, memberTags, node } = details;
46
+ for (const tag of memberTags) {
47
+ const removalRange = buildRemovalRange(commentStart, commentText, tag.line);
48
+ context.report({
49
+ data: { parameterName: tag.fullName },
50
+ fix: (fixer) => fixer.removeRange(removalRange),
51
+ messageId: "interfaceMemberDoc",
52
+ node,
53
+ });
54
+ }
55
+ };
56
+ /**
57
+ * Gets parameter type references for a node.
58
+ * @param node Function-like node to inspect.
59
+ * @returns Parameter type lookup when present.
60
+ * @example
61
+ * ```typescript
62
+ * const lookup = getParameterTypes(node);
63
+ * ```
64
+ */
65
+ const getParameterTypes = (node) => {
66
+ const parameterTypes = getParameterTypeLookup(node);
67
+ return parameterTypes.size > 0 ? parameterTypes : void 0;
68
+ };
69
+ /**
70
+ * Resolves the JSDoc comment data for a node.
71
+ * @param sourceCode SourceCode wrapper.
72
+ * @param node Node to inspect.
73
+ * @returns JSDoc data when available.
74
+ * @example
75
+ * ```typescript
76
+ * const data = getJsdocData(sourceCode, node);
77
+ * ```
78
+ */
79
+ const getJsdocData = (sourceCode, node) => {
80
+ const comment = getJsdocComment(sourceCode, node);
81
+ if (comment === void 0) {
82
+ return void 0;
83
+ }
84
+ const commentStart = comment.range?.[0];
85
+ if (typeof commentStart !== "number") {
86
+ return void 0;
87
+ }
88
+ const text = getCommentText(sourceCode, comment);
89
+ return { comment, commentStart, text };
90
+ };
91
+ /**
92
+ * Resolves the member tag context for a node.
93
+ * @param context Rule execution context.
94
+ * @param node Node to inspect.
95
+ * @returns Member tag context when available.
96
+ * @example
97
+ * ```typescript
98
+ * const context = resolveMemberTagContext(context, node);
99
+ * ```
100
+ */
101
+ const resolveMemberTagContext = (context, node) => {
102
+ const parameterTypes = getParameterTypes(node);
103
+ const jsdocData = getJsdocData(context.sourceCode, node);
104
+ if (parameterTypes === void 0 || jsdocData === void 0) {
105
+ return void 0;
106
+ }
107
+ const memberTags = collectMemberTags(jsdocData.text, parameterTypes);
108
+ return memberTags.length > 0
109
+ ? {
110
+ comment: jsdocData.comment,
111
+ commentStart: jsdocData.commentStart,
112
+ commentText: jsdocData.text,
113
+ memberTags,
114
+ }
115
+ : void 0;
116
+ };
117
+ /**
118
+ * Handles function-like nodes for this rule.
119
+ * @param context Rule execution context.
120
+ * @param node Node to inspect.
121
+ * @example
122
+ * ```typescript
123
+ * handleFunctionLike(context, node);
124
+ * ```
125
+ */
126
+ const handleFunctionLike = (context, node) => {
127
+ const resolved = resolveMemberTagContext(context, node);
128
+ if (resolved === void 0) {
129
+ return;
130
+ }
131
+ reportMemberDocumentation(context, {
132
+ comment: resolved.comment,
133
+ commentStart: resolved.commentStart,
134
+ commentText: resolved.commentText,
135
+ memberTags: resolved.memberTags,
136
+ node,
137
+ sourceCode: context.sourceCode,
138
+ });
139
+ };
140
+ /** ESLint rule disallowing interface member documentation in `@param` tags. */
141
+ const noInterfaceMemberDocumentationRule = {
142
+ create(context) {
143
+ const listener = (node) => {
144
+ handleFunctionLike(context, node);
145
+ };
146
+ return {
147
+ ArrowFunctionExpression: listener,
148
+ FunctionDeclaration: listener,
149
+ FunctionExpression: listener,
150
+ TSCallSignatureDeclaration: listener,
151
+ TSConstructSignatureDeclaration: listener,
152
+ TSDeclareFunction: listener,
153
+ TSFunctionType: listener,
154
+ TSMethodSignature: listener,
155
+ };
156
+ },
157
+ meta: {
158
+ docs: createRuleDocumentation("no-interface-member-docs", "Disallow documenting interface members in @param tags; document them on the interface instead."),
159
+ fixable: "code",
160
+ messages: {
161
+ interfaceMemberDoc: "Document interface members on the interface instead of using @param for {{parameterName}}.",
162
+ },
163
+ schema: [],
164
+ type: "problem",
165
+ },
166
+ };
167
+ export { noInterfaceMemberDocumentationRule };
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb2NzL25vLWludGVyZmFjZS1tZW1iZXItZG9jcy9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxlQUFlLEdBQ2hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQXVCL0I7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixHQUFtQyxFQUNuQyxjQUErQyxFQUNwQixFQUFFO0lBQzdCLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdkQsT0FBTyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLFdBQW1CLEVBQ25CLGNBQStDLEVBQ3pCLEVBQUUsQ0FDeEIsZUFBZSxDQUFDLFdBQVcsQ0FBQztLQUN6QixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFFL0Q7Ozs7Ozs7O0dBUUc7QUFD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QUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBDb21tZW50LCBQYXJhbWV0ZXJNZW1iZXJUYWcsIFR5cGVBbm5vdGF0aW9uTm9kZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbS1ydWxlLWRvY3VtZW50YXRpb25cIjtcbmltcG9ydCB7XG4gIGJ1aWxkUmVtb3ZhbFJhbmdlLFxuICBnZXRDb21tZW50TGluZXMsXG4gIGdldENvbW1lbnRUZXh0LFxuICBnZXRKc2RvY0NvbW1lbnQsXG59IGZyb20gXCIuL2NvbW1lbnQtdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBwYXJzZVBhcmFtZXRlclRhZ0xpbmUgfSBmcm9tIFwiLi9wYXJhbWV0ZXItdGFnc1wiO1xuaW1wb3J0IHtcbiAgZ2V0UGFyYW1ldGVyVHlwZUxvb2t1cCxcbiAgaXNOYW1lZFR5cGVSZWZlcmVuY2UsXG59IGZyb20gXCIuL3BhcmFtZXRlci11dGlsaXRpZXNcIjtcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJlcG9ydE1lbWJlckRvY3VtZW50YXRpb25Db250ZXh0IHtcbiAgLyoqIENvbW1lbnQgZmllbGQgdmFsdWUuICovXG4gIGNvbW1lbnQ6IENvbW1lbnQ7XG5cbiAgLyoqIENvbW1lbnRTdGFydCBmaWVsZCB2YWx1ZS4gKi9cbiAgY29tbWVudFN0YXJ0OiBudW1iZXI7XG5cbiAgLyoqIENvbW1lbnRUZXh0IGZpZWxkIHZhbHVlLiAqL1xuICBjb21tZW50VGV4dDogc3RyaW5nO1xuXG4gIC8qKiBNZW1iZXJUYWdzIGZpZWxkIHZhbHVlLiAqL1xuICBtZW1iZXJUYWdzOiBQYXJhbWV0ZXJNZW1iZXJUYWdbXTtcblxuICAvKiogTm9kZSBmaWVsZCB2YWx1ZS4gKi9cbiAgbm9kZTogUnVsZS5Ob2RlO1xuXG4gIC8qKiBTb3VyY2VDb2RlIGZpZWxkIHZhbHVlLiAqL1xuICBzb3VyY2VDb2RlOiBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHBhcmFtZXRlciBtZW1iZXIgdGFnIG1hdGNoZXMgYSBuYW1lZCB0eXBlIHJlZmVyZW5jZS5cbiAqIEBwYXJhbSB0YWcgUGFyc2VkIHBhcmFtZXRlciBtZW1iZXIgdGFnLlxuICogQHBhcmFtIHBhcmFtZXRlclR5cGVzIFBhcmFtZXRlciB0eXBlIGxvb2t1cC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgdGFnIG1hdGNoZXMgYSBuYW1lZCB0eXBlIHJlZmVyZW5jZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvayA9IGlzTWF0Y2hpbmdNZW1iZXJUYWcodGFnLCBwYXJhbWV0ZXJUeXBlcyk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNNYXRjaGluZ01lbWJlclRhZyA9IChcbiAgdGFnOiBQYXJhbWV0ZXJNZW1iZXJUYWcgfCB1bmRlZmluZWQsXG4gIHBhcmFtZXRlclR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlQW5ub3RhdGlvbk5vZGU+LFxuKTogdGFnIGlzIFBhcmFtZXRlck1lbWJlclRhZyA9PiB7XG4gIGlmICh0YWcgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXJUeXBlcy5nZXQodGFnLmJhc2VOYW1lKTtcblxuICByZXR1cm4gaXNOYW1lZFR5cGVSZWZlcmVuY2UocGFyYW1ldGVyVHlwZSk7XG59O1xuXG4vKipcbiAqIENvbGxlY3RzIG1lbWJlciB0YWdzIGZyb20gYSBKU0RvYyBjb21tZW50LlxuICogQHBhcmFtIGNvbW1lbnRUZXh0IEZ1bGwgY29tbWVudCB0ZXh0LlxuICogQHBhcmFtIHBhcmFtZXRlclR5cGVzIFBhcmFtZXRlciB0eXBlIGxvb2t1cC5cbiAqIEByZXR1cm5zIE1lbWJlciB0YWdzIHRoYXQgbWF0Y2ggbmFtZWQgdHlwZSByZWZlcmVuY2VzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRhZ3MgPSBjb2xsZWN0TWVtYmVyVGFncyhjb21tZW50VGV4dCwgcGFyYW1ldGVyVHlwZXMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbGxlY3RNZW1iZXJUYWdzID0gKFxuICBjb21tZW50VGV4dDogc3RyaW5nLFxuICBwYXJhbWV0ZXJUeXBlczogTWFwPHN0cmluZywgVHlwZUFubm90YXRpb25Ob2RlPixcbik6IFBhcmFtZXRlck1lbWJlclRhZ1tdID0+XG4gIGdldENvbW1lbnRMaW5lcyhjb21tZW50VGV4dClcbiAgICAubWFwKChsaW5lKSA9PiBwYXJzZVBhcmFtZXRlclRhZ0xpbmUobGluZSkpXG4gICAgLmZpbHRlcigodGFnKSA9PiBpc01hdGNoaW5nTWVtYmVyVGFnKHRhZywgcGFyYW1ldGVyVHlwZXMpKTtcblxuLyoqXG4gKiBSZXBvcnRzIGludGVyZmFjZSBtZW1iZXIgZG9jdW1lbnRhdGlvbiBlbnRyaWVzIGZvciByZW1vdmFsLlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dC5cbiAqIEBwYXJhbSBkZXRhaWxzIENvbGxlY3RlZCBydWxlIGRldGFpbHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0TWVtYmVyRG9jdW1lbnRhdGlvbihjb250ZXh0LCBkZXRhaWxzKTtcbiAqIGBgYFxuICovXG5jb25zdCByZXBvcnRNZW1iZXJEb2N1bWVudGF0aW9uID0gKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBkZXRhaWxzOiBSZXBvcnRNZW1iZXJEb2N1bWVudGF0aW9uQ29udGV4dCxcbik6IHZvaWQgPT4ge1xuICBjb25zdCB7IGNvbW1lbnRTdGFydCwgY29tbWVudFRleHQsIG1lbWJlclRhZ3MsIG5vZGUgfSA9IGRldGFpbHM7XG5cbiAgZm9yIChjb25zdCB0YWcgb2YgbWVtYmVyVGFncykge1xuICAgIGNvbnN0IHJlbW92YWxSYW5nZSA9IGJ1aWxkUmVtb3ZhbFJhbmdlKGNvbW1lbnRTdGFydCwgY29tbWVudFRleHQsIHRhZy5saW5lKTtcblxuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIGRhdGE6IHsgcGFyYW1ldGVyTmFtZTogdGFnLmZ1bGxOYW1lIH0sXG4gICAgICBmaXg6IChmaXhlcjogUnVsZS5SdWxlRml4ZXIpOiBSdWxlLkZpeCA9PiBmaXhlci5yZW1vdmVSYW5nZShyZW1vdmFsUmFuZ2UpLFxuICAgICAgbWVzc2FnZUlkOiBcImludGVyZmFjZU1lbWJlckRvY1wiLFxuICAgICAgbm9kZSxcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXRzIHBhcmFtZXRlciB0eXBlIHJlZmVyZW5jZXMgZm9yIGEgbm9kZS5cbiAqIEBwYXJhbSBub2RlIEZ1bmN0aW9uLWxpa2Ugbm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgUGFyYW1ldGVyIHR5cGUgbG9va3VwIHdoZW4gcHJlc2VudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBsb29rdXAgPSBnZXRQYXJhbWV0ZXJUeXBlcyhub2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRQYXJhbWV0ZXJUeXBlcyA9IChcbiAgbm9kZTogUnVsZS5Ob2RlLFxuKTogTWFwPHN0cmluZywgVHlwZUFubm90YXRpb25Ob2RlPiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gZ2V0UGFyYW1ldGVyVHlwZUxvb2t1cChub2RlKTtcblxuICByZXR1cm4gcGFyYW1ldGVyVHlwZXMuc2l6ZSA+IDAgPyBwYXJhbWV0ZXJUeXBlcyA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIEpTRG9jIGNvbW1lbnQgZGF0YSBmb3IgYSBub2RlLlxuICogQHBhcmFtIHNvdXJjZUNvZGUgU291cmNlQ29kZSB3cmFwcGVyLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgSlNEb2MgZGF0YSB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBkYXRhID0gZ2V0SnNkb2NEYXRhKHNvdXJjZUNvZGUsIG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldEpzZG9jRGF0YSA9IChcbiAgc291cmNlQ29kZTogUnVsZS5SdWxlQ29udGV4dFtcInNvdXJjZUNvZGVcIl0sXG4gIG5vZGU6IFJ1bGUuTm9kZSxcbik6XG4gIHwgdW5kZWZpbmVkXG4gIHwge1xuICAgICAgLyoqIENvbW1lbnQgZmllbGQgdmFsdWUuICovXG4gICAgICBjb21tZW50OiBDb21tZW50O1xuXG4gICAgICAvKiogQ29tbWVudFN0YXJ0IGZpZWxkIHZhbHVlLiAqL1xuICAgICAgY29tbWVudFN0YXJ0OiBudW1iZXI7XG5cbiAgICAgIC8qKiBUZXh0IGZpZWxkIHZhbHVlLiAqL1xuICAgICAgdGV4dDogc3RyaW5nO1xuICAgIH0gPT4ge1xuICBjb25zdCBjb21tZW50ID0gZ2V0SnNkb2NDb21tZW50KHNvdXJjZUNvZGUsIG5vZGUpO1xuXG4gIGlmIChjb21tZW50ID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgY29tbWVudFN0YXJ0ID0gY29tbWVudC5yYW5nZT8uWzBdO1xuXG4gIGlmICh0eXBlb2YgY29tbWVudFN0YXJ0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBnZXRDb21tZW50VGV4dChzb3VyY2VDb2RlLCBjb21tZW50KTtcblxuICByZXR1cm4geyBjb21tZW50LCBjb21tZW50U3RhcnQsIHRleHQgfTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIG1lbWJlciB0YWcgY29udGV4dCBmb3IgYSBub2RlLlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dC5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIE1lbWJlciB0YWcgY29udGV4dCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjb250ZXh0ID0gcmVzb2x2ZU1lbWJlclRhZ0NvbnRleHQoY29udGV4dCwgbm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcmVzb2x2ZU1lbWJlclRhZ0NvbnRleHQgPSAoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIG5vZGU6IFJ1bGUuTm9kZSxcbik6XG4gIHwgdW5kZWZpbmVkXG4gIHwge1xuICAgICAgLyoqIENvbW1lbnQgZmllbGQgdmFsdWUuICovXG4gICAgICBjb21tZW50OiBDb21tZW50O1xuXG4gICAgICAvKiogQ29tbWVudFN0YXJ0IGZpZWxkIHZhbHVlLiAqL1xuICAgICAgY29tbWVudFN0YXJ0OiBudW1iZXI7XG5cbiAgICAgIC8qKiBDb21tZW50VGV4dCBmaWVsZCB2YWx1ZS4gKi9cbiAgICAgIGNvbW1lbnRUZXh0OiBzdHJpbmc7XG5cbiAgICAgIC8qKiBNZW1iZXJUYWdzIGZpZWxkIHZhbHVlLiAqL1xuICAgICAgbWVtYmVyVGFnczogUGFyYW1ldGVyTWVtYmVyVGFnW107XG4gICAgfSA9PiB7XG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gZ2V0UGFyYW1ldGVyVHlwZXMobm9kZSk7XG4gIGNvbnN0IGpzZG9jRGF0YSA9IGdldEpzZG9jRGF0YShjb250ZXh0LnNvdXJjZUNvZGUsIG5vZGUpO1xuXG4gIGlmIChwYXJhbWV0ZXJUeXBlcyA9PT0gdm9pZCAwIHx8IGpzZG9jRGF0YSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IG1lbWJlclRhZ3MgPSBjb2xsZWN0TWVtYmVyVGFncyhqc2RvY0RhdGEudGV4dCwgcGFyYW1ldGVyVHlwZXMpO1xuXG4gIHJldHVybiBtZW1iZXJUYWdzLmxlbmd0aCA+IDBcbiAgICA/IHtcbiAgICAgICAgY29tbWVudDoganNkb2NEYXRhLmNvbW1lbnQsXG4gICAgICAgIGNvbW1lbnRTdGFydDoganNkb2NEYXRhLmNvbW1lbnRTdGFydCxcbiAgICAgICAgY29tbWVudFRleHQ6IGpzZG9jRGF0YS50ZXh0LFxuICAgICAgICBtZW1iZXJUYWdzLFxuICAgICAgfVxuICAgIDogdm9pZCAwO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGZ1bmN0aW9uLWxpa2Ugbm9kZXMgZm9yIHRoaXMgcnVsZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaGFuZGxlRnVuY3Rpb25MaWtlKGNvbnRleHQsIG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGhhbmRsZUZ1bmN0aW9uTGlrZSA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgbm9kZTogUnVsZS5Ob2RlLFxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZU1lbWJlclRhZ0NvbnRleHQoY29udGV4dCwgbm9kZSk7XG5cbiAgaWYgKHJlc29sdmVkID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXBvcnRNZW1iZXJEb2N1bWVudGF0aW9uKGNvbnRleHQsIHtcbiAgICBjb21tZW50OiByZXNvbHZlZC5jb21tZW50LFxuICAgIGNvbW1lbnRTdGFydDogcmVzb2x2ZWQuY29tbWVudFN0YXJ0LFxuICAgIGNvbW1lbnRUZXh0OiByZXNvbHZlZC5jb21tZW50VGV4dCxcbiAgICBtZW1iZXJUYWdzOiByZXNvbHZlZC5tZW1iZXJUYWdzLFxuICAgIG5vZGUsXG4gICAgc291cmNlQ29kZTogY29udGV4dC5zb3VyY2VDb2RlLFxuICB9KTtcbn07XG5cbi8qKiBFU0xpbnQgcnVsZSBkaXNhbGxvd2luZyBpbnRlcmZhY2UgbWVtYmVyIGRvY3VtZW50YXRpb24gaW4gYEBwYXJhbWAgdGFncy4gKi9cbmNvbnN0IG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBSdWxlLlJ1bGVMaXN0ZW5lciB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAobm9kZTogUnVsZS5Ob2RlKTogdm9pZCA9PiB7XG4gICAgICBoYW5kbGVGdW5jdGlvbkxpa2UoY29udGV4dCwgbm9kZSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogbGlzdGVuZXIsXG4gICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBsaXN0ZW5lcixcbiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogbGlzdGVuZXIsXG4gICAgICBUU0NhbGxTaWduYXR1cmVEZWNsYXJhdGlvbjogbGlzdGVuZXIsXG4gICAgICBUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uOiBsaXN0ZW5lcixcbiAgICAgIFRTRGVjbGFyZUZ1bmN0aW9uOiBsaXN0ZW5lcixcbiAgICAgIFRTRnVuY3Rpb25UeXBlOiBsaXN0ZW5lcixcbiAgICAgIFRTTWV0aG9kU2lnbmF0dXJlOiBsaXN0ZW5lcixcbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogY3JlYXRlUnVsZURvY3VtZW50YXRpb24oXG4gICAgICBcIm5vLWludGVyZmFjZS1tZW1iZXItZG9jc1wiLFxuICAgICAgXCJEaXNhbGxvdyBkb2N1bWVudGluZyBpbnRlcmZhY2UgbWVtYmVycyBpbiBAcGFyYW0gdGFnczsgZG9jdW1lbnQgdGhlbSBvbiB0aGUgaW50ZXJmYWNlIGluc3RlYWQuXCIsXG4gICAgKSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBtZXNzYWdlczoge1xuICAgICAgaW50ZXJmYWNlTWVtYmVyRG9jOlxuICAgICAgICBcIkRvY3VtZW50IGludGVyZmFjZSBtZW1iZXJzIG9uIHRoZSBpbnRlcmZhY2UgaW5zdGVhZCBvZiB1c2luZyBAcGFyYW0gZm9yIHt7cGFyYW1ldGVyTmFtZX19LlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiBcInByb2JsZW1cIixcbiAgfSxcbn07XG5cbmV4cG9ydCB7IG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGUgfTtcbiJdfQ==
@@ -0,0 +1,103 @@
1
+ import type { Rule } from "eslint";
2
+ /** Type definition for rule data. */
3
+ type Comment = ReturnType<Rule.RuleContext["sourceCode"]["getAllComments"]>[number];
4
+ /** Type definition for rule data. */
5
+ interface InterfaceSample {
6
+ /** Context field value. */
7
+ context: Rule.RuleContext;
8
+ /** Node field value. */
9
+ node: Rule.Node;
10
+ /** Reports field value. */
11
+ reports: ReportEntry[];
12
+ /** SourceText field value. */
13
+ sourceText: string;
14
+ }
15
+ /** Type definition for rule data. */
16
+ interface ReportEntry {
17
+ /** Fix helper value. */
18
+ fix?: null | Rule.ReportFixer | undefined;
19
+ /** MessageId helper value. */
20
+ messageId: string | undefined;
21
+ }
22
+ /** Type definition for rule data. */
23
+ interface RuleContextState {
24
+ /** Context field value. */
25
+ context: Rule.RuleContext;
26
+ /** Reports field value. */
27
+ reports: ReportEntry[];
28
+ }
29
+ /**
30
+ * Creates a rule context state for the given source text.
31
+ * @param sourceText Source text to analyze.
32
+ * @param comments Comment nodes for the source.
33
+ * @returns Context state for tests.
34
+ * @example
35
+ * ```typescript
36
+ * const state = createContext("", []);
37
+ * ```
38
+ */
39
+ declare const createContext: (sourceText: string, comments: Comment[]) => RuleContextState;
40
+ /**
41
+ * Creates a JSDoc block comment for the given source text.
42
+ * @param commentValue Comment value without delimiters.
43
+ * @param sourceText Source text containing the comment.
44
+ * @returns Comment node for the source text.
45
+ * @example
46
+ * ```typescript
47
+ * const comment = createComment("*\n * ok\n ", "function demo() {}");
48
+ * ```
49
+ */
50
+ declare const createComment: (commentValue: string, sourceText: string) => Comment;
51
+ /**
52
+ * Creates a function node for the given source text.
53
+ * @param sourceText Source text containing the function.
54
+ * @param parameters Parameter nodes for the function.
55
+ * @returns Function declaration node.
56
+ * @example
57
+ * ```typescript
58
+ * const node = createFunctionNode("function demo() {}", []);
59
+ * ```
60
+ */
61
+ declare const createFunctionNode: (sourceText: string, parameters: unknown[]) => Rule.Node;
62
+ /**
63
+ * Creates a parameter node with a type annotation.
64
+ * @param type Type annotation kind to assign.
65
+ * @returns Parameter node for tests.
66
+ * @example
67
+ * ```typescript
68
+ * const param = createParameter("TSTypeReference");
69
+ * ```
70
+ */
71
+ declare const createParameter: (type: string) => unknown;
72
+ /**
73
+ * Runs the rule listener for a function declaration node.
74
+ * @param context Rule execution context.
75
+ * @param node Function node to inspect.
76
+ * @example
77
+ * ```typescript
78
+ * runFunctionListener(context, node);
79
+ * ```
80
+ */
81
+ declare const runFunctionListener: (context: Rule.RuleContext, node: Rule.Node) => void;
82
+ /**
83
+ * Builds source text with a leading JSDoc comment.
84
+ * @param commentValue Comment value used in the source.
85
+ * @returns Source text containing the comment and function.
86
+ * @example
87
+ * ```typescript
88
+ * const text = buildSourceText("*\n * ok\n ");
89
+ * ```
90
+ */
91
+ declare const buildSourceText: (commentValue: string) => string;
92
+ /**
93
+ * Creates a sample test fixture for interface member docs.
94
+ * @returns Sample context, node, and reports.
95
+ * @example
96
+ * ```typescript
97
+ * const sample = createInterfaceSample();
98
+ * ```
99
+ */
100
+ declare const createInterfaceSample: () => InterfaceSample;
101
+ export { buildSourceText, createComment, createContext, createFunctionNode, createInterfaceSample, createParameter, runFunctionListener, };
102
+ export type { Comment };
103
+ //# sourceMappingURL=test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/docs/no-interface-member-docs/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAInC,qCAAqC;AACrC,KAAK,OAAO,GAAG,UAAU,CACvB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,CACjD,CAAC,MAAM,CAAC,CAAC;AAEV,qCAAqC;AACrC,UAAU,eAAe;IACvB,2BAA2B;IAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;IAE1B,wBAAwB;IACxB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAEhB,2BAA2B;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IAEvB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAWD,qCAAqC;AACrC,UAAU,WAAW;IACnB,wBAAwB;IACxB,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAE1C,8BAA8B;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,qCAAqC;AACrC,UAAU,gBAAgB;IACxB,2BAA2B;IAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;IAE1B,2BAA2B;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AA+CD;;;;;;;;;GASG;AACH,QAAA,MAAM,aAAa,GACjB,YAAY,MAAM,EAClB,UAAU,OAAO,EAAE,KAClB,gBAKF,CAAC;AAEF;;;;;;;;;GASG;AACH,QAAA,MAAM,aAAa,GAAI,cAAc,MAAM,EAAE,YAAY,MAAM,KAAG,OAQjE,CAAC;AAEF;;;;;;;;;GASG;AACH,QAAA,MAAM,kBAAkB,GACtB,YAAY,MAAM,EAClB,YAAY,OAAO,EAAE,KACpB,IAAI,CAAC,IAKS,CAAC;AAElB;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,OAMtC,CAAC;AAEH;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GACvB,SAAS,IAAI,CAAC,WAAW,EACzB,MAAM,IAAI,CAAC,IAAI,KACd,IAOF,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,GAAI,cAAc,MAAM,KAAG,MAMlC,CAAC;AAEf;;;;;;;GAOG;AACH,QAAA,MAAM,qBAAqB,QAAO,eAmBjC,CAAC;AAEF,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,CAAC;AACF,YAAY,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,157 @@
1
+ import { noInterfaceMemberDocumentationRule } from "./rule";
2
+ /**
3
+ * Creates a SourceCode stub with the provided comments.
4
+ * @param text Source text to attach.
5
+ * @param comments Comment nodes to expose.
6
+ * @returns SourceCode stub for tests.
7
+ * @example
8
+ * ```typescript
9
+ * const sourceCode = createSourceCode("", []);
10
+ * ```
11
+ */
12
+ const createSourceCode = (text, comments) => ({
13
+ getAllComments: () => comments,
14
+ text,
15
+ });
16
+ /**
17
+ * Builds a rule context for collecting reports.
18
+ * @param sourceCode SourceCode stub.
19
+ * @param reports Report sink.
20
+ * @returns Rule context that records reports.
21
+ * @example
22
+ * ```typescript
23
+ * const context = buildRuleContext(sourceCode, reports);
24
+ * ```
25
+ */
26
+ const buildRuleContext = (sourceCode, reports) => ({
27
+ id: "no-interface-member-docs",
28
+ options: [],
29
+ report: (descriptor) => {
30
+ const { fix, messageId } = descriptor;
31
+ const entry = { fix, messageId };
32
+ reports.push(entry);
33
+ },
34
+ sourceCode,
35
+ });
36
+ /**
37
+ * Creates a rule context state for the given source text.
38
+ * @param sourceText Source text to analyze.
39
+ * @param comments Comment nodes for the source.
40
+ * @returns Context state for tests.
41
+ * @example
42
+ * ```typescript
43
+ * const state = createContext("", []);
44
+ * ```
45
+ */
46
+ const createContext = (sourceText, comments) => {
47
+ const reports = [];
48
+ const sourceCode = createSourceCode(sourceText, comments);
49
+ return { context: buildRuleContext(sourceCode, reports), reports };
50
+ };
51
+ /**
52
+ * Creates a JSDoc block comment for the given source text.
53
+ * @param commentValue Comment value without delimiters.
54
+ * @param sourceText Source text containing the comment.
55
+ * @returns Comment node for the source text.
56
+ * @example
57
+ * ```typescript
58
+ * const comment = createComment("*\n * ok\n ", "function demo() {}");
59
+ * ```
60
+ */
61
+ const createComment = (commentValue, sourceText) => {
62
+ const end = sourceText.indexOf("*/") + 2;
63
+ return {
64
+ range: [0, end],
65
+ type: "Block",
66
+ value: commentValue,
67
+ };
68
+ };
69
+ /**
70
+ * Creates a function node for the given source text.
71
+ * @param sourceText Source text containing the function.
72
+ * @param parameters Parameter nodes for the function.
73
+ * @returns Function declaration node.
74
+ * @example
75
+ * ```typescript
76
+ * const node = createFunctionNode("function demo() {}", []);
77
+ * ```
78
+ */
79
+ const createFunctionNode = (sourceText, parameters) => ({
80
+ params: parameters,
81
+ range: [sourceText.indexOf("function"), sourceText.length],
82
+ type: "FunctionDeclaration",
83
+ });
84
+ /**
85
+ * Creates a parameter node with a type annotation.
86
+ * @param type Type annotation kind to assign.
87
+ * @returns Parameter node for tests.
88
+ * @example
89
+ * ```typescript
90
+ * const param = createParameter("TSTypeReference");
91
+ * ```
92
+ */
93
+ const createParameter = (type) => ({
94
+ name: "context",
95
+ type: "Identifier",
96
+ typeAnnotation: {
97
+ typeAnnotation: { type },
98
+ },
99
+ });
100
+ /**
101
+ * Runs the rule listener for a function declaration node.
102
+ * @param context Rule execution context.
103
+ * @param node Function node to inspect.
104
+ * @example
105
+ * ```typescript
106
+ * runFunctionListener(context, node);
107
+ * ```
108
+ */
109
+ const runFunctionListener = (context, node) => {
110
+ const listeners = noInterfaceMemberDocumentationRule.create(context);
111
+ const listener = listeners.FunctionDeclaration;
112
+ listener?.(node);
113
+ };
114
+ /**
115
+ * Builds source text with a leading JSDoc comment.
116
+ * @param commentValue Comment value used in the source.
117
+ * @returns Source text containing the comment and function.
118
+ * @example
119
+ * ```typescript
120
+ * const text = buildSourceText("*\n * ok\n ");
121
+ * ```
122
+ */
123
+ const buildSourceText = (commentValue) => [
124
+ "/**",
125
+ commentValue.trimEnd(),
126
+ "*/",
127
+ "function getLineMeta(context: LineMetaContext): void {}",
128
+ ].join("\n");
129
+ /**
130
+ * Creates a sample test fixture for interface member docs.
131
+ * @returns Sample context, node, and reports.
132
+ * @example
133
+ * ```typescript
134
+ * const sample = createInterfaceSample();
135
+ * ```
136
+ */
137
+ const createInterfaceSample = () => {
138
+ const commentValue = [
139
+ "*",
140
+ " * Compute line metadata from the raw comment value.",
141
+ " * @param context The metadata context.",
142
+ " * @param context.commentValue The full comment value.",
143
+ " * @param context.full The full matched example text.",
144
+ " * @param context.startOffset The match start offset.",
145
+ " * @returns The line metadata for the example.",
146
+ " ",
147
+ ].join("\n");
148
+ const sourceText = buildSourceText(commentValue);
149
+ const comment = createComment(commentValue, sourceText);
150
+ const { context, reports } = createContext(sourceText, [comment]);
151
+ const node = createFunctionNode(sourceText, [
152
+ createParameter("TSTypeReference"),
153
+ ]);
154
+ return { context, node, reports, sourceText };
155
+ };
156
+ export { buildSourceText, createComment, createContext, createFunctionNode, createInterfaceSample, createParameter, runFunctionListener, };
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RvY3Mvbm8taW50ZXJmYWNlLW1lbWJlci1kb2NzL3Rlc3QtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFpRDVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsSUFBWSxFQUNaLFFBQW1CLEVBQ2EsRUFBRSxDQUNsQyxDQUFDO0lBQ0MsY0FBYyxFQUFFLEdBQWMsRUFBRSxDQUFDLFFBQVE7SUFDekMsSUFBSTtDQUNMLENBQW1DLENBQUM7QUFFdkM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixVQUEwQyxFQUMxQyxPQUFzQixFQUNKLEVBQUUsQ0FDcEIsQ0FBQztJQUNDLEVBQUUsRUFBRSwwQkFBMEI7SUFDOUIsT0FBTyxFQUFFLEVBQUU7SUFDWCxNQUFNLEVBQUUsQ0FBQyxVQUFpQyxFQUFRLEVBQUU7UUFDbEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxVQUFxQyxDQUFDO1FBQ2pFLE1BQU0sS0FBSyxHQUFnQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUU5QyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxVQUFVO0NBQ1gsQ0FBZ0MsQ0FBQztBQUVwQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUNwQixVQUFrQixFQUNsQixRQUFtQixFQUNELEVBQUU7SUFDcEIsTUFBTSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDckUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxZQUFvQixFQUFFLFVBQWtCLEVBQVcsRUFBRTtJQUMxRSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV6QyxPQUFPO1FBQ0wsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNmLElBQUksRUFBRSxPQUFPO1FBQ2IsS0FBSyxFQUFFLFlBQVk7S0FDVCxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixVQUFrQixFQUNsQixVQUFxQixFQUNWLEVBQUUsQ0FDYixDQUFDO0lBQ0MsTUFBTSxFQUFFLFVBQVU7SUFDbEIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQzFELElBQUksRUFBRSxxQkFBcUI7Q0FDNUIsQ0FBYyxDQUFDO0FBRWxCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEQsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsWUFBWTtJQUNsQixjQUFjLEVBQUU7UUFDZCxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUU7S0FDekI7Q0FDRixDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsT0FBeUIsRUFDekIsSUFBZSxFQUNULEVBQUU7SUFDUixNQUFNLFNBQVMsR0FBRyxrQ0FBa0MsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLG1CQUVkLENBQUM7SUFFZCxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsWUFBb0IsRUFBVSxFQUFFLENBQ3ZEO0lBQ0UsS0FBSztJQUNMLFlBQVksQ0FBQyxPQUFPLEVBQUU7SUFDdEIsSUFBSTtJQUNKLHlEQUF5RDtDQUMxRCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVmOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEdBQW9CLEVBQUU7SUFDbEQsTUFBTSxZQUFZLEdBQUc7UUFDbkIsR0FBRztRQUNILHNEQUFzRDtRQUN0RCx5Q0FBeUM7UUFDekMsd0RBQXdEO1FBQ3hELHVEQUF1RDtRQUN2RCx1REFBdUQ7UUFDdkQsZ0RBQWdEO1FBQ2hELEdBQUc7S0FDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNiLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxFQUFFO1FBQzFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQztLQUNuQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLG1CQUFtQixHQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgeyBub0ludGVyZmFjZU1lbWJlckRvY3VtZW50YXRpb25SdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG50eXBlIENvbW1lbnQgPSBSZXR1cm5UeXBlPFxuICBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXVtcImdldEFsbENvbW1lbnRzXCJdXG4+W251bWJlcl07XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBJbnRlcmZhY2VTYW1wbGUge1xuICAvKiogQ29udGV4dCBmaWVsZCB2YWx1ZS4gKi9cbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dDtcblxuICAvKiogTm9kZSBmaWVsZCB2YWx1ZS4gKi9cbiAgbm9kZTogUnVsZS5Ob2RlO1xuXG4gIC8qKiBSZXBvcnRzIGZpZWxkIHZhbHVlLiAqL1xuICByZXBvcnRzOiBSZXBvcnRFbnRyeVtdO1xuXG4gIC8qKiBTb3VyY2VUZXh0IGZpZWxkIHZhbHVlLiAqL1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBSZXBvcnREZXNjcmlwdG9yRGV0YWlscyB7XG4gIC8qKiBGaXggZmllbGQgdmFsdWUuICovXG4gIGZpeD86IG51bGwgfCBSdWxlLlJlcG9ydEZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBNZXNzYWdlSWQgZmllbGQgdmFsdWUuICovXG4gIG1lc3NhZ2VJZD86IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJlcG9ydEVudHJ5IHtcbiAgLyoqIEZpeCBoZWxwZXIgdmFsdWUuICovXG4gIGZpeD86IG51bGwgfCBSdWxlLlJlcG9ydEZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBNZXNzYWdlSWQgaGVscGVyIHZhbHVlLiAqL1xuICBtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJ1bGVDb250ZXh0U3RhdGUge1xuICAvKiogQ29udGV4dCBmaWVsZCB2YWx1ZS4gKi9cbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dDtcblxuICAvKiogUmVwb3J0cyBmaWVsZCB2YWx1ZS4gKi9cbiAgcmVwb3J0czogUmVwb3J0RW50cnlbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlQ29kZSBzdHViIHdpdGggdGhlIHByb3ZpZGVkIGNvbW1lbnRzLlxuICogQHBhcmFtIHRleHQgU291cmNlIHRleHQgdG8gYXR0YWNoLlxuICogQHBhcmFtIGNvbW1lbnRzIENvbW1lbnQgbm9kZXMgdG8gZXhwb3NlLlxuICogQHJldHVybnMgU291cmNlQ29kZSBzdHViIGZvciB0ZXN0cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzb3VyY2VDb2RlID0gY3JlYXRlU291cmNlQ29kZShcIlwiLCBbXSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlU291cmNlQ29kZSA9IChcbiAgdGV4dDogc3RyaW5nLFxuICBjb21tZW50czogQ29tbWVudFtdLFxuKTogUnVsZS5SdWxlQ29udGV4dFtcInNvdXJjZUNvZGVcIl0gPT5cbiAgKHtcbiAgICBnZXRBbGxDb21tZW50czogKCk6IENvbW1lbnRbXSA9PiBjb21tZW50cyxcbiAgICB0ZXh0LFxuICB9KSBhcyBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXTtcblxuLyoqXG4gKiBCdWlsZHMgYSBydWxlIGNvbnRleHQgZm9yIGNvbGxlY3RpbmcgcmVwb3J0cy5cbiAqIEBwYXJhbSBzb3VyY2VDb2RlIFNvdXJjZUNvZGUgc3R1Yi5cbiAqIEBwYXJhbSByZXBvcnRzIFJlcG9ydCBzaW5rLlxuICogQHJldHVybnMgUnVsZSBjb250ZXh0IHRoYXQgcmVjb3JkcyByZXBvcnRzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbnRleHQgPSBidWlsZFJ1bGVDb250ZXh0KHNvdXJjZUNvZGUsIHJlcG9ydHMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGJ1aWxkUnVsZUNvbnRleHQgPSAoXG4gIHNvdXJjZUNvZGU6IFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdLFxuICByZXBvcnRzOiBSZXBvcnRFbnRyeVtdLFxuKTogUnVsZS5SdWxlQ29udGV4dCA9PlxuICAoe1xuICAgIGlkOiBcIm5vLWludGVyZmFjZS1tZW1iZXItZG9jc1wiLFxuICAgIG9wdGlvbnM6IFtdLFxuICAgIHJlcG9ydDogKGRlc2NyaXB0b3I6IFJ1bGUuUmVwb3J0RGVzY3JpcHRvcik6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBmaXgsIG1lc3NhZ2VJZCB9ID0gZGVzY3JpcHRvciBhcyBSZXBvcnREZXNjcmlwdG9yRGV0YWlscztcbiAgICAgIGNvbnN0IGVudHJ5OiBSZXBvcnRFbnRyeSA9IHsgZml4LCBtZXNzYWdlSWQgfTtcblxuICAgICAgcmVwb3J0cy5wdXNoKGVudHJ5KTtcbiAgICB9LFxuICAgIHNvdXJjZUNvZGUsXG4gIH0pIGFzIHVua25vd24gYXMgUnVsZS5SdWxlQ29udGV4dDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcnVsZSBjb250ZXh0IHN0YXRlIGZvciB0aGUgZ2l2ZW4gc291cmNlIHRleHQuXG4gKiBAcGFyYW0gc291cmNlVGV4dCBTb3VyY2UgdGV4dCB0byBhbmFseXplLlxuICogQHBhcmFtIGNvbW1lbnRzIENvbW1lbnQgbm9kZXMgZm9yIHRoZSBzb3VyY2UuXG4gKiBAcmV0dXJucyBDb250ZXh0IHN0YXRlIGZvciB0ZXN0cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGF0ZSA9IGNyZWF0ZUNvbnRleHQoXCJcIiwgW10pO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUNvbnRleHQgPSAoXG4gIHNvdXJjZVRleHQ6IHN0cmluZyxcbiAgY29tbWVudHM6IENvbW1lbnRbXSxcbik6IFJ1bGVDb250ZXh0U3RhdGUgPT4ge1xuICBjb25zdCByZXBvcnRzOiBSZXBvcnRFbnRyeVtdID0gW107XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjcmVhdGVTb3VyY2VDb2RlKHNvdXJjZVRleHQsIGNvbW1lbnRzKTtcblxuICByZXR1cm4geyBjb250ZXh0OiBidWlsZFJ1bGVDb250ZXh0KHNvdXJjZUNvZGUsIHJlcG9ydHMpLCByZXBvcnRzIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBKU0RvYyBibG9jayBjb21tZW50IGZvciB0aGUgZ2l2ZW4gc291cmNlIHRleHQuXG4gKiBAcGFyYW0gY29tbWVudFZhbHVlIENvbW1lbnQgdmFsdWUgd2l0aG91dCBkZWxpbWl0ZXJzLlxuICogQHBhcmFtIHNvdXJjZVRleHQgU291cmNlIHRleHQgY29udGFpbmluZyB0aGUgY29tbWVudC5cbiAqIEByZXR1cm5zIENvbW1lbnQgbm9kZSBmb3IgdGhlIHNvdXJjZSB0ZXh0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbW1lbnQgPSBjcmVhdGVDb21tZW50KFwiKlxcbiAqIG9rXFxuIFwiLCBcImZ1bmN0aW9uIGRlbW8oKSB7fVwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVDb21tZW50ID0gKGNvbW1lbnRWYWx1ZTogc3RyaW5nLCBzb3VyY2VUZXh0OiBzdHJpbmcpOiBDb21tZW50ID0+IHtcbiAgY29uc3QgZW5kID0gc291cmNlVGV4dC5pbmRleE9mKFwiKi9cIikgKyAyO1xuXG4gIHJldHVybiB7XG4gICAgcmFuZ2U6IFswLCBlbmRdLFxuICAgIHR5cGU6IFwiQmxvY2tcIixcbiAgICB2YWx1ZTogY29tbWVudFZhbHVlLFxuICB9IGFzIENvbW1lbnQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBub2RlIGZvciB0aGUgZ2l2ZW4gc291cmNlIHRleHQuXG4gKiBAcGFyYW0gc291cmNlVGV4dCBTb3VyY2UgdGV4dCBjb250YWluaW5nIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlciBub2RlcyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgRnVuY3Rpb24gZGVjbGFyYXRpb24gbm9kZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBub2RlID0gY3JlYXRlRnVuY3Rpb25Ob2RlKFwiZnVuY3Rpb24gZGVtbygpIHt9XCIsIFtdKTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVGdW5jdGlvbk5vZGUgPSAoXG4gIHNvdXJjZVRleHQ6IHN0cmluZyxcbiAgcGFyYW1ldGVyczogdW5rbm93bltdLFxuKTogUnVsZS5Ob2RlID0+XG4gICh7XG4gICAgcGFyYW1zOiBwYXJhbWV0ZXJzLFxuICAgIHJhbmdlOiBbc291cmNlVGV4dC5pbmRleE9mKFwiZnVuY3Rpb25cIiksIHNvdXJjZVRleHQubGVuZ3RoXSxcbiAgICB0eXBlOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgfSkgYXMgUnVsZS5Ob2RlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwYXJhbWV0ZXIgbm9kZSB3aXRoIGEgdHlwZSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHR5cGUgVHlwZSBhbm5vdGF0aW9uIGtpbmQgdG8gYXNzaWduLlxuICogQHJldHVybnMgUGFyYW1ldGVyIG5vZGUgZm9yIHRlc3RzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHBhcmFtID0gY3JlYXRlUGFyYW1ldGVyKFwiVFNUeXBlUmVmZXJlbmNlXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZVBhcmFtZXRlciA9ICh0eXBlOiBzdHJpbmcpOiB1bmtub3duID0+ICh7XG4gIG5hbWU6IFwiY29udGV4dFwiLFxuICB0eXBlOiBcIklkZW50aWZpZXJcIixcbiAgdHlwZUFubm90YXRpb246IHtcbiAgICB0eXBlQW5ub3RhdGlvbjogeyB0eXBlIH0sXG4gIH0sXG59KTtcblxuLyoqXG4gKiBSdW5zIHRoZSBydWxlIGxpc3RlbmVyIGZvciBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0LlxuICogQHBhcmFtIG5vZGUgRnVuY3Rpb24gbm9kZSB0byBpbnNwZWN0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJ1bkZ1bmN0aW9uTGlzdGVuZXIoY29udGV4dCwgbm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcnVuRnVuY3Rpb25MaXN0ZW5lciA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgbm9kZTogUnVsZS5Ob2RlLFxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGUuY3JlYXRlKGNvbnRleHQpO1xuICBjb25zdCBsaXN0ZW5lciA9IGxpc3RlbmVycy5GdW5jdGlvbkRlY2xhcmF0aW9uIGFzXG4gICAgfCAoKG5vZGU6IFJ1bGUuTm9kZSkgPT4gdm9pZClcbiAgICB8IHVuZGVmaW5lZDtcblxuICBsaXN0ZW5lcj8uKG5vZGUpO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgc291cmNlIHRleHQgd2l0aCBhIGxlYWRpbmcgSlNEb2MgY29tbWVudC5cbiAqIEBwYXJhbSBjb21tZW50VmFsdWUgQ29tbWVudCB2YWx1ZSB1c2VkIGluIHRoZSBzb3VyY2UuXG4gKiBAcmV0dXJucyBTb3VyY2UgdGV4dCBjb250YWluaW5nIHRoZSBjb21tZW50IGFuZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB0ZXh0ID0gYnVpbGRTb3VyY2VUZXh0KFwiKlxcbiAqIG9rXFxuIFwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBidWlsZFNvdXJjZVRleHQgPSAoY29tbWVudFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgW1xuICAgIFwiLyoqXCIsXG4gICAgY29tbWVudFZhbHVlLnRyaW1FbmQoKSxcbiAgICBcIiovXCIsXG4gICAgXCJmdW5jdGlvbiBnZXRMaW5lTWV0YShjb250ZXh0OiBMaW5lTWV0YUNvbnRleHQpOiB2b2lkIHt9XCIsXG4gIF0uam9pbihcIlxcblwiKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2FtcGxlIHRlc3QgZml4dHVyZSBmb3IgaW50ZXJmYWNlIG1lbWJlciBkb2NzLlxuICogQHJldHVybnMgU2FtcGxlIGNvbnRleHQsIG5vZGUsIGFuZCByZXBvcnRzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNhbXBsZSA9IGNyZWF0ZUludGVyZmFjZVNhbXBsZSgpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUludGVyZmFjZVNhbXBsZSA9ICgpOiBJbnRlcmZhY2VTYW1wbGUgPT4ge1xuICBjb25zdCBjb21tZW50VmFsdWUgPSBbXG4gICAgXCIqXCIsXG4gICAgXCIgKiBDb21wdXRlIGxpbmUgbWV0YWRhdGEgZnJvbSB0aGUgcmF3IGNvbW1lbnQgdmFsdWUuXCIsXG4gICAgXCIgKiBAcGFyYW0gY29udGV4dCBUaGUgbWV0YWRhdGEgY29udGV4dC5cIixcbiAgICBcIiAqIEBwYXJhbSBjb250ZXh0LmNvbW1lbnRWYWx1ZSBUaGUgZnVsbCBjb21tZW50IHZhbHVlLlwiLFxuICAgIFwiICogQHBhcmFtIGNvbnRleHQuZnVsbCBUaGUgZnVsbCBtYXRjaGVkIGV4YW1wbGUgdGV4dC5cIixcbiAgICBcIiAqIEBwYXJhbSBjb250ZXh0LnN0YXJ0T2Zmc2V0IFRoZSBtYXRjaCBzdGFydCBvZmZzZXQuXCIsXG4gICAgXCIgKiBAcmV0dXJucyBUaGUgbGluZSBtZXRhZGF0YSBmb3IgdGhlIGV4YW1wbGUuXCIsXG4gICAgXCIgXCIsXG4gIF0uam9pbihcIlxcblwiKTtcbiAgY29uc3Qgc291cmNlVGV4dCA9IGJ1aWxkU291cmNlVGV4dChjb21tZW50VmFsdWUpO1xuICBjb25zdCBjb21tZW50ID0gY3JlYXRlQ29tbWVudChjb21tZW50VmFsdWUsIHNvdXJjZVRleHQpO1xuICBjb25zdCB7IGNvbnRleHQsIHJlcG9ydHMgfSA9IGNyZWF0ZUNvbnRleHQoc291cmNlVGV4dCwgW2NvbW1lbnRdKTtcbiAgY29uc3Qgbm9kZSA9IGNyZWF0ZUZ1bmN0aW9uTm9kZShzb3VyY2VUZXh0LCBbXG4gICAgY3JlYXRlUGFyYW1ldGVyKFwiVFNUeXBlUmVmZXJlbmNlXCIpLFxuICBdKTtcblxuICByZXR1cm4geyBjb250ZXh0LCBub2RlLCByZXBvcnRzLCBzb3VyY2VUZXh0IH07XG59O1xuXG5leHBvcnQge1xuICBidWlsZFNvdXJjZVRleHQsXG4gIGNyZWF0ZUNvbW1lbnQsXG4gIGNyZWF0ZUNvbnRleHQsXG4gIGNyZWF0ZUZ1bmN0aW9uTm9kZSxcbiAgY3JlYXRlSW50ZXJmYWNlU2FtcGxlLFxuICBjcmVhdGVQYXJhbWV0ZXIsXG4gIHJ1bkZ1bmN0aW9uTGlzdGVuZXIsXG59O1xuZXhwb3J0IHR5cGUgeyBDb21tZW50IH07XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import type { Rule } from "eslint";
2
+ /** Type definition for rule data. */
3
+ type Comment = ReturnType<Rule.RuleContext["sourceCode"]["getAllComments"]>[number];
4
+ /** Type definition for rule data. */
5
+ interface CommentLine {
6
+ /** End field value. */
7
+ end: number;
8
+ /** LineBreakLength field value. */
9
+ lineBreakLength: number;
10
+ /** Start field value. */
11
+ start: number;
12
+ /** Text field value. */
13
+ text: string;
14
+ }
15
+ /** Type definition for rule data. */
16
+ interface ParameterMemberTag {
17
+ /** BaseName field value. */
18
+ baseName: string;
19
+ /** FullName field value. */
20
+ fullName: string;
21
+ /** Line field value. */
22
+ line: CommentLine;
23
+ }
24
+ /** Type definition for rule data. */
25
+ interface TypeAnnotationNode {
26
+ /** Type field value. */
27
+ type: string;
28
+ }
29
+ export type { Comment, CommentLine, ParameterMemberTag, TypeAnnotationNode };
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/docs/no-interface-member-docs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,qCAAqC;AACrC,KAAK,OAAO,GAAG,UAAU,CACvB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,CACjD,CAAC,MAAM,CAAC,CAAC;AAEV,qCAAqC;AACrC,UAAU,WAAW;IACnB,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IAEZ,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IAExB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IAEd,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qCAAqC;AACrC,UAAU,kBAAkB;IAC1B,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,wBAAwB;IACxB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,qCAAqC;AACrC,UAAU,kBAAkB;IAC1B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZG9jcy9uby1pbnRlcmZhY2UtbWVtYmVyLWRvY3MvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xudHlwZSBDb21tZW50ID0gUmV0dXJuVHlwZTxcbiAgUnVsZS5SdWxlQ29udGV4dFtcInNvdXJjZUNvZGVcIl1bXCJnZXRBbGxDb21tZW50c1wiXVxuPltudW1iZXJdO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgQ29tbWVudExpbmUge1xuICAvKiogRW5kIGZpZWxkIHZhbHVlLiAqL1xuICBlbmQ6IG51bWJlcjtcblxuICAvKiogTGluZUJyZWFrTGVuZ3RoIGZpZWxkIHZhbHVlLiAqL1xuICBsaW5lQnJlYWtMZW5ndGg6IG51bWJlcjtcblxuICAvKiogU3RhcnQgZmllbGQgdmFsdWUuICovXG4gIHN0YXJ0OiBudW1iZXI7XG5cbiAgLyoqIFRleHQgZmllbGQgdmFsdWUuICovXG4gIHRleHQ6IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFBhcmFtZXRlck1lbWJlclRhZyB7XG4gIC8qKiBCYXNlTmFtZSBmaWVsZCB2YWx1ZS4gKi9cbiAgYmFzZU5hbWU6IHN0cmluZztcblxuICAvKiogRnVsbE5hbWUgZmllbGQgdmFsdWUuICovXG4gIGZ1bGxOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIExpbmUgZmllbGQgdmFsdWUuICovXG4gIGxpbmU6IENvbW1lbnRMaW5lO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgVHlwZUFubm90YXRpb25Ob2RlIHtcbiAgLyoqIFR5cGUgZmllbGQgdmFsdWUuICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgeyBDb21tZW50LCBDb21tZW50TGluZSwgUGFyYW1ldGVyTWVtYmVyVGFnLCBUeXBlQW5ub3RhdGlvbk5vZGUgfTtcbiJdfQ==
@@ -0,0 +1,29 @@
1
+ /** Type definition for rule data. */
2
+ interface FenceLineInfo {
3
+ /** Language field value. */
4
+ language: string;
5
+ /** Leading field value. */
6
+ leading: string;
7
+ }
8
+ /**
9
+ * Parses a fence line for its leading prefix and language.
10
+ * @param line Fence line to parse.
11
+ * @returns Parsed fence info when matched.
12
+ * @example
13
+ * ```typescript
14
+ * const info = parseFenceLine(" * ```typescript");
15
+ * ```
16
+ */
17
+ declare function parseFenceLine(line: string): FenceLineInfo | undefined;
18
+ /**
19
+ * Removes fenced blocks that contain no content.
20
+ * @param original Original comment text.
21
+ * @returns Updated comment text when a fence is removed.
22
+ * @example
23
+ * ```typescript
24
+ * const updated = removeEmptyFences("* ```typescript\n* ```\n* ok");
25
+ * ```
26
+ */
27
+ declare function removeEmptyFences(original: string): string | undefined;
28
+ export { parseFenceLine, removeEmptyFences };
29
+ //# sourceMappingURL=empty-fence-fixes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-fence-fixes.d.ts","sourceRoot":"","sources":["../../../src/docs/require-example-language/empty-fence-fixes.ts"],"names":[],"mappings":"AAqBA,qCAAqC;AACrC,UAAU,aAAa;IACrB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAuFD;;;;;;;;GAQG;AACH,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAe/D;AAED;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA0B/D;AAgDD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC"}