@dougis/markdown-lint-mcp 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 (246) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/CONTRIBUTING.md +474 -0
  3. package/LICENSE +21 -0
  4. package/README.md +240 -0
  5. package/USAGE.md +40 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +39 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/rules/index.d.ts +22 -0
  11. package/dist/rules/index.d.ts.map +1 -0
  12. package/dist/rules/index.js +144 -0
  13. package/dist/rules/index.js.map +1 -0
  14. package/dist/rules/md001.d.ts +25 -0
  15. package/dist/rules/md001.d.ts.map +1 -0
  16. package/dist/rules/md001.js +79 -0
  17. package/dist/rules/md001.js.map +1 -0
  18. package/dist/rules/md003.d.ts +41 -0
  19. package/dist/rules/md003.d.ts.map +1 -0
  20. package/dist/rules/md003.js +130 -0
  21. package/dist/rules/md003.js.map +1 -0
  22. package/dist/rules/md004.d.ts +28 -0
  23. package/dist/rules/md004.d.ts.map +1 -0
  24. package/dist/rules/md004.js +79 -0
  25. package/dist/rules/md004.js.map +1 -0
  26. package/dist/rules/md005.d.ts +21 -0
  27. package/dist/rules/md005.d.ts.map +1 -0
  28. package/dist/rules/md005.js +88 -0
  29. package/dist/rules/md005.js.map +1 -0
  30. package/dist/rules/md007.d.ts +21 -0
  31. package/dist/rules/md007.d.ts.map +1 -0
  32. package/dist/rules/md007.js +66 -0
  33. package/dist/rules/md007.js.map +1 -0
  34. package/dist/rules/md009.d.ts +35 -0
  35. package/dist/rules/md009.d.ts.map +1 -0
  36. package/dist/rules/md009.js +122 -0
  37. package/dist/rules/md009.js.map +1 -0
  38. package/dist/rules/md010.d.ts +34 -0
  39. package/dist/rules/md010.d.ts.map +1 -0
  40. package/dist/rules/md010.js +75 -0
  41. package/dist/rules/md010.js.map +1 -0
  42. package/dist/rules/md011.d.ts +30 -0
  43. package/dist/rules/md011.d.ts.map +1 -0
  44. package/dist/rules/md011.js +123 -0
  45. package/dist/rules/md011.js.map +1 -0
  46. package/dist/rules/md012.d.ts +33 -0
  47. package/dist/rules/md012.d.ts.map +1 -0
  48. package/dist/rules/md012.js +125 -0
  49. package/dist/rules/md012.js.map +1 -0
  50. package/dist/rules/md013.d.ts +26 -0
  51. package/dist/rules/md013.d.ts.map +1 -0
  52. package/dist/rules/md013.js +32 -0
  53. package/dist/rules/md013.js.map +1 -0
  54. package/dist/rules/md014.d.ts +29 -0
  55. package/dist/rules/md014.d.ts.map +1 -0
  56. package/dist/rules/md014.js +176 -0
  57. package/dist/rules/md014.js.map +1 -0
  58. package/dist/rules/md018.d.ts +22 -0
  59. package/dist/rules/md018.d.ts.map +1 -0
  60. package/dist/rules/md018.js +27 -0
  61. package/dist/rules/md018.js.map +1 -0
  62. package/dist/rules/md019.d.ts +22 -0
  63. package/dist/rules/md019.d.ts.map +1 -0
  64. package/dist/rules/md019.js +27 -0
  65. package/dist/rules/md019.js.map +1 -0
  66. package/dist/rules/md020.d.ts +22 -0
  67. package/dist/rules/md020.d.ts.map +1 -0
  68. package/dist/rules/md020.js +27 -0
  69. package/dist/rules/md020.js.map +1 -0
  70. package/dist/rules/md021.d.ts +22 -0
  71. package/dist/rules/md021.d.ts.map +1 -0
  72. package/dist/rules/md021.js +27 -0
  73. package/dist/rules/md021.js.map +1 -0
  74. package/dist/rules/md022.d.ts +21 -0
  75. package/dist/rules/md022.d.ts.map +1 -0
  76. package/dist/rules/md022.js +43 -0
  77. package/dist/rules/md022.js.map +1 -0
  78. package/dist/rules/md023.d.ts +21 -0
  79. package/dist/rules/md023.d.ts.map +1 -0
  80. package/dist/rules/md023.js +34 -0
  81. package/dist/rules/md023.js.map +1 -0
  82. package/dist/rules/md024.d.ts +30 -0
  83. package/dist/rules/md024.d.ts.map +1 -0
  84. package/dist/rules/md024.js +123 -0
  85. package/dist/rules/md024.js.map +1 -0
  86. package/dist/rules/md025.d.ts +34 -0
  87. package/dist/rules/md025.d.ts.map +1 -0
  88. package/dist/rules/md025.js +134 -0
  89. package/dist/rules/md025.js.map +1 -0
  90. package/dist/rules/md026.d.ts +21 -0
  91. package/dist/rules/md026.d.ts.map +1 -0
  92. package/dist/rules/md026.js +31 -0
  93. package/dist/rules/md026.js.map +1 -0
  94. package/dist/rules/md027.d.ts +22 -0
  95. package/dist/rules/md027.d.ts.map +1 -0
  96. package/dist/rules/md027.js +27 -0
  97. package/dist/rules/md027.js.map +1 -0
  98. package/dist/rules/md028.d.ts +37 -0
  99. package/dist/rules/md028.d.ts.map +1 -0
  100. package/dist/rules/md028.js +84 -0
  101. package/dist/rules/md028.js.map +1 -0
  102. package/dist/rules/md029.d.ts +30 -0
  103. package/dist/rules/md029.d.ts.map +1 -0
  104. package/dist/rules/md029.js +36 -0
  105. package/dist/rules/md029.js.map +1 -0
  106. package/dist/rules/md030.d.ts +28 -0
  107. package/dist/rules/md030.d.ts.map +1 -0
  108. package/dist/rules/md030.js +76 -0
  109. package/dist/rules/md030.js.map +1 -0
  110. package/dist/rules/md031.d.ts +22 -0
  111. package/dist/rules/md031.d.ts.map +1 -0
  112. package/dist/rules/md031.js +55 -0
  113. package/dist/rules/md031.js.map +1 -0
  114. package/dist/rules/md032.d.ts +21 -0
  115. package/dist/rules/md032.d.ts.map +1 -0
  116. package/dist/rules/md032.js +69 -0
  117. package/dist/rules/md032.js.map +1 -0
  118. package/dist/rules/md033.d.ts +28 -0
  119. package/dist/rules/md033.d.ts.map +1 -0
  120. package/dist/rules/md033.js +34 -0
  121. package/dist/rules/md033.js.map +1 -0
  122. package/dist/rules/md034.d.ts +28 -0
  123. package/dist/rules/md034.d.ts.map +1 -0
  124. package/dist/rules/md034.js +100 -0
  125. package/dist/rules/md034.js.map +1 -0
  126. package/dist/rules/md035.d.ts +23 -0
  127. package/dist/rules/md035.d.ts.map +1 -0
  128. package/dist/rules/md035.js +52 -0
  129. package/dist/rules/md035.js.map +1 -0
  130. package/dist/rules/md036.d.ts +34 -0
  131. package/dist/rules/md036.d.ts.map +1 -0
  132. package/dist/rules/md036.js +112 -0
  133. package/dist/rules/md036.js.map +1 -0
  134. package/dist/rules/md037.d.ts +28 -0
  135. package/dist/rules/md037.d.ts.map +1 -0
  136. package/dist/rules/md037.js +122 -0
  137. package/dist/rules/md037.js.map +1 -0
  138. package/dist/rules/md038.d.ts +28 -0
  139. package/dist/rules/md038.d.ts.map +1 -0
  140. package/dist/rules/md038.js +62 -0
  141. package/dist/rules/md038.js.map +1 -0
  142. package/dist/rules/md039.d.ts +21 -0
  143. package/dist/rules/md039.d.ts.map +1 -0
  144. package/dist/rules/md039.js +34 -0
  145. package/dist/rules/md039.js.map +1 -0
  146. package/dist/rules/md040.d.ts +21 -0
  147. package/dist/rules/md040.d.ts.map +1 -0
  148. package/dist/rules/md040.js +46 -0
  149. package/dist/rules/md040.js.map +1 -0
  150. package/dist/rules/md041.d.ts +33 -0
  151. package/dist/rules/md041.d.ts.map +1 -0
  152. package/dist/rules/md041.js +92 -0
  153. package/dist/rules/md041.js.map +1 -0
  154. package/dist/rules/md042.d.ts +22 -0
  155. package/dist/rules/md042.d.ts.map +1 -0
  156. package/dist/rules/md042.js +50 -0
  157. package/dist/rules/md042.js.map +1 -0
  158. package/dist/rules/md043.d.ts +39 -0
  159. package/dist/rules/md043.d.ts.map +1 -0
  160. package/dist/rules/md043.js +116 -0
  161. package/dist/rules/md043.js.map +1 -0
  162. package/dist/rules/md044.d.ts +40 -0
  163. package/dist/rules/md044.d.ts.map +1 -0
  164. package/dist/rules/md044.js +167 -0
  165. package/dist/rules/md044.js.map +1 -0
  166. package/dist/rules/md045.d.ts +22 -0
  167. package/dist/rules/md045.d.ts.map +1 -0
  168. package/dist/rules/md045.js +57 -0
  169. package/dist/rules/md045.js.map +1 -0
  170. package/dist/rules/md046.d.ts +23 -0
  171. package/dist/rules/md046.d.ts.map +1 -0
  172. package/dist/rules/md046.js +174 -0
  173. package/dist/rules/md046.js.map +1 -0
  174. package/dist/rules/md047.d.ts +22 -0
  175. package/dist/rules/md047.d.ts.map +1 -0
  176. package/dist/rules/md047.js +35 -0
  177. package/dist/rules/md047.js.map +1 -0
  178. package/dist/rules/md048.d.ts +22 -0
  179. package/dist/rules/md048.d.ts.map +1 -0
  180. package/dist/rules/md048.js +80 -0
  181. package/dist/rules/md048.js.map +1 -0
  182. package/dist/rules/md049.d.ts +33 -0
  183. package/dist/rules/md049.d.ts.map +1 -0
  184. package/dist/rules/md049.js +189 -0
  185. package/dist/rules/md049.js.map +1 -0
  186. package/dist/rules/md050.d.ts +22 -0
  187. package/dist/rules/md050.d.ts.map +1 -0
  188. package/dist/rules/md050.js +32 -0
  189. package/dist/rules/md050.js.map +1 -0
  190. package/dist/rules/md051.d.ts +23 -0
  191. package/dist/rules/md051.d.ts.map +1 -0
  192. package/dist/rules/md051.js +63 -0
  193. package/dist/rules/md051.js.map +1 -0
  194. package/dist/rules/md052.d.ts +21 -0
  195. package/dist/rules/md052.d.ts.map +1 -0
  196. package/dist/rules/md052.js +71 -0
  197. package/dist/rules/md052.js.map +1 -0
  198. package/dist/rules/md053.d.ts +21 -0
  199. package/dist/rules/md053.d.ts.map +1 -0
  200. package/dist/rules/md053.js +95 -0
  201. package/dist/rules/md053.js.map +1 -0
  202. package/dist/rules/md054.d.ts +21 -0
  203. package/dist/rules/md054.d.ts.map +1 -0
  204. package/dist/rules/md054.js +87 -0
  205. package/dist/rules/md054.js.map +1 -0
  206. package/dist/rules/md055.d.ts +22 -0
  207. package/dist/rules/md055.d.ts.map +1 -0
  208. package/dist/rules/md055.js +157 -0
  209. package/dist/rules/md055.js.map +1 -0
  210. package/dist/rules/md056.d.ts +21 -0
  211. package/dist/rules/md056.d.ts.map +1 -0
  212. package/dist/rules/md056.js +154 -0
  213. package/dist/rules/md056.js.map +1 -0
  214. package/dist/rules/md058.d.ts +27 -0
  215. package/dist/rules/md058.d.ts.map +1 -0
  216. package/dist/rules/md058.js +71 -0
  217. package/dist/rules/md058.js.map +1 -0
  218. package/dist/rules/md059.d.ts +22 -0
  219. package/dist/rules/md059.d.ts.map +1 -0
  220. package/dist/rules/md059.js +161 -0
  221. package/dist/rules/md059.js.map +1 -0
  222. package/dist/rules/rule-interface.d.ts +51 -0
  223. package/dist/rules/rule-interface.d.ts.map +1 -0
  224. package/dist/rules/rule-interface.js +2 -0
  225. package/dist/rules/rule-interface.js.map +1 -0
  226. package/dist/server.d.ts +59 -0
  227. package/dist/server.d.ts.map +1 -0
  228. package/dist/server.js +419 -0
  229. package/dist/server.js.map +1 -0
  230. package/dist/types.d.ts +74 -0
  231. package/dist/types.d.ts.map +1 -0
  232. package/dist/types.js +14 -0
  233. package/dist/types.js.map +1 -0
  234. package/dist/utils/file.d.ts +39 -0
  235. package/dist/utils/file.d.ts.map +1 -0
  236. package/dist/utils/file.js +124 -0
  237. package/dist/utils/file.js.map +1 -0
  238. package/dist/utils/logger.d.ts +61 -0
  239. package/dist/utils/logger.d.ts.map +1 -0
  240. package/dist/utils/logger.js +85 -0
  241. package/dist/utils/logger.js.map +1 -0
  242. package/dist/utils/safe-match.d.ts +4 -0
  243. package/dist/utils/safe-match.d.ts.map +1 -0
  244. package/dist/utils/safe-match.js +51 -0
  245. package/dist/utils/safe-match.js.map +1 -0
  246. package/package.json +85 -0
