UNPKG

lesslint

Version:
130 lines (109 loc) 14.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 @import 检验 * @import 语句引用的文件必须(MUST)写在一对引号内,.less 后缀不得(MUST NOT)省略(与引入 CSS 文件时的路径格式一致)。 * 引号使用 ' 和 " 均可,但在同一项目内必须(MUST)统一。 * https://github.com/ecomfe/spec/blob/master/less-code-style.md#import-%E8%AF%AD%E5%8F%A5 * @author ielgnaw(wuji0223@gmail.com) */ var RULENAME = 'import'; /** * less 文件后缀正则 * * @const * @type {RegExp} */ var LESS_SUFFIX_REG = /\.less$/; /** * 记录当前检测的 less 文件中 @import 的引号是单引号还是双引号 * 按第一个读取到的引号为准,同一文件内要统一 {quoteVal, filePath} * * @type {Object} */ var importQuote = { quoteVal: null, filePath: '' }; /** * 具体的检测逻辑 * * @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; } if (importQuote.filePath !== opts.filePath) { importQuote.filePath = opts.filePath; importQuote.quoteVal = null; } css.walkAtRules(function (rule) { if (rule.name !== 'import') { return; } var params = rule.params.replace(/^(['"])/, '').replace(/(['"])$/, ''); var quote = RegExp.$1; var lineNum = rule.source.start.line; var lineContent = (0, _util.getLineContent)(lineNum, opts.fileContent); // @import 语句引用的文件必须(MUST)写在一对引号内 if (!quote) { result.warn(RULENAME, { node: rule, ruleName: RULENAME, line: lineNum, col: rule.source.end.column - rule.params.length, message: '`' + lineContent + '` @import statement must wrote a pair of quotation marks', colorMessage: '`' + lineContent.replace(params, _chalk2.default.magenta(params)) + '` ' + _chalk2.default.grey('@import statement must wrote a pair of quotation marks') }); } else { if (!importQuote.quoteVal) { importQuote.quoteVal = quote; } // 同一个文件内,引号和当前文件的第一个引号不相同 if (quote !== importQuote.quoteVal && opts.filePath === importQuote.filePath) { result.warn(RULENAME, { node: rule, ruleName: RULENAME, line: lineNum, col: rule.source.end.column - rule.params.length, message: '' + ('`' + lineContent + '` Quotes must be the same in the same file,') + ('Current file the first quote is `' + importQuote.quoteVal + '`'), colorMessage: '`' + lineContent.replace(new RegExp(quote, 'g'), _chalk2.default.magenta(quote)) + ' ' + _chalk2.default.grey('Quotes must be the same in the same file, Current file ' + 'the first quote is `' + _chalk2.default.magenta(importQuote.quoteVal) + '`') }); } } // .less 后缀不得(MUST NOT)省略 if (!LESS_SUFFIX_REG.test(params)) { result.warn(RULENAME, { node: rule, ruleName: RULENAME, line: lineNum, col: rule.source.end.column - rule.params.length, message: '`' + lineContent + '` .less suffix must not be omitted', colorMessage: '`' + lineContent.replace(params, _chalk2.default.magenta(params)) + '` ' + _chalk2.default.grey('.less suffix must not be omitted') }); } }); }; }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlL2ltcG9ydC5qcyJdLCJuYW1lcyI6WyJSVUxFTkFNRSIsIkxFU1NfU1VGRklYX1JFRyIsImltcG9ydFF1b3RlIiwicXVvdGVWYWwiLCJmaWxlUGF0aCIsImNoZWNrIiwicG9zdGNzcyIsInBsdWdpbiIsImNzcyIsInJlc3VsdCIsIm9wdHMiLCJydWxlVmFsIiwid2Fsa0F0UnVsZXMiLCJydWxlIiwibmFtZSIsInBhcmFtcyIsInJlcGxhY2UiLCJxdW90ZSIsIlJlZ0V4cCIsIiQxIiwibGluZU51bSIsInNvdXJjZSIsInN0YXJ0IiwibGluZSIsImxpbmVDb250ZW50IiwiZmlsZUNvbnRlbnQiLCJ3YXJuIiwibm9kZSIsInJ1bGVOYW1lIiwiY29sIiwiZW5kIiwiY29sdW1uIiwibGVuZ3RoIiwibWVzc2FnZSIsImNvbG9yTWVzc2FnZSIsImNoYWxrIiwibWFnZW50YSIsImdyZXkiLCJ0ZXN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7O0FBRUE7Ozs7OztBQWRBOzs7Ozs7OztBQW9CQSxJQUFNQSxXQUFXLFFBQWpCOztBQUVBOzs7Ozs7QUFNQSxJQUFNQyxrQkFBa0IsU0FBeEI7O0FBRUE7Ozs7OztBQU1BLElBQU1DLGNBQWM7QUFDaEJDLGNBQVUsSUFETTtBQUVoQkMsY0FBVTtBQUZNLENBQXBCOztBQUtBOzs7Ozs7OztBQVFPLElBQU1DLHdCQUFRQyxrQkFBUUMsTUFBUixDQUFlUCxRQUFmLEVBQXlCO0FBQUEsV0FDMUMsVUFBQ1EsR0FBRCxFQUFNQyxNQUFOLEVBQWlCOztBQUViLFlBQUksQ0FBQ0MsS0FBS0MsT0FBVixFQUFtQjtBQUNmO0FBQ0g7O0FBRUQsWUFBSVQsWUFBWUUsUUFBWixLQUF5Qk0sS0FBS04sUUFBbEMsRUFBNEM7QUFDeENGLHdCQUFZRSxRQUFaLEdBQXVCTSxLQUFLTixRQUE1QjtBQUNBRix3QkFBWUMsUUFBWixHQUF1QixJQUF2QjtBQUNIOztBQUVESyxZQUFJ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b250ZW50IjpbIi8qKlxuICogQGZpbGUgQGltcG9ydCDmo4DpqoxcbiAqICAgICAgIEBpbXBvcnQg6K+t5Y+l5byV55So55qE5paH5Lu25b+F6aG777yITVVTVO+8ieWGmeWcqOS4gOWvueW8leWPt+WGhe+8jC5sZXNzIOWQjue8gOS4jeW+l++8iE1VU1QgTk9U77yJ55yB55Wl77yI5LiO5byV5YWlIENTUyDmlofku7bml7bnmoTot6/lvoTmoLzlvI/kuIDoh7TvvInjgIJcbiAqICAgICAgIOW8leWPt+S9v+eUqCAnIOWSjCBcIiDlnYflj6/vvIzkvYblnKjlkIzkuIDpobnnm67lhoXlv4XpobvvvIhNVVNU77yJ57uf5LiA44CCXG4gKiAgICAgICBodHRwczovL2dpdGh1Yi5jb20vZWNvbWZlL3NwZWMvYmxvYi9tYXN0ZXIvbGVzcy1jb2RlLXN0eWxlLm1kI2ltcG9ydC0lRTglQUYlQUQlRTUlOEYlQTVcbiAqIEBhdXRob3IgaWVsZ25hdyh3dWppMDIyM0BnbWFpbC5jb20pXG4gKi9cblxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHtnZXRMaW5lQ29udGVudH0gZnJvbSAnLi4vdXRpbCc7XG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiDop4TliJnlkI3np7BcbiAqXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJVTEVOQU1FID0gJ2ltcG9ydCc7XG5cbi8qKlxuICogbGVzcyDmlofku7blkI7nvIDmraPliJlcbiAqXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbmNvbnN0IExFU1NfU1VGRklYX1JFRyA9IC9cXC5sZXNzJC87XG5cbi8qKlxuICog6K6w5b2V5b2T5YmN5qOA5rWL55qEIGxlc3Mg5paH5Lu25LitIEBpbXBvcnQg55qE5byV5Y+35piv5Y2V5byV5Y+36L+Y5piv5Y+M5byV5Y+3XG4gKiDmjInnrKzkuIDkuKror7vlj5bliLDnmoTlvJXlj7fkuLrlh4bvvIzlkIzkuIDmlofku7blhoXopoHnu5/kuIAgIHtxdW90ZVZhbCwgZmlsZVBhdGh9XG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuY29uc3QgaW1wb3J0UXVvdGUgPSB7XG4gICAgcXVvdGVWYWw6IG51bGwsXG4gICAgZmlsZVBhdGg6ICcnXG59O1xuXG4vKipcbiAqIOWFt+S9k+eahOajgOa1i+mAu+i+kVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIOWPguaVsFxuICogQHBhcmFtIHsqfSBvcHRzLnJ1bGVWYWwg5b2T5YmN6KeE5YiZ5YW35L2T6YWN572u55qE5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5maWxlQ29udGVudCDmlofku7blhoXlrrlcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmZpbGVQYXRoIOaWh+S7tui3r+W+hFxuICovXG5leHBvcnQgY29uc3QgY2hlY2sgPSBwb3N0Y3NzLnBsdWdpbihSVUxFTkFNRSwgb3B0cyA9PlxuICAgIChjc3MsIHJlc3VsdCkgPT4ge1xuXG4gICAgICAgIGlmICghb3B0cy5ydWxlVmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW1wb3J0UXVvdGUuZmlsZVBhdGggIT09IG9wdHMuZmlsZVBhdGgpIHtcbiAgICAgICAgICAgIGltcG9ydFF1b3RlLmZpbGVQYXRoID0gb3B0cy5maWxlUGF0aDtcbiAgICAgICAgICAgIGltcG9ydFF1b3RlLnF1b3RlVmFsID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNzcy53YWxrQXRSdWxlcyhydWxlID0+IHtcbiAgICAgICAgICAgIGlmIChydWxlLm5hbWUgIT09ICdpbXBvcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBydWxlLnBhcmFtcy5yZXBsYWNlKC9eKFsnXCJdKS8sICcnKS5yZXBsYWNlKC8oWydcIl0pJC8sICcnKTtcblxuICAgICAgICAgICAgY29uc3QgcXVvdGUgPSBSZWdFeHAuJDE7XG4gICAgICAgICAgICBjb25zdCBsaW5lTnVtID0gcnVsZS5zb3VyY2Uuc3RhcnQubGluZTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVDb250ZW50ID0gZ2V0TGluZUNvbnRlbnQobGluZU51bSwgb3B0cy5maWxlQ29udGVudCk7XG5cbiAgICAgICAgICAgIC8vIEBpbXBvcnQg6K+t5Y+l5byV55So55qE5paH5Lu25b+F6aG777yITVVTVO+8ieWGmeWcqOS4gOWvueW8leWPt+WGhVxuICAgICAgICAgICAgaWYgKCFxdW90ZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC53YXJuKFJVTEVOQU1FLCB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IHJ1bGUsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBSVUxFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bSxcbiAgICAgICAgICAgICAgICAgICAgY29sOiBydWxlLnNvdXJjZS5lbmQuY29sdW1uIC0gcnVsZS5wYXJhbXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgXFxgJHtsaW5lQ29udGVudH1cXGAgQGltcG9ydCBzdGF0ZW1lbnQgbXVzdCB3cm90ZSBhIHBhaXIgb2YgcXVvdGF0aW9uIG1hcmtzYCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3JNZXNzYWdlOiAnYCdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgbGluZUNvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGsubWFnZW50YShwYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICArICdgICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgY2hhbGsuZ3JleSgnQGltcG9ydCBzdGF0ZW1lbnQgbXVzdCB3cm90ZSBhIHBhaXIgb2YgcXVvdGF0aW9uIG1hcmtzJylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghaW1wb3J0UXVvdGUucXVvdGVWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UXVvdGUucXVvdGVWYWwgPSBxdW90ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyDlkIzkuIDkuKrmlofku7blhoXvvIzlvJXlj7flkozlvZPliY3mlofku7bnmoTnrKzkuIDkuKrlvJXlj7fkuI3nm7jlkIxcbiAgICAgICAgICAgICAgICBpZiAocXVvdGUgIT09IGltcG9ydFF1b3RlLnF1b3RlVmFsICYmIG9wdHMuZmlsZVBhdGggPT09IGltcG9ydFF1b3RlLmZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC53YXJuKFJVTEVOQU1FLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBydWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWU6IFJVTEVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogcnVsZS5zb3VyY2UuZW5kLmNvbHVtbiAtIHJ1bGUucGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBgXFxgJHtsaW5lQ29udGVudH1cXGAgUXVvdGVzIG11c3QgYmUgdGhlIHNhbWUgaW4gdGhlIHNhbWUgZmlsZSxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBgQ3VycmVudCBmaWxlIHRoZSBmaXJzdCBxdW90ZSBpcyBcXGAke2ltcG9ydFF1b3RlLnF1b3RlVmFsfVxcYGAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvck1lc3NhZ2U6ICdgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbGluZUNvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChxdW90ZSwgJ2cnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGsubWFnZW50YShxdW90ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAnICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNoYWxrLmdyZXkoJ1F1b3RlcyBtdXN0IGJlIHRoZSBzYW1lIGluIHRoZSBzYW1lIGZpbGUsIEN1cnJlbnQgZmlsZSAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAndGhlIGZpcnN0IHF1b3RlIGlzIGAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjaGFsay5tYWdlbnRhKGltcG9ydFF1b3RlLnF1b3RlVmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJ2AnKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIC5sZXNzIOWQjue8gOS4jeW+l++8iE1VU1QgTk9U77yJ55yB55WlXG4gICAgICAgICAgICBpZiAoIUxFU1NfU1VGRklYX1JFRy50ZXN0KHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQud2FybihSVUxFTkFNRSwge1xuICAgICAgICAgICAgICAgICAgICBub2RlOiBydWxlLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogUlVMRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbDogcnVsZS5zb3VyY2UuZW5kLmNvbHVtbiAtIHJ1bGUucGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFxcYCR7bGluZUNvbnRlbnR9XFxgIC5sZXNzIHN1ZmZpeCBtdXN0IG5vdCBiZSBvbWl0dGVkYCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3JNZXNzYWdlOiAnYCdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgbGluZUNvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGsubWFnZW50YShwYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICArICdgICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgY2hhbGsuZ3JleSgnLmxlc3Mgc3VmZml4IG11c3Qgbm90IGJlIG9taXR0ZWQnKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4pO1xuIl19