lesslint
Version:
lint your less code
99 lines (84 loc) • 9.87 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 数值检验
* 对于处于 (0, 1) 范围内的数值,小数点前的 0 可以(MAY)省略,同一项目中必须(MUST)保持一致。
* https://github.com/ecomfe/spec/blob/master/less-code-style.md#%E6%95%B0%E5%80%BC
* @author ielgnaw(wuji0223@gmail.com)
*/
var RULENAME = 'leading-zero';
/**
* 错误信息
*
* @const
* @type {string}
*/
var MSG = 'When value is between 0 - 1 decimal, omitting the integer part of the `0`';
/**
* 具体的检测逻辑
*
* @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) {
if (!opts.ruleVal) {
return;
}
css.walkDecls(function (decl) {
var parts = _postcss2.default.list.space(decl.value);
var source = decl.source;
var lineNum = source.start.line;
function check(part, startCol) {
var numericVal = parseFloat(part);
if (numericVal < 1 && numericVal > 0 || numericVal < 0 && numericVal > -1) {
if (part.slice(0, 2) === '0.' || part.slice(0, 3) === '-0.') {
var lineContent = (0, _util.getLineContent)(lineNum, source.input.css, true);
var col = lineContent.indexOf(part, startCol);
result.warn(RULENAME, {
node: decl,
ruleName: RULENAME,
line: lineNum,
col: col + 1,
message: MSG,
colorMessage: '`' + (0, _util.changeColorByIndex)(lineContent, col, part) + '` ' + _chalk2.default.grey(MSG)
});
}
}
}
var pattern = /\(([^\)]+)\)/;
for (var i = 0, len = parts.length; i < len; i++) {
var part = parts[i];
var match = part.match(pattern);
if (match) {
var start = match.index;
match[1].split(/,\s*/).forEach(function (property) {
start = part.indexOf(property, start);
check(property, start);
});
} else {
check(part, 0);
}
}
});
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlL2xlYWRpbmctemVyby5qcyJdLCJuYW1lcyI6WyJSVUxFTkFNRSIsIk1TRyIsImNoZWNrIiwicG9zdGNzcyIsInBsdWdpbiIsImNzcyIsInJlc3VsdCIsIm9wdHMiLCJydWxlVmFsIiwid2Fsa0RlY2xzIiwicGFydHMiLCJsaXN0Iiwic3BhY2UiLCJkZWNsIiwidmFsdWUiLCJzb3VyY2UiLCJsaW5lTnVtIiwic3RhcnQiLCJsaW5lIiwicGFydCIsInN0YXJ0Q29sIiwibnVtZXJpY1ZhbCIsInBhcnNlRmxvYXQiLCJzbGljZSIsImxpbmVDb250ZW50IiwiaW5wdXQiLCJjb2wiLCJpbmRleE9mIiwid2FybiIsIm5vZGUiLCJydWxlTmFtZSIsIm1lc3NhZ2UiLCJjb2xvck1lc3NhZ2UiLCJjaGFsayIsImdyZXkiLCJwYXR0ZXJuIiwiaSIsImxlbiIsImxlbmd0aCIsIm1hdGNoIiwiaW5kZXgiLCJzcGxpdCIsImZvckVhY2giLCJwcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU9BOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOztBQUVBOzs7Ozs7QUFiQTs7Ozs7OztBQW1CQSxJQUFNQSxXQUFXLGNBQWpCOztBQUVBOzs7Ozs7QUFNQSxJQUFNQyxNQUFNLDJFQUFaOztBQUVBOzs7Ozs7OztBQVFPLElBQU1DLHdCQUFRQyxrQkFBUUMsTUFBUixDQUFlSixRQUFmLEVBQXlCO0FBQUEsV0FDMUMsVUFBQ0ssR0FBRCxFQUFNQyxNQUFOLEVBQWlCO0FBQ2IsWUFBSSxDQUFDQyxLQUFLQyxPQUFWLEVBQW1CO0FBQ2Y7QUFDSDs7QUFFREgsWUFBSUksU0FBSixDQUFjLGdCQUFRO0FBQ2xCLGdCQUFNQyxRQUFRUCxrQkFBUVEsSUFBUixDQUFhQyxLQUFiLENBQW1CQyxLQUFLQyxLQUF4QixDQUFkO0FBQ0EsZ0JBQU1DLFNBQVNGLEtBQUtFLE1BQXBCO0FBQ0EsZ0JBQU1DLFVBQVVELE9BQU9FLEtBQVAsQ0FBYUMsSUFBN0I7O0FBRUEscUJBQVNoQixLQUFULENBQWVpQixJQUFmLEVBQXFCQyxRQUFyQixFQUErQjtBQUMzQixvQkFBTUMsYUFBYUMsV0FBV0gsSUFBWCxDQUFuQjtBQUNBLG9CQUFJRSxhQUFhLENBQWIsSUFBa0JBLGFBQWEsQ0FBL0IsSUFBb0NBLGFBQWEsQ0FBYixJQUFrQkEsYUFBYSxDQUFDLENBQXhFLEVBQTJFO0FBQ3ZFLHdCQUFJRixLQUFLSSxLQUFMLENBQVcsQ0FBWCxFQUFjLENBQWQsTUFBcUIsSUFBckIsSUFBNkJKLEtBQUtJLEtBQUwsQ0FBVyxDQUFYLEVBQWMsQ0FBZCxNQUFxQixLQUF0RCxFQUE2RDtBQUN6RCw0QkFBTUMsY0FBYywwQkFBZVIsT0FBZixFQUF3QkQsT0FBT1UsS0FBUCxDQUFhcEIsR0FBckMsRUFBMEMsSUFBMUMsQ0FBcEI7QUFDQSw0QkFBTXFCLE1BQU1GLFlBQVlHLE9BQVosQ0FBb0JSLElBQXBCLEVBQTBCQyxRQUExQixDQUFaO0FBQ0FkLCtCQUFPc0IsSUFBUCxDQUFZNUIsUUFBWixFQUFzQjtBQUNsQjZCLGtDQUFNaEIsSUFEWTtBQUVsQmlCLHNDQUFVOUIsUUFGUTtBQUdsQmtCLGtDQUFNRixPQUhZO0FBSWxCVSxpQ0FBS0EsTUFBTSxDQUpPO0FBS2xCSyxxQ0FBUzlCLEdBTFM7QUFNbEIrQiwwQ0FBYyxNQUNSLDhCQUFtQlIsV0FBbkIsRUFBZ0NFLEdBQWhDLEVBQXFDUCxJQUFyQyxDQURRLEdBRVIsSUFGUSxHQUdSYyxnQkFBTUMsSUFBTixDQUFXakMsR0FBWDtBQVRZLHlCQUF0QjtBQVdIO0FBQ0o7QUFDSjs7QUFFRCxnQkFBTWtDLFVBQVUsY0FBaEI7QUFDQSxpQkFBSyxJQUFJQyxJQUFJLENBQVIsRUFBV0MsTUFBTTNCLE1BQU00QixNQUE1QixFQUFvQ0YsSUFBSUMsR0FBeEMsRUFBNkNELEdBQTdDLEVBQWtEO0FBQzlDLG9CQUFJakIsT0FBT1QsTUFBTTBCLENBQU4sQ0FBWDtBQUNBLG9CQUFNRyxRQUFRcEIsS0FBS29CLEtBQUwsQ0FBV0osT0FBWCxDQUFkO0FBQ0Esb0JBQUlJLEtBQUosRUFBVztBQUNQLHdCQUFJdEIsUUFBUXNCLE1BQU1DLEtBQWxCO0FBQ0FELDBCQUFNLENBQU4sRUFBU0UsS0FBVCxDQUFlLE1BQWYsRUFBdUJDLE9BQXZCLENBQStCLFVBQVVDLFFBQVYsRUFBb0I7QUFDL0MxQixnQ0FBUUUsS0FBS1EsT0FBTCxDQUFhZ0IsUUFBYixFQUF1QjFCLEtBQXZCLENBQVI7QUFDQWYsOEJBQU15QyxRQUFOLEVBQWdCMUIsS0FBaEI7QUFDSCxxQkFIRDtBQUlILGlCQU5ELE1BT0s7QUFDRGYsMEJBQU1pQixJQUFOLEVBQVksQ0FBWjtBQUNIO0FBQ0o7QUFDSixTQXpDRDtBQTBDSCxLQWhEeUM7QUFBQSxDQUF6QixDQUFkIiwiZmlsZSI6ImxlYWRpbmctemVyby5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUg5pWw5YC85qOA6aqMXG4gKiAgICAgICDlr7nkuo7lpITkuo4gKDAsIDEpIOiMg+WbtOWGheeahOaVsOWAvO+8jOWwj+aVsOeCueWJjeeahCAwIOWPr+S7pe+8iE1BWe+8ieecgeeVpe+8jOWQjOS4gOmhueebruS4reW/hemhu++8iE1VU1TvvInkv53mjIHkuIDoh7TjgIJcbiAqICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9lY29tZmUvc3BlYy9ibG9iL21hc3Rlci9sZXNzLWNvZGUtc3R5bGUubWQjJUU2JTk1JUIwJUU1JTgwJUJDXG4gKiBAYXV0aG9yIGllbGduYXcod3VqaTAyMjNAZ21haWwuY29tKVxuICovXG5cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCB7Z2V0TGluZUNvbnRlbnQsIGNoYW5nZUNvbG9yQnlJbmRleH0gZnJvbSAnLi4vdXRpbCc7XG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiDop4TliJnlkI3np7BcbiAqXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJVTEVOQU1FID0gJ2xlYWRpbmctemVybyc7XG5cbi8qKlxuICog6ZSZ6K+v5L+h5oGvXG4gKlxuICogQGNvbnN0XG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBNU0cgPSAnV2hlbiB2YWx1ZSBpcyBiZXR3ZWVuIDAgLSAxIGRlY2ltYWwsIG9taXR0aW5nIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIGAwYCc7XG5cbi8qKlxuICog5YW35L2T55qE5qOA5rWL6YC76L6RXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMg5Y+C5pWwXG4gKiBAcGFyYW0geyp9IG9wdHMucnVsZVZhbCDlvZPliY3op4TliJnlhbfkvZPphY3nva7nmoTlgLxcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmZpbGVDb250ZW50IOaWh+S7tuWGheWuuVxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZmlsZVBhdGgg5paH5Lu26Lev5b6EXG4gKi9cbmV4cG9ydCBjb25zdCBjaGVjayA9IHBvc3Rjc3MucGx1Z2luKFJVTEVOQU1FLCBvcHRzID0+XG4gICAgKGNzcywgcmVzdWx0KSA9PiB7XG4gICAgICAgIGlmICghb3B0cy5ydWxlVmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjc3Mud2Fsa0RlY2xzKGRlY2wgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwb3N0Y3NzLmxpc3Quc3BhY2UoZGVjbC52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBkZWNsLnNvdXJjZTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVOdW0gPSBzb3VyY2Uuc3RhcnQubGluZTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2socGFydCwgc3RhcnRDb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1lcmljVmFsID0gcGFyc2VGbG9hdChwYXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAobnVtZXJpY1ZhbCA8IDEgJiYgbnVtZXJpY1ZhbCA+IDAgfHwgbnVtZXJpY1ZhbCA8IDAgJiYgbnVtZXJpY1ZhbCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LnNsaWNlKDAsIDIpID09PSAnMC4nIHx8IHBhcnQuc2xpY2UoMCwgMykgPT09ICctMC4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5lQ29udGVudCA9IGdldExpbmVDb250ZW50KGxpbmVOdW0sIHNvdXJjZS5pbnB1dC5jc3MsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sID0gbGluZUNvbnRlbnQuaW5kZXhPZihwYXJ0LCBzdGFydENvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQud2FybihSVUxFTkFNRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IGRlY2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWU6IFJVTEVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1TRyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvck1lc3NhZ2U6ICdgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNoYW5nZUNvbG9yQnlJbmRleChsaW5lQ29udGVudCwgY29sLCBwYXJ0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICdgICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjaGFsay5ncmV5KE1TRylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gL1xcKChbXlxcKV0rKVxcKS87XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGFydHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gcGFydC5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzFdLnNwbGl0KC8sXFxzKi8pLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHBhcnQuaW5kZXhPZihwcm9wZXJ0eSwgc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2socHJvcGVydHksIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGVjayhwYXJ0LCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbik7XG4iXX0=
;