UNPKG

chameleon-linter

Version:

cml规范校验工具

97 lines (91 loc) 2.84 kB
const stylelint = require('stylelint'); const stylus = require('stylus/lib/stylus'); const config = require('../config'); const parserConfig = require('../config/parser-config'); const postcss = require('postcss'); const converter = require('stylus-converter'); const path = require('path'); module.exports = async (part) => { return new Promise(function (resolve, reject) { let messages = []; if (config.neexLintWeex() && (!part.platformType || part.platformType == 'weex')) { parserConfig.style.rules['selector-max-compound-selectors'] = 1; } else { parserConfig.style.rules['selector-max-compound-selectors'] = 0; } let lang = part.params.lang || 'less'; if (lang == 'stylus') { stylus.render(part.content, {...{ paths: [path.dirname(path.resolve(config.getCurrentWorkspace(), part.file))] }, ...parserConfig.style}, function (err) { if (err) { let isImportStyl = err.filename && (path.extname(err.filename) === '.styl'); let message = { line: isImportStyl ? 0 : err.lineno, column: isImportStyl ? 0 : err.column, msg: err.message }; // guess line coloumn from err message if (err.lineno === undefined) { err.message.replace(/stylus:\s*(\d+):\s*(\d+)/g, (match, line, column) => { message.line = +line; message.column = +column; }); } messages.push(message); } let ast; try { let sassCode = converter.converter(part.content, {conver: 'sass', autoprefixer: false}); sassCode = sassCode.replace(/\n\s*\}/g, '}'); ast = postcss.parse(sassCode); } catch (e) { ast = null; } resolve({ start: part.line, ast: ast, messages }); }); } else { let options = { code: part.content, config: parserConfig.style }; if (~['less', 'sass', 'scss'].indexOf(lang)) { options.syntax = lang; } stylelint .lint(options) .then(function(result) { if (result.errored) { result.results.forEach(result => { result.errored && result.warnings.forEach(warn => { messages.push({ line: warn.line, column: warn.column, msg: warn.text.replace(/\(.*?\)$/g, '') }); }); }); } let ast; try { ast = postcss.parse(part.content); } catch (e) { ast = null; } resolve({ start: part.line, ast: ast, messages }); }); } }) };