UNPKG

markuplint

Version:

A Linter for All Markup Languages.

110 lines (109 loc) 4.11 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.lintFile = void 0; const ml_core_1 = require("@markuplint/ml-core"); const i18n_1 = require("./i18n"); const module_auto_loader_1 = require("./module-auto-loader"); const path_1 = __importDefault(require("path")); const util_1 = require("./util"); async function lintFile(file, configs, rulesAutoResolve, rules, locale, fix) { const configSet = configs.get(file) || { config: {}, files: new Set(), errs: [], }; // Get parser let parserModName = '@markuplint/html-parser'; if (configSet.config.parser) { for (const pattern of Object.keys(configSet.config.parser)) { if (path_1.default.basename(file.path).match(util_1.toRegxp(pattern))) { parserModName = configSet.config.parser[pattern]; } } } const parser = await Promise.resolve().then(() => __importStar(require(parserModName))); const parserOptions = configSet.config.parserOptions || {}; // Resolve ruleset const ruleset = ml_core_1.convertRuleset(configSet.config); // Schemas const specs = configSet.config.specs ? Array.isArray(configSet.config.specs) ? configSet.config.specs : [configSet.config.specs] : []; const htmlSpec = await Promise.resolve().then(() => __importStar(require('@markuplint/html-spec'))); const extendedSpecs = await Promise.all(specs.map(async (spec) => (await Promise.resolve().then(() => __importStar(require(spec)))).default)); const schemas = [htmlSpec, ...extendedSpecs]; // Addition rules if (rulesAutoResolve) { const { rules: additionalRules } = await module_auto_loader_1.moduleAutoLoader(ruleset); rules = rules.concat(...additionalRules); } // create MLCore const sourceCode = await file.getContext(); const i18nSettings = await i18n_1.i18n(locale); let results = []; let fixedCode = sourceCode; let document = null; try { const core = new ml_core_1.MLCore(parser, sourceCode, ruleset, rules, i18nSettings, schemas, parserOptions); results = await core.verify(fix); fixedCode = core.document.toString(); document = core.document; } catch (err) { if (err instanceof ml_core_1.MLParseError) { results = [ { ruleId: 'parse-error', severity: 'error', message: err.message, col: err.col, line: err.line, raw: err.raw, }, ]; } else { throw err; } } return { results, filePath: file.path, sourceCode, fixedCode, document, parser: parserModName, locale, ruleset, configSet: { config: configSet.config, files: Array.from(configSet.files), error: configSet.errs.map(e => `${e}`), }, }; } exports.lintFile = lintFile;