markdownlint 0.28.2 → 0.30.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 +17 -1
- package/CONTRIBUTING.md +6 -0
- package/README.md +8 -1
- package/demo/markdownlint-browser.js +896 -836
- package/doc/CustomRules.md +2 -0
- package/doc/Rules.md +33 -17
- package/doc/md022.md +12 -6
- package/doc/md026.md +1 -2
- package/doc/md049.md +2 -2
- package/doc/md050.md +2 -2
- package/doc/md051.md +17 -6
- package/helpers/helpers.js +83 -290
- package/helpers/micromark.cjs +163 -21
- package/helpers/package.json +2 -2
- package/helpers/shared.js +7 -0
- package/lib/cache.js +0 -2
- package/lib/constants.js +1 -1
- package/lib/markdownlint.d.ts +4 -0
- package/lib/markdownlint.js +21 -7
- package/lib/md022.js +80 -40
- package/lib/md026.js +19 -12
- package/lib/md032.js +57 -31
- package/lib/md033.js +19 -45
- package/lib/md034.js +30 -23
- package/lib/md037.js +74 -157
- package/lib/md038.js +1 -2
- package/lib/md044.js +34 -4
- package/lib/md045.js +17 -5
- package/lib/md049-md050.js +61 -48
- package/lib/md051.js +90 -68
- package/package.json +31 -29
- package/schema/.markdownlint.jsonc +3 -3
- package/schema/.markdownlint.yaml +3 -3
- package/schema/markdownlint-config-schema.json +19 -7
package/lib/md049-md050.js
CHANGED
|
@@ -2,54 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
"use strict";
|
|
4
4
|
|
|
5
|
-
const { addError, emphasisOrStrongStyleFor
|
|
6
|
-
|
|
5
|
+
const { addError, emphasisOrStrongStyleFor } = require("../helpers");
|
|
6
|
+
const { filterByTypes, tokenIfType } = require("../helpers/micromark.cjs");
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
(style === "
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
8
|
+
const intrawordRe = /\w/;
|
|
9
|
+
|
|
10
|
+
const impl =
|
|
11
|
+
(params, onError, type, asterisk, underline, style = "consistent") => {
|
|
12
|
+
const { lines, parsers } = params;
|
|
13
|
+
const emphasisTokens =
|
|
14
|
+
filterByTypes(parsers.micromark.tokens, [ type ]);
|
|
15
|
+
for (const token of emphasisTokens) {
|
|
16
|
+
const { children } = token;
|
|
17
|
+
const childType = `${type}Sequence`;
|
|
18
|
+
const startSequence = tokenIfType(children[0], childType);
|
|
19
|
+
const endSequence = tokenIfType(children[children.length - 1], childType);
|
|
20
|
+
if (startSequence && endSequence) {
|
|
21
|
+
const markupStyle = emphasisOrStrongStyleFor(startSequence.text);
|
|
22
|
+
if (style === "consistent") {
|
|
23
|
+
style = markupStyle;
|
|
24
|
+
}
|
|
25
|
+
if (style !== markupStyle) {
|
|
26
|
+
const underscoreIntraword = (style === "underscore") && (
|
|
27
|
+
intrawordRe.test(
|
|
28
|
+
lines[startSequence.startLine - 1][startSequence.startColumn - 2]
|
|
29
|
+
) ||
|
|
30
|
+
intrawordRe.test(
|
|
31
|
+
lines[endSequence.endLine - 1][endSequence.endColumn - 1]
|
|
32
|
+
)
|
|
33
|
+
);
|
|
34
|
+
if (!underscoreIntraword) {
|
|
35
|
+
for (const sequence of [ startSequence, endSequence ]) {
|
|
36
|
+
addError(
|
|
37
|
+
onError,
|
|
38
|
+
sequence.startLine,
|
|
39
|
+
`Expected: ${style}; Actual: ${markupStyle}`,
|
|
40
|
+
undefined,
|
|
41
|
+
[ sequence.startColumn, sequence.text.length ],
|
|
42
|
+
{
|
|
43
|
+
"editColumn": sequence.startColumn,
|
|
44
|
+
"deleteCount": sequence.text.length,
|
|
45
|
+
"insertText": (style === "asterisk") ? asterisk : underline
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
31
50
|
}
|
|
32
|
-
const instance = (instances.get(expected) || 0) + 1;
|
|
33
|
-
instances.set(expected, instance);
|
|
34
|
-
rangeAndFixInfo = getRangeAndFixInfoIfFound(
|
|
35
|
-
params.lines,
|
|
36
|
-
lineNumber - 1,
|
|
37
|
-
actual,
|
|
38
|
-
expected,
|
|
39
|
-
instance
|
|
40
|
-
);
|
|
41
51
|
}
|
|
42
|
-
addError(
|
|
43
|
-
onError,
|
|
44
|
-
lineNumber,
|
|
45
|
-
`Expected: ${style}; Actual: ${markupStyle}`,
|
|
46
|
-
null,
|
|
47
|
-
rangeAndFixInfo.range,
|
|
48
|
-
rangeAndFixInfo.fixInfo
|
|
49
|
-
);
|
|
50
52
|
}
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
+
};
|
|
53
54
|
|
|
54
55
|
module.exports = [
|
|
55
56
|
{
|
|
@@ -57,8 +58,14 @@ module.exports = [
|
|
|
57
58
|
"description": "Emphasis style should be consistent",
|
|
58
59
|
"tags": [ "emphasis" ],
|
|
59
60
|
"function": function MD049(params, onError) {
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
return impl(
|
|
62
|
+
params,
|
|
63
|
+
onError,
|
|
64
|
+
"emphasis",
|
|
65
|
+
"*",
|
|
66
|
+
"_",
|
|
67
|
+
params.config.style || undefined
|
|
68
|
+
);
|
|
62
69
|
}
|
|
63
70
|
},
|
|
64
71
|
{
|
|
@@ -66,8 +73,14 @@ module.exports = [
|
|
|
66
73
|
"description": "Strong style should be consistent",
|
|
67
74
|
"tags": [ "emphasis" ],
|
|
68
75
|
"function": function MD050(params, onError) {
|
|
69
|
-
|
|
70
|
-
|
|
76
|
+
return impl(
|
|
77
|
+
params,
|
|
78
|
+
onError,
|
|
79
|
+
"strong",
|
|
80
|
+
"**",
|
|
81
|
+
"__",
|
|
82
|
+
params.config.style || undefined
|
|
83
|
+
);
|
|
71
84
|
}
|
|
72
85
|
}
|
|
73
86
|
];
|
package/lib/md051.js
CHANGED
|
@@ -2,25 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
"use strict";
|
|
4
4
|
|
|
5
|
-
const { addError, addErrorDetailIf
|
|
6
|
-
|
|
5
|
+
const { addError, addErrorDetailIf } = require("../helpers");
|
|
6
|
+
const { filterByHtmlTokens, filterByTypes, getHtmlTagInfo } =
|
|
7
|
+
require("../helpers/micromark.cjs");
|
|
7
8
|
|
|
8
9
|
// Regular expression for identifying HTML anchor names
|
|
9
10
|
const idRe = /\sid\s*=\s*['"]?([^'"\s>]+)/iu;
|
|
10
11
|
const nameRe = /\sname\s*=\s*['"]?([^'"\s>]+)/iu;
|
|
12
|
+
const anchorRe = /\{(#[a-z\d]+(?:[-_][a-z\d]+)*)\}/gu;
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Converts a Markdown heading into an HTML fragment according to the rules
|
|
14
16
|
* used by GitHub.
|
|
15
17
|
*
|
|
16
|
-
* @param {Object}
|
|
18
|
+
* @param {Object} headingText Heading text token.
|
|
17
19
|
* @returns {string} Fragment string for heading.
|
|
18
20
|
*/
|
|
19
|
-
function convertHeadingToHTMLFragment(
|
|
20
|
-
const inlineText =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
function convertHeadingToHTMLFragment(headingText) {
|
|
22
|
+
const inlineText =
|
|
23
|
+
filterByTypes(headingText.children, [ "codeTextData", "data" ])
|
|
24
|
+
.map((token) => token.text)
|
|
25
|
+
.join("");
|
|
24
26
|
return "#" + encodeURIComponent(
|
|
25
27
|
inlineText
|
|
26
28
|
.toLowerCase()
|
|
@@ -41,79 +43,99 @@ module.exports = {
|
|
|
41
43
|
"description": "Link fragments should be valid",
|
|
42
44
|
"tags": [ "links" ],
|
|
43
45
|
"function": function MD051(params, onError) {
|
|
46
|
+
const { tokens } = params.parsers.micromark;
|
|
44
47
|
const fragments = new Map();
|
|
48
|
+
|
|
45
49
|
// Process headings
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
const headingTexts = filterByTypes(
|
|
51
|
+
tokens,
|
|
52
|
+
[ "atxHeadingText", "setextHeadingText" ]
|
|
53
|
+
);
|
|
54
|
+
for (const headingText of headingTexts) {
|
|
55
|
+
const fragment = convertHeadingToHTMLFragment(headingText);
|
|
48
56
|
const count = fragments.get(fragment) || 0;
|
|
49
57
|
if (count) {
|
|
50
58
|
fragments.set(`${fragment}-${count}`, 0);
|
|
51
59
|
}
|
|
52
60
|
fragments.set(fragment, count + 1);
|
|
53
|
-
});
|
|
54
|
-
// Process HTML anchors
|
|
55
|
-
const processHtmlToken = (token) => {
|
|
56
61
|
let match = null;
|
|
57
|
-
while ((match =
|
|
58
|
-
const [
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
while ((match = anchorRe.exec(headingText.text)) !== null) {
|
|
63
|
+
const [ , anchor ] = match;
|
|
64
|
+
if (!fragments.has(anchor)) {
|
|
65
|
+
fragments.set(anchor, 1);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Process HTML anchors
|
|
71
|
+
for (const token of filterByHtmlTokens(tokens)) {
|
|
72
|
+
const htmlTagInfo = getHtmlTagInfo(token);
|
|
73
|
+
if (htmlTagInfo && !htmlTagInfo.close) {
|
|
74
|
+
const anchorMatch = idRe.exec(token.text) ||
|
|
75
|
+
(htmlTagInfo.name.toLowerCase() === "a" && nameRe.exec(token.text));
|
|
61
76
|
if (anchorMatch) {
|
|
62
77
|
fragments.set(`#${anchorMatch[1]}`, 0);
|
|
63
78
|
}
|
|
64
79
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
mixedCaseKey
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Process link and definition fragments
|
|
83
|
+
const parentChilds = [
|
|
84
|
+
[ "link", "resourceDestinationString" ],
|
|
85
|
+
[ "definition", "definitionDestinationString" ]
|
|
86
|
+
];
|
|
87
|
+
for (const [ parentType, definitionType ] of parentChilds) {
|
|
88
|
+
const links = filterByTypes(tokens, [ parentType ]);
|
|
89
|
+
for (const link of links) {
|
|
90
|
+
const definitions = filterByTypes(link.children, [ definitionType ]);
|
|
91
|
+
for (const definition of definitions) {
|
|
92
|
+
if (
|
|
93
|
+
(definition.text.length > 1) &&
|
|
94
|
+
definition.text.startsWith("#") &&
|
|
95
|
+
!fragments.has(definition.text)
|
|
96
|
+
) {
|
|
97
|
+
// eslint-disable-next-line no-undef-init
|
|
98
|
+
let context = undefined;
|
|
99
|
+
// eslint-disable-next-line no-undef-init
|
|
100
|
+
let range = undefined;
|
|
101
|
+
// eslint-disable-next-line no-undef-init
|
|
102
|
+
let fixInfo = undefined;
|
|
103
|
+
if (link.startLine === link.endLine) {
|
|
104
|
+
context = link.text;
|
|
105
|
+
range = [ link.startColumn, link.endColumn - link.startColumn ];
|
|
106
|
+
fixInfo = {
|
|
107
|
+
"editColumn": definition.startColumn,
|
|
108
|
+
"deleteCount": definition.endColumn - definition.startColumn
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const definitionTextLower = definition.text.toLowerCase();
|
|
112
|
+
const mixedCaseKey = [ ...fragments.keys() ]
|
|
113
|
+
.find((key) => definitionTextLower === key.toLowerCase());
|
|
114
|
+
if (mixedCaseKey) {
|
|
115
|
+
// @ts-ignore
|
|
116
|
+
(fixInfo || {}).insertText = mixedCaseKey;
|
|
117
|
+
addErrorDetailIf(
|
|
118
|
+
onError,
|
|
119
|
+
link.startLine,
|
|
120
|
+
mixedCaseKey,
|
|
121
|
+
definition.text,
|
|
122
|
+
undefined,
|
|
123
|
+
context,
|
|
124
|
+
range,
|
|
125
|
+
fixInfo
|
|
126
|
+
);
|
|
127
|
+
} else {
|
|
128
|
+
addError(
|
|
129
|
+
onError,
|
|
130
|
+
link.startLine,
|
|
131
|
+
undefined,
|
|
132
|
+
context,
|
|
133
|
+
range
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
115
137
|
}
|
|
116
138
|
}
|
|
117
|
-
}
|
|
139
|
+
}
|
|
118
140
|
}
|
|
119
141
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "markdownlint",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.30.0",
|
|
4
4
|
"description": "A Node.js style checker and lint tool for Markdown/CommonMark files.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./lib/markdownlint.js",
|
|
@@ -26,74 +26,76 @@
|
|
|
26
26
|
"build-config-example": "node schema/build-config-example.js",
|
|
27
27
|
"build-config-schema": "node schema/build-config-schema.js",
|
|
28
28
|
"build-declaration": "tsc --allowJs --declaration --emitDeclarationOnly --module commonjs --resolveJsonModule --target es2015 lib/markdownlint.js && node scripts delete 'lib/{c,md,r}*.d.ts' 'micromark/*.d.cts' 'helpers/*.d.{cts,ts}'",
|
|
29
|
-
"build-demo": "node scripts copy node_modules/markdown-it/dist/markdown-it.min.js demo/markdown-it.min.js && node scripts copy node_modules/markdownlint-micromark/micromark-browser.js demo/micromark-browser.js && cd demo && webpack --no-stats",
|
|
29
|
+
"build-demo": "node scripts copy node_modules/markdown-it/dist/markdown-it.min.js demo/markdown-it.min.js && node scripts copy node_modules/markdownlint-micromark/micromark-browser.js demo/micromark-browser.js && node scripts copy node_modules/markdownlint-micromark/micromark-html-browser.js demo/micromark-html-browser.js && cd demo && webpack --no-stats",
|
|
30
30
|
"build-docs": "node doc-build/build-rules.mjs",
|
|
31
31
|
"build-example": "npm install --no-save --ignore-scripts grunt grunt-cli gulp through2",
|
|
32
32
|
"build-micromark": "cd micromark && npm run build",
|
|
33
33
|
"ci": "npm-run-all --continue-on-error --parallel lint serial-config-docs serial-declaration-demo test-cover && git diff --exit-code",
|
|
34
34
|
"clone-test-repos-apache-airflow": "cd test-repos && git clone https://github.com/apache/airflow apache-airflow --depth 1 --no-tags --quiet",
|
|
35
35
|
"clone-test-repos-dotnet-docs": "cd test-repos && git clone https://github.com/dotnet/docs dotnet-docs --depth 1 --no-tags --quiet",
|
|
36
|
-
"clone-test-repos-electron-electron": "cd test-repos && git clone https://github.com/electron/electron electron-electron --depth 1 --no-tags --quiet",
|
|
36
|
+
"clone-test-repos-electron-electron": "cd test-repos && git clone https://github.com/electron/electron electron-electron --depth 1 --no-tags --quiet && cd electron-electron && npm install --ignore-scripts @electron/lint-roller typescript@4",
|
|
37
37
|
"clone-test-repos-eslint-eslint": "cd test-repos && git clone https://github.com/eslint/eslint eslint-eslint --depth 1 --no-tags --quiet",
|
|
38
38
|
"clone-test-repos-mdn-content": "cd test-repos && git clone https://github.com/mdn/content mdn-content --depth 1 --no-tags --quiet",
|
|
39
|
-
"clone-test-repos-mdn-translated-content": "cd test-repos && git clone https://github.com/mdn/translated-content mdn-translated-content --depth 1 --no-tags --quiet",
|
|
40
39
|
"clone-test-repos-mkdocs-mkdocs": "cd test-repos && git clone https://github.com/mkdocs/mkdocs mkdocs-mkdocs --depth 1 --no-tags --quiet",
|
|
41
40
|
"clone-test-repos-mochajs-mocha": "cd test-repos && git clone https://github.com/mochajs/mocha mochajs-mocha --depth 1 --no-tags --quiet",
|
|
42
41
|
"clone-test-repos-pi-hole-docs": "cd test-repos && git clone https://github.com/pi-hole/docs pi-hole-docs --depth 1 --no-tags --quiet",
|
|
43
42
|
"clone-test-repos-v8-v8-dev": "cd test-repos && git clone https://github.com/v8/v8.dev v8-v8-dev --depth 1 --no-tags --quiet",
|
|
44
43
|
"clone-test-repos-webhintio-hint": "cd test-repos && git clone https://github.com/webhintio/hint webhintio-hint --depth 1 --no-tags --quiet",
|
|
45
44
|
"clone-test-repos-webpack-webpack-js-org": "cd test-repos && git clone https://github.com/webpack/webpack.js.org webpack-webpack-js-org --depth 1 --no-tags --quiet",
|
|
46
|
-
"clone-test-repos": "mkdir test-repos && cd test-repos && npm run clone-test-repos-apache-airflow && npm run clone-test-repos-dotnet-docs && npm run clone-test-repos-electron-electron && npm run clone-test-repos-eslint-eslint && npm run clone-test-repos-mdn-content && npm run clone-test-repos-
|
|
45
|
+
"clone-test-repos": "mkdir test-repos && cd test-repos && npm run clone-test-repos-apache-airflow && npm run clone-test-repos-dotnet-docs && npm run clone-test-repos-electron-electron && npm run clone-test-repos-eslint-eslint && npm run clone-test-repos-mdn-content && npm run clone-test-repos-mkdocs-mkdocs && npm run clone-test-repos-mochajs-mocha && npm run clone-test-repos-pi-hole-docs && npm run clone-test-repos-v8-v8-dev && npm run clone-test-repos-webhintio-hint && npm run clone-test-repos-webpack-webpack-js-org",
|
|
47
46
|
"declaration": "npm run build-declaration && npm run test-declaration",
|
|
48
47
|
"example": "cd example && node standalone.js && grunt markdownlint --force && gulp markdownlint",
|
|
49
|
-
"docker-npm-install": "docker run --rm --tty --name npm-install --volume $PWD:/home/workdir --workdir /home/workdir --user node node:
|
|
50
|
-
"docker-npm-run-upgrade": "docker run --rm --tty --name npm-run-upgrade --volume $PWD:/home/workdir --workdir /home/workdir --user node node:
|
|
48
|
+
"docker-npm-install": "docker run --rm --tty --name npm-install --volume $PWD:/home/workdir --workdir /home/workdir --user node node:latest npm install",
|
|
49
|
+
"docker-npm-run-upgrade": "docker run --rm --tty --name npm-run-upgrade --volume $PWD:/home/workdir --workdir /home/workdir --user node node:latest npm run upgrade",
|
|
50
|
+
"install-micromark": "cd micromark && npm install --no-package-lock",
|
|
51
51
|
"lint": "eslint --ext .js,.cjs,.mjs --max-warnings 0 .",
|
|
52
52
|
"lint-test-repos": "ava --timeout=10m test/markdownlint-test-repos.js",
|
|
53
53
|
"serial-config-docs": "npm run build-config && npm run build-docs",
|
|
54
54
|
"serial-declaration-demo": "npm run build-declaration && npm-run-all --continue-on-error --parallel build-demo test-declaration",
|
|
55
55
|
"test": "ava test/markdownlint-test.js test/markdownlint-test-config.js test/markdownlint-test-custom-rules.js test/markdownlint-test-helpers.js test/markdownlint-test-micromark.mjs test/markdownlint-test-result-object.js test/markdownlint-test-scenarios.js",
|
|
56
|
-
"test-cover": "c8 --
|
|
56
|
+
"test-cover": "c8 --100 npm test",
|
|
57
57
|
"test-declaration": "cd example/typescript && tsc && node type-check.js",
|
|
58
58
|
"test-extra": "ava --timeout=5m test/markdownlint-test-extra-parse.js test/markdownlint-test-extra-type.js",
|
|
59
59
|
"update-snapshots": "ava --update-snapshots test/markdownlint-test-micromark.mjs test/markdownlint-test-scenarios.js",
|
|
60
|
+
"update-snapshots-test-repos": "ava --timeout=10m --update-snapshots test/markdownlint-test-repos.js",
|
|
60
61
|
"upgrade": "npx --yes npm-check-updates --upgrade"
|
|
61
62
|
},
|
|
62
63
|
"engines": {
|
|
63
|
-
"node": ">=
|
|
64
|
+
"node": ">=16"
|
|
64
65
|
},
|
|
65
66
|
"dependencies": {
|
|
66
67
|
"markdown-it": "13.0.1",
|
|
67
|
-
"markdownlint-micromark": "0.1.
|
|
68
|
+
"markdownlint-micromark": "0.1.7"
|
|
68
69
|
},
|
|
69
70
|
"devDependencies": {
|
|
70
|
-
"
|
|
71
|
-
"babel-
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"c8": "
|
|
75
|
-
"
|
|
71
|
+
"@babel/core": "7.22.10",
|
|
72
|
+
"@babel/preset-env": "7.22.10",
|
|
73
|
+
"ava": "5.3.1",
|
|
74
|
+
"babel-loader": "9.1.3",
|
|
75
|
+
"c8": "8.0.1",
|
|
76
|
+
"character-entities": "2.0.2",
|
|
77
|
+
"eslint": "8.46.0",
|
|
76
78
|
"eslint-plugin-es": "4.1.0",
|
|
77
|
-
"eslint-plugin-jsdoc": "
|
|
78
|
-
"eslint-plugin-n": "
|
|
79
|
-
"eslint-plugin-regexp": "1.
|
|
80
|
-
"eslint-plugin-unicorn": "
|
|
81
|
-
"
|
|
79
|
+
"eslint-plugin-jsdoc": "46.4.6",
|
|
80
|
+
"eslint-plugin-n": "16.0.1",
|
|
81
|
+
"eslint-plugin-regexp": "1.15.0",
|
|
82
|
+
"eslint-plugin-unicorn": "48.0.1",
|
|
83
|
+
"gemoji": "8.1.0",
|
|
84
|
+
"globby": "13.2.2",
|
|
82
85
|
"js-yaml": "4.1.0",
|
|
83
86
|
"markdown-it-for-inline": "0.1.1",
|
|
84
87
|
"markdown-it-sub": "1.0.0",
|
|
85
88
|
"markdown-it-sup": "1.0.0",
|
|
86
|
-
"
|
|
87
|
-
"markdownlint-rule-helpers": "0.19.0",
|
|
89
|
+
"markdownlint-rule-helpers": "0.20.0",
|
|
88
90
|
"npm-run-all": "4.1.5",
|
|
89
|
-
"strip-json-comments": "5.0.
|
|
90
|
-
"terser-webpack-plugin": "5.3.
|
|
91
|
+
"strip-json-comments": "5.0.1",
|
|
92
|
+
"terser-webpack-plugin": "5.3.9",
|
|
91
93
|
"toml": "3.0.0",
|
|
92
94
|
"tv4": "1.3.0",
|
|
93
|
-
"typescript": "5.
|
|
94
|
-
"webpack": "5.
|
|
95
|
-
"webpack-cli": "5.
|
|
96
|
-
"yaml": "2.
|
|
95
|
+
"typescript": "5.1.6",
|
|
96
|
+
"webpack": "5.88.2",
|
|
97
|
+
"webpack-cli": "5.1.4",
|
|
98
|
+
"yaml": "2.3.1"
|
|
97
99
|
},
|
|
98
100
|
"keywords": [
|
|
99
101
|
"markdown",
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
|
|
140
140
|
// MD026/no-trailing-punctuation - Trailing punctuation in heading
|
|
141
141
|
"MD026": {
|
|
142
|
-
// Punctuation characters
|
|
142
|
+
// Punctuation characters
|
|
143
143
|
"punctuation": ".,;:!。,;:!"
|
|
144
144
|
},
|
|
145
145
|
|
|
@@ -265,13 +265,13 @@
|
|
|
265
265
|
|
|
266
266
|
// MD049/emphasis-style - Emphasis style should be consistent
|
|
267
267
|
"MD049": {
|
|
268
|
-
// Emphasis style
|
|
268
|
+
// Emphasis style
|
|
269
269
|
"style": "consistent"
|
|
270
270
|
},
|
|
271
271
|
|
|
272
272
|
// MD050/strong-style - Strong style should be consistent
|
|
273
273
|
"MD050": {
|
|
274
|
-
// Strong style
|
|
274
|
+
// Strong style
|
|
275
275
|
"style": "consistent"
|
|
276
276
|
},
|
|
277
277
|
|
|
@@ -127,7 +127,7 @@ MD025:
|
|
|
127
127
|
|
|
128
128
|
# MD026/no-trailing-punctuation - Trailing punctuation in heading
|
|
129
129
|
MD026:
|
|
130
|
-
# Punctuation characters
|
|
130
|
+
# Punctuation characters
|
|
131
131
|
punctuation: ".,;:!。,;:!"
|
|
132
132
|
|
|
133
133
|
# MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol
|
|
@@ -240,12 +240,12 @@ MD048:
|
|
|
240
240
|
|
|
241
241
|
# MD049/emphasis-style - Emphasis style should be consistent
|
|
242
242
|
MD049:
|
|
243
|
-
# Emphasis style
|
|
243
|
+
# Emphasis style
|
|
244
244
|
style: "consistent"
|
|
245
245
|
|
|
246
246
|
# MD050/strong-style - Strong style should be consistent
|
|
247
247
|
MD050:
|
|
248
|
-
# Strong style
|
|
248
|
+
# Strong style
|
|
249
249
|
style: "consistent"
|
|
250
250
|
|
|
251
251
|
# MD051/link-fragments - Link fragments should be valid
|
|
@@ -361,14 +361,26 @@
|
|
|
361
361
|
"properties": {
|
|
362
362
|
"lines_above": {
|
|
363
363
|
"description": "Blank lines above heading",
|
|
364
|
-
"type":
|
|
365
|
-
|
|
364
|
+
"type": [
|
|
365
|
+
"integer",
|
|
366
|
+
"array"
|
|
367
|
+
],
|
|
368
|
+
"items": {
|
|
369
|
+
"type": "integer"
|
|
370
|
+
},
|
|
371
|
+
"minimum": -1,
|
|
366
372
|
"default": 1
|
|
367
373
|
},
|
|
368
374
|
"lines_below": {
|
|
369
375
|
"description": "Blank lines below heading",
|
|
370
|
-
"type":
|
|
371
|
-
|
|
376
|
+
"type": [
|
|
377
|
+
"integer",
|
|
378
|
+
"array"
|
|
379
|
+
],
|
|
380
|
+
"items": {
|
|
381
|
+
"type": "integer"
|
|
382
|
+
},
|
|
383
|
+
"minimum": -1,
|
|
372
384
|
"default": 1
|
|
373
385
|
}
|
|
374
386
|
},
|
|
@@ -456,7 +468,7 @@
|
|
|
456
468
|
"default": true,
|
|
457
469
|
"properties": {
|
|
458
470
|
"punctuation": {
|
|
459
|
-
"description": "Punctuation characters
|
|
471
|
+
"description": "Punctuation characters",
|
|
460
472
|
"type": "string",
|
|
461
473
|
"default": ".,;:!。,;:!"
|
|
462
474
|
}
|
|
@@ -876,7 +888,7 @@
|
|
|
876
888
|
"default": true,
|
|
877
889
|
"properties": {
|
|
878
890
|
"style": {
|
|
879
|
-
"description": "Emphasis style
|
|
891
|
+
"description": "Emphasis style",
|
|
880
892
|
"type": "string",
|
|
881
893
|
"enum": [
|
|
882
894
|
"consistent",
|
|
@@ -900,7 +912,7 @@
|
|
|
900
912
|
"default": true,
|
|
901
913
|
"properties": {
|
|
902
914
|
"style": {
|
|
903
|
-
"description": "Strong style
|
|
915
|
+
"description": "Strong style",
|
|
904
916
|
"type": "string",
|
|
905
917
|
"enum": [
|
|
906
918
|
"consistent",
|