// @ts-check "use strict"; const { addErrorContext, forEachLine } = require("../helpers"); const { lineMetadata } = require("./cache"); module.exports = { "names": [ "MD020", "no-missing-space-closed-atx" ], "description": "No space inside hashes on closed atx style heading", "tags": [ "headings", "headers", "atx_closed", "spaces" ], "function": function MD020(params, onError) { forEachLine(lineMetadata(), (line, lineIndex, inCode) => { if (!inCode) { const match = /^(#+)(\s*)([^#]+?)(\s*)(\\?)(#+)(\s*)$/.exec(line); if (match) { const [ , leftHash, { "length": leftSpaceLength }, content, { "length": rightSpaceLength }, rightEscape, rightHash, { "length": trailSpaceLength } ] = match; const leftHashLength = leftHash.length; const rightHashLength = rightHash.length; const left = !leftSpaceLength; const right = (!rightSpaceLength && (!rightEscape || (rightHashLength > 1))) || (rightEscape && (rightHashLength > 1)); if (left || right) { const range = left ? [ 1, leftHashLength + 1 ] : [ line.length - trailSpaceLength - rightHashLength, rightHashLength + 1 ]; addErrorContext( onError, lineIndex + 1, line.trim(), left, right, range, { "editColumn": 1, "deleteLength": line.length, "insertText": `${leftHash} ${content} ${rightEscape}${rightHash}` } ); } } } }); } };