From 2ab49911eec8fc09ed4f13a6d7f16ff28631c830 Mon Sep 17 00:00:00 2001 From: TKDev7 Date: Mon, 25 Aug 2025 12:08:31 +0300 Subject: [PATCH 1/6] feat: add fenced-code-meta rule --- README.md | 1 + docs/rules/fenced-code-meta.md | 76 +++++++ src/rules/fenced-code-meta.js | 99 +++++++++ tests/rules/fenced-code-meta.test.js | 295 +++++++++++++++++++++++++++ 4 files changed, 471 insertions(+) create mode 100644 docs/rules/fenced-code-meta.md create mode 100644 src/rules/fenced-code-meta.js create mode 100644 tests/rules/fenced-code-meta.test.js diff --git a/README.md b/README.md index 1a985e0b..f1b8a321 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ export default defineConfig([ | **Rule Name** | **Description** | **Recommended** | | :- | :- | :-: | | [`fenced-code-language`](./docs/rules/fenced-code-language.md) | Require languages for fenced code blocks | yes | +| [`fenced-code-meta`](./docs/rules/fenced-code-meta.md) | Require or disallow metadata for fenced code blocks | no | | [`heading-increment`](./docs/rules/heading-increment.md) | Enforce heading levels increment by one | yes | | [`no-bare-urls`](./docs/rules/no-bare-urls.md) | Disallow bare URLs | no | | [`no-duplicate-definitions`](./docs/rules/no-duplicate-definitions.md) | Disallow duplicate definitions | yes | diff --git a/docs/rules/fenced-code-meta.md b/docs/rules/fenced-code-meta.md new file mode 100644 index 00000000..a70dc30c --- /dev/null +++ b/docs/rules/fenced-code-meta.md @@ -0,0 +1,76 @@ +# fenced-code-meta + +Require or disallow metadata for fenced code blocks. + +## Background + +Fenced code blocks can include an info string after the opening fence. The first word typically specifies the language (e.g., `js`). Many tools also support additional metadata after the language (separated by whitespace), such as titles or line highlighting parameters. This rule enforces a consistent policy for including such metadata. + +## Rule Details + +This rule warns when the presence of metadata in a fenced code block's info string does not match the configured mode. + +Examples of **incorrect** code for this rule: + +````markdown + + +```js +console.log("Hello, world!"); +``` +```` + +## Options + +This rule accepts a single string option: + +- "always" (default): Require metadata when a language is specified. +- "never": Disallow metadata in the info string. + +Examples of **incorrect** code when configured as `"fenced-code-meta": ["error", "always"]`: + +````markdown + + +```js +console.log("Hello, world!"); +``` +```` + +Examples of **correct** code when configured as `"fenced-code-meta": ["error", "always"]`: + +````markdown + + +```js title="example.js" +console.log("Hello, world!"); +``` +```` + +Examples of **incorrect** code when configured as `"fenced-code-meta": ["error", "never"]`: + +```markdown + + +~~~js title="example.js" +console.log("Hello, world!"); +~~~ +``` + +Examples of **correct** code when configured as `"fenced-code-meta": ["error", "never"]`: + +```markdown + + +~~~js +console.log("Hello, world!"); +~~~ +``` + +## When Not to Use It + +If you aren't concerned with metadata in info strings, you can safely disable this rule. + +## Prior Art + +* [MD040 - Fenced code blocks should have a language specified](https://github.com/DavidAnson/markdownlint/blob/main/doc/md040.md) diff --git a/src/rules/fenced-code-meta.js b/src/rules/fenced-code-meta.js new file mode 100644 index 00000000..21ed4317 --- /dev/null +++ b/src/rules/fenced-code-meta.js @@ -0,0 +1,99 @@ +/** + * @fileoverview Rule to require or disallow metadata for fenced code blocks. + * @author TKDev7 + */ + +//----------------------------------------------------------------------------- +// Type Definitions +//----------------------------------------------------------------------------- + +/** + * @import { MarkdownRuleDefinition } from "../types.js"; + * @typedef {"missingMetadata" | "disallowedMetadata"} FencedCodeMetaMessageIds + * @typedef {["always" | "never"]} FencedCodeMetaOptions + * @typedef {MarkdownRuleDefinition<{ RuleOptions: FencedCodeMetaOptions, MessageIds: FencedCodeMetaMessageIds }>} FencedCodeMetaRuleDefinition + */ + +//----------------------------------------------------------------------------- +// Rule Definition +//----------------------------------------------------------------------------- + +/** @type {FencedCodeMetaRuleDefinition} */ +export default { + meta: { + type: "problem", + + docs: { + recommended: false, + description: "Require or disallow metadata for fenced code blocks", + url: "https://github.com/eslint/markdown/blob/main/docs/rules/fenced-code-meta.md", + }, + + messages: { + missingMetadata: "Missing code block metadata.", + disallowedMetadata: "Code block metadata is not allowed.", + }, + + schema: [ + { + enum: ["always", "never"], + }, + ], + + defaultOptions: ["always"], + }, + + create(context) { + const [mode] = context.options; + const { sourceCode } = context; + + return { + code(node) { + const lineText = sourceCode.lines[node.position.start.line - 1]; + + if (mode === "always") { + if (node.lang && !node.meta) { + const langStart = lineText.indexOf(node.lang); + + context.report({ + loc: { + start: node.position.start, + end: { + line: node.position.start.line, + column: + node.position.start.column + + langStart + + node.lang.trim().length, + }, + }, + messageId: "missingMetadata", + }); + } + + return; + } + + if (node.meta) { + const metaStart = lineText.lastIndexOf(node.meta); + + context.report({ + loc: { + start: { + line: node.position.start.line, + column: node.position.start.column + metaStart, + }, + end: { + line: node.position.start.line, + column: + node.position.start.column + + metaStart + + node.meta.trim().length, + }, + }, + messageId: "disallowedMetadata", + }); + } + }, + }; + }, +}; diff --git a/tests/rules/fenced-code-meta.test.js b/tests/rules/fenced-code-meta.test.js new file mode 100644 index 00000000..023b34f1 --- /dev/null +++ b/tests/rules/fenced-code-meta.test.js @@ -0,0 +1,295 @@ +/** + * @fileoverview Tests for fenced-code-meta rule. + * @author TKDev7 + */ + +//------------------------------------------------------------------------------ +// Imports +//------------------------------------------------------------------------------ + +import rule from "../../src/rules/fenced-code-meta.js"; +import markdown from "../../src/index.js"; +import { RuleTester } from "eslint"; + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +const ruleTester = new RuleTester({ + plugins: { + markdown, + }, + language: "markdown/commonmark", +}); + +ruleTester.run("fenced-code-meta", rule, { + valid: [ + `\`\`\` + console.log("Hello, world!"); + \`\`\``, + `\`\`\`js foo + console.log("Hello, world!"); + \`\`\``, + `\`\`\` js foo + console.log("Hello, world!"); + \`\`\``, + { + code: `\`\`\` + console.log("Hello, world!"); + \`\`\``, + options: ["never"], + }, + { + code: `\`\`\`js + console.log("Hello, world!"); + \`\`\``, + options: ["never"], + }, + { + code: `\`\`\` js + console.log("Hello, world!"); + \`\`\``, + options: ["never"], + }, + `~~~ + console.log("Hello, world!"); + ~~~`, + `~~~js foo + console.log("Hello, world!"); + ~~~`, + `~~~ js foo + console.log("Hello, world!"); + ~~~`, + { + code: `~~~ + console.log("Hello, world!"); + ~~~`, + options: ["never"], + }, + { + code: `~~~js + console.log("Hello, world!"); + ~~~`, + options: ["never"], + }, + { + code: `~~~ js + console.log("Hello, world!"); + ~~~`, + options: ["never"], + }, + '\tconsole.log("Hello, world!");', + { + code: '\tconsole.log("Hello, world!");', + options: ["never"], + }, + ], + invalid: [ + { + code: `\`\`\`javascript + console.log("Hello, world!"); + \`\`\``, + errors: [ + { + messageId: "missingMetadata", + line: 1, + column: 1, + endLine: 1, + endColumn: 14, + }, + ], + }, + { + code: `~~~javascript + console.log("Hello, world!"); + ~~~`, + errors: [ + { + messageId: "missingMetadata", + line: 1, + column: 1, + endLine: 1, + endColumn: 14, + }, + ], + }, + { + code: `\`\`\` js + console.log("Hello, world!"); + \`\`\``, + errors: [ + { + messageId: "missingMetadata", + line: 1, + column: 1, + endLine: 1, + endColumn: 7, + }, + ], + }, + { + code: `~~~ js + console.log("Hello, world!"); + ~~~`, + errors: [ + { + messageId: "missingMetadata", + line: 1, + column: 1, + endLine: 1, + endColumn: 7, + }, + ], + }, + { + code: `\`\`\`js title="example.js" + console.log("Hello, world!"); + \`\`\``, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 7, + endLine: 1, + endColumn: 25, + }, + ], + }, + { + code: `~~~js title="example.js" + console.log("Hello, world!"); + ~~~`, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 7, + endLine: 1, + endColumn: 25, + }, + ], + }, + { + code: `\`\`\`js foo bar + console.log("Hello, world!"); + \`\`\``, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 7, + endLine: 1, + endColumn: 14, + }, + ], + }, + { + code: `~~~js foo bar + console.log("Hello, world!"); + ~~~`, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 7, + endLine: 1, + endColumn: 14, + }, + ], + }, + { + code: `\`\`\` js foo + console.log("Hello, world!"); + \`\`\``, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 8, + endLine: 1, + endColumn: 11, + }, + ], + }, + { + code: `~~~ js foo + console.log("Hello, world!"); + ~~~`, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 8, + endLine: 1, + endColumn: 11, + }, + ], + }, + { + code: `\`\`\`js js + console.log("Hello, world!"); + \`\`\``, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 7, + endLine: 1, + endColumn: 9, + }, + ], + }, + { + code: `~~~js js + console.log("Hello, world!"); + ~~~`, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 7, + endLine: 1, + endColumn: 9, + }, + ], + }, + { + code: `\`\`\` js foo + console.log("Hello, world!"); + \`\`\``, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 10, + endLine: 1, + endColumn: 13, + }, + ], + }, + { + code: `~~~ js foo + console.log("Hello, world!"); + ~~~`, + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 10, + endLine: 1, + endColumn: 13, + }, + ], + }, + ], +}); From 97de75fe7e418c20680f16a8dfe4c51ab7f991be Mon Sep 17 00:00:00 2001 From: TKDev7 Date: Wed, 27 Aug 2025 12:58:12 +0300 Subject: [PATCH 2/6] revert README.md changes --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 788b106e..40a78808 100644 --- a/README.md +++ b/README.md @@ -136,19 +136,18 @@ export default defineConfig([ You can individually disable rules in Markdown using HTML comments, such as: + ```markdown - Hello world! - Goodbye world! - [Object] ``` + ### Languages From 9c5c8cc193865b0895fdebb7750d341abc0d13e5 Mon Sep 17 00:00:00 2001 From: TKDev7 Date: Tue, 2 Sep 2025 09:16:43 +0300 Subject: [PATCH 3/6] apply suggested changes from code review --- docs/rules/fenced-code-meta.md | 16 ++++----- tests/rules/fenced-code-meta.test.js | 53 ++++++++++++++-------------- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/docs/rules/fenced-code-meta.md b/docs/rules/fenced-code-meta.md index a70dc30c..79de6b1b 100644 --- a/docs/rules/fenced-code-meta.md +++ b/docs/rules/fenced-code-meta.md @@ -24,8 +24,8 @@ console.log("Hello, world!"); This rule accepts a single string option: -- "always" (default): Require metadata when a language is specified. -- "never": Disallow metadata in the info string. +- `"always"` (default): Require metadata when a language is specified. +- `"never"`: Disallow metadata in the info string. Examples of **incorrect** code when configured as `"fenced-code-meta": ["error", "always"]`: @@ -49,23 +49,23 @@ console.log("Hello, world!"); Examples of **incorrect** code when configured as `"fenced-code-meta": ["error", "never"]`: -```markdown +````markdown -~~~js title="example.js" +```js title="example.js" console.log("Hello, world!"); -~~~ ``` +```` Examples of **correct** code when configured as `"fenced-code-meta": ["error", "never"]`: -```markdown +````markdown -~~~js +```js console.log("Hello, world!"); -~~~ ``` +```` ## When Not to Use It diff --git a/tests/rules/fenced-code-meta.test.js b/tests/rules/fenced-code-meta.test.js index 023b34f1..bb4da043 100644 --- a/tests/rules/fenced-code-meta.test.js +++ b/tests/rules/fenced-code-meta.test.js @@ -10,6 +10,7 @@ import rule from "../../src/rules/fenced-code-meta.js"; import markdown from "../../src/index.js"; import { RuleTester } from "eslint"; +import dedent from "dedent"; //------------------------------------------------------------------------------ // Tests @@ -24,56 +25,56 @@ const ruleTester = new RuleTester({ ruleTester.run("fenced-code-meta", rule, { valid: [ - `\`\`\` + dedent`\`\`\` console.log("Hello, world!"); \`\`\``, - `\`\`\`js foo + dedent`\`\`\`js foo console.log("Hello, world!"); \`\`\``, - `\`\`\` js foo + dedent`\`\`\` js foo console.log("Hello, world!"); \`\`\``, { - code: `\`\`\` + code: dedent`\`\`\` console.log("Hello, world!"); \`\`\``, options: ["never"], }, { - code: `\`\`\`js + code: dedent`\`\`\`js console.log("Hello, world!"); \`\`\``, options: ["never"], }, { - code: `\`\`\` js + code: dedent`\`\`\` js console.log("Hello, world!"); \`\`\``, options: ["never"], }, - `~~~ + dedent`~~~ console.log("Hello, world!"); ~~~`, - `~~~js foo + dedent`~~~js foo console.log("Hello, world!"); ~~~`, - `~~~ js foo + dedent`~~~ js foo console.log("Hello, world!"); ~~~`, { - code: `~~~ + code: dedent`~~~ console.log("Hello, world!"); ~~~`, options: ["never"], }, { - code: `~~~js + code: dedent`~~~js console.log("Hello, world!"); ~~~`, options: ["never"], }, { - code: `~~~ js + code: dedent`~~~ js console.log("Hello, world!"); ~~~`, options: ["never"], @@ -86,7 +87,7 @@ ruleTester.run("fenced-code-meta", rule, { ], invalid: [ { - code: `\`\`\`javascript + code: dedent`\`\`\`javascript console.log("Hello, world!"); \`\`\``, errors: [ @@ -100,7 +101,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `~~~javascript + code: dedent`~~~javascript console.log("Hello, world!"); ~~~`, errors: [ @@ -114,7 +115,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `\`\`\` js + code: dedent`\`\`\` js console.log("Hello, world!"); \`\`\``, errors: [ @@ -128,7 +129,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `~~~ js + code: dedent`~~~ js console.log("Hello, world!"); ~~~`, errors: [ @@ -142,7 +143,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `\`\`\`js title="example.js" + code: dedent`\`\`\`js title="example.js" console.log("Hello, world!"); \`\`\``, options: ["never"], @@ -157,7 +158,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `~~~js title="example.js" + code: dedent`~~~js title="example.js" console.log("Hello, world!"); ~~~`, options: ["never"], @@ -172,7 +173,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `\`\`\`js foo bar + code: dedent`\`\`\`js foo bar console.log("Hello, world!"); \`\`\``, options: ["never"], @@ -187,7 +188,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `~~~js foo bar + code: dedent`~~~js foo bar console.log("Hello, world!"); ~~~`, options: ["never"], @@ -202,7 +203,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `\`\`\` js foo + code: dedent`\`\`\` js foo console.log("Hello, world!"); \`\`\``, options: ["never"], @@ -217,7 +218,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `~~~ js foo + code: dedent`~~~ js foo console.log("Hello, world!"); ~~~`, options: ["never"], @@ -232,7 +233,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `\`\`\`js js + code: dedent`\`\`\`js js console.log("Hello, world!"); \`\`\``, options: ["never"], @@ -247,7 +248,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `~~~js js + code: dedent`~~~js js console.log("Hello, world!"); ~~~`, options: ["never"], @@ -262,7 +263,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `\`\`\` js foo + code: dedent`\`\`\` js foo console.log("Hello, world!"); \`\`\``, options: ["never"], @@ -277,7 +278,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: `~~~ js foo + code: dedent`~~~ js foo console.log("Hello, world!"); ~~~`, options: ["never"], From 2159a8150ac2703fa787070e7ec742f7eb8cd911 Mon Sep 17 00:00:00 2001 From: TKDev7 Date: Thu, 4 Sep 2025 16:37:29 +0300 Subject: [PATCH 4/6] add more tests for indented code blocks --- tests/rules/fenced-code-meta.test.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/rules/fenced-code-meta.test.js b/tests/rules/fenced-code-meta.test.js index bb4da043..1fb0464e 100644 --- a/tests/rules/fenced-code-meta.test.js +++ b/tests/rules/fenced-code-meta.test.js @@ -84,6 +84,11 @@ ruleTester.run("fenced-code-meta", rule, { code: '\tconsole.log("Hello, world!");', options: ["never"], }, + '\n console.log("Hello, world!")\n', + { + code: '\n console.log("Hello, world!")\n', + options: ["never"], + }, ], invalid: [ { From cbd74394221b7b7fc070636a46562018f143c27a Mon Sep 17 00:00:00 2001 From: TKDev7 Date: Fri, 10 Oct 2025 14:22:31 +0300 Subject: [PATCH 5/6] correct column reporting for indented fences --- src/rules/fenced-code-meta.js | 13 +++++--- tests/rules/fenced-code-meta.test.js | 50 ++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/rules/fenced-code-meta.js b/src/rules/fenced-code-meta.js index 21ed4317..7598296a 100644 --- a/src/rules/fenced-code-meta.js +++ b/src/rules/fenced-code-meta.js @@ -50,10 +50,13 @@ export default { return { code(node) { const lineText = sourceCode.lines[node.position.start.line - 1]; + const fenceLineText = lineText.slice( + node.position.start.column - 1, + ); if (mode === "always") { if (node.lang && !node.meta) { - const langStart = lineText.indexOf(node.lang); + const langIndex = fenceLineText.indexOf(node.lang); context.report({ loc: { @@ -62,7 +65,7 @@ export default { line: node.position.start.line, column: node.position.start.column + - langStart + + langIndex + node.lang.trim().length, }, }, @@ -74,19 +77,19 @@ export default { } if (node.meta) { - const metaStart = lineText.lastIndexOf(node.meta); + const metaIndex = fenceLineText.lastIndexOf(node.meta); context.report({ loc: { start: { line: node.position.start.line, - column: node.position.start.column + metaStart, + column: node.position.start.column + metaIndex, }, end: { line: node.position.start.line, column: node.position.start.column + - metaStart + + metaIndex + node.meta.trim().length, }, }, diff --git a/tests/rules/fenced-code-meta.test.js b/tests/rules/fenced-code-meta.test.js index 1fb0464e..3865b8e3 100644 --- a/tests/rules/fenced-code-meta.test.js +++ b/tests/rules/fenced-code-meta.test.js @@ -147,6 +147,30 @@ ruleTester.run("fenced-code-meta", rule, { }, ], }, + { + code: " ```javascript\nconsole.log('Hello, world!');\n```", + errors: [ + { + messageId: "missingMetadata", + line: 1, + column: 3, + endLine: 1, + endColumn: 16, + }, + ], + }, + { + code: " ~~~javascript\nconsole.log('Hello, world!');\n~~~", + errors: [ + { + messageId: "missingMetadata", + line: 1, + column: 3, + endLine: 1, + endColumn: 16, + }, + ], + }, { code: dedent`\`\`\`js title="example.js" console.log("Hello, world!"); @@ -177,6 +201,32 @@ ruleTester.run("fenced-code-meta", rule, { }, ], }, + { + code: " ```js title='example.js'\nconsole.log('Hello, world!');\n```", + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 9, + endLine: 1, + endColumn: 27, + }, + ], + }, + { + code: " ~~~js title='example.js'\nconsole.log('Hello, world!');\n~~~", + options: ["never"], + errors: [ + { + messageId: "disallowedMetadata", + line: 1, + column: 9, + endLine: 1, + endColumn: 27, + }, + ], + }, { code: dedent`\`\`\`js foo bar console.log("Hello, world!"); From 406e71f44f10a4d4521f9f82e46b02b33e91b882 Mon Sep 17 00:00:00 2001 From: TKDev7 Date: Thu, 30 Oct 2025 15:01:08 +0300 Subject: [PATCH 6/6] apply suggestions --- docs/rules/fenced-code-meta.md | 2 +- src/rules/fenced-code-meta.js | 4 ++-- tests/rules/fenced-code-meta.test.js | 8 ++------ 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/docs/rules/fenced-code-meta.md b/docs/rules/fenced-code-meta.md index 79de6b1b..c3571ea7 100644 --- a/docs/rules/fenced-code-meta.md +++ b/docs/rules/fenced-code-meta.md @@ -4,7 +4,7 @@ Require or disallow metadata for fenced code blocks. ## Background -Fenced code blocks can include an info string after the opening fence. The first word typically specifies the language (e.g., `js`). Many tools also support additional metadata after the language (separated by whitespace), such as titles or line highlighting parameters. This rule enforces a consistent policy for including such metadata. +Fenced code blocks can include an [info string](https://spec.commonmark.org/0.31.2/#info-string) after the opening fence. The first word typically specifies the language (e.g., `js`). Many tools also support additional metadata after the language (separated by whitespace), such as titles or line highlighting parameters. This rule enforces a consistent policy for including such metadata. ## Rule Details diff --git a/src/rules/fenced-code-meta.js b/src/rules/fenced-code-meta.js index 7598296a..5a4294a2 100644 --- a/src/rules/fenced-code-meta.js +++ b/src/rules/fenced-code-meta.js @@ -66,7 +66,7 @@ export default { column: node.position.start.column + langIndex + - node.lang.trim().length, + node.lang.length, }, }, messageId: "missingMetadata", @@ -90,7 +90,7 @@ export default { column: node.position.start.column + metaIndex + - node.meta.trim().length, + node.meta.trimEnd().length, }, }, messageId: "disallowedMetadata", diff --git a/tests/rules/fenced-code-meta.test.js b/tests/rules/fenced-code-meta.test.js index 3865b8e3..e7b07c65 100644 --- a/tests/rules/fenced-code-meta.test.js +++ b/tests/rules/fenced-code-meta.test.js @@ -318,9 +318,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: dedent`\`\`\` js foo - console.log("Hello, world!"); - \`\`\``, + code: '``` js foo \nconsole.log("Hello, world!");\n```', options: ["never"], errors: [ { @@ -333,9 +331,7 @@ ruleTester.run("fenced-code-meta", rule, { ], }, { - code: dedent`~~~ js foo - console.log("Hello, world!"); - ~~~`, + code: '~~~ js foo \nconsole.log("Hello, world!");\n~~~', options: ["never"], errors: [ {