Update MD010/no-hard-tabs to add ignore_code_languages parameter (fixes #383).

This commit is contained in:
David Anson 2022-04-28 21:09:06 -07:00
parent 0f845e9ba1
commit b447c809bd
9 changed files with 112 additions and 3 deletions

View file

@ -2,7 +2,8 @@
"use strict";
const { addError, forEachLine, overlapsAnyRange } = require("../helpers");
const { addError, filterTokens, forEachLine, overlapsAnyRange } =
require("../helpers");
const { codeBlockAndSpanRanges, lineMetadata } = require("./cache");
const tabRe = /\t+/g;
@ -14,11 +15,23 @@ module.exports = {
"function": function MD010(params, onError) {
const codeBlocks = params.config.code_blocks;
const includeCode = (codeBlocks === undefined) ? true : !!codeBlocks;
const ignoreCodeLanguages = new Set(
(params.config.ignore_code_languages || [])
.map((language) => language.toLowerCase())
);
const spacesPerTab = params.config.spaces_per_tab;
const spaceMultiplier = (spacesPerTab === undefined) ?
1 :
Math.max(0, Number(spacesPerTab));
const exclusions = includeCode ? [] : codeBlockAndSpanRanges();
filterTokens(params, "fence", (token) => {
const language = token.info.trim().toLowerCase();
if (ignoreCodeLanguages.has(language)) {
for (let i = token.map[0] + 1; i < token.map[1] - 1; i++) {
exclusions.push([ i, 0, params.lines[i].length ]);
}
}
});
forEachLine(lineMetadata(), (line, lineIndex, inCode) => {
if (includeCode || !inCode) {
let match = null;