@@ -0,0 +1,28 @@
1
+ import { Rule, RuleViolation } from './rule-interface';
2
+ /**
3
+ * MD030: Spaces after list markers
4
+ *
5
+ * This rule is triggered when the spacing after list markers is inconsistent.
6
+ * The rule ensures that there is a consistent number of spaces (usually 1)
7
+ * between the list marker and the list content.
8
+ */
9
+ export declare const name = "MD030";
10
+ export declare const description = "Spaces after list markers";
11
+ /**
12
+ * Fix lists by ensuring consistent spacing after list markers
13
+ * @param lines Array of string lines to fix
14
+ * @returns Fixed lines array with consistent spacing after list markers
15
+ */
16
+ export declare function fix(lines: string[]): string[];
17
+ /**
18
+ * Validate lines for spacing issues after list markers
19
+ * @param lines Array of string lines to validate
20
+ * @returns Array of rule violations
21
+ */
22
+ export declare function validate(lines: string[]): RuleViolation[];
23
+ /**
24
+ * Rule implementation for MD030
25
+ */
26
+ export declare const rule: Rule;
27
+ export default rule;
28
+ //# sourceMappingURL=md030.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md030.d.ts","sourceRoot":"","sources":["../../src/rules/md030.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,UAAU,CAAC;AAC5B,eAAO,MAAM,WAAW,8BAA8B,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAsB7C;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CA4BzD;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,IAKlB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * MD030: Spaces after list markers
3
+ *
4
+ * This rule is triggered when the spacing after list markers is inconsistent.
5
+ * The rule ensures that there is a consistent number of spaces (usually 1)
6
+ * between the list marker and the list content.
7
+ */
8
+ export const name = 'MD030';
9
+ export const description = 'Spaces after list markers';
10
+ /**
11
+ * Fix lists by ensuring consistent spacing after list markers
12
+ * @param lines Array of string lines to fix
13
+ * @returns Fixed lines array with consistent spacing after list markers
14
+ */
15
+ export function fix(lines) {
16
+ // Regular expressions to match ordered and unordered list items
17
+ const unorderedListItemRegex = /^(\s*)([-+*])(\s+)(.*)$/;
18
+ const orderedListItemRegex = /^(\s*)(\d+\.)(\s+)(.*)$/;
19
+ return lines.map(line => {
20
+ // Fix unordered list items (standardize to one space after marker)
21
+ let match = line.match(unorderedListItemRegex);
22
+ if (match && match[3] !== ' ') {
23
+ // Replace with exactly one space
24
+ return `${match[1]}${match[2]} ${match[4]}`;
25
+ }
26
+ // Fix ordered list items (standardize to one space after marker)
27
+ match = line.match(orderedListItemRegex);
28
+ if (match && match[3] !== ' ') {
29
+ // Replace with exactly one space
30
+ return `${match[1]}${match[2]} ${match[4]}`;
31
+ }
32
+ return line;
33
+ });
34
+ }
35
+ /**
36
+ * Validate lines for spacing issues after list markers
37
+ * @param lines Array of string lines to validate
38
+ * @returns Array of rule violations
39
+ */
40
+ export function validate(lines) {
41
+ const violations = [];
42
+ const unorderedListItemRegex = /^(\s*)([-+*])(\s+)(.*)$/;
43
+ const orderedListItemRegex = /^(\s*)(\d+\.)(\s+)(.*)$/;
44
+ lines.forEach((line, index) => {
45
+ // Check unordered list items
46
+ let match = line.match(unorderedListItemRegex);
47
+ if (match && match[3] !== ' ') {
48
+ violations.push({
49
+ lineNumber: index + 1,
50
+ details: `Expected 1 space after list marker, found ${match[3].length} spaces`,
51
+ range: [match[1].length + match[2].length, match[3].length],
52
+ });
53
+ }
54
+ // Check ordered list items
55
+ match = line.match(orderedListItemRegex);
56
+ if (match && match[3] !== ' ') {
57
+ violations.push({
58
+ lineNumber: index + 1,
59
+ details: `Expected 1 space after list marker, found ${match[3].length} spaces`,
60
+ range: [match[1].length + match[2].length, match[3].length],
61
+ });
62
+ }
63
+ });
64
+ return violations;
65
+ }
66
+ /**
67
+ * Rule implementation for MD030
68
+ */
69
+ export const rule = {
70
+ name,
71
+ description,
72
+ validate,
73
+ fix,
74
+ };
75
+ export default rule;
76
+ //# sourceMappingURL=md030.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md030.js","sourceRoot":"","sources":["../../src/rules/md030.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,gEAAgE;IAChE,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;IACzD,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;IAEvD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,mEAAmE;QACnE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC/C,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,iCAAiC;YACjC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,CAAC;QAED,iEAAiE;QACjE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,iCAAiC;YACjC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAe;IACtC,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;IACzD,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;IAEvD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,6BAA6B;QAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC/C,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC;gBACd,UAAU,EAAE,KAAK,GAAG,CAAC;gBACrB,OAAO,EAAE,6CAA6C,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS;gBAC9E,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aAC5D,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC;gBACd,UAAU,EAAE,KAAK,GAAG,CAAC;gBACrB,OAAO,EAAE,6CAA6C,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS;gBAC9E,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aAC5D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,IAAI;IACJ,WAAW;IACX,QAAQ;IACR,GAAG;CACJ,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Rule } from './rule-interface';
2
+ /**
3
+ * MD031: Fenced code blocks should be surrounded by blank lines
4
+ *
5
+ * This rule is triggered when fenced code blocks are not surrounded by blank
6
+ * lines. Inserting blank lines helps to visually separate content and makes
7
+ * the Markdown more readable.
8
+ */
9
+ export declare const name = "MD031";
10
+ export declare const description = "Fenced code blocks should be surrounded by blank lines";
11
+ /**
12
+ * Fix fenced code blocks by ensuring they're surrounded by blank lines
13
+ * @param lines Array of string lines to fix
14
+ * @returns Fixed lines array with proper spacing around code blocks
15
+ */
16
+ export declare function fix(lines: string[]): string[];
17
+ /**
18
+ * Rule implementation for MD031
19
+ */
20
+ export declare const rule: Rule;
21
+ export default rule;
22
+ //# sourceMappingURL=md031.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md031.d.ts","sourceRoot":"","sources":["../../src/rules/md031.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,UAAU,CAAC;AAC5B,eAAO,MAAM,WAAW,2DAA2D,CAAC;AAEpF;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAmC7C;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,IAIlB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * MD031: Fenced code blocks should be surrounded by blank lines
3
+ *
4
+ * This rule is triggered when fenced code blocks are not surrounded by blank
5
+ * lines. Inserting blank lines helps to visually separate content and makes
6
+ * the Markdown more readable.
7
+ */
8
+ export const name = 'MD031';
9
+ export const description = 'Fenced code blocks should be surrounded by blank lines';
10
+ /**
11
+ * Fix fenced code blocks by ensuring they're surrounded by blank lines
12
+ * @param lines Array of string lines to fix
13
+ * @returns Fixed lines array with proper spacing around code blocks
14
+ */
15
+ export function fix(lines) {
16
+ let fixedLines = [];
17
+ let inCodeBlock = false;
18
+ for (let i = 0; i < lines.length; i++) {
19
+ const line = lines[i];
20
+ const isFenceStart = line.trim().startsWith('```');
21
+ const isFenceEnd = inCodeBlock && line.trim() === '```';
22
+ if (isFenceStart && !inCodeBlock) {
23
+ // Check if there's a blank line before the code block (unless it's the first line)
24
+ const needsBlankBefore = i > 0 && lines[i - 1].trim() !== '';
25
+ if (needsBlankBefore) {
26
+ fixedLines.push('');
27
+ }
28
+ fixedLines.push(line);
29
+ inCodeBlock = true;
30
+ }
31
+ else if (isFenceEnd) {
32
+ fixedLines.push(line);
33
+ inCodeBlock = false;
34
+ // Check if there's a blank line after the code block (unless it's the last line)
35
+ const needsBlankAfter = i < lines.length - 1 && lines[i + 1].trim() !== '';
36
+ if (needsBlankAfter) {
37
+ fixedLines.push('');
38
+ }
39
+ }
40
+ else {
41
+ fixedLines.push(line);
42
+ }
43
+ }
44
+ return fixedLines;
45
+ }
46
+ /**
47
+ * Rule implementation for MD031
48
+ */
49
+ export const rule = {
50
+ name,
51
+ description,
52
+ fix,
53
+ };
54
+ export default rule;
55
+ //# sourceMappingURL=md031.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md031.js","sourceRoot":"","sources":["../../src/rules/md031.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,wDAAwD,CAAC;AAEpF;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,IAAI,UAAU,GAAa,EAAE,CAAC;IAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC;QAExD,IAAI,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,mFAAmF;YACnF,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAE7D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,WAAW,GAAG,KAAK,CAAC;YAEpB,iFAAiF;YACjF,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAE3E,IAAI,eAAe,EAAE,CAAC;gBACpB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,IAAI;IACJ,WAAW;IACX,GAAG;CACJ,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Rule } from './rule-interface';
2
+ /**
3
+ * MD032: Lists should be surrounded by blank lines
4
+ *
5
+ * This rule is triggered when lists are not surrounded by blank lines. This
6
+ * helps to visually separate content and makes the Markdown more readable.
7
+ */
8
+ export declare const name = "MD032";
9
+ export declare const description = "Lists should be surrounded by blank lines";
10
+ /**
11
+ * Fix lists by ensuring they're surrounded by blank lines
12
+ * @param lines Array of string lines to fix
13
+ * @returns Fixed lines array with proper spacing around lists
14
+ */
15
+ export declare function fix(lines: string[]): string[];
16
+ /**
17
+ * Rule implementation for MD032
18
+ */
19
+ export declare const rule: Rule;
20
+ export default rule;
21
+ //# sourceMappingURL=md032.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md032.d.ts","sourceRoot":"","sources":["../../src/rules/md032.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,IAAI,UAAU,CAAC;AAC5B,eAAO,MAAM,WAAW,8CAA8C,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAmD7C;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,IAIlB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * MD032: Lists should be surrounded by blank lines
3
+ *
4
+ * This rule is triggered when lists are not surrounded by blank lines. This
5
+ * helps to visually separate content and makes the Markdown more readable.
6
+ */
7
+ export const name = 'MD032';
8
+ export const description = 'Lists should be surrounded by blank lines';
9
+ /**
10
+ * Fix lists by ensuring they're surrounded by blank lines
11
+ * @param lines Array of string lines to fix
12
+ * @returns Fixed lines array with proper spacing around lists
13
+ */
14
+ export function fix(lines) {
15
+ let fixedLines = [];
16
+ let inList = false;
17
+ for (let i = 0; i < lines.length; i++) {
18
+ const line = lines[i];
19
+ const isListItem = /^(\s*[-+*]|\s*\d+\.)\s+.+/.test(line);
20
+ // Detect end of list: we were in a list, current line is not a list item, and it's not empty
21
+ const isEndOfList = inList && !isListItem && line.trim() !== '';
22
+ if (isListItem && !inList) {
23
+ // List is starting
24
+ inList = true;
25
+ // Check if there's a blank line before the list (unless it's the first line)
26
+ const needsBlankBefore = i > 0 && lines[i - 1].trim() !== '';
27
+ if (needsBlankBefore) {
28
+ fixedLines.push('');
29
+ }
30
+ fixedLines.push(line);
31
+ }
32
+ else if (isEndOfList) {
33
+ // List is ending
34
+ inList = false;
35
+ // The current line is non-list content, make sure there's a blank line before it
36
+ if (fixedLines.length > 0 && fixedLines[fixedLines.length - 1].trim() !== '') {
37
+ fixedLines.push('');
38
+ }
39
+ fixedLines.push(line);
40
+ }
41
+ else {
42
+ // Regular line (could be a list item in an ongoing list or non-list content)
43
+ fixedLines.push(line);
44
+ // If this is a list item, we're in a list
45
+ if (isListItem) {
46
+ inList = true;
47
+ }
48
+ else if (line.trim() === '') {
49
+ // Empty line - not a list item, but doesn't necessarily end the list
50
+ // We'll determine if we're still in a list when we see the next non-empty line
51
+ }
52
+ else {
53
+ // Non-empty, non-list item line - definitely not in a list
54
+ inList = false;
55
+ }
56
+ }
57
+ }
58
+ return fixedLines;
59
+ }
60
+ /**
61
+ * Rule implementation for MD032
62
+ */
63
+ export const rule = {
64
+ name,
65
+ description,
66
+ fix,
67
+ };
68
+ export default rule;
69
+ //# sourceMappingURL=md032.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md032.js","sourceRoot":"","sources":["../../src/rules/md032.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAEvE;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,IAAI,UAAU,GAAa,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1D,6FAA6F;QAC7F,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAEhE,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,mBAAmB;YACnB,MAAM,GAAG,IAAI,CAAC;YAEd,6EAA6E;YAC7E,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAE7D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,iBAAiB;YACjB,MAAM,GAAG,KAAK,CAAC;YAEf,iFAAiF;YACjF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC7E,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,6EAA6E;YAC7E,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEtB,0CAA0C;YAC1C,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC9B,qEAAqE;gBACrE,+EAA+E;YACjF,CAAC;iBAAM,CAAC;gBACN,2DAA2D;gBAC3D,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,IAAI;IACJ,WAAW;IACX,GAAG;CACJ,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Rule } from './rule-interface';
2
+ /**
3
+ * MD033: Inline HTML
4
+ *
5
+ * This rule is triggered when HTML tags are used in a Markdown document.
6
+ * Some users prefer to use "pure" Markdown without HTML tags, as it improves
7
+ * portability and prevents potential security issues when rendering the Markdown.
8
+ *
9
+ * Note: This rule is detection-only and doesn't provide automatic fixes
10
+ * since removing HTML would likely break intended functionality.
11
+ */
12
+ export declare const name = "MD033";
13
+ export declare const description = "Inline HTML";
14
+ /**
15
+ * Fix function for MD033
16
+ * Since HTML tags in Markdown are often used intentionally for specific
17
+ * formatting or functionality, this rule only detects the issue and
18
+ * doesn't automatically fix it.
19
+ * @param lines Array of string lines to check
20
+ * @returns Original lines array unchanged
21
+ */
22
+ export declare function fix(lines: string[]): string[];
23
+ /**
24
+ * Rule implementation for MD033
25
+ */
26
+ export declare const rule: Rule;
27
+ export default rule;
28
+ //# sourceMappingURL=md033.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md033.d.ts","sourceRoot":"","sources":["../../src/rules/md033.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,UAAU,CAAC;AAC5B,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG7C;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,IAIlB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * MD033: Inline HTML
3
+ *
4
+ * This rule is triggered when HTML tags are used in a Markdown document.
5
+ * Some users prefer to use "pure" Markdown without HTML tags, as it improves
6
+ * portability and prevents potential security issues when rendering the Markdown.
7
+ *
8
+ * Note: This rule is detection-only and doesn't provide automatic fixes
9
+ * since removing HTML would likely break intended functionality.
10
+ */
11
+ export const name = 'MD033';
12
+ export const description = 'Inline HTML';
13
+ /**
14
+ * Fix function for MD033
15
+ * Since HTML tags in Markdown are often used intentionally for specific
16
+ * formatting or functionality, this rule only detects the issue and
17
+ * doesn't automatically fix it.
18
+ * @param lines Array of string lines to check
19
+ * @returns Original lines array unchanged
20
+ */
21
+ export function fix(lines) {
22
+ // This rule is detection-only, so we return the lines unchanged
23
+ return [...lines];
24
+ }
25
+ /**
26
+ * Rule implementation for MD033
27
+ */
28
+ export const rule = {
29
+ name,
30
+ description,
31
+ fix,
32
+ };
33
+ export default rule;
34
+ //# sourceMappingURL=md033.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md033.js","sourceRoot":"","sources":["../../src/rules/md033.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,gEAAgE;IAChE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,IAAI;IACJ,WAAW;IACX,GAAG;CACJ,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Rule, RuleViolation } from './rule-interface';
2
+ /**
3
+ * MD034: Bare URL used
4
+ *
5
+ * This rule is triggered when a bare URL is used in the document.
6
+ * URLs should be enclosed in angle brackets (`<` and `>`) or
7
+ * formatted as proper Markdown links.
8
+ */
9
+ export declare const name = "MD034";
10
+ export declare const description = "Bare URL used";
11
+ /**
12
+ * Fix bare URLs by enclosing them in angle brackets
13
+ * @param lines Array of string lines to fix
14
+ * @returns Fixed lines array with URLs properly formatted
15
+ */
16
+ export declare function fix(lines: string[]): string[];
17
+ /**
18
+ * Validate lines for bare URLs
19
+ * @param lines Array of string lines to validate
20
+ * @returns Array of rule violations
21
+ */
22
+ export declare function validate(lines: string[]): RuleViolation[];
23
+ /**
24
+ * Rule implementation for MD034
25
+ */
26
+ export declare const rule: Rule;
27
+ export default rule;
28
+ //# sourceMappingURL=md034.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md034.d.ts","sourceRoot":"","sources":["../../src/rules/md034.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,UAAU,CAAC;AAC5B,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAuC7C;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CA2CzD;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,IAKlB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * MD034: Bare URL used
3
+ *
4
+ * This rule is triggered when a bare URL is used in the document.
5
+ * URLs should be enclosed in angle brackets (`<` and `>`) or
6
+ * formatted as proper Markdown links.
7
+ */
8
+ export const name = 'MD034';
9
+ export const description = 'Bare URL used';
10
+ /**
11
+ * Fix bare URLs by enclosing them in angle brackets
12
+ * @param lines Array of string lines to fix
13
+ * @returns Fixed lines array with URLs properly formatted
14
+ */
15
+ export function fix(lines) {
16
+ // URL regex pattern that captures full URLs
17
+ const urlRegex = /(https?:\/\/[^\s<>]+)/g;
18
+ let inCodeBlock = false;
19
+ return lines.map(line => {
20
+ // Track code block state
21
+ if (line.trim().startsWith('```')) {
22
+ inCodeBlock = !inCodeBlock;
23
+ return line;
24
+ }
25
+ // Skip lines that are in code blocks or indented code or already in links
26
+ if (inCodeBlock || line.startsWith(' ') || line.includes('](')) {
27
+ return line;
28
+ }
29
+ // Check if URL is already properly formatted
30
+ return line.replace(urlRegex, (match, url, offset) => {
31
+ const before = line.charAt(offset - 1);
32
+ const after = line.charAt(offset + match.length);
33
+ // Don't modify if already in angle brackets or code
34
+ if (before === '<' || before === '`' || after === '>' || after === '`') {
35
+ return match;
36
+ }
37
+ // Don't modify if part of markdown link
38
+ if (line.includes(`](${url})`)) {
39
+ return match;
40
+ }
41
+ // Remove trailing punctuation that shouldn't be part of URL
42
+ const cleanUrl = url.replace(/[.,;!?)\]]+$/, '');
43
+ const trailingPunct = url.slice(cleanUrl.length);
44
+ return `<${cleanUrl}>${trailingPunct}`;
45
+ });
46
+ });
47
+ }
48
+ /**
49
+ * Validate lines for bare URLs
50
+ * @param lines Array of string lines to validate
51
+ * @returns Array of rule violations
52
+ */
53
+ export function validate(lines) {
54
+ const violations = [];
55
+ const urlRegex = /(https?:\/\/[^\s<>]+)/g;
56
+ let inCodeBlock = false;
57
+ lines.forEach((line, index) => {
58
+ // Track code block state
59
+ if (line.trim().startsWith('```')) {
60
+ inCodeBlock = !inCodeBlock;
61
+ return;
62
+ }
63
+ // Skip lines that are in code blocks or indented code or already in links
64
+ if (inCodeBlock || line.startsWith(' ') || line.includes('](')) {
65
+ return;
66
+ }
67
+ const matches = line.matchAll(urlRegex);
68
+ for (const match of matches) {
69
+ const url = match[1];
70
+ const offset = match.index || 0;
71
+ const before = line.charAt(offset - 1);
72
+ const after = line.charAt(offset + match[0].length);
73
+ // Skip if already in angle brackets or code
74
+ if (before === '<' || before === '`' || after === '>' || after === '`') {
75
+ continue;
76
+ }
77
+ // Skip if part of markdown link
78
+ if (line.includes(`](${url})`)) {
79
+ continue;
80
+ }
81
+ violations.push({
82
+ lineNumber: index + 1,
83
+ details: 'Bare URL used - consider using angle brackets or proper link format',
84
+ range: [offset, match[0].length],
85
+ });
86
+ }
87
+ });
88
+ return violations;
89
+ }
90
+ /**
91
+ * Rule implementation for MD034
92
+ */
93
+ export const rule = {
94
+ name,
95
+ description,
96
+ validate,
97
+ fix,
98
+ };
99
+ export default rule;
100
+ //# sourceMappingURL=md034.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md034.js","sourceRoot":"","sources":["../../src/rules/md034.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,wBAAwB,CAAC;IAC1C,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,yBAAyB;QACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,WAAW,GAAG,CAAC,WAAW,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0EAA0E;QAC1E,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,6CAA6C;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;YACnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAEjD,oDAAoD;YACpD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBACvE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,wCAAwC;YACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;YAED,4DAA4D;YAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjD,OAAO,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAe;IACtC,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,wBAAwB,CAAC;IAC1C,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,yBAAyB;QACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,WAAW,GAAG,CAAC,WAAW,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,0EAA0E;QAC1E,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClE,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAEpD,4CAA4C;YAC5C,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBACvE,SAAS;YACX,CAAC;YAED,gCAAgC;YAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YAED,UAAU,CAAC,IAAI,CAAC;gBACd,UAAU,EAAE,KAAK,GAAG,CAAC;gBACrB,OAAO,EAAE,qEAAqE;gBAC9E,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aACjC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,IAAI;IACJ,WAAW;IACX,QAAQ;IACR,GAAG;CACJ,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Rule } from './rule-interface';
2
+ /**
3
+ * MD035: Horizontal rule style
4
+ *
5
+ * This rule enforces consistent horizontal rule (thematic break) style.
6
+ * In markdown, horizontal rules can be created using three or more hyphens (-),
7
+ * asterisks (*), or underscores (_). This rule ensures that horizontal rules
8
+ * use a consistent style throughout a document.
9
+ */
10
+ export declare const name = "MD035";
11
+ export declare const description = "Horizontal rule style";
12
+ /**
13
+ * Fix horizontal rule style by ensuring consistent format for all rules
14
+ * @param lines Array of string lines to fix
15
+ * @returns Fixed lines array with consistent horizontal rule style
16
+ */
17
+ export declare function fix(lines: string[]): string[];
18
+ /**
19
+ * Rule implementation for MD035
20
+ */
21
+ export declare const rule: Rule;
22
+ export default rule;
23
+ //# sourceMappingURL=md035.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md035.d.ts","sourceRoot":"","sources":["../../src/rules/md035.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,UAAU,CAAC;AAC5B,eAAO,MAAM,WAAW,0BAA0B,CAAC;AAQnD;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAuB7C;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,IAIlB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * MD035: Horizontal rule style
3
+ *
4
+ * This rule enforces consistent horizontal rule (thematic break) style.
5
+ * In markdown, horizontal rules can be created using three or more hyphens (-),
6
+ * asterisks (*), or underscores (_). This rule ensures that horizontal rules
7
+ * use a consistent style throughout a document.
8
+ */
9
+ export const name = 'MD035';
10
+ export const description = 'Horizontal rule style';
11
+ /**
12
+ * Regex to detect a horizontal rule line
13
+ * A horizontal rule is 3+ hyphens, asterisks, or underscores, optionally with spaces between them
14
+ */
15
+ const hrLineRegex = /^\s*([-*_])(\s*\1\s*){2,}\s*$/;
16
+ /**
17
+ * Fix horizontal rule style by ensuring consistent format for all rules
18
+ * @param lines Array of string lines to fix
19
+ * @returns Fixed lines array with consistent horizontal rule style
20
+ */
21
+ export function fix(lines) {
22
+ // Find the first horizontal rule to use as the preferred style
23
+ let preferredStyle = '---'; // Default to three hyphens if no horizontal rule is found
24
+ for (const line of lines) {
25
+ const match = line.match(hrLineRegex);
26
+ if (match) {
27
+ // Use the first found HR as the preferred style
28
+ preferredStyle = line.trim();
29
+ break;
30
+ }
31
+ }
32
+ // Now fix all horizontal rules to match the preferred style
33
+ return lines.map(line => {
34
+ const match = line.match(hrLineRegex);
35
+ if (match) {
36
+ // Maintain the original indentation
37
+ const indentation = line.match(/^\s*/)?.[0] || '';
38
+ return indentation + preferredStyle;
39
+ }
40
+ return line;
41
+ });
42
+ }
43
+ /**
44
+ * Rule implementation for MD035
45
+ */
46
+ export const rule = {
47
+ name,
48
+ description,
49
+ fix,
50
+ };
51
+ export default rule;
52
+ //# sourceMappingURL=md035.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md035.js","sourceRoot":"","sources":["../../src/rules/md035.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,+DAA+D;IAC/D,IAAI,cAAc,GAAG,KAAK,CAAC,CAAC,0DAA0D;IAEtF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACV,gDAAgD;YAChD,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM;QACR,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACV,oCAAoC;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClD,OAAO,WAAW,GAAG,cAAc,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,IAAI;IACJ,WAAW;IACX,GAAG;CACJ,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Rule } from './rule-interface';
2
+ /**
3
+ * MD036: Emphasis used instead of a heading
4
+ *
5
+ * This rule identifies when emphasis markers like bold or italic are used to create
6
+ * a heading-like structure, when it would be better to use actual heading syntax.
7
+ *
8
+ * For example, the following should be converted to a proper heading:
9
+ * **This is a heading**
10
+ *
11
+ * It should become:
12
+ * ## This is a heading
13
+ */
14
+ export declare const name = "MD036";
15
+ export declare const description = "Emphasis used instead of a heading";
16
+ /**
17
+ * Configuration options for MD036
18
+ */
19
+ interface MD036Config {
20
+ punctuation?: string;
21
+ }
22
+ /**
23
+ * Fix instances where emphasis is used instead of a heading
24
+ * @param lines Array of string lines to fix
25
+ * @param config Optional configuration object
26
+ * @returns Fixed lines array with proper headings
27
+ */
28
+ export declare function fix(lines: string[], config?: MD036Config): string[];
29
+ /**
30
+ * Rule implementation for MD036
31
+ */
32
+ export declare const rule: Rule;
33
+ export default rule;
34
+ //# sourceMappingURL=md036.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md036.d.ts","sourceRoot":"","sources":["../../src/rules/md036.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,IAAI,UAAU,CAAC;AAC5B,eAAO,MAAM,WAAW,uCAAuC,CAAC;AAEhE;;GAEG;AACH,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE,CA8FnE;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,IAIlB,CAAC;AAEF,eAAe,IAAI,CAAC"}