Implement markdownlint-disable-line inline comment (behaves like markdownlint-disable-next-line, but for the current line) (fixes #524).

This commit is contained in:
David Anson 2022-05-15 15:59:11 -07:00
parent 5f5f44e8e0
commit 3792613d2d
8 changed files with 686 additions and 13 deletions

View file

@ -169,11 +169,13 @@ appear in the final markup):
* Disable all rules: `<!-- markdownlint-disable -->`
* Enable all rules: `<!-- markdownlint-enable -->`
* Disable all rules for the next line only:
`<!-- markdownlint-disable-next-line -->`
* Disable all rules for the current line: `<!-- markdownlint-disable-line -->`
* Disable all rules for the next line: `<!-- markdownlint-disable-next-line -->`
* Disable one or more rules by name: `<!-- markdownlint-disable MD001 MD005 -->`
* Enable one or more rules by name: `<!-- markdownlint-enable MD001 MD005 -->`
* Disable one or more rules by name for the next line only:
* Disable one or more rules by name for the current line:
`<!-- markdownlint-disable-line MD001 MD005 -->`
* Disable one or more rules by name for the next line:
`<!-- markdownlint-disable-next-line MD001 MD005 -->`
* Capture the current rule configuration: `<!-- markdownlint-capture -->`
* Restore the captured rule configuration: `<!-- markdownlint-restore -->`
@ -187,6 +189,12 @@ deliberate space * in * emphasis
Or:
```markdown
deliberate space * in * emphasis <!-- markdownlint-disable-line no-space-in-emphasis -->
```
Or:
```markdown
<!-- markdownlint-disable no-space-in-emphasis -->
deliberate space * in * emphasis

View file

@ -41,7 +41,7 @@ module.exports.frontMatterRe =
// Regular expression for matching the start of inline disable/enable comments
var inlineCommentStartRe =
// eslint-disable-next-line max-len
/(<!--\s*markdownlint-(disable|enable|capture|restore|disable-file|enable-file|disable-next-line|configure-file))(?:\s|-->)/ig;
/(<!--\s*markdownlint-(disable|enable|capture|restore|disable-file|enable-file|disable-line|disable-next-line|configure-file))(?:\s|-->)/ig;
module.exports.inlineCommentStartRe = inlineCommentStartRe;
// Regular expression for matching HTML elements
var htmlElementRe = /<(([A-Za-z][A-Za-z0-9-]*)(?:\s[^>]*)?)\/?>/g;
@ -1526,9 +1526,11 @@ function getEnabledRulesPerLineNumber(ruleList, lines, frontMatterLines, noInlin
enabledRulesPerLineNumber.push(enabledRules);
}
// eslint-disable-next-line jsdoc/require-jsdoc
function disableNextLine(action, parameter, lineNumber) {
if (action === "DISABLE-NEXT-LINE") {
var nextLineNumber = frontMatterLines.length + lineNumber + 1;
function disableLineNextLine(action, parameter, lineNumber) {
var disableLine = (action === "DISABLE-LINE");
var disableNextLine = (action === "DISABLE-NEXT-LINE");
if (disableLine || disableNextLine) {
var nextLineNumber = frontMatterLines.length + lineNumber + (disableNextLine ? 1 : 0);
enabledRulesPerLineNumber[nextLineNumber] =
applyEnableDisable(action, parameter, enabledRulesPerLineNumber[nextLineNumber] || {});
}
@ -1544,7 +1546,7 @@ function getEnabledRulesPerLineNumber(ruleList, lines, frontMatterLines, noInlin
capturedRules = enabledRules;
handleInlineConfig(lines, enableDisableFile);
handleInlineConfig(lines, captureRestoreEnableDisable, updateLineState);
handleInlineConfig(lines, disableNextLine);
handleInlineConfig(lines, disableLineNextLine);
// Return results
return {
effectiveConfig: effectiveConfig,

View file

@ -15,7 +15,7 @@ module.exports.frontMatterRe =
// Regular expression for matching the start of inline disable/enable comments
const inlineCommentStartRe =
// eslint-disable-next-line max-len
/(<!--\s*markdownlint-(disable|enable|capture|restore|disable-file|enable-file|disable-next-line|configure-file))(?:\s|-->)/ig;
/(<!--\s*markdownlint-(disable|enable|capture|restore|disable-file|enable-file|disable-line|disable-next-line|configure-file))(?:\s|-->)/ig;
module.exports.inlineCommentStartRe = inlineCommentStartRe;
// Regular expression for matching HTML elements

View file

@ -410,9 +410,12 @@ function getEnabledRulesPerLineNumber(
enabledRulesPerLineNumber.push(enabledRules);
}
// eslint-disable-next-line jsdoc/require-jsdoc
function disableNextLine(action, parameter, lineNumber) {
if (action === "DISABLE-NEXT-LINE") {
const nextLineNumber = frontMatterLines.length + lineNumber + 1;
function disableLineNextLine(action, parameter, lineNumber) {
const disableLine = (action === "DISABLE-LINE");
const disableNextLine = (action === "DISABLE-NEXT-LINE");
if (disableLine || disableNextLine) {
const nextLineNumber =
frontMatterLines.length + lineNumber + (disableNextLine ? 1 : 0);
enabledRulesPerLineNumber[nextLineNumber] =
applyEnableDisable(
action,
@ -433,7 +436,7 @@ function getEnabledRulesPerLineNumber(
capturedRules = enabledRules;
handleInlineConfig(lines, enableDisableFile);
handleInlineConfig(lines, captureRestoreEnableDisable, updateLineState);
handleInlineConfig(lines, disableNextLine);
handleInlineConfig(lines, disableLineNextLine);
// Return results
return {
effectiveConfig,

View file

@ -18,3 +18,18 @@ front: matter
<hr/>
<hr/> {MD033}
<hr/> {MD033}
<hr/> {MD033}
<hr/> {MD033}
<hr/><!-- markdownlint-disable-line -->
<hr/> {MD033}
<hr/> {MD033}
<hr/> <!-- markdownlint-disable-line -->
<hr/> {MD033}
<hr/> {MD033}
<!-- markdownlint-disable-line --><hr/>
<hr/> {MD033}
<hr/> {MD033}
<!-- markdownlint-disable-line --> <hr/>
<hr/> {MD033}
<hr/> {MD033}

View file

@ -88,5 +88,20 @@ hard tab / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable-next-line MD038 -->
hard tab / space *in * emphasis {MD037} / space `in ` code
hard tab / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-enable MD010-->
hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
hard tab / space *in * emphasis / space `in ` code <!-- markdownlint-disable-line -->
hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable-line -->hard tab / space *in * emphasis / space `in ` code
hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable-line MD010 MD038 --> hard tab / space *in * emphasis {MD037} / space `in ` code
hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
hard tab / space *in * emphasis {MD037} / space `in ` code <!-- markdownlint-disable-line MD010 --><!-- markdownlint-disable-line MD038 -->
hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable MD010-->
hard tab / space *in * emphasis {MD037} / space `in ` code {MD038}
hard tab / space *in * emphasis {MD037} / space `in ` code<!-- markdownlint-disable-line MD038 -->
hard tab / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable-next-line -->

View file

@ -11366,6 +11366,166 @@ Generated by [AVA](https://avajs.dev).
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 22,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 23,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 25,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 26,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 28,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 29,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 31,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 32,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 34,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
{
errorContext: null,
errorDetail: 'Element: hr',
errorRange: [
1,
5,
],
fixInfo: null,
lineNumber: 35,
ruleDescription: 'Inline HTML',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md033',
ruleNames: [
'MD033',
'no-inline-html',
],
},
],
fixed: `---␊
front: matter␊
@ -11387,6 +11547,21 @@ Generated by [AVA](https://avajs.dev).
<hr/>
<hr/> {MD033}␊
<hr/> {MD033}␊
<hr/> {MD033}␊
<hr/> {MD033}␊
<hr/><!-- markdownlint-disable-line -->
<hr/> {MD033}␊
<hr/> {MD033}␊
<hr/> <!-- markdownlint-disable-line -->
<hr/> {MD033}␊
<hr/> {MD033}␊
<!-- markdownlint-disable-line --><hr/>
<hr/> {MD033}␊
<hr/> {MD033}␊
<!-- markdownlint-disable-line --> <hr/>
<hr/> {MD033}␊
<hr/> {MD033}␊
`,
}
@ -17754,6 +17929,106 @@ Generated by [AVA](https://avajs.dev).
'no-hard-tabs',
],
},
{
errorContext: null,
errorDetail: 'Column: 5',
errorRange: [
5,
1,
],
fixInfo: {
deleteCount: 1,
editColumn: 5,
insertText: ' ',
},
lineNumber: 93,
ruleDescription: 'Hard tabs',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md010',
ruleNames: [
'MD010',
'no-hard-tabs',
],
},
{
errorContext: null,
errorDetail: 'Column: 5',
errorRange: [
5,
1,
],
fixInfo: {
deleteCount: 1,
editColumn: 5,
insertText: ' ',
},
lineNumber: 95,
ruleDescription: 'Hard tabs',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md010',
ruleNames: [
'MD010',
'no-hard-tabs',
],
},
{
errorContext: null,
errorDetail: 'Column: 5',
errorRange: [
5,
1,
],
fixInfo: {
deleteCount: 1,
editColumn: 5,
insertText: ' ',
},
lineNumber: 97,
ruleDescription: 'Hard tabs',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md010',
ruleNames: [
'MD010',
'no-hard-tabs',
],
},
{
errorContext: null,
errorDetail: 'Column: 5',
errorRange: [
5,
1,
],
fixInfo: {
deleteCount: 1,
editColumn: 5,
insertText: ' ',
},
lineNumber: 99,
ruleDescription: 'Hard tabs',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md010',
ruleNames: [
'MD010',
'no-hard-tabs',
],
},
{
errorContext: null,
errorDetail: 'Column: 5',
errorRange: [
5,
1,
],
fixInfo: {
deleteCount: 1,
editColumn: 5,
insertText: ' ',
},
lineNumber: 101,
ruleDescription: 'Hard tabs',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md010',
ruleNames: [
'MD010',
'no-hard-tabs',
],
},
{
errorContext: null,
errorDetail: 'Element: b',
@ -18310,6 +18585,206 @@ Generated by [AVA](https://avajs.dev).
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
26,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 26,
insertText: '*in*',
},
lineNumber: 93,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
26,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 26,
insertText: '*in*',
},
lineNumber: 95,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
26,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 26,
insertText: '*in*',
},
lineNumber: 97,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
65,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 65,
insertText: '*in*',
},
lineNumber: 98,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
26,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 26,
insertText: '*in*',
},
lineNumber: 99,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
18,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 18,
insertText: '*in*',
},
lineNumber: 100,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
26,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 26,
insertText: '*in*',
},
lineNumber: 101,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
18,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 18,
insertText: '*in*',
},
lineNumber: 103,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
18,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 18,
insertText: '*in*',
},
lineNumber: 104,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '*in *',
errorDetail: null,
errorRange: [
18,
5,
],
fixInfo: {
deleteCount: 5,
editColumn: 18,
insertText: '*in*',
},
lineNumber: 105,
ruleDescription: 'Spaces inside emphasis markers',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md037',
ruleNames: [
'MD037',
'no-space-in-emphasis',
],
},
{
errorContext: '`in `',
errorDetail: null,
@ -18710,6 +19185,146 @@ Generated by [AVA](https://avajs.dev).
'no-space-in-code',
],
},
{
errorContext: '`in `',
errorDetail: null,
errorRange: [
57,
5,
],
fixInfo: {
deleteCount: 3,
editColumn: 58,
insertText: 'in',
},
lineNumber: 93,
ruleDescription: 'Spaces inside code span elements',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038',
ruleNames: [
'MD038',
'no-space-in-code',
],
},
{
errorContext: '`in `',
errorDetail: null,
errorRange: [
57,
5,
],
fixInfo: {
deleteCount: 3,
editColumn: 58,
insertText: 'in',
},
lineNumber: 95,
ruleDescription: 'Spaces inside code span elements',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038',
ruleNames: [
'MD038',
'no-space-in-code',
],
},
{
errorContext: '`in `',
errorDetail: null,
errorRange: [
57,
5,
],
fixInfo: {
deleteCount: 3,
editColumn: 58,
insertText: 'in',
},
lineNumber: 97,
ruleDescription: 'Spaces inside code span elements',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038',
ruleNames: [
'MD038',
'no-space-in-code',
],
},
{
errorContext: '`in `',
errorDetail: null,
errorRange: [
57,
5,
],
fixInfo: {
deleteCount: 3,
editColumn: 58,
insertText: 'in',
},
lineNumber: 99,
ruleDescription: 'Spaces inside code span elements',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038',
ruleNames: [
'MD038',
'no-space-in-code',
],
},
{
errorContext: '`in `',
errorDetail: null,
errorRange: [
57,
5,
],
fixInfo: {
deleteCount: 3,
editColumn: 58,
insertText: 'in',
},
lineNumber: 101,
ruleDescription: 'Spaces inside code span elements',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038',
ruleNames: [
'MD038',
'no-space-in-code',
],
},
{
errorContext: '`in `',
errorDetail: null,
errorRange: [
49,
5,
],
fixInfo: {
deleteCount: 3,
editColumn: 50,
insertText: 'in',
},
lineNumber: 103,
ruleDescription: 'Spaces inside code span elements',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038',
ruleNames: [
'MD038',
'no-space-in-code',
],
},
{
errorContext: '`in `',
errorDetail: null,
errorRange: [
49,
5,
],
fixInfo: {
deleteCount: 3,
editColumn: 50,
insertText: 'in',
},
lineNumber: 105,
ruleDescription: 'Spaces inside code span elements',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038',
ruleNames: [
'MD038',
'no-space-in-code',
],
},
],
fixed: `# Heading␊
@ -18801,6 +19416,21 @@ Generated by [AVA](https://avajs.dev).
<!-- markdownlint-disable-next-line MD038 -->
hard tab / space *in* emphasis {MD037} / space \`in \` code␊
hard tab / space *in* emphasis {MD037} / space \`in\` code {MD038}␊
<!-- markdownlint-enable MD010-->
hard tab {MD010} / space *in* emphasis {MD037} / space \`in\` code {MD038}␊
hard tab / space *in * emphasis / space \`in \` code <!-- markdownlint-disable-line -->
hard tab {MD010} / space *in* emphasis {MD037} / space \`in\` code {MD038}␊
<!-- markdownlint-disable-line -->hard tab / space *in * emphasis / space \`in \` code␊
hard tab {MD010} / space *in* emphasis {MD037} / space \`in\` code {MD038}␊
<!-- markdownlint-disable-line MD010 MD038 --> hard tab / space *in* emphasis {MD037} / space \`in \` code␊
hard tab {MD010} / space *in* emphasis {MD037} / space \`in\` code {MD038}␊
hard tab / space *in* emphasis {MD037} / space \`in \` code <!-- markdownlint-disable-line MD010 --><!-- markdownlint-disable-line MD038 -->
hard tab {MD010} / space *in* emphasis {MD037} / space \`in\` code {MD038}␊
<!-- markdownlint-disable MD010-->
hard tab / space *in* emphasis {MD037} / space \`in\` code {MD038}␊
hard tab / space *in* emphasis {MD037} / space \`in \` code<!-- markdownlint-disable-line MD038 -->
hard tab / space *in* emphasis {MD037} / space \`in\` code {MD038}␊
<!-- markdownlint-disable-next-line -->`,
}