Update MD049/emphasis-style and MD050/strong-style to not report intraword asterisks/underscores as violations because exchanging either alters meaning (fixes #789).

This commit is contained in:
David Anson 2023-05-25 02:38:18 +00:00
parent 7005a8a438
commit 0006636f75
8 changed files with 77 additions and 22 deletions

View file

@ -6050,9 +6050,12 @@ var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"), var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
filterByTypes = _require2.filterByTypes, filterByTypes = _require2.filterByTypes,
tokenIfType = _require2.tokenIfType; tokenIfType = _require2.tokenIfType;
var intrawordRe = /\w/;
var impl = function impl(params, onError, type, asterisk, underline) { var impl = function impl(params, onError, type, asterisk, underline) {
var style = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "consistent"; var style = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "consistent";
var emphasisTokens = filterByTypes(params.parsers.micromark.tokens, [type]); var lines = params.lines,
parsers = params.parsers;
var emphasisTokens = filterByTypes(parsers.micromark.tokens, [type]);
var _iterator = _createForOfIteratorHelper(emphasisTokens), var _iterator = _createForOfIteratorHelper(emphasisTokens),
_step; _step;
try { try {
@ -6068,13 +6071,16 @@ var impl = function impl(params, onError, type, asterisk, underline) {
style = markupStyle; style = markupStyle;
} }
if (style !== markupStyle) { if (style !== markupStyle) {
for (var _i = 0, _arr = [startSequence, endSequence]; _i < _arr.length; _i++) { var underscoreIntraword = style === "underscore" && (intrawordRe.test(lines[startSequence.startLine - 1][startSequence.startColumn - 2]) || intrawordRe.test(lines[endSequence.endLine - 1][endSequence.endColumn - 1]));
var sequence = _arr[_i]; if (!underscoreIntraword) {
addError(onError, sequence.startLine, "Expected: ".concat(style, "; Actual: ").concat(markupStyle), undefined, [sequence.startColumn, sequence.text.length], { for (var _i = 0, _arr = [startSequence, endSequence]; _i < _arr.length; _i++) {
"editColumn": sequence.startColumn, var sequence = _arr[_i];
"deleteCount": sequence.text.length, addError(onError, sequence.startLine, "Expected: ".concat(style, "; Actual: ").concat(markupStyle), undefined, [sequence.startColumn, sequence.text.length], {
"insertText": style === "asterisk" ? asterisk : underline "editColumn": sequence.startColumn,
}); "deleteCount": sequence.text.length,
"insertText": style === "asterisk" ? asterisk : underline
});
}
} }
} }
} }

View file

@ -5,10 +5,13 @@
const { addError, emphasisOrStrongStyleFor } = require("../helpers"); const { addError, emphasisOrStrongStyleFor } = require("../helpers");
const { filterByTypes, tokenIfType } = require("../helpers/micromark.cjs"); const { filterByTypes, tokenIfType } = require("../helpers/micromark.cjs");
const intrawordRe = /\w/;
const impl = const impl =
(params, onError, type, asterisk, underline, style = "consistent") => { (params, onError, type, asterisk, underline, style = "consistent") => {
const { lines, parsers } = params;
const emphasisTokens = const emphasisTokens =
filterByTypes(params.parsers.micromark.tokens, [ type ]); filterByTypes(parsers.micromark.tokens, [ type ]);
for (const token of emphasisTokens) { for (const token of emphasisTokens) {
const { children } = token; const { children } = token;
const childType = `${type}Sequence`; const childType = `${type}Sequence`;
@ -20,19 +23,29 @@ const impl =
style = markupStyle; style = markupStyle;
} }
if (style !== markupStyle) { if (style !== markupStyle) {
for (const sequence of [ startSequence, endSequence ]) { const underscoreIntraword = (style === "underscore") && (
addError( intrawordRe.test(
onError, lines[startSequence.startLine - 1][startSequence.startColumn - 2]
sequence.startLine, ) ||
`Expected: ${style}; Actual: ${markupStyle}`, intrawordRe.test(
undefined, lines[endSequence.endLine - 1][endSequence.endColumn - 1]
[ sequence.startColumn, sequence.text.length ], )
{ );
"editColumn": sequence.startColumn, if (!underscoreIntraword) {
"deleteCount": sequence.text.length, for (const sequence of [ startSequence, endSequence ]) {
"insertText": (style === "asterisk") ? asterisk : underline addError(
} onError,
); sequence.startLine,
`Expected: ${style}; Actual: ${markupStyle}`,
undefined,
[ sequence.startColumn, sequence.text.length ],
{
"editColumn": sequence.startColumn,
"deleteCount": sequence.text.length,
"insertText": (style === "asterisk") ? asterisk : underline
}
);
}
} }
} }
} }

View file

@ -4,7 +4,12 @@ This is *fine*
This is _not_ {MD049} This is _not_ {MD049}
Internal emphasis is preserved:
apple*banana*cherry, apple*banana*, *banana*cherry
apple_banana_cherry, apple_banana_, _banana_cherry
<!-- markdownlint-configure-file { <!-- markdownlint-configure-file {
"MD037": false,
"MD049": { "MD049": {
"style": "asterisk" "style": "asterisk"
} }

View file

@ -4,7 +4,12 @@ This is _fine_
This is *not* {MD049} This is *not* {MD049}
Internal emphasis is preserved:
apple*banana*cherry, apple*banana*, *banana*cherry
apple_banana_cherry, apple_banana_, _banana_cherry
<!-- markdownlint-configure-file { <!-- markdownlint-configure-file {
"MD037": false,
"MD049": { "MD049": {
"style": "underscore" "style": "underscore"
} }

View file

@ -10754,7 +10754,12 @@ Generated by [AVA](https://avajs.dev).
This is *not* {MD049}␊ This is *not* {MD049}␊
Internal emphasis is preserved:␊
apple*banana*cherry, apple*banana*, *banana*cherry␊
apple_banana_cherry, apple_banana_, _banana_cherry␊
<!-- markdownlint-configure-file {␊ <!-- markdownlint-configure-file {␊
"MD037": false,␊
"MD049": {␊ "MD049": {␊
"style": "asterisk"␊ "style": "asterisk"␊
}␊ }␊
@ -10815,7 +10820,12 @@ Generated by [AVA](https://avajs.dev).
This is _not_ {MD049}␊ This is _not_ {MD049}␊
Internal emphasis is preserved:␊
apple*banana*cherry, apple*banana*, *banana*cherry␊
apple_banana_cherry, apple_banana_, _banana_cherry␊
<!-- markdownlint-configure-file {␊ <!-- markdownlint-configure-file {␊
"MD037": false,␊
"MD049": {␊ "MD049": {␊
"style": "underscore"␊ "style": "underscore"␊
}␊ }␊
@ -44028,6 +44038,10 @@ Generated by [AVA](https://avajs.dev).
This is **not** {MD050}␊ This is **not** {MD050}␊
Internal emphasis is preserved:␊
apple**banana**cherry, apple**banana**, **banana**cherry␊
apple__banana__cherry, apple__banana__, __banana__cherry␊
<!-- markdownlint-configure-file {␊ <!-- markdownlint-configure-file {␊
"MD050": {␊ "MD050": {␊
"style": "asterisk"␊ "style": "asterisk"␊
@ -44089,6 +44103,10 @@ Generated by [AVA](https://avajs.dev).
This is __not__ {MD050}␊ This is __not__ {MD050}␊
Internal emphasis is preserved:␊
apple**banana**cherry, apple**banana**, **banana**cherry␊
apple__banana__cherry, apple__banana__, __banana__cherry␊
<!-- markdownlint-configure-file {␊ <!-- markdownlint-configure-file {␊
"MD050": {␊ "MD050": {␊
"style": "underscore"␊ "style": "underscore"␊

View file

@ -4,6 +4,10 @@ This is **fine**
This is __not__ {MD050} This is __not__ {MD050}
Internal emphasis is preserved:
apple**banana**cherry, apple**banana**, **banana**cherry
apple__banana__cherry, apple__banana__, __banana__cherry
<!-- markdownlint-configure-file { <!-- markdownlint-configure-file {
"MD050": { "MD050": {
"style": "asterisk" "style": "asterisk"

View file

@ -4,6 +4,10 @@ This is __fine__
This is **not** {MD050} This is **not** {MD050}
Internal emphasis is preserved:
apple**banana**cherry, apple**banana**, **banana**cherry
apple__banana__cherry, apple__banana__, __banana__cherry
<!-- markdownlint-configure-file { <!-- markdownlint-configure-file {
"MD050": { "MD050": {
"style": "underscore" "style": "underscore"