@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.
- package/CHANGELOG.md +80 -0
- package/CONTRIBUTING.md +474 -0
- package/LICENSE +21 -0
- package/README.md +240 -0
- package/USAGE.md +40 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/index.d.ts +22 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +144 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/md001.d.ts +25 -0
- package/dist/rules/md001.d.ts.map +1 -0
- package/dist/rules/md001.js +79 -0
- package/dist/rules/md001.js.map +1 -0
- package/dist/rules/md003.d.ts +41 -0
- package/dist/rules/md003.d.ts.map +1 -0
- package/dist/rules/md003.js +130 -0
- package/dist/rules/md003.js.map +1 -0
- package/dist/rules/md004.d.ts +28 -0
- package/dist/rules/md004.d.ts.map +1 -0
- package/dist/rules/md004.js +79 -0
- package/dist/rules/md004.js.map +1 -0
- package/dist/rules/md005.d.ts +21 -0
- package/dist/rules/md005.d.ts.map +1 -0
- package/dist/rules/md005.js +88 -0
- package/dist/rules/md005.js.map +1 -0
- package/dist/rules/md007.d.ts +21 -0
- package/dist/rules/md007.d.ts.map +1 -0
- package/dist/rules/md007.js +66 -0
- package/dist/rules/md007.js.map +1 -0
- package/dist/rules/md009.d.ts +35 -0
- package/dist/rules/md009.d.ts.map +1 -0
- package/dist/rules/md009.js +122 -0
- package/dist/rules/md009.js.map +1 -0
- package/dist/rules/md010.d.ts +34 -0
- package/dist/rules/md010.d.ts.map +1 -0
- package/dist/rules/md010.js +75 -0
- package/dist/rules/md010.js.map +1 -0
- package/dist/rules/md011.d.ts +30 -0
- package/dist/rules/md011.d.ts.map +1 -0
- package/dist/rules/md011.js +123 -0
- package/dist/rules/md011.js.map +1 -0
- package/dist/rules/md012.d.ts +33 -0
- package/dist/rules/md012.d.ts.map +1 -0
- package/dist/rules/md012.js +125 -0
- package/dist/rules/md012.js.map +1 -0
- package/dist/rules/md013.d.ts +26 -0
- package/dist/rules/md013.d.ts.map +1 -0
- package/dist/rules/md013.js +32 -0
- package/dist/rules/md013.js.map +1 -0
- package/dist/rules/md014.d.ts +29 -0
- package/dist/rules/md014.d.ts.map +1 -0
- package/dist/rules/md014.js +176 -0
- package/dist/rules/md014.js.map +1 -0
- package/dist/rules/md018.d.ts +22 -0
- package/dist/rules/md018.d.ts.map +1 -0
- package/dist/rules/md018.js +27 -0
- package/dist/rules/md018.js.map +1 -0
- package/dist/rules/md019.d.ts +22 -0
- package/dist/rules/md019.d.ts.map +1 -0
- package/dist/rules/md019.js +27 -0
- package/dist/rules/md019.js.map +1 -0
- package/dist/rules/md020.d.ts +22 -0
- package/dist/rules/md020.d.ts.map +1 -0
- package/dist/rules/md020.js +27 -0
- package/dist/rules/md020.js.map +1 -0
- package/dist/rules/md021.d.ts +22 -0
- package/dist/rules/md021.d.ts.map +1 -0
- package/dist/rules/md021.js +27 -0
- package/dist/rules/md021.js.map +1 -0
- package/dist/rules/md022.d.ts +21 -0
- package/dist/rules/md022.d.ts.map +1 -0
- package/dist/rules/md022.js +43 -0
- package/dist/rules/md022.js.map +1 -0
- package/dist/rules/md023.d.ts +21 -0
- package/dist/rules/md023.d.ts.map +1 -0
- package/dist/rules/md023.js +34 -0
- package/dist/rules/md023.js.map +1 -0
- package/dist/rules/md024.d.ts +30 -0
- package/dist/rules/md024.d.ts.map +1 -0
- package/dist/rules/md024.js +123 -0
- package/dist/rules/md024.js.map +1 -0
- package/dist/rules/md025.d.ts +34 -0
- package/dist/rules/md025.d.ts.map +1 -0
- package/dist/rules/md025.js +134 -0
- package/dist/rules/md025.js.map +1 -0
- package/dist/rules/md026.d.ts +21 -0
- package/dist/rules/md026.d.ts.map +1 -0
- package/dist/rules/md026.js +31 -0
- package/dist/rules/md026.js.map +1 -0
- package/dist/rules/md027.d.ts +22 -0
- package/dist/rules/md027.d.ts.map +1 -0
- package/dist/rules/md027.js +27 -0
- package/dist/rules/md027.js.map +1 -0
- package/dist/rules/md028.d.ts +37 -0
- package/dist/rules/md028.d.ts.map +1 -0
- package/dist/rules/md028.js +84 -0
- package/dist/rules/md028.js.map +1 -0
- package/dist/rules/md029.d.ts +30 -0
- package/dist/rules/md029.d.ts.map +1 -0
- package/dist/rules/md029.js +36 -0
- package/dist/rules/md029.js.map +1 -0
- package/dist/rules/md030.d.ts +28 -0
- package/dist/rules/md030.d.ts.map +1 -0
- package/dist/rules/md030.js +76 -0
- package/dist/rules/md030.js.map +1 -0
- package/dist/rules/md031.d.ts +22 -0
- package/dist/rules/md031.d.ts.map +1 -0
- package/dist/rules/md031.js +55 -0
- package/dist/rules/md031.js.map +1 -0
- package/dist/rules/md032.d.ts +21 -0
- package/dist/rules/md032.d.ts.map +1 -0
- package/dist/rules/md032.js +69 -0
- package/dist/rules/md032.js.map +1 -0
- package/dist/rules/md033.d.ts +28 -0
- package/dist/rules/md033.d.ts.map +1 -0
- package/dist/rules/md033.js +34 -0
- package/dist/rules/md033.js.map +1 -0
- package/dist/rules/md034.d.ts +28 -0
- package/dist/rules/md034.d.ts.map +1 -0
- package/dist/rules/md034.js +100 -0
- package/dist/rules/md034.js.map +1 -0
- package/dist/rules/md035.d.ts +23 -0
- package/dist/rules/md035.d.ts.map +1 -0
- package/dist/rules/md035.js +52 -0
- package/dist/rules/md035.js.map +1 -0
- package/dist/rules/md036.d.ts +34 -0
- package/dist/rules/md036.d.ts.map +1 -0
- package/dist/rules/md036.js +112 -0
- package/dist/rules/md036.js.map +1 -0
- package/dist/rules/md037.d.ts +28 -0
- package/dist/rules/md037.d.ts.map +1 -0
- package/dist/rules/md037.js +122 -0
- package/dist/rules/md037.js.map +1 -0
- package/dist/rules/md038.d.ts +28 -0
- package/dist/rules/md038.d.ts.map +1 -0
- package/dist/rules/md038.js +62 -0
- package/dist/rules/md038.js.map +1 -0
- package/dist/rules/md039.d.ts +21 -0
- package/dist/rules/md039.d.ts.map +1 -0
- package/dist/rules/md039.js +34 -0
- package/dist/rules/md039.js.map +1 -0
- package/dist/rules/md040.d.ts +21 -0
- package/dist/rules/md040.d.ts.map +1 -0
- package/dist/rules/md040.js +46 -0
- package/dist/rules/md040.js.map +1 -0
- package/dist/rules/md041.d.ts +33 -0
- package/dist/rules/md041.d.ts.map +1 -0
- package/dist/rules/md041.js +92 -0
- package/dist/rules/md041.js.map +1 -0
- package/dist/rules/md042.d.ts +22 -0
- package/dist/rules/md042.d.ts.map +1 -0
- package/dist/rules/md042.js +50 -0
- package/dist/rules/md042.js.map +1 -0
- package/dist/rules/md043.d.ts +39 -0
- package/dist/rules/md043.d.ts.map +1 -0
- package/dist/rules/md043.js +116 -0
- package/dist/rules/md043.js.map +1 -0
- package/dist/rules/md044.d.ts +40 -0
- package/dist/rules/md044.d.ts.map +1 -0
- package/dist/rules/md044.js +167 -0
- package/dist/rules/md044.js.map +1 -0
- package/dist/rules/md045.d.ts +22 -0
- package/dist/rules/md045.d.ts.map +1 -0
- package/dist/rules/md045.js +57 -0
- package/dist/rules/md045.js.map +1 -0
- package/dist/rules/md046.d.ts +23 -0
- package/dist/rules/md046.d.ts.map +1 -0
- package/dist/rules/md046.js +174 -0
- package/dist/rules/md046.js.map +1 -0
- package/dist/rules/md047.d.ts +22 -0
- package/dist/rules/md047.d.ts.map +1 -0
- package/dist/rules/md047.js +35 -0
- package/dist/rules/md047.js.map +1 -0
- package/dist/rules/md048.d.ts +22 -0
- package/dist/rules/md048.d.ts.map +1 -0
- package/dist/rules/md048.js +80 -0
- package/dist/rules/md048.js.map +1 -0
- package/dist/rules/md049.d.ts +33 -0
- package/dist/rules/md049.d.ts.map +1 -0
- package/dist/rules/md049.js +189 -0
- package/dist/rules/md049.js.map +1 -0
- package/dist/rules/md050.d.ts +22 -0
- package/dist/rules/md050.d.ts.map +1 -0
- package/dist/rules/md050.js +32 -0
- package/dist/rules/md050.js.map +1 -0
- package/dist/rules/md051.d.ts +23 -0
- package/dist/rules/md051.d.ts.map +1 -0
- package/dist/rules/md051.js +63 -0
- package/dist/rules/md051.js.map +1 -0
- package/dist/rules/md052.d.ts +21 -0
- package/dist/rules/md052.d.ts.map +1 -0
- package/dist/rules/md052.js +71 -0
- package/dist/rules/md052.js.map +1 -0
- package/dist/rules/md053.d.ts +21 -0
- package/dist/rules/md053.d.ts.map +1 -0
- package/dist/rules/md053.js +95 -0
- package/dist/rules/md053.js.map +1 -0
- package/dist/rules/md054.d.ts +21 -0
- package/dist/rules/md054.d.ts.map +1 -0
- package/dist/rules/md054.js +87 -0
- package/dist/rules/md054.js.map +1 -0
- package/dist/rules/md055.d.ts +22 -0
- package/dist/rules/md055.d.ts.map +1 -0
- package/dist/rules/md055.js +157 -0
- package/dist/rules/md055.js.map +1 -0
- package/dist/rules/md056.d.ts +21 -0
- package/dist/rules/md056.d.ts.map +1 -0
- package/dist/rules/md056.js +154 -0
- package/dist/rules/md056.js.map +1 -0
- package/dist/rules/md058.d.ts +27 -0
- package/dist/rules/md058.d.ts.map +1 -0
- package/dist/rules/md058.js +71 -0
- package/dist/rules/md058.js.map +1 -0
- package/dist/rules/md059.d.ts +22 -0
- package/dist/rules/md059.d.ts.map +1 -0
- package/dist/rules/md059.js +161 -0
- package/dist/rules/md059.js.map +1 -0
- package/dist/rules/rule-interface.d.ts +51 -0
- package/dist/rules/rule-interface.d.ts.map +1 -0
- package/dist/rules/rule-interface.js +2 -0
- package/dist/rules/rule-interface.js.map +1 -0
- package/dist/server.d.ts +59 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +419 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/file.d.ts +39 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +124 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/logger.d.ts +61 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +85 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/safe-match.d.ts +4 -0
- package/dist/utils/safe-match.d.ts.map +1 -0
- package/dist/utils/safe-match.js +51 -0
- package/dist/utils/safe-match.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|