UNPKG

canonical

Version:

Canonical code style linter and formatter for JavaScript, SCSS and CSS.

117 lines (87 loc) 3.23 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var _jscs = require('jscs'); var _jscs2 = _interopRequireDefault(_jscs); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var checker = undefined, reportValidateSourceCode = undefined, validateSourceCode = undefined; checker = new _jscs2['default'](); checker.configure({ "esnext": true, "plugins": [require.resolve('jscs-jsdoc')] }); /** * @typedef {Object} validateRule~error * @property {String} message * @property {Number} line * @property {Number} column */ /** * Validates a source code using a specific jscs-jsdoc rule and return an array of errors. * * @param {String} sourceCode * @param {String} ruleName * @param {Boolean|String|Object} ruleOptions * @returns {validateRule~error[]} */ validateSourceCode = function (sourceCode, ruleName, ruleOptions) { var results = undefined, errors = undefined; // console.log('ruleName', ruleName, 'ruleOptions', ruleOptions); checker.configure({ "jsDoc": _defineProperty({}, ruleName, ruleOptions) }); // console.log('checker._configuredRules', checker._configuredRules); results = checker.checkString(sourceCode); errors = results.getErrorList(); // console.log('errors', errors); errors = _lodash2['default'].map(errors, function (error) { return { message: error.message, line: error.line, column: error.column }; }); // console.log('errors', errors); return errors; }; /** * @param {Object} context * @param {String} ruleName * @param {Boolean|String|Object} ruleOptions * @param {undefined|function} translate * @returns {undefined} */ reportValidateSourceCode = function (context, ruleName, ruleOptions, translate) { var errors = undefined, sourceCode = undefined; sourceCode = context.getSourceCode().text; errors = validateSourceCode(sourceCode, ruleName, ruleOptions); // console.log('errors', errors, sourceCode, ruleName, ruleOptions); _lodash2['default'].forEach(errors, function (error) { var node = undefined; node = { loc: { start: { line: error.line, // "Ah... the parser (espree) is using 0-based column and eslint is using 1-based column, so context.report is 0-based then eslint transforms it to 1-based." // @see https://gitter.im/eslint/eslint?at=55fc8a81463feefb419d4798 column: error.column - 1 } } }; // console.log('node', node) if (translate) { error.message = translate(error.message); } context.report(node, error.message); }); }; exports['default'] = reportValidateSourceCode; module.exports = exports['default'];