UNPKG

lesslint

Version:
80 lines (67 loc) 7.7 kB
'use strict'; 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 }; } 'use strict'; /** * 规则名称 * * @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=