lesslint
Version:
lint your less code
80 lines (67 loc) • 7.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.check = undefined;
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _postcss = require('postcss');
var _postcss2 = _interopRequireDefault(_postcss);
var _util = require('../util');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
;
/**
* 规则名称
*
* @const
* @type {string}
*/
/**
* @file 选择器和 { 之间必须(MUST)保留一个空格。
* https://github.com/ecomfe/spec/blob/master/less-code-style.md#%E5%B1%9E%E6%80%A7%E5%8F%98%E9%87%8F
* @author ielgnaw(wuji0223@gmail.com)
*/
var RULENAME = 'require-before-space';
/**
* 错误信息
*
* @const
* @type {string}
*/
var MSG = 'Must contain spaces before the `{`';
/**
* 具体的检测逻辑
*
* @param {Object} opts 参数
* @param {*} opts.ruleVal 当前规则具体配置的值
* @param {string} opts.fileContent 文件内容
* @param {string} opts.filePath 文件路径
*/
var check = exports.check = _postcss2.default.plugin(RULENAME, function (opts) {
return function (css, result) {
var ruleVal = opts.ruleVal;
var realRuleVal = [];
Array.prototype.push[Array.isArray(ruleVal) ? 'apply' : 'call'](realRuleVal, ruleVal);
if (realRuleVal.length) {
css.walkRules(function (rule) {
// 只有 { 时,才能用 between 处理,其他符号的 require-before-space 规则还未实现
if (!rule.ruleWithoutBody // 排除 mixin 调用
&& rule.raws.between === '' && realRuleVal.indexOf('{') !== -1) {
var source = rule.source;
var line = source.start.line;
var col = source.start.column + rule.selector.length;
var lineContent = (0, _util.getLineContent)(line, source.input.css) || '';
result.warn(RULENAME, {
node: rule,
ruleName: RULENAME,
line: line,
col: col,
message: MSG,
colorMessage: '`' + lineContent.replace('{', _chalk2.default.magenta('{')) + '` ' + _chalk2.default.grey(MSG)
});
}
});
}
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlL3JlcXVpcmUtYmVmb3JlLXNwYWNlLmpzIl0sIm5hbWVzIjpbIlJVTEVOQU1FIiwiTVNHIiwiY2hlY2siLCJwb3N0Y3NzIiwicGx1Z2luIiwiY3NzIiwicmVzdWx0IiwicnVsZVZhbCIsIm9wdHMiLCJyZWFsUnVsZVZhbCIsIkFycmF5IiwicHJvdG90eXBlIiwicHVzaCIsImlzQXJyYXkiLCJsZW5ndGgiLCJ3YWxrUnVsZXMiLCJydWxlIiwicnVsZVdpdGhvdXRCb2R5IiwicmF3cyIsImJldHdlZW4iLCJpbmRleE9mIiwic291cmNlIiwibGluZSIsInN0YXJ0IiwiY29sIiwiY29sdW1uIiwic2VsZWN0b3IiLCJsaW5lQ29udGVudCIsImlucHV0Iiwid2FybiIsIm5vZGUiLCJydWxlTmFtZSIsIm1lc3NhZ2UiLCJjb2xvck1lc3NhZ2UiLCJyZXBsYWNlIiwiY2hhbGsiLCJtYWdlbnRhIiwiZ3JleSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU1BOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOztBQUVBOzs7Ozs7QUFaQTs7Ozs7O0FBa0JBLElBQU1BLFdBQVcsc0JBQWpCOztBQUVBOzs7Ozs7QUFNQSxJQUFNQyxNQUFNLG9DQUFaOztBQUVBOzs7Ozs7OztBQVFPLElBQU1DLHdCQUFRQyxrQkFBUUMsTUFBUixDQUFlSixRQUFmLEVBQXlCO0FBQUEsV0FDMUMsVUFBQ0ssR0FBRCxFQUFNQyxNQUFOLEVBQWlCO0FBQ2IsWUFBTUMsVUFBVUMsS0FBS0QsT0FBckI7QUFDQSxZQUFNRSxjQUFjLEVBQXBCO0FBQ0FDLGNBQU1DLFNBQU4sQ0FBZ0JDLElBQWhCLENBQXFCRixNQUFNRyxPQUFOLENBQWNOLE9BQWQsSUFBeUIsT0FBekIsR0FBbUMsTUFBeEQsRUFBZ0VFLFdBQWhFLEVBQTZFRixPQUE3RTs7QUFFQSxZQUFJRSxZQUFZSyxNQUFoQixFQUF3QjtBQUNwQlQsZ0JBQUlVLFNBQUosQ0FBYyxnQkFBUTtBQUNsQjtBQUNBLG9CQUNJLENBQUNDLEtBQUtDLGVBQU4sQ0FBc0I7QUFBdEIsbUJBQ09ELEtBQUtFLElBQUwsQ0FBVUMsT0FBVixLQUFzQixFQUQ3QixJQUNtQ1YsWUFBWVcsT0FBWixDQUFvQixHQUFwQixNQUE2QixDQUFDLENBRnJFLEVBR007QUFDRix3QkFBTUMsU0FBU0wsS0FBS0ssTUFBcEI7QUFDQSx3QkFBTUMsT0FBT0QsT0FBT0UsS0FBUCxDQUFhRCxJQUExQjtBQUNBLHdCQUFNRSxNQUFNSCxPQUFPRSxLQUFQLENBQWFFLE1BQWIsR0FBc0JULEtBQUtVLFFBQUwsQ0FBY1osTUFBaEQ7QUFDQSx3QkFBTWEsY0FBYywwQkFBZUwsSUFBZixFQUFxQkQsT0FBT08sS0FBUCxDQUFhdkIsR0FBbEMsS0FBMEMsRUFBOUQ7QUFDQUMsMkJBQU91QixJQUFQLENBQVk3QixRQUFaLEVBQXNCO0FBQ2xCOEIsOEJBQU1kLElBRFk7QUFFbEJlLGtDQUFVL0IsUUFGUTtBQUdsQnNCLDhCQUFNQSxJQUhZO0FBSWxCRSw2QkFBS0EsR0FKYTtBQUtsQlEsaUNBQVMvQixHQUxTO0FBTWxCZ0Msc0NBQWMsTUFDUk4sWUFBWU8sT0FBWixDQUNFLEdBREYsRUFFRUMsZ0JBQU1DLE9BQU4sQ0FBYyxHQUFkLENBRkYsQ0FEUSxHQUtSLElBTFEsR0FNUkQsZ0JBQU1FLElBQU4sQ0FBV3BDLEdBQVg7QUFaWSxxQkFBdEI7QUFjSDtBQUNKLGFBekJEO0FBMEJIO0FBQ0osS0FsQ3lDO0FBQUEsQ0FBekIsQ0FBZCIsImZpbGUiOiJyZXF1aXJlLWJlZm9yZS1zcGFjZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUg6YCJ5oup5Zmo5ZKMIHsg5LmL6Ze05b+F6aG777yITVVTVO+8ieS/neeVmeS4gOS4quepuuagvOOAglxuICogICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2Vjb21mZS9zcGVjL2Jsb2IvbWFzdGVyL2xlc3MtY29kZS1zdHlsZS5tZCMlRTUlQjElOUUlRTYlODAlQTclRTUlOEYlOTglRTklODclOEZcbiAqIEBhdXRob3IgaWVsZ25hdyh3dWppMDIyM0BnbWFpbC5jb20pXG4gKi9cblxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHtnZXRMaW5lQ29udGVudH0gZnJvbSAnLi4vdXRpbCc7XG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiDop4TliJnlkI3np7BcbiAqXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJVTEVOQU1FID0gJ3JlcXVpcmUtYmVmb3JlLXNwYWNlJztcblxuLyoqXG4gKiDplJnor6/kv6Hmga9cbiAqXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IE1TRyA9ICdNdXN0IGNvbnRhaW4gc3BhY2VzIGJlZm9yZSB0aGUgYHtgJztcblxuLyoqXG4gKiDlhbfkvZPnmoTmo4DmtYvpgLvovpFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyDlj4LmlbBcbiAqIEBwYXJhbSB7Kn0gb3B0cy5ydWxlVmFsIOW9k+WJjeinhOWImeWFt+S9k+mFjee9rueahOWAvFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZmlsZUNvbnRlbnQg5paH5Lu25YaF5a65XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5maWxlUGF0aCDmlofku7bot6/lvoRcbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrID0gcG9zdGNzcy5wbHVnaW4oUlVMRU5BTUUsIG9wdHMgPT5cbiAgICAoY3NzLCByZXN1bHQpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZVZhbCA9IG9wdHMucnVsZVZhbDtcbiAgICAgICAgY29uc3QgcmVhbFJ1bGVWYWwgPSBbXTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2hbQXJyYXkuaXNBcnJheShydWxlVmFsKSA/ICdhcHBseScgOiAnY2FsbCddKHJlYWxSdWxlVmFsLCBydWxlVmFsKTtcblxuICAgICAgICBpZiAocmVhbFJ1bGVWYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjc3Mud2Fsa1J1bGVzKHJ1bGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIOWPquaciSB7IOaXtu+8jOaJjeiDveeUqCBiZXR3ZWVuIOWkhOeQhu+8jOWFtuS7luespuWPt+eahCByZXF1aXJlLWJlZm9yZS1zcGFjZSDop4TliJnov5jmnKrlrp7njrBcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFydWxlLnJ1bGVXaXRob3V0Qm9keSAvLyDmjpLpmaQgbWl4aW4g6LCD55SoXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBydWxlLnJhd3MuYmV0d2VlbiA9PT0gJycgJiYgcmVhbFJ1bGVWYWwuaW5kZXhPZigneycpICE9PSAtMVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcnVsZS5zb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBzb3VyY2Uuc3RhcnQubGluZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sID0gc291cmNlLnN0YXJ0LmNvbHVtbiArIHJ1bGUuc2VsZWN0b3IubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5lQ29udGVudCA9IGdldExpbmVDb250ZW50KGxpbmUsIHNvdXJjZS5pbnB1dC5jc3MpIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQud2FybihSVUxFTkFNRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogcnVsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBSVUxFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1TRyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTWVzc2FnZTogJ2AnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsaW5lQ29udGVudC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxrLm1hZ2VudGEoJ3snKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArICdgICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNoYWxrLmdyZXkoTVNHKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbik7XG4iXX0=
;