From 7c796b1f60f6cda0c97da0f0cad4d479a750b389 Mon Sep 17 00:00:00 2001 From: David Anson Date: Sat, 4 Jan 2025 18:02:26 -0800 Subject: [PATCH 01/10] Remove "del" dependency from tests, simplify use of "cpy" dependency in tests. --- package.json | 1 - test/markdownlint-cli2-test-cases.mjs | 16 +++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 65a9ac18..b90935ca 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,6 @@ "chalk": "5.4.1", "cpy": "11.1.0", "cpy-cli": "5.0.0", - "del": "8.0.0", "eslint": "9.17.0", "eslint-plugin-jsdoc": "50.6.1", "eslint-plugin-n": "17.15.1", diff --git a/test/markdownlint-cli2-test-cases.mjs b/test/markdownlint-cli2-test-cases.mjs index cd0278fe..8aa68c45 100644 --- a/test/markdownlint-cli2-test-cases.mjs +++ b/test/markdownlint-cli2-test-cases.mjs @@ -4,6 +4,7 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import test from "ava"; +import cpy from "cpy"; import { __dirname } from "./esm-helpers.mjs"; const noop = () => null; @@ -140,16 +141,13 @@ const testCases = ({ const directoryName = (dir) => `${dir}-copy-${host}`; - const copyDirectory = (dir, alt) => import("cpy").then((cpy) => ( - cpy.default( - path.join(__dirname(import.meta), (alt || dir), "**"), - path.join(__dirname(import.meta), directoryName(dir)) - ) - )); + const copyDirectory = (dir, alt) => cpy( + path.join(__dirname(import.meta), (alt || dir), "**"), + path.join(__dirname(import.meta), directoryName(dir)) + ); - const deleteDirectory = (dir) => import("del").then((del) => ( - del.deleteAsync(path.join(__dirname(import.meta), directoryName(dir))) - )); + const deleteDirectory = (dir) => + fs.rm(path.join(__dirname(import.meta), directoryName(dir)), { "recursive": true }); testCase({ "name": "no-arguments", From 086599a9533424ca5de85d8573d4a44d0c04e63c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:56:59 +0000 Subject: [PATCH 02/10] Bump eslint from 9.17.0 to 9.18.0 Bumps [eslint](https://github.com/eslint/eslint) from 9.17.0 to 9.18.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.17.0...v9.18.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b90935ca..52e2a3a7 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "chalk": "5.4.1", "cpy": "11.1.0", "cpy-cli": "5.0.0", - "eslint": "9.17.0", + "eslint": "9.18.0", "eslint-plugin-jsdoc": "50.6.1", "eslint-plugin-n": "17.15.1", "eslint-plugin-unicorn": "56.0.1", From ee02ae5caf1f9de1607c716233c2dd70da7e3e8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:57:06 +0000 Subject: [PATCH 03/10] Bump @stylistic/eslint-plugin from 2.12.1 to 2.13.0 Bumps [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin) from 2.12.1 to 2.13.0. - [Release notes](https://github.com/eslint-stylistic/eslint-stylistic/releases) - [Changelog](https://github.com/eslint-stylistic/eslint-stylistic/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint-stylistic/eslint-stylistic/commits/v2.13.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@stylistic/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 52e2a3a7..8c353dae 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@eslint/js": "9.17.0", "@iktakahiro/markdown-it-katex": "4.0.1", "@playwright/test": "1.49.1", - "@stylistic/eslint-plugin": "2.12.1", + "@stylistic/eslint-plugin": "2.13.0", "ajv": "8.17.1", "ava": "6.2.0", "c8": "10.1.3", From 5ba87b85654fbcbdf6777c7ff831f8c7b49b972c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:57:14 +0000 Subject: [PATCH 04/10] Bump @eslint/js from 9.17.0 to 9.18.0 Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.17.0 to 9.18.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.18.0/packages/js) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c353dae..7b6b4db6 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "micromatch": "4.0.8" }, "devDependencies": { - "@eslint/js": "9.17.0", + "@eslint/js": "9.18.0", "@iktakahiro/markdown-it-katex": "4.0.1", "@playwright/test": "1.49.1", "@stylistic/eslint-plugin": "2.13.0", From 5e1fbe998d7c4cb357926857ae6256d20b736f0e Mon Sep 17 00:00:00 2001 From: David Anson Date: Mon, 13 Jan 2025 22:19:22 -0800 Subject: [PATCH 05/10] Update every-n-lines custom rule to not use outdated forEachLine helper. --- test/customRules/rules/every-n-lines.cjs | 18 +++++++----------- test/customRules/rules/first-line.cjs | 1 + test/customRules/rules/second-line.cjs | 2 ++ .../markdownlint-cli2-test-exec.mjs.md | 16 ++++++++++------ .../markdownlint-cli2-test-exec.mjs.snap | Bin 18546 -> 18563 bytes .../markdownlint-cli2-test-main.mjs.md | 16 ++++++++++------ .../markdownlint-cli2-test-main.mjs.snap | Bin 14403 -> 14425 bytes 7 files changed, 30 insertions(+), 23 deletions(-) diff --git a/test/customRules/rules/every-n-lines.cjs b/test/customRules/rules/every-n-lines.cjs index 5c79f0ab..3b5d5466 100644 --- a/test/customRules/rules/every-n-lines.cjs +++ b/test/customRules/rules/every-n-lines.cjs @@ -2,22 +2,18 @@ "use strict"; -const { forEachLine, getLineMetadata } = require("markdownlint/helpers"); - +/** @type {import("markdownlint").Rule} */ module.exports = { "names": [ "every-n-lines" ], "description": "Rule that reports an error every N lines", "tags": [ "test" ], "function": (params, onError) => { const n = params.config.n || 2; - forEachLine(getLineMetadata(params), (line, lineIndex) => { - const lineNumber = lineIndex + 1; - if ((lineNumber % n) === 0) { - onError({ - "lineNumber": lineNumber, - "detail": "Line number " + lineNumber - }); - } - }); + for (let lineNumber = n; lineNumber <= params.lines.length; lineNumber += n) { + onError({ + lineNumber, + "detail": `Line number ${lineNumber}` + }); + } } }; diff --git a/test/customRules/rules/first-line.cjs b/test/customRules/rules/first-line.cjs index 6974d2fb..e566e9d4 100644 --- a/test/customRules/rules/first-line.cjs +++ b/test/customRules/rules/first-line.cjs @@ -2,6 +2,7 @@ "use strict"; +/** @type {import("markdownlint").Rule} */ module.exports = { "names": [ "first-line" ], "description": "Rule that reports an error for the first line", diff --git a/test/customRules/rules/second-line.cjs b/test/customRules/rules/second-line.cjs index 2b8541d5..c4c7bc65 100644 --- a/test/customRules/rules/second-line.cjs +++ b/test/customRules/rules/second-line.cjs @@ -2,6 +2,7 @@ "use strict"; +/** @type {import("markdownlint").Rule} */ module.exports = { "names": [ "second-line" ], "description": "Rule that reports an error for the second line", @@ -15,6 +16,7 @@ module.exports = { "lineNumber": 2 }); } + // @ts-ignore resolve(); }); } diff --git a/test/snapshots/markdownlint-cli2-test-exec.mjs.md b/test/snapshots/markdownlint-cli2-test-exec.mjs.md index 314fb669..0c50933e 100644 --- a/test/snapshots/markdownlint-cli2-test-exec.mjs.md +++ b/test/snapshots/markdownlint-cli2-test-exec.mjs.md @@ -2691,12 +2691,13 @@ Generated by [AVA](https://avajs.dev). formatterJson: '', formatterJunit: '', formatterSarif: '', - stderr: `dir/about.md:1 every-n-lines Rule that reports an error every N lines [This rule threw an exception: getLineMetadata is not a function]␊ - dir/about.md:1 first-line Rule that reports an error for the first line␊ + stderr: `dir/about.md:1 first-line Rule that reports an error for the first line␊ dir/about.md:1:3 MD021/no-multiple-space-closed-atx Multiple spaces inside hashes on closed atx style heading [Context: "# About #"]␊ dir/about.md:1:10 MD021/no-multiple-space-closed-atx Multiple spaces inside hashes on closed atx style heading [Context: "# About #"]␊ + dir/about.md:3 every-n-lines Rule that reports an error every N lines [Line number 3]␊ dir/about.md:4 MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "1. List"]␊ dir/about.md:5:1 MD029/ol-prefix Ordered list item prefix [Expected: 2; Actual: 3; Style: 1/2/3]␊ + dir/about.md:6 every-n-lines Rule that reports an error every N lines [Line number 6]␊ dir/subdir/hr.md:1:6 extended-ascii Only extended ASCII characters are allowed [Blocked character: '✅']␊ dir/subdir/hr.md:1 first-line Rule that reports an error for the first line␊ dir/subdir/hr.md:3 sample-rule-commonjs Sample rule (commonjs) [Sample error for hr]␊ @@ -2712,34 +2713,37 @@ Generated by [AVA](https://avajs.dev). dir/subdir2/info.md:2:6 MD038/no-space-in-code Spaces inside code span elements [Context: "\` code1\`"]␊ dir/subdir2/info.md:2:20 MD038/no-space-in-code Spaces inside code span elements [Context: "\`code2 \`"]␊ dir/subdir2/info.md:4 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ - dir/subdir3/info.md:1 every-n-lines Rule that reports an error every N lines [This rule threw an exception: getLineMetadata is not a function]␊ dir/subdir3/info.md:1 first-line Rule that reports an error for the first line␊ dir/subdir3/info.md:1 MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Information"]␊ dir/subdir3/info.md:1 MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "## Information"]␊ dir/subdir3/info.md:2:6 MD038/no-space-in-code Spaces inside code span elements [Context: "\` code1\`"]␊ dir/subdir3/info.md:2:20 MD038/no-space-in-code Spaces inside code span elements [Context: "\`code2 \`"]␊ + dir/subdir3/info.md:3 every-n-lines Rule that reports an error every N lines [Line number 3]␊ dir/subdir3/info.md:4 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ dir2/hr.md:3 sample-rule-commonjs Sample rule (commonjs) [Sample error for hr]␊ dir2/hr.md:3 sample-rule-module Sample rule (module) [Sample error for hr]␊ - dir3/hr.md:1 every-n-lines Rule that reports an error every N lines [This rule threw an exception: getLineMetadata is not a function]␊ dir3/hr.md:1 first-line Rule that reports an error for the first line␊ dir3/hr.md:2 second-line Rule that reports an error for the second line␊ + dir3/hr.md:3 every-n-lines Rule that reports an error every N lines [Line number 3]␊ dir3/hr.md:3 sample-rule-commonjs Sample rule (commonjs) [Sample error for hr]␊ dir3/hr.md:3 sample-rule-module Sample rule (module) [Sample error for hr]␊ dir4/hr.md:3 sample-rule-commonjs Sample rule (commonjs) [Sample error for hr]␊ dir4/hr.md:3 sample-rule-module Sample rule (module) [Sample error for hr]␊ - viewme.md:1 every-n-lines Rule that reports an error every N lines [This rule threw an exception: getLineMetadata is not a function]␊ viewme.md:1 first-line Rule that reports an error for the first line␊ viewme.md:3 any-blockquote Rule that reports an error for any blockquote [Blockquote spans 1 line(s).] [Context: "> Tagli"]␊ + viewme.md:3 every-n-lines Rule that reports an error every N lines [Line number 3]␊ viewme.md:3:10 MD009/no-trailing-spaces Trailing spaces [Expected: 0 or 2; Actual: 1]␊ viewme.md:5 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ + viewme.md:6 every-n-lines Rule that reports an error every N lines [Line number 6]␊ viewme.md:6 MD025/single-title/single-h1 Multiple top-level headings in the same document [Context: "Description"]␊ + viewme.md:9 every-n-lines Rule that reports an error every N lines [Line number 9]␊ + viewme.md:12 every-n-lines Rule that reports an error every N lines [Line number 12]␊ viewme.md:12:4 MD019/no-multiple-space-atx Multiple spaces after hash on atx style heading [Context: "## Summary"]␊ viewme.md:14:14 MD047/single-trailing-newline Files should end with a single newline character`, stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊ Finding: **/*.md␊ Linting: 9 file(s)␊ - Summary: 45 error(s)`, + Summary: 49 error(s)`, } ## customRules-pre-imported (exec) diff --git a/test/snapshots/markdownlint-cli2-test-exec.mjs.snap b/test/snapshots/markdownlint-cli2-test-exec.mjs.snap index b09248bc12242a39b2b17fc62240e84880f83fba..fb5d83b280cd365b840deb605042f899d6e2b2b1 100644 GIT binary patch delta 16136 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 TxD}jVKfpMeBk0uOU_k!|p2#1a delta 15975 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 Tagli"]␊ + viewme.md:3 every-n-lines Rule that reports an error every N lines [Line number 3]␊ viewme.md:3:10 MD009/no-trailing-spaces Trailing spaces [Expected: 0 or 2; Actual: 1]␊ viewme.md:5 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ + viewme.md:6 every-n-lines Rule that reports an error every N lines [Line number 6]␊ viewme.md:6 MD025/single-title/single-h1 Multiple top-level headings in the same document [Context: "Description"]␊ + viewme.md:9 every-n-lines Rule that reports an error every N lines [Line number 9]␊ + viewme.md:12 every-n-lines Rule that reports an error every N lines [Line number 12]␊ viewme.md:12:4 MD019/no-multiple-space-atx Multiple spaces after hash on atx style heading [Context: "## Summary"]␊ viewme.md:14:14 MD047/single-trailing-newline Files should end with a single newline character␊ `, stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊ Finding: **/*.md␊ Linting: 9 file(s)␊ - Summary: 45 error(s)␊ + Summary: 49 error(s)␊ `, } diff --git a/test/snapshots/markdownlint-cli2-test-main.mjs.snap b/test/snapshots/markdownlint-cli2-test-main.mjs.snap index f78e8cf13ced0b3199fc9560670388a2107a5490..90f39ef6d1fc5af3edfde29d70a0160fbaef348a 100644 GIT binary patch literal 14425 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 J4GRJC-vEi{@Sp$y literal 14403 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 B%@hCt From 6a515c00abd8d605e29ccac0518887d0fbe00945 Mon Sep 17 00:00:00 2001 From: David Anson Date: Tue, 14 Jan 2025 23:57:34 -0800 Subject: [PATCH 06/10] Update dependency: markdownlint to 0.37.4. --- doc/OutputFormatters.md | 2 +- package.json | 2 +- schema/markdownlint-cli2-config-schema.json | 4 +- schema/markdownlint-config-schema.json | 212 ++++++++++---------- 4 files changed, 110 insertions(+), 110 deletions(-) diff --git a/doc/OutputFormatters.md b/doc/OutputFormatters.md index d7ffcd2c..b562b164 100644 --- a/doc/OutputFormatters.md +++ b/doc/OutputFormatters.md @@ -63,4 +63,4 @@ For a `.markdownlint-cli2.jsonc` like: [formatter-junit]: ../formatter-junit/markdownlint-cli2-formatter-junit.js [formatter-sarif]: ../formatter-sarif/markdownlint-cli2-formatter-sarif.js [markdownlint-cli2-formatter]: https://www.npmjs.com/search?q=keywords:markdownlint-cli2-formatter -[markdownlint-d-ts]: https://github.com/DavidAnson/markdownlint/blob/v0.37.3/lib/markdownlint.d.mts +[markdownlint-d-ts]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/lib/markdownlint.d.mts diff --git a/package.json b/package.json index 7b6b4db6..6d2e2ee7 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "globby": "14.0.2", "js-yaml": "4.1.0", "jsonc-parser": "3.3.1", - "markdownlint": "0.37.3", + "markdownlint": "0.37.4", "markdownlint-cli2-formatter-default": "0.0.5", "micromatch": "4.0.8" }, diff --git a/schema/markdownlint-cli2-config-schema.json b/schema/markdownlint-cli2-config-schema.json index 20e3c3b9..385e4f2d 100644 --- a/schema/markdownlint-cli2-config-schema.json +++ b/schema/markdownlint-cli2-config-schema.json @@ -10,8 +10,8 @@ "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/v0.17.1/schema/markdownlint-cli2-config-schema.json" }, "config": { - "description": "markdownlint configuration schema : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/schema/.markdownlint.jsonc", - "$ref": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.3/schema/markdownlint-config-schema.json", + "description": "markdownlint configuration schema : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/schema/.markdownlint.jsonc", + "$ref": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json", "default": {} }, "customRules": { diff --git a/schema/markdownlint-config-schema.json b/schema/markdownlint-config-schema.json index 7b4723d6..58005e01 100644 --- a/schema/markdownlint-config-schema.json +++ b/schema/markdownlint-config-schema.json @@ -1,13 +1,13 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.3/schema/markdownlint-config-schema.json", + "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json", "title": "markdownlint configuration schema", "type": "object", "properties": { "$schema": { "description": "JSON Schema URI (expected by some editors)", "type": "string", - "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.3/schema/markdownlint-config-schema.json" + "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" }, "default": { "description": "Default state for all rules", @@ -23,17 +23,17 @@ "default": null }, "MD001": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md001.md", + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", "type": "boolean", "default": true }, "heading-increment": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md001.md", + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", "type": "boolean", "default": true }, "MD003": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md003.md", + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", "type": [ "boolean", "object" @@ -57,7 +57,7 @@ "additionalProperties": false }, "heading-style": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md003.md", + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", "type": [ "boolean", "object" @@ -81,7 +81,7 @@ "additionalProperties": false }, "MD004": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md004.md", + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", "type": [ "boolean", "object" @@ -104,7 +104,7 @@ "additionalProperties": false }, "ul-style": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md004.md", + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", "type": [ "boolean", "object" @@ -127,17 +127,17 @@ "additionalProperties": false }, "MD005": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md005.md", + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", "type": "boolean", "default": true }, "list-indent": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md005.md", + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", "type": "boolean", "default": true }, "MD007": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md007.md", + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", "type": [ "boolean", "object" @@ -165,7 +165,7 @@ "additionalProperties": false }, "ul-indent": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md007.md", + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", "type": [ "boolean", "object" @@ -193,7 +193,7 @@ "additionalProperties": false }, "MD009": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md009.md", + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", "type": [ "boolean", "object" @@ -220,7 +220,7 @@ "additionalProperties": false }, "no-trailing-spaces": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md009.md", + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", "type": [ "boolean", "object" @@ -247,7 +247,7 @@ "additionalProperties": false }, "MD010": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md010.md", + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", "type": [ "boolean", "object" @@ -277,7 +277,7 @@ "additionalProperties": false }, "no-hard-tabs": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md010.md", + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", "type": [ "boolean", "object" @@ -307,17 +307,17 @@ "additionalProperties": false }, "MD011": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md011.md", + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", "type": "boolean", "default": true }, "no-reversed-links": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md011.md", + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", "type": "boolean", "default": true }, "MD012": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md012.md", + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", "type": [ "boolean", "object" @@ -334,7 +334,7 @@ "additionalProperties": false }, "no-multiple-blanks": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md012.md", + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", "type": [ "boolean", "object" @@ -351,7 +351,7 @@ "additionalProperties": false }, "MD013": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md013.md", + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", "type": [ "boolean", "object" @@ -405,7 +405,7 @@ "additionalProperties": false }, "line-length": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md013.md", + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", "type": [ "boolean", "object" @@ -459,57 +459,57 @@ "additionalProperties": false }, "MD014": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md014.md", + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", "type": "boolean", "default": true }, "commands-show-output": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md014.md", + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", "type": "boolean", "default": true }, "MD018": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md018.md", + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", "type": "boolean", "default": true }, "no-missing-space-atx": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md018.md", + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", "type": "boolean", "default": true }, "MD019": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md019.md", + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", "type": "boolean", "default": true }, "no-multiple-space-atx": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md019.md", + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", "type": "boolean", "default": true }, "MD020": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md020.md", + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", "type": "boolean", "default": true }, "no-missing-space-closed-atx": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md020.md", + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", "type": "boolean", "default": true }, "MD021": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md021.md", + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", "type": "boolean", "default": true }, "no-multiple-space-closed-atx": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md021.md", + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", "type": "boolean", "default": true }, "MD022": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md022.md", + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", "type": [ "boolean", "object" @@ -544,7 +544,7 @@ "additionalProperties": false }, "blanks-around-headings": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md022.md", + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", "type": [ "boolean", "object" @@ -579,17 +579,17 @@ "additionalProperties": false }, "MD023": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md023.md", + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", "type": "boolean", "default": true }, "heading-start-left": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md023.md", + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", "type": "boolean", "default": true }, "MD024": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md024.md", + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", "type": [ "boolean", "object" @@ -605,7 +605,7 @@ "additionalProperties": false }, "no-duplicate-heading": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md024.md", + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", "type": [ "boolean", "object" @@ -621,7 +621,7 @@ "additionalProperties": false }, "MD025": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md025.md", + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", "type": [ "boolean", "object" @@ -644,7 +644,7 @@ "additionalProperties": false }, "single-title": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md025.md", + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", "type": [ "boolean", "object" @@ -667,7 +667,7 @@ "additionalProperties": false }, "single-h1": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md025.md", + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", "type": [ "boolean", "object" @@ -690,7 +690,7 @@ "additionalProperties": false }, "MD026": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md026.md", + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", "type": [ "boolean", "object" @@ -706,7 +706,7 @@ "additionalProperties": false }, "no-trailing-punctuation": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md026.md", + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", "type": [ "boolean", "object" @@ -722,27 +722,27 @@ "additionalProperties": false }, "MD027": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md027.md", + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", "type": "boolean", "default": true }, "no-multiple-space-blockquote": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md027.md", + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", "type": "boolean", "default": true }, "MD028": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md028.md", + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", "type": "boolean", "default": true }, "no-blanks-blockquote": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md028.md", + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", "type": "boolean", "default": true }, "MD029": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md029.md", + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", "type": [ "boolean", "object" @@ -764,7 +764,7 @@ "additionalProperties": false }, "ol-prefix": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md029.md", + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", "type": [ "boolean", "object" @@ -786,7 +786,7 @@ "additionalProperties": false }, "MD030": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md030.md", + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", "type": [ "boolean", "object" @@ -821,7 +821,7 @@ "additionalProperties": false }, "list-marker-space": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md030.md", + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", "type": [ "boolean", "object" @@ -856,7 +856,7 @@ "additionalProperties": false }, "MD031": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md031.md", + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", "type": [ "boolean", "object" @@ -872,7 +872,7 @@ "additionalProperties": false }, "blanks-around-fences": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md031.md", + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", "type": [ "boolean", "object" @@ -888,17 +888,17 @@ "additionalProperties": false }, "MD032": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md032.md", + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", "type": "boolean", "default": true }, "blanks-around-lists": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md032.md", + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", "type": "boolean", "default": true }, "MD033": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md033.md", + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", "type": [ "boolean", "object" @@ -917,7 +917,7 @@ "additionalProperties": false }, "no-inline-html": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md033.md", + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", "type": [ "boolean", "object" @@ -936,17 +936,17 @@ "additionalProperties": false }, "MD034": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md034.md", + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", "type": "boolean", "default": true }, "no-bare-urls": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md034.md", + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", "type": "boolean", "default": true }, "MD035": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md035.md", + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", "type": [ "boolean", "object" @@ -962,7 +962,7 @@ "additionalProperties": false }, "hr-style": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md035.md", + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", "type": [ "boolean", "object" @@ -978,7 +978,7 @@ "additionalProperties": false }, "MD036": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md036.md", + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", "type": [ "boolean", "object" @@ -994,7 +994,7 @@ "additionalProperties": false }, "no-emphasis-as-heading": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md036.md", + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", "type": [ "boolean", "object" @@ -1010,37 +1010,37 @@ "additionalProperties": false }, "MD037": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md037.md", + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", "type": "boolean", "default": true }, "no-space-in-emphasis": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md037.md", + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", "type": "boolean", "default": true }, "MD038": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md038.md", + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", "type": "boolean", "default": true }, "no-space-in-code": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md038.md", + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", "type": "boolean", "default": true }, "MD039": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md039.md", + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", "type": "boolean", "default": true }, "no-space-in-links": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md039.md", + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", "type": "boolean", "default": true }, "MD040": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md040.md", + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", "type": [ "boolean", "object" @@ -1064,7 +1064,7 @@ "additionalProperties": false }, "fenced-code-language": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md040.md", + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", "type": [ "boolean", "object" @@ -1088,7 +1088,7 @@ "additionalProperties": false }, "MD041": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md041.md", + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", "type": [ "boolean", "object" @@ -1111,7 +1111,7 @@ "additionalProperties": false }, "first-line-heading": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md041.md", + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", "type": [ "boolean", "object" @@ -1134,7 +1134,7 @@ "additionalProperties": false }, "first-line-h1": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md041.md", + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", "type": [ "boolean", "object" @@ -1157,17 +1157,17 @@ "additionalProperties": false }, "MD042": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md042.md", + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", "type": "boolean", "default": true }, "no-empty-links": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md042.md", + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", "type": "boolean", "default": true }, "MD043": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md043.md", + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", "type": [ "boolean", "object" @@ -1192,7 +1192,7 @@ "additionalProperties": false }, "required-headings": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md043.md", + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", "type": [ "boolean", "object" @@ -1217,7 +1217,7 @@ "additionalProperties": false }, "MD044": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md044.md", + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", "type": [ "boolean", "object" @@ -1246,7 +1246,7 @@ "additionalProperties": false }, "proper-names": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md044.md", + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", "type": [ "boolean", "object" @@ -1275,17 +1275,17 @@ "additionalProperties": false }, "MD045": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md045.md", + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", "type": "boolean", "default": true }, "no-alt-text": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md045.md", + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", "type": "boolean", "default": true }, "MD046": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md046.md", + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", "type": [ "boolean", "object" @@ -1306,7 +1306,7 @@ "additionalProperties": false }, "code-block-style": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md046.md", + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", "type": [ "boolean", "object" @@ -1327,17 +1327,17 @@ "additionalProperties": false }, "MD047": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md047.md", + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", "type": "boolean", "default": true }, "single-trailing-newline": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md047.md", + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", "type": "boolean", "default": true }, "MD048": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md048.md", + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", "type": [ "boolean", "object" @@ -1358,7 +1358,7 @@ "additionalProperties": false }, "code-fence-style": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md048.md", + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", "type": [ "boolean", "object" @@ -1379,7 +1379,7 @@ "additionalProperties": false }, "MD049": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md049.md", + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", "type": [ "boolean", "object" @@ -1400,7 +1400,7 @@ "additionalProperties": false }, "emphasis-style": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md049.md", + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", "type": [ "boolean", "object" @@ -1421,7 +1421,7 @@ "additionalProperties": false }, "MD050": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md050.md", + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", "type": [ "boolean", "object" @@ -1442,7 +1442,7 @@ "additionalProperties": false }, "strong-style": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md050.md", + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", "type": [ "boolean", "object" @@ -1463,7 +1463,7 @@ "additionalProperties": false }, "MD051": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md051.md", + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", "type": [ "boolean", "object" @@ -1479,7 +1479,7 @@ "additionalProperties": false }, "link-fragments": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md051.md", + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", "type": [ "boolean", "object" @@ -1495,7 +1495,7 @@ "additionalProperties": false }, "MD052": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md052.md", + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", "type": [ "boolean", "object" @@ -1511,7 +1511,7 @@ "additionalProperties": false }, "reference-links-images": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md052.md", + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", "type": [ "boolean", "object" @@ -1527,7 +1527,7 @@ "additionalProperties": false }, "MD053": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md053.md", + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", "type": [ "boolean", "object" @@ -1548,7 +1548,7 @@ "additionalProperties": false }, "link-image-reference-definitions": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md053.md", + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", "type": [ "boolean", "object" @@ -1569,7 +1569,7 @@ "additionalProperties": false }, "MD054": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md054.md", + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", "type": [ "boolean", "object" @@ -1610,7 +1610,7 @@ "additionalProperties": false }, "link-image-style": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md054.md", + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", "type": [ "boolean", "object" @@ -1651,7 +1651,7 @@ "additionalProperties": false }, "MD055": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md055.md", + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", "type": [ "boolean", "object" @@ -1674,7 +1674,7 @@ "additionalProperties": false }, "table-pipe-style": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md055.md", + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", "type": [ "boolean", "object" @@ -1697,22 +1697,22 @@ "additionalProperties": false }, "MD056": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md056.md", + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", "type": "boolean", "default": true }, "table-column-count": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md056.md", + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", "type": "boolean", "default": true }, "MD058": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md058.md", + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", "type": "boolean", "default": true }, "blanks-around-tables": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.3/doc/md058.md", + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", "type": "boolean", "default": true }, From 5d000b126f56a34807d63090ff3922ed023393ec Mon Sep 17 00:00:00 2001 From: David Anson Date: Wed, 15 Jan 2025 22:15:31 -0800 Subject: [PATCH 07/10] Capture and verify (for regression purposes) the markdown-it token stream for markdownItPlugin tests. --- .../custom-rule-assert-markdown-it-tokens.mjs | 37 ++ test/markdownItPlugins/file.json | 204 +++++++++++ .../file/.markdownlint-cli2.jsonc | 8 + test/markdownItPlugins/function.json | 204 +++++++++++ .../function/.markdownlint-cli2.cjs | 8 + test/markdownItPlugins/module.json | 204 +++++++++++ .../module/.markdownlint-cli2.jsonc | 8 + test/markdownItPlugins/multiple.json | 334 ++++++++++++++++++ .../multiple/.markdownlint-cli2.jsonc | 6 + test/markdownItPlugins/pre-imported.json | 204 +++++++++++ .../pre-imported/.markdownlint-cli2.cjs | 8 + test/markdownItPlugins/single.json | 334 ++++++++++++++++++ .../single/.markdownlint-cli2.jsonc | 8 + 13 files changed, 1567 insertions(+) create mode 100644 test/markdownItPlugins/custom-rule-assert-markdown-it-tokens.mjs create mode 100644 test/markdownItPlugins/file.json create mode 100644 test/markdownItPlugins/function.json create mode 100644 test/markdownItPlugins/module.json create mode 100644 test/markdownItPlugins/multiple.json create mode 100644 test/markdownItPlugins/pre-imported.json create mode 100644 test/markdownItPlugins/single.json diff --git a/test/markdownItPlugins/custom-rule-assert-markdown-it-tokens.mjs b/test/markdownItPlugins/custom-rule-assert-markdown-it-tokens.mjs new file mode 100644 index 00000000..d70cab75 --- /dev/null +++ b/test/markdownItPlugins/custom-rule-assert-markdown-it-tokens.mjs @@ -0,0 +1,37 @@ +// @ts-check + +import { deepEqual } from "node:assert"; +import { readFileSync, writeFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { __dirname } from "../esm-helpers.mjs"; + +/** @type {import("markdownlint").Rule} */ +export default { + "names": [ "assert-markdown-it-tokens" ], + "description": "Rule that asserts markdown-it tokens", + "tags": [ "test" ], + "parser": "markdownit", + "function": (params) => { + const file = resolve( + __dirname(import.meta), + params.config.file + ); + const actual = params.parsers.markdownit.tokens; + const expected = JSON.parse( + readFileSync( + file, + "utf8" + ) + ); + writeFileSync( + file, + JSON.stringify( + actual, + null, + 2 + ), + "utf8" + ); + deepEqual(actual, expected); + } +}; diff --git a/test/markdownItPlugins/file.json b/test/markdownItPlugins/file.json new file mode 100644 index 00000000..bb6e9c04 --- /dev/null +++ b/test/markdownItPlugins/file.json @@ -0,0 +1,204 @@ +[ + { + "type": "heading_open", + "tag": "h1", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 1, + "line": "# Heading" + } + ], + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "heading_close", + "tag": "h1", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Text [ link ](https://example.com)", + "lineNumber": 3 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Text", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_open", + "tag": "a", + "attrs": [ + [ + "href", + "https://example.com" + ] + ], + "map": null, + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 1, + "children": null, + "content": "link", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_close", + "tag": "a", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + } + ], + "content": "Text [ link ](https://example.com)", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Text [ link ](https://example.com)", + "lineNumber": 3 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + } +] \ No newline at end of file diff --git a/test/markdownItPlugins/file/.markdownlint-cli2.jsonc b/test/markdownItPlugins/file/.markdownlint-cli2.jsonc index 404f1f07..d198a79c 100644 --- a/test/markdownItPlugins/file/.markdownlint-cli2.jsonc +++ b/test/markdownItPlugins/file/.markdownlint-cli2.jsonc @@ -1,4 +1,12 @@ { + "config": { + "assert-markdown-it-tokens": { + "file": "file.json" + } + }, + "customRules": [ + "../custom-rule-assert-markdown-it-tokens.mjs" + ], "markdownItPlugins": [ [ "./custom-markdown-it-plugin.cjs" ] ] diff --git a/test/markdownItPlugins/function.json b/test/markdownItPlugins/function.json new file mode 100644 index 00000000..bb6e9c04 --- /dev/null +++ b/test/markdownItPlugins/function.json @@ -0,0 +1,204 @@ +[ + { + "type": "heading_open", + "tag": "h1", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 1, + "line": "# Heading" + } + ], + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "heading_close", + "tag": "h1", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Text [ link ](https://example.com)", + "lineNumber": 3 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Text", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_open", + "tag": "a", + "attrs": [ + [ + "href", + "https://example.com" + ] + ], + "map": null, + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 1, + "children": null, + "content": "link", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_close", + "tag": "a", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + } + ], + "content": "Text [ link ](https://example.com)", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Text [ link ](https://example.com)", + "lineNumber": 3 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + } +] \ No newline at end of file diff --git a/test/markdownItPlugins/function/.markdownlint-cli2.cjs b/test/markdownItPlugins/function/.markdownlint-cli2.cjs index cbda832a..153df5d4 100644 --- a/test/markdownItPlugins/function/.markdownlint-cli2.cjs +++ b/test/markdownItPlugins/function/.markdownlint-cli2.cjs @@ -3,6 +3,14 @@ "use strict"; module.exports = { + "config": { + "assert-markdown-it-tokens": { + "file": "function.json" + } + }, + "customRules": [ + "../custom-rule-assert-markdown-it-tokens.mjs" + ], "markdownItPlugins": [ [ "markdown-it-for-inline", diff --git a/test/markdownItPlugins/module.json b/test/markdownItPlugins/module.json new file mode 100644 index 00000000..bb6e9c04 --- /dev/null +++ b/test/markdownItPlugins/module.json @@ -0,0 +1,204 @@ +[ + { + "type": "heading_open", + "tag": "h1", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 1, + "line": "# Heading" + } + ], + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "heading_close", + "tag": "h1", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Text [ link ](https://example.com)", + "lineNumber": 3 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Text", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_open", + "tag": "a", + "attrs": [ + [ + "href", + "https://example.com" + ] + ], + "map": null, + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 1, + "children": null, + "content": "link", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_close", + "tag": "a", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + } + ], + "content": "Text [ link ](https://example.com)", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Text [ link ](https://example.com)", + "lineNumber": 3 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + } +] \ No newline at end of file diff --git a/test/markdownItPlugins/module/.markdownlint-cli2.jsonc b/test/markdownItPlugins/module/.markdownlint-cli2.jsonc index 25dd953c..18b9b0f7 100644 --- a/test/markdownItPlugins/module/.markdownlint-cli2.jsonc +++ b/test/markdownItPlugins/module/.markdownlint-cli2.jsonc @@ -1,4 +1,12 @@ { + "config": { + "assert-markdown-it-tokens": { + "file": "module.json" + } + }, + "customRules": [ + "../custom-rule-assert-markdown-it-tokens.mjs" + ], "markdownItPlugins": [ [ "custom-markdown-it-plugin" ] ] diff --git a/test/markdownItPlugins/multiple.json b/test/markdownItPlugins/multiple.json new file mode 100644 index 00000000..3baffa48 --- /dev/null +++ b/test/markdownItPlugins/multiple.json @@ -0,0 +1,334 @@ +[ + { + "type": "heading_open", + "tag": "h1", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 1, + "line": "# Heading" + } + ], + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "heading_close", + "tag": "h1", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Happy emoji: :smile:", + "lineNumber": 3 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Happy emoji: :smile:", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Happy emoji: :smile:" + } + ], + "content": "Happy emoji: :smile:", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Happy emoji: :smile:", + "lineNumber": 3 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 4, + 5 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Sad emoji: :frowning:", + "lineNumber": 5 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 4, + 5 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Sad emoji: :frowning:", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 5, + "line": "Sad emoji: :frowning:" + } + ], + "content": "Sad emoji: :frowning:", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Sad emoji: :frowning:", + "lineNumber": 5 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 6, + 7 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "$1 *2* 3$", + "lineNumber": 7 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 6, + 7 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "math_inline", + "tag": "math", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "1 *2* 3", + "markup": "$", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 7, + "line": "$1 *2* 3$" + } + ], + "content": "$1 *2* 3$", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "$1 *2* 3$", + "lineNumber": 7 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "math_block", + "tag": "math", + "attrs": null, + "map": [ + 8, + 9 + ], + "nesting": 0, + "level": 0, + "children": null, + "content": "1 *2* 3\n", + "markup": "$$", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "$$1 *2* 3$$", + "lineNumber": 9 + }, + { + "type": "math_block", + "tag": "math", + "attrs": null, + "map": [ + 10, + 13 + ], + "nesting": 0, + "level": 0, + "children": null, + "content": "1\n+ 2\n+ 3", + "markup": "$$", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "$$1", + "lineNumber": 11 + } +] \ No newline at end of file diff --git a/test/markdownItPlugins/multiple/.markdownlint-cli2.jsonc b/test/markdownItPlugins/multiple/.markdownlint-cli2.jsonc index 27bef5a6..9e0705f3 100644 --- a/test/markdownItPlugins/multiple/.markdownlint-cli2.jsonc +++ b/test/markdownItPlugins/multiple/.markdownlint-cli2.jsonc @@ -1,5 +1,8 @@ { "config": { + "assert-markdown-it-tokens": { + "file": "multiple.json" + }, "proper-names": { "names": [ "SMILE", @@ -7,6 +10,9 @@ ] } }, + "customRules": [ + "../custom-rule-assert-markdown-it-tokens.mjs" + ], "markdownItPlugins": [ [ "markdown-it-emoji/dist/bare.cjs.js", { "enabled": [ "smile" ] } ], [ "@iktakahiro/markdown-it-katex" ] diff --git a/test/markdownItPlugins/pre-imported.json b/test/markdownItPlugins/pre-imported.json new file mode 100644 index 00000000..bb6e9c04 --- /dev/null +++ b/test/markdownItPlugins/pre-imported.json @@ -0,0 +1,204 @@ +[ + { + "type": "heading_open", + "tag": "h1", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 1, + "line": "# Heading" + } + ], + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "heading_close", + "tag": "h1", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Text [ link ](https://example.com)", + "lineNumber": 3 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Text", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_open", + "tag": "a", + "attrs": [ + [ + "href", + "https://example.com" + ] + ], + "map": null, + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 1, + "children": null, + "content": "link", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_close", + "tag": "a", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Text [ link ](https://example.com)" + } + ], + "content": "Text [ link ](https://example.com)", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Text [ link ](https://example.com)", + "lineNumber": 3 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + } +] \ No newline at end of file diff --git a/test/markdownItPlugins/pre-imported/.markdownlint-cli2.cjs b/test/markdownItPlugins/pre-imported/.markdownlint-cli2.cjs index fabb4a52..3ed67595 100644 --- a/test/markdownItPlugins/pre-imported/.markdownlint-cli2.cjs +++ b/test/markdownItPlugins/pre-imported/.markdownlint-cli2.cjs @@ -5,6 +5,14 @@ const markdownItForInline = require("markdown-it-for-inline"); module.exports = { + "config": { + "assert-markdown-it-tokens": { + "file": "pre-imported.json" + } + }, + "customRules": [ + "../custom-rule-assert-markdown-it-tokens.mjs" + ], "markdownItPlugins": [ [ markdownItForInline, diff --git a/test/markdownItPlugins/single.json b/test/markdownItPlugins/single.json new file mode 100644 index 00000000..3baffa48 --- /dev/null +++ b/test/markdownItPlugins/single.json @@ -0,0 +1,334 @@ +[ + { + "type": "heading_open", + "tag": "h1", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 0, + 1 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 1, + "line": "# Heading" + } + ], + "content": "Heading", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "# Heading", + "lineNumber": 1 + }, + { + "type": "heading_close", + "tag": "h1", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "#", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Happy emoji: :smile:", + "lineNumber": 3 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 2, + 3 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Happy emoji: :smile:", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Happy emoji: :smile:" + } + ], + "content": "Happy emoji: :smile:", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Happy emoji: :smile:", + "lineNumber": 3 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 4, + 5 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Sad emoji: :frowning:", + "lineNumber": 5 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 4, + 5 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Sad emoji: :frowning:", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 5, + "line": "Sad emoji: :frowning:" + } + ], + "content": "Sad emoji: :frowning:", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "Sad emoji: :frowning:", + "lineNumber": 5 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "paragraph_open", + "tag": "p", + "attrs": null, + "map": [ + 6, + 7 + ], + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "$1 *2* 3$", + "lineNumber": 7 + }, + { + "type": "inline", + "tag": "", + "attrs": null, + "map": [ + 6, + 7 + ], + "nesting": 0, + "level": 1, + "children": [ + { + "type": "math_inline", + "tag": "math", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "1 *2* 3", + "markup": "$", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 7, + "line": "$1 *2* 3$" + } + ], + "content": "$1 *2* 3$", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "$1 *2* 3$", + "lineNumber": 7 + }, + { + "type": "paragraph_close", + "tag": "p", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": true, + "hidden": false + }, + { + "type": "math_block", + "tag": "math", + "attrs": null, + "map": [ + 8, + 9 + ], + "nesting": 0, + "level": 0, + "children": null, + "content": "1 *2* 3\n", + "markup": "$$", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "$$1 *2* 3$$", + "lineNumber": 9 + }, + { + "type": "math_block", + "tag": "math", + "attrs": null, + "map": [ + 10, + 13 + ], + "nesting": 0, + "level": 0, + "children": null, + "content": "1\n+ 2\n+ 3", + "markup": "$$", + "info": "", + "meta": null, + "block": true, + "hidden": false, + "line": "$$1", + "lineNumber": 11 + } +] \ No newline at end of file diff --git a/test/markdownItPlugins/single/.markdownlint-cli2.jsonc b/test/markdownItPlugins/single/.markdownlint-cli2.jsonc index 532a5d9d..246bdf84 100644 --- a/test/markdownItPlugins/single/.markdownlint-cli2.jsonc +++ b/test/markdownItPlugins/single/.markdownlint-cli2.jsonc @@ -1,4 +1,12 @@ { + "config": { + "assert-markdown-it-tokens": { + "file": "single.json" + } + }, + "customRules": [ + "../custom-rule-assert-markdown-it-tokens.mjs" + ], "markdownItPlugins": [ [ "@iktakahiro/markdown-it-katex" ] ] From 0ef65fc76a5586a8e54cef0ff9e0e87ee0e68aea Mon Sep 17 00:00:00 2001 From: David Anson Date: Wed, 15 Jan 2025 22:37:49 -0800 Subject: [PATCH 08/10] Remove @iktakahiro/markdown-it-katex dev dependency which warns of 2 vulnerabilities on install, tweak markdownItPlugins test cases accordingly. --- package.json | 1 - .../custom-rule-assert-markdown-it-tokens.mjs | 21 +-- test/markdownItPlugins/multiple.json | 131 +++++++++------ .../multiple/.markdownlint-cli2.jsonc | 4 +- test/markdownItPlugins/multiple/emoji.md | 8 +- test/markdownItPlugins/single.json | 150 ++++++++++++------ .../single/.markdownlint-cli2.jsonc | 2 +- test/markdownItPlugins/single/emoji.md | 8 +- .../.markdownlint-cli2.jsonc | 2 +- .../.markdownlint-cli2.yaml | 2 +- .../markdownlint-cli2-test-exec.mjs.md | 10 +- .../markdownlint-cli2-test-exec.mjs.snap | Bin 18563 -> 18630 bytes .../markdownlint-cli2-test-fs.mjs.md | 10 +- .../markdownlint-cli2-test-fs.mjs.snap | Bin 6282 -> 6298 bytes .../markdownlint-cli2-test-main.mjs.md | 20 ++- .../markdownlint-cli2-test-main.mjs.snap | Bin 14425 -> 14519 bytes 16 files changed, 228 insertions(+), 141 deletions(-) diff --git a/package.json b/package.json index 6d2e2ee7..f8fda51d 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ }, "devDependencies": { "@eslint/js": "9.18.0", - "@iktakahiro/markdown-it-katex": "4.0.1", "@playwright/test": "1.49.1", "@stylistic/eslint-plugin": "2.13.0", "ajv": "8.17.1", diff --git a/test/markdownItPlugins/custom-rule-assert-markdown-it-tokens.mjs b/test/markdownItPlugins/custom-rule-assert-markdown-it-tokens.mjs index d70cab75..ae04897e 100644 --- a/test/markdownItPlugins/custom-rule-assert-markdown-it-tokens.mjs +++ b/test/markdownItPlugins/custom-rule-assert-markdown-it-tokens.mjs @@ -1,7 +1,7 @@ // @ts-check import { deepEqual } from "node:assert"; -import { readFileSync, writeFileSync } from "node:fs"; +import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { __dirname } from "../esm-helpers.mjs"; @@ -23,15 +23,16 @@ export default { "utf8" ) ); - writeFileSync( - file, - JSON.stringify( - actual, - null, - 2 - ), - "utf8" - ); + // Un-comment to update snapshots if markdown-it token output changes + // writeFileSync( + // file, + // JSON.stringify( + // actual, + // null, + // 2 + // ), + // "utf8" + // ); deepEqual(actual, expected); } }; diff --git a/test/markdownItPlugins/multiple.json b/test/markdownItPlugins/multiple.json index 3baffa48..415fab21 100644 --- a/test/markdownItPlugins/multiple.json +++ b/test/markdownItPlugins/multiple.json @@ -111,7 +111,7 @@ "nesting": 0, "level": 0, "children": null, - "content": "Happy emoji: :smile:", + "content": "Happy emoji:", "markup": "", "info": "", "meta": null, @@ -119,6 +119,23 @@ "hidden": false, "lineNumber": 3, "line": "Happy emoji: :smile:" + }, + { + "type": "emoji", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "😄", + "markup": "smile", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Happy emoji: :smile:" } ], "content": "Happy emoji: :smile:", @@ -235,7 +252,7 @@ "meta": null, "block": true, "hidden": false, - "line": "$1 *2* 3$", + "line": "Text [ link ](https://example.com)", "lineNumber": 7 }, { @@ -250,30 +267,86 @@ "level": 1, "children": [ { - "type": "math_inline", - "tag": "math", + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "Text", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 7, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_open", + "tag": "a", + "attrs": [ + [ + "href", + "https://example.com" + ] + ], + "map": null, + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 7, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "text", + "tag": "", "attrs": null, "map": null, "nesting": 0, + "level": 1, + "children": null, + "content": "link", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 7, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_close", + "tag": "a", + "attrs": null, + "map": null, + "nesting": -1, "level": 0, "children": null, - "content": "1 *2* 3", - "markup": "$", + "content": "", + "markup": "", "info": "", "meta": null, "block": false, "hidden": false, "lineNumber": 7, - "line": "$1 *2* 3$" + "line": "Text [ link ](https://example.com)" } ], - "content": "$1 *2* 3$", + "content": "Text [ link ](https://example.com)", "markup": "", "info": "", "meta": null, "block": true, "hidden": false, - "line": "$1 *2* 3$", + "line": "Text [ link ](https://example.com)", "lineNumber": 7 }, { @@ -290,45 +363,5 @@ "meta": null, "block": true, "hidden": false - }, - { - "type": "math_block", - "tag": "math", - "attrs": null, - "map": [ - 8, - 9 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "1 *2* 3\n", - "markup": "$$", - "info": "", - "meta": null, - "block": true, - "hidden": false, - "line": "$$1 *2* 3$$", - "lineNumber": 9 - }, - { - "type": "math_block", - "tag": "math", - "attrs": null, - "map": [ - 10, - 13 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "1\n+ 2\n+ 3", - "markup": "$$", - "info": "", - "meta": null, - "block": true, - "hidden": false, - "line": "$$1", - "lineNumber": 11 } ] \ No newline at end of file diff --git a/test/markdownItPlugins/multiple/.markdownlint-cli2.jsonc b/test/markdownItPlugins/multiple/.markdownlint-cli2.jsonc index 9e0705f3..69001533 100644 --- a/test/markdownItPlugins/multiple/.markdownlint-cli2.jsonc +++ b/test/markdownItPlugins/multiple/.markdownlint-cli2.jsonc @@ -14,7 +14,7 @@ "../custom-rule-assert-markdown-it-tokens.mjs" ], "markdownItPlugins": [ - [ "markdown-it-emoji/dist/bare.cjs.js", { "enabled": [ "smile" ] } ], - [ "@iktakahiro/markdown-it-katex" ] + [ "markdown-it-emoji/dist/light.cjs.js", { "enabled": [ "smile" ] } ], + [ "../file/custom-markdown-it-plugin.cjs" ] ] } diff --git a/test/markdownItPlugins/multiple/emoji.md b/test/markdownItPlugins/multiple/emoji.md index a6db2c4c..26604554 100644 --- a/test/markdownItPlugins/multiple/emoji.md +++ b/test/markdownItPlugins/multiple/emoji.md @@ -4,11 +4,5 @@ Happy emoji: :smile: Sad emoji: :frowning: -$1 *2* 3$ - -$$1 *2* 3$$ - -$$1 -+ 2 -+ 3$$ +Text [ link ](https://example.com) diff --git a/test/markdownItPlugins/single.json b/test/markdownItPlugins/single.json index 3baffa48..94e13804 100644 --- a/test/markdownItPlugins/single.json +++ b/test/markdownItPlugins/single.json @@ -111,7 +111,7 @@ "nesting": 0, "level": 0, "children": null, - "content": "Happy emoji: :smile:", + "content": "Happy emoji: ", "markup": "", "info": "", "meta": null, @@ -119,6 +119,23 @@ "hidden": false, "lineNumber": 3, "line": "Happy emoji: :smile:" + }, + { + "type": "emoji", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "😄", + "markup": "smile", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 3, + "line": "Happy emoji: :smile:" } ], "content": "Happy emoji: :smile:", @@ -184,7 +201,7 @@ "nesting": 0, "level": 0, "children": null, - "content": "Sad emoji: :frowning:", + "content": "Sad emoji: ", "markup": "", "info": "", "meta": null, @@ -192,6 +209,23 @@ "hidden": false, "lineNumber": 5, "line": "Sad emoji: :frowning:" + }, + { + "type": "emoji", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 0, + "children": null, + "content": "😦", + "markup": "frowning", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 5, + "line": "Sad emoji: :frowning:" } ], "content": "Sad emoji: :frowning:", @@ -235,7 +269,7 @@ "meta": null, "block": true, "hidden": false, - "line": "$1 *2* 3$", + "line": "Text [ link ](https://example.com)", "lineNumber": 7 }, { @@ -250,30 +284,86 @@ "level": 1, "children": [ { - "type": "math_inline", - "tag": "math", + "type": "text", + "tag": "", "attrs": null, "map": null, "nesting": 0, "level": 0, "children": null, - "content": "1 *2* 3", - "markup": "$", + "content": "Text ", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 7, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_open", + "tag": "a", + "attrs": [ + [ + "href", + "https://example.com" + ] + ], + "map": null, + "nesting": 1, + "level": 0, + "children": null, + "content": "", + "markup": "", "info": "", "meta": null, "block": false, "hidden": false, "lineNumber": 7, - "line": "$1 *2* 3$" + "line": "Text [ link ](https://example.com)" + }, + { + "type": "text", + "tag": "", + "attrs": null, + "map": null, + "nesting": 0, + "level": 1, + "children": null, + "content": " link ", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 7, + "line": "Text [ link ](https://example.com)" + }, + { + "type": "link_close", + "tag": "a", + "attrs": null, + "map": null, + "nesting": -1, + "level": 0, + "children": null, + "content": "", + "markup": "", + "info": "", + "meta": null, + "block": false, + "hidden": false, + "lineNumber": 7, + "line": "Text [ link ](https://example.com)" } ], - "content": "$1 *2* 3$", + "content": "Text [ link ](https://example.com)", "markup": "", "info": "", "meta": null, "block": true, "hidden": false, - "line": "$1 *2* 3$", + "line": "Text [ link ](https://example.com)", "lineNumber": 7 }, { @@ -290,45 +380,5 @@ "meta": null, "block": true, "hidden": false - }, - { - "type": "math_block", - "tag": "math", - "attrs": null, - "map": [ - 8, - 9 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "1 *2* 3\n", - "markup": "$$", - "info": "", - "meta": null, - "block": true, - "hidden": false, - "line": "$$1 *2* 3$$", - "lineNumber": 9 - }, - { - "type": "math_block", - "tag": "math", - "attrs": null, - "map": [ - 10, - 13 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "1\n+ 2\n+ 3", - "markup": "$$", - "info": "", - "meta": null, - "block": true, - "hidden": false, - "line": "$$1", - "lineNumber": 11 } ] \ No newline at end of file diff --git a/test/markdownItPlugins/single/.markdownlint-cli2.jsonc b/test/markdownItPlugins/single/.markdownlint-cli2.jsonc index 246bdf84..7e1d66c7 100644 --- a/test/markdownItPlugins/single/.markdownlint-cli2.jsonc +++ b/test/markdownItPlugins/single/.markdownlint-cli2.jsonc @@ -8,6 +8,6 @@ "../custom-rule-assert-markdown-it-tokens.mjs" ], "markdownItPlugins": [ - [ "@iktakahiro/markdown-it-katex" ] + [ "markdown-it-emoji/dist/light.cjs.js" ] ] } diff --git a/test/markdownItPlugins/single/emoji.md b/test/markdownItPlugins/single/emoji.md index a6db2c4c..26604554 100644 --- a/test/markdownItPlugins/single/emoji.md +++ b/test/markdownItPlugins/single/emoji.md @@ -4,11 +4,5 @@ Happy emoji: :smile: Sad emoji: :frowning: -$1 *2* 3$ - -$$1 *2* 3$$ - -$$1 -+ 2 -+ 3$$ +Text [ link ](https://example.com) diff --git a/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc b/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc index 78c83ae9..579e8734 100644 --- a/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc +++ b/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc @@ -34,7 +34,7 @@ // Use a plugin to recognize math "markdownItPlugins": [ - [ "@iktakahiro/markdown-it-katex" ] + [ "markdown-it-emoji/dist/light.cjs.js" ] ], // Additional paths to resolve module locations from diff --git a/test/markdownlint-cli2-yaml-example/.markdownlint-cli2.yaml b/test/markdownlint-cli2-yaml-example/.markdownlint-cli2.yaml index bb9823df..f101fee1 100644 --- a/test/markdownlint-cli2-yaml-example/.markdownlint-cli2.yaml +++ b/test/markdownlint-cli2-yaml-example/.markdownlint-cli2.yaml @@ -31,7 +31,7 @@ ignores: # Use a plugin to recognize math markdownItPlugins: - - - "@iktakahiro/markdown-it-katex" + - "markdown-it-emoji/dist/light.cjs.js" # Additional paths to resolve module locations from modulePaths: diff --git a/test/snapshots/markdownlint-cli2-test-exec.mjs.md b/test/snapshots/markdownlint-cli2-test-exec.mjs.md index 0c50933e..11e45f5d 100644 --- a/test/snapshots/markdownlint-cli2-test-exec.mjs.md +++ b/test/snapshots/markdownlint-cli2-test-exec.mjs.md @@ -2837,14 +2837,18 @@ Generated by [AVA](https://avajs.dev). module/link.md:3:12 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ multiple/emoji.md:3:15 MD044/proper-names Proper names should have the correct capitalization [Expected: SMILE; Actual: smile]␊ multiple/emoji.md:5:13 MD044/proper-names Proper names should have the correct capitalization [Expected: FROWNING; Actual: frowning]␊ - multiple/emoji.md:15 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ + multiple/emoji.md:7:7 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ + multiple/emoji.md:7:12 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ + multiple/emoji.md:9 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ pre-imported/link.md:3:7 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ pre-imported/link.md:3:12 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ - single/emoji.md:15 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]`, + single/emoji.md:7:7 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ + single/emoji.md:7:12 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ + single/emoji.md:9 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]`, stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊ Finding: **/*.md␊ Linting: 6 file(s)␊ - Summary: 12 error(s)`, + Summary: 16 error(s)`, } ## markdownItPlugins-missing (exec) diff --git a/test/snapshots/markdownlint-cli2-test-exec.mjs.snap b/test/snapshots/markdownlint-cli2-test-exec.mjs.snap index fb5d83b280cd365b840deb605042f899d6e2b2b1..2a2c1c3b3f715ce65e025947f467e95aaf56657b 100644 GIT binary patch delta 18399 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 literal 18563 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 K=8X>t4Yc!qAhJLJzhh0A^Cg~4K_Xy+!qUuQ;! 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 BnI-@L diff --git a/test/snapshots/markdownlint-cli2-test-fs.mjs.md b/test/snapshots/markdownlint-cli2-test-fs.mjs.md index d76a9c20..0a2914aa 100644 --- a/test/snapshots/markdownlint-cli2-test-fs.mjs.md +++ b/test/snapshots/markdownlint-cli2-test-fs.mjs.md @@ -2366,15 +2366,19 @@ Generated by [AVA](https://avajs.dev). module/link.md:3:12 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ multiple/emoji.md:3:15 MD044/proper-names Proper names should have the correct capitalization [Expected: SMILE; Actual: smile]␊ multiple/emoji.md:5:13 MD044/proper-names Proper names should have the correct capitalization [Expected: FROWNING; Actual: frowning]␊ - multiple/emoji.md:15 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ + multiple/emoji.md:7:7 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ + multiple/emoji.md:7:12 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ + multiple/emoji.md:9 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ pre-imported/link.md:3:7 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ pre-imported/link.md:3:12 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ - single/emoji.md:15 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ + single/emoji.md:7:7 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ + single/emoji.md:7:12 MD039/no-space-in-links Spaces inside link text [Context: "[ link ]"]␊ + single/emoji.md:9 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]␊ `, stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊ Finding: **/*.md␊ Linting: 6 file(s)␊ - Summary: 12 error(s)␊ + Summary: 16 error(s)␊ `, } diff --git a/test/snapshots/markdownlint-cli2-test-fs.mjs.snap b/test/snapshots/markdownlint-cli2-test-fs.mjs.snap index ad8442e0801cdc4fde1fa4fa49e7a6867f8dff08..1ee69c9ab4e79961e7bdecb7d07b0c674774f07d 100644 GIT binary patch delta 6210 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 Date: Mon, 13 Jan 2025 21:43:16 -0800 Subject: [PATCH 09/10] Stop using module.createRequire (problematic under webpack), replace resolveModule helper with corresponding (new) export from markdownlint. --- markdownlint-cli2.mjs | 7 +-- package.json | 3 +- resolve-module.mjs | 16 ------ test/resolve-module-test.mjs | 101 ----------------------------------- webworker/module-stub.cjs | 8 --- webworker/webpack.config.cjs | 1 - 6 files changed, 3 insertions(+), 133 deletions(-) delete mode 100644 resolve-module.mjs delete mode 100644 test/resolve-module-test.mjs delete mode 100644 webworker/module-stub.cjs diff --git a/markdownlint-cli2.mjs b/markdownlint-cli2.mjs index 6e287bea..15c75181 100755 --- a/markdownlint-cli2.mjs +++ b/markdownlint-cli2.mjs @@ -2,20 +2,17 @@ // Imports import fsNode from "node:fs"; -import { createRequire } from "node:module"; -const dynamicRequire = createRequire(import.meta.url); import os from "node:os"; import pathDefault from "node:path"; const pathPosix = pathDefault.posix; import { pathToFileURL } from "node:url"; import { globby } from "globby"; import micromatch from "micromatch"; -import { applyFixes, getVersion } from "markdownlint"; +import { applyFixes, getVersion, resolveModule } from "markdownlint"; import { lint, extendConfig, readConfig } from "markdownlint/promise"; import { expandTildePath } from "markdownlint/helpers"; import appendToArray from "./append-to-array.mjs"; import mergeOptions from "./merge-options.mjs"; -import resolveModule from "./resolve-module.mjs"; import parsers from "./parsers/parsers.mjs"; import jsoncParse from "./parsers/jsonc-parse.mjs"; import yamlParse from "./parsers/yaml-parse.mjs"; @@ -78,7 +75,7 @@ const importModule = async (dirOrDirs, id, noImport) => { let moduleName = null; try { try { - moduleName = pathToFileURL(resolveModule(dynamicRequire, expandId, dirs)); + moduleName = pathToFileURL(resolveModule(expandId, dirs)); } catch (error) { errors.push(error); moduleName = diff --git a/package.json b/package.json index f8fda51d..38189726 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "playwright-test": "playwright test --config ./webworker/playwright.config.mjs", "playwright-test-docker": "docker run --rm --volume $PWD:/home/workdir --workdir /home/workdir --ipc=host mcr.microsoft.com/playwright:v1.49.1 npm run playwright-test", "schema": "cpy ./node_modules/markdownlint/schema/markdownlint-config-schema.json ./schema --flat", - "test": "ava --timeout=1m test/append-to-array-test.mjs test/fs-mock-test.mjs test/fs-virtual-test.mjs test/markdownlint-cli2-test.mjs test/markdownlint-cli2-test-exec.mjs test/markdownlint-cli2-test-exports.mjs test/markdownlint-cli2-test-fs.mjs test/markdownlint-cli2-test-main.mjs test/merge-options-test.mjs test/resolve-module-test.mjs", + "test": "ava --timeout=1m test/append-to-array-test.mjs test/fs-mock-test.mjs test/fs-virtual-test.mjs test/markdownlint-cli2-test.mjs test/markdownlint-cli2-test-exec.mjs test/markdownlint-cli2-test-exports.mjs test/markdownlint-cli2-test-fs.mjs test/markdownlint-cli2-test-main.mjs test/merge-options-test.mjs", "test-cover": "c8 --100 npm test", "test-docker-hub-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker image rm davidanson/markdownlint-cli2:v$VERSION davidanson/markdownlint-cli2:latest || true && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:v$VERSION \"*.md\" && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:latest \"*.md\"", "test-docker-hub-image-rules": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker image rm davidanson/markdownlint-cli2-rules:v$VERSION davidanson/markdownlint-cli2-rules:latest || true && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2-rules:v$VERSION \"*.md\" && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2-rules:latest \"*.md\"", @@ -68,7 +68,6 @@ "parsers/jsonc-parse.mjs", "parsers/yaml-parse.mjs", "README.md", - "resolve-module.mjs", "schema/markdownlint-cli2-config-schema.json", "schema/markdownlint-config-schema.json", "schema/ValidatingConfiguration.md" diff --git a/resolve-module.mjs b/resolve-module.mjs deleted file mode 100644 index 13c87ac5..00000000 --- a/resolve-module.mjs +++ /dev/null @@ -1,16 +0,0 @@ -// @ts-check - -/** - * Wrapper for calling Node's require.resolve with additional paths. - * @param {object} require Node's require implementation (or equivalent). - * @param {string} request Module path to require. - * @param {string[]} paths Paths to resolve module location from. - * @returns {string} Resolved file name. - */ -const resolveModule = (require, request, paths) => { - const resolvePaths = require.resolve.paths ? require.resolve.paths("") : []; - const allPaths = [ ...paths, ...resolvePaths ]; - return require.resolve(request, { "paths": allPaths }); -}; - -export default resolveModule; diff --git a/test/resolve-module-test.mjs b/test/resolve-module-test.mjs deleted file mode 100644 index 2db0f549..00000000 --- a/test/resolve-module-test.mjs +++ /dev/null @@ -1,101 +0,0 @@ -// @ts-check - -import test from "ava"; -import path from "node:path"; -import { __dirname } from "./esm-helpers.mjs"; -import resolve from "../resolve-module.mjs"; - -import { createRequire } from "node:module"; -const require = createRequire(import.meta.url); - -test("built-in module", (t) => { - t.plan(1); - t.deepEqual( - require.resolve("node:fs"), - resolve(require, "node:fs", [ __dirname(import.meta) ]) - ); -}); - -test("locally-installed module", (t) => { - t.plan(1); - t.deepEqual( - require.resolve("micromatch"), - resolve(require, "micromatch", [ __dirname(import.meta) ]) - ); -}); - -test("relative (to __dirname(import.meta)) path to module", (t) => { - t.plan(1); - t.deepEqual( - require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolve( - require, - "./customRules/node_modules/markdownlint-rule-sample-commonjs", - [ __dirname(import.meta) ] - ) - ); -}); - -test("module in alternate node_modules", (t) => { - t.plan(2); - t.throws( - // @ts-ignore - () => require.resolve("markdownlint-rule-sample-commonjs"), - { "code": "MODULE_NOT_FOUND" } - ); - t.deepEqual( - require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolve( - require, - "markdownlint-rule-sample-commonjs", - [ path.join(__dirname(import.meta), "customRules") ] - ) - ); -}); - -test("module in alternate node_modules and no require.resolve.paths", (t) => { - t.plan(2); - // @ts-ignore - delete require.resolve.paths; - t.throws( - // @ts-ignore - () => require.resolve("markdownlint-rule-sample-commonjs"), - { "code": "MODULE_NOT_FOUND" } - ); - t.deepEqual( - require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolve( - require, - "markdownlint-rule-sample-commonjs", - [ path.join(__dirname(import.meta), "customRules") ] - ) - ); -}); - -test("module local, relative, and in alternate node_modules", (t) => { - t.plan(3); - const dirs = [ - __dirname(import.meta), - path.join(__dirname(import.meta), "customRules") - ]; - t.deepEqual( - require.resolve("micromatch"), - resolve(require, "micromatch", dirs) - ); - t.deepEqual( - require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolve( - require, - "./customRules/node_modules/markdownlint-rule-sample-commonjs", - dirs - ) - ); - t.deepEqual( - require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolve( - require, - "markdownlint-rule-sample-commonjs", - dirs - ) - ); -}); diff --git a/webworker/module-stub.cjs b/webworker/module-stub.cjs deleted file mode 100644 index fec94871..00000000 --- a/webworker/module-stub.cjs +++ /dev/null @@ -1,8 +0,0 @@ -// @ts-check - -"use strict"; - -module.exports = { - // @ts-ignore - "createRequire": () => require -}; diff --git a/webworker/webpack.config.cjs b/webworker/webpack.config.cjs index 4b2c0732..0b0a9d77 100644 --- a/webworker/webpack.config.cjs +++ b/webworker/webpack.config.cjs @@ -52,7 +52,6 @@ module.exports = { "fallback": { "buffer": false, "fs": false, - "module": require.resolve("./module-stub.cjs"), "os": require.resolve("./os-stub.cjs"), "path": require.resolve("path-browserify"), "process": require.resolve("./process-stub.cjs"), From d174eb7a8f35e05d4065c82d375ad84aa0b32352 Mon Sep 17 00:00:00 2001 From: David Anson Date: Thu, 16 Jan 2025 22:30:52 -0800 Subject: [PATCH 10/10] Update to version 0.17.2. --- CHANGELOG.md | 4 +++ README.md | 6 ++--- markdownlint-cli2.mjs | 2 +- package.json | 2 +- schema/markdownlint-cli2-config-schema.json | 30 ++++++++++----------- 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f307dc1c..df8d6869 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.17.2 + +- Update dependencies (including `markdownlint`) + ## 0.17.1 - Update dependencies (including `markdownlint`) diff --git a/README.md b/README.md index 9dc51c63..4207587e 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ A container image [`davidanson/markdownlint-cli2`][docker-hub-markdownlint-cli2] can also be used (e.g., as part of a CI pipeline): ```bash -docker run -v $PWD:/workdir davidanson/markdownlint-cli2:v0.17.1 "**/*.md" "#node_modules" +docker run -v $PWD:/workdir davidanson/markdownlint-cli2:v0.17.2 "**/*.md" "#node_modules" ``` Notes: @@ -166,7 +166,7 @@ Notes: - A custom working directory can be specified with Docker's `-w` flag: ```bash - docker run -w /myfolder -v $PWD:/myfolder davidanson/markdownlint-cli2:v0.17.1 "**/*.md" "#node_modules" + docker run -w /myfolder -v $PWD:/myfolder davidanson/markdownlint-cli2:v0.17.2 "**/*.md" "#node_modules" ``` For convenience, the container image @@ -413,7 +413,7 @@ reference to the `repos` list in that project's `.pre-commit-config.yaml` like: ```yaml - repo: https://github.com/DavidAnson/markdownlint-cli2 - rev: v0.17.1 + rev: v0.17.2 hooks: - id: markdownlint-cli2 ``` diff --git a/markdownlint-cli2.mjs b/markdownlint-cli2.mjs index 15c75181..abb11751 100755 --- a/markdownlint-cli2.mjs +++ b/markdownlint-cli2.mjs @@ -19,7 +19,7 @@ import yamlParse from "./parsers/yaml-parse.mjs"; // Variables const packageName = "markdownlint-cli2"; -const packageVersion = "0.17.1"; +const packageVersion = "0.17.2"; const libraryName = "markdownlint"; const libraryVersion = getVersion(); const bannerMessage = `${packageName} v${packageVersion} (${libraryName} v${libraryVersion})`; diff --git a/package.json b/package.json index 38189726..addf41fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "markdownlint-cli2", - "version": "0.17.1", + "version": "0.17.2", "description": "A fast, flexible, configuration-based command-line interface for linting Markdown/CommonMark files with the `markdownlint` library", "author": { "name": "David Anson", diff --git a/schema/markdownlint-cli2-config-schema.json b/schema/markdownlint-cli2-config-schema.json index 385e4f2d..84525778 100644 --- a/schema/markdownlint-cli2-config-schema.json +++ b/schema/markdownlint-cli2-config-schema.json @@ -1,13 +1,13 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/v0.17.1/schema/markdownlint-cli2-config-schema.json", + "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/v0.17.2/schema/markdownlint-cli2-config-schema.json", "title": "markdownlint-cli2 configuration schema", "type": "object", "properties": { "$schema": { "description": "JSON Schema URI (expected by some editors)", "type": "string", - "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/v0.17.1/schema/markdownlint-cli2-config-schema.json" + "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/v0.17.2/schema/markdownlint-cli2-config-schema.json" }, "config": { "description": "markdownlint configuration schema : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/schema/.markdownlint.jsonc", @@ -15,7 +15,7 @@ "default": {} }, "customRules": { - "description": "Module names or paths of custom rules to load and use when linting : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Module names or paths of custom rules to load and use when linting : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "array", "default": [], "items": { @@ -25,18 +25,18 @@ } }, "fix": { - "description": "Whether to enable fixing of linting errors reported by rules that emit fix information : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Whether to enable fixing of linting errors reported by rules that emit fix information : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "boolean", "default": false }, "frontMatter": { - "description": "Regular expression used to match and ignore any front matter at the beginning of a document : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Regular expression used to match and ignore any front matter at the beginning of a document : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "string", "minLength": 1, "default": "" }, "gitignore": { - "description": "Whether to ignore files referenced by .gitignore (or glob expression) (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Whether to ignore files referenced by .gitignore (or glob expression) (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": [ "boolean", "string" @@ -44,7 +44,7 @@ "default": false }, "globs": { - "description": "Glob expressions to include when linting (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Glob expressions to include when linting (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "array", "default": [], "items": { @@ -54,7 +54,7 @@ } }, "ignores": { - "description": "Glob expressions to ignore when linting : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Glob expressions to ignore when linting : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "array", "default": [], "items": { @@ -64,7 +64,7 @@ } }, "markdownItPlugins": { - "description": "markdown-it plugins to load and use when linting : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "markdown-it plugins to load and use when linting : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "array", "default": [], "items": { @@ -84,7 +84,7 @@ } }, "modulePaths": { - "description": "Additional paths to resolve module locations from : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Additional paths to resolve module locations from : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "array", "default": [], "items": { @@ -94,22 +94,22 @@ } }, "noBanner": { - "description": "Whether to disable the display of the banner message and version numbers on stdout (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Whether to disable the display of the banner message and version numbers on stdout (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "boolean", "default": false }, "noInlineConfig": { - "description": "Whether to disable support of HTML comments within Markdown content : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Whether to disable support of HTML comments within Markdown content : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "boolean", "default": false }, "noProgress": { - "description": "Whether to disable the display of progress on stdout (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Whether to disable the display of progress on stdout (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "boolean", "default": false }, "outputFormatters": { - "description": "Output formatters to load and use to customize markdownlint-cli2 output (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Output formatters to load and use to customize markdownlint-cli2 output (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "array", "default": [], "items": { @@ -129,7 +129,7 @@ } }, "showFound": { - "description": "Whether to show the list of found files on stdout (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.1/README.md#markdownlint-cli2jsonc", + "description": "Whether to show the list of found files on stdout (only valid at the root) : https://github.com/DavidAnson/markdownlint-cli2/blob/v0.17.2/README.md#markdownlint-cli2jsonc", "type": "boolean", "default": false }