UNPKG

lesslint

Version:
88 lines (73 loc) 6.8 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)采用 @foo-bar 形式,不得(MUST NOT)使用 @fooBar 形式。 * https://github.com/ecomfe/spec/blob/master/less-code-style.md#%E5%8F%98%E9%87%8F * @author ielgnaw(wuji0223@gmail.com) */ var RULENAME = 'variable-name'; /** * 匹配变量名字的正则 * * @const * @type {RegExp} */ var VARIABLE_NAME_REG = /^@([a-z0-9\-]+)$/; /** * 错误信息 * * @const * @type {string} */ var MSG = 'Variable name must be like this `@foo-bar or @foobar`'; /** * 具体的检测逻辑 * * @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 source = decl.source, prop = decl.prop; var lineNum = source.start.line; var lineContent = (0, _util.getLineContent)(lineNum, opts.fileContent); if (/^@/.test(prop) && !VARIABLE_NAME_REG.test(prop)) { result.warn(RULENAME, { node: decl, ruleName: RULENAME, line: lineNum, col: source.start.column, message: '`' + lineContent + '` ' + MSG, colorMessage: '`' + lineContent.replace(prop, function ($1) { return _chalk2.default.magenta($1); }) + '` ' + _chalk2.default.grey(MSG) }); } }); }; }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlL3ZhcmlhYmxlLW5hbWUuanMiXSwibmFtZXMiOlsiUlVMRU5BTUUiLCJWQVJJQUJMRV9OQU1FX1JFRyIsIk1TRyIsImNoZWNrIiwicG9zdGNzcyIsInBsdWdpbiIsImNzcyIsInJlc3VsdCIsIm9wdHMiLCJydWxlVmFsIiwid2Fsa0RlY2xzIiwic291cmNlIiwiZGVjbCIsInByb3AiLCJsaW5lTnVtIiwic3RhcnQiLCJsaW5lIiwibGluZUNvbnRlbnQiLCJmaWxlQ29udGVudCIsInRlc3QiLCJ3YXJuIiwibm9kZSIsInJ1bGVOYW1lIiwiY29sIiwiY29sdW1uIiwibWVzc2FnZSIsImNvbG9yTWVzc2FnZSIsInJlcGxhY2UiLCJjaGFsayIsIm1hZ2VudGEiLCIkMSIsImdyZXkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFPQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7QUFFQTs7Ozs7O0FBYkE7Ozs7Ozs7QUFtQkEsSUFBTUEsV0FBVyxlQUFqQjs7QUFFQTs7Ozs7O0FBTUEsSUFBTUMsb0JBQW9CLGtCQUExQjs7QUFFQTs7Ozs7O0FBTUEsSUFBTUMsTUFBTSx1REFBWjs7QUFFQTs7Ozs7Ozs7QUFRTyxJQUFNQyx3QkFBUUMsa0JBQVFDLE1BQVIsQ0FBZUwsUUFBZixFQUF5QjtBQUFBLFdBQzFDLFVBQUNNLEdBQUQsRUFBTUMsTUFBTixFQUFpQjtBQUNiLFlBQUksQ0FBQ0MsS0FBS0MsT0FBVixFQUFtQjtBQUNmO0FBQ0g7O0FBRURILFlBQUlJLFNBQUosQ0FBYyxnQkFBUTtBQUFBLGdCQUNYQyxNQURXLEdBQ0tDLElBREwsQ0FDWEQsTUFEVztBQUFBLGdCQUNIRSxJQURHLEdBQ0tELElBREwsQ0FDSEMsSUFERzs7QUFFbEIsZ0JBQU1DLFVBQVVILE9BQU9JLEtBQVAsQ0FBYUMsSUFBN0I7QUFDQSxnQkFBTUMsY0FBYywwQkFBZUgsT0FBZixFQUF3Qk4sS0FBS1UsV0FBN0IsQ0FBcEI7QUFDQSxnQkFBSSxLQUFLQyxJQUFMLENBQVVOLElBQVYsS0FDRyxDQUFDWixrQkFBa0JrQixJQUFsQixDQUF1Qk4sSUFBdkIsQ0FEUixFQUVFO0FBQ0VOLHVCQUFPYSxJQUFQLENBQVlwQixRQUFaLEVBQXNCO0FBQ2xCcUIsMEJBQU1ULElBRFk7QUFFbEJVLDhCQUFVdEIsUUFGUTtBQUdsQmdCLDBCQUFNRixPQUhZO0FBSWxCUyx5QkFBS1osT0FBT0ksS0FBUCxDQUFhUyxNQUpBO0FBS2xCQyw2QkFBUyxNQUFNUixXQUFOLEdBQW9CLElBQXBCLEdBQTJCZixHQUxsQjtBQU1sQndCLGtDQUFjLE1BQU1ULFlBQVlVLE9BQVosQ0FDWmQsSUFEWSxFQUVaO0FBQUEsK0JBQU1lLGdCQUFNQyxPQUFOLENBQWNDLEVBQWQsQ0FBTjtBQUFBLHFCQUZZLENBQU4sR0FJUixJQUpRLEdBS1JGLGdCQUFNRyxJQUFOLENBQVc3QixHQUFYO0FBWFksaUJBQXRCO0FBYUg7QUFDSixTQXJCRDtBQXNCSCxLQTVCeUM7QUFBQSxDQUF6QixDQUFkIiwiZmlsZSI6InZhcmlhYmxlLW5hbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlIOWPmOmHj+ajgOmqjFxuICogICAgICAg5Y+Y6YeP5ZG95ZCN5b+F6aG777yITVVTVO+8iemHh+eUqCBAZm9vLWJhciDlvaLlvI/vvIzkuI3lvpfvvIhNVVNUIE5PVO+8ieS9v+eUqCBAZm9vQmFyIOW9ouW8j+OAglxuICogICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2Vjb21mZS9zcGVjL2Jsb2IvbWFzdGVyL2xlc3MtY29kZS1zdHlsZS5tZCMlRTUlOEYlOTglRTklODclOEZcbiAqIEBhdXRob3IgaWVsZ25hdyh3dWppMDIyM0BnbWFpbC5jb20pXG4gKi9cblxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHtnZXRMaW5lQ29udGVudH0gZnJvbSAnLi4vdXRpbCc7XG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiDop4TliJnlkI3np7BcbiAqXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJVTEVOQU1FID0gJ3ZhcmlhYmxlLW5hbWUnO1xuXG4vKipcbiAqIOWMuemFjeWPmOmHj+WQjeWtl+eahOato+WImVxuICpcbiAqIEBjb25zdFxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xuY29uc3QgVkFSSUFCTEVfTkFNRV9SRUcgPSAvXkAoW2EtejAtOVxcLV0rKSQvO1xuXG4vKipcbiAqIOmUmeivr+S/oeaBr1xuICpcbiAqIEBjb25zdFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTVNHID0gJ1ZhcmlhYmxlIG5hbWUgbXVzdCBiZSBsaWtlIHRoaXMgYEBmb28tYmFyIG9yIEBmb29iYXJgJztcblxuLyoqXG4gKiDlhbfkvZPnmoTmo4DmtYvpgLvovpFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyDlj4LmlbBcbiAqIEBwYXJhbSB7Kn0gb3B0cy5ydWxlVmFsIOW9k+WJjeinhOWImeWFt+S9k+mFjee9rueahOWAvFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZmlsZUNvbnRlbnQg5paH5Lu25YaF5a65XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5maWxlUGF0aCDmlofku7bot6/lvoRcbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrID0gcG9zdGNzcy5wbHVnaW4oUlVMRU5BTUUsIG9wdHMgPT5cbiAgICAoY3NzLCByZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKCFvcHRzLnJ1bGVWYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNzcy53YWxrRGVjbHMoZGVjbCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7c291cmNlLCBwcm9wfSA9IGRlY2w7XG4gICAgICAgICAgICBjb25zdCBsaW5lTnVtID0gc291cmNlLnN0YXJ0LmxpbmU7XG4gICAgICAgICAgICBjb25zdCBsaW5lQ29udGVudCA9IGdldExpbmVDb250ZW50KGxpbmVOdW0sIG9wdHMuZmlsZUNvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKC9eQC8udGVzdChwcm9wKVxuICAgICAgICAgICAgICAgICYmICFWQVJJQUJMRV9OQU1FX1JFRy50ZXN0KHByb3ApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQud2FybihSVUxFTkFNRSwge1xuICAgICAgICAgICAgICAgICAgICBub2RlOiBkZWNsLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogUlVMRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbDogc291cmNlLnN0YXJ0LmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2AnICsgbGluZUNvbnRlbnQgKyAnYCAnICsgTVNHLFxuICAgICAgICAgICAgICAgICAgICBjb2xvck1lc3NhZ2U6ICdgJyArIGxpbmVDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMSA9PiBjaGFsay5tYWdlbnRhKCQxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKyAnYCAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIGNoYWxrLmdyZXkoTVNHKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4pO1xuIl19