canonical
Version:
Canonical code style linter and formatter for JavaScript, SCSS, CSS and JSON.
33 lines (32 loc) • 3.15 kB
JavaScript
;
module.exports = function (context) {
return {
'Program': function Program(n) {
var body = n.body,
absoluteFirst = context.options[0] === 'absolute-first';
var last = -1,
anyRelative = false;
body.forEach(function (node, i) {
if (node.type === 'ImportDeclaration') {
if (absoluteFirst) {
if (/^\./.test(node.source.value)) {
anyRelative = true;
} else if (anyRelative) {
context.report({
node: node.source,
message: 'Absolute imports should come before relative imports.'
});
}
}
if (i !== ++last) {
context.report({
node: node,
message: 'Import in body of module; reorder to top.'
});
}
}
});
}
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJ1bGVzL2ltcG9ydHMtZmlyc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLE9BQVAsR0FBaUIsVUFBVSxPQUFWLEVBQW1CO0FBQ2xDLFNBQU87QUFDTCxlQUFXLGlCQUFVLENBQVYsRUFBYTtBQUN0QixVQUFNLE9BQU8sRUFBRSxJQUFGO1VBQ1AsZ0JBQWdCLFFBQVEsT0FBUixDQUFnQixDQUFoQixNQUF1QixnQkFBdkIsQ0FGQTtBQUd0QixVQUFJLE9BQU8sQ0FBQyxDQUFEO1VBQ1AsY0FBYyxLQUFkLENBSmtCO0FBS3RCLFdBQUssT0FBTCxDQUFhLFVBQVUsSUFBVixFQUFnQixDQUFoQixFQUFrQjtBQUM3QixZQUFJLEtBQUssSUFBTCxLQUFjLG1CQUFkLEVBQW1DO0FBQ3JDLGNBQUksYUFBSixFQUFtQjtBQUNqQixnQkFBSSxNQUFNLElBQU4sQ0FBVyxLQUFLLE1BQUwsQ0FBWSxLQUFaLENBQWYsRUFBbUM7QUFDakMsNEJBQWMsSUFBZCxDQURpQzthQUFuQyxNQUVPLElBQUksV0FBSixFQUFpQjtBQUN0QixzQkFBUSxNQUFSLENBQWU7QUFDYixzQkFBTSxLQUFLLE1BQUw7QUFDTix5QkFBUyx1REFBVDtlQUZGLEVBRHNCO2FBQWpCO1dBSFQ7QUFVQSxjQUFJLE1BQU0sRUFBRSxJQUFGLEVBQVE7QUFDaEIsb0JBQVEsTUFBUixDQUFlO0FBQ2Isd0JBRGE7QUFFYix1QkFBUywyQ0FBVDthQUZGLEVBRGdCO1dBQWxCO1NBWEY7T0FEVyxDQUFiLENBTHNCO0tBQWI7R0FEYixDQURrQztDQUFuQiIsImZpbGUiOiJydWxlcy9pbXBvcnRzLWZpcnN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4ge1xuICAgICdQcm9ncmFtJzogZnVuY3Rpb24gKG4pIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBuLmJvZHlcbiAgICAgICAgICAsIGFic29sdXRlRmlyc3QgPSBjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICdhYnNvbHV0ZS1maXJzdCdcbiAgICAgIGxldCBsYXN0ID0gLTFcbiAgICAgICAgLCBhbnlSZWxhdGl2ZSA9IGZhbHNlXG4gICAgICBib2R5LmZvckVhY2goZnVuY3Rpb24gKG5vZGUsIGkpe1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgaWYgKGFic29sdXRlRmlyc3QpIHtcbiAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChub2RlLnNvdXJjZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgYW55UmVsYXRpdmUgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFueVJlbGF0aXZlKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQWJzb2x1dGUgaW1wb3J0cyBzaG91bGQgY29tZSBiZWZvcmUgcmVsYXRpdmUgaW1wb3J0cy4nLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSAhPT0gKytsYXN0KSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbXBvcnQgaW4gYm9keSBvZiBtb2R1bGU7IHJlb3JkZXIgdG8gdG9wLicsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuICB9XG59XG4iXX0=