Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var reporter = require('./lib/reporter');
let reporter = require('./lib/reporter');

module.exports = reporter;
module.exports.postcss = true;
51 changes: 21 additions & 30 deletions lib/formatter.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
var pico = require('picocolors');
var path = require('path');
var firstBy = require('thenby');
var util = require('./util');
let pico = require('picocolors');
let path = require('path');
let firstBy = require('thenby');
let util = require('./util');

function createSortFunction(positionless, sortByPosition) {
var positionValue = 0
let positionValue = 0

if (positionless === 'any') { positionValue = 1; }
if (positionless === 'first') { positionValue = 2; }
if (positionless === 'last') { positionValue = 0; }
if (positionless === 'any') positionValue = 1;
if (positionless === 'first') positionValue = 2;
if (positionless === 'last') positionValue = 0;

var sortFunction = firstBy((m) => {
if (!m.line) return 1;
return positionValue;
})
let sortFunction = firstBy((m) => !m.line ? 1 : positionValue)

if (sortByPosition) {
sortFunction = sortFunction.thenBy('line').thenBy('column');
Expand All @@ -22,41 +19,36 @@ function createSortFunction(positionless, sortByPosition) {
return sortFunction;
}

module.exports = function (opts) {
var options = opts || {};
var sortByPosition =
module.exports = function (options = {}) {
let sortByPosition =
typeof options.sortByPosition !== 'undefined'
? options.sortByPosition
: true;
var positionless = options.positionless || 'first';
let positionless = options.positionless || 'first';

var sortFunction = createSortFunction(positionless, sortByPosition);
let sortFunction = createSortFunction(positionless, sortByPosition);

return function (input) {
var messages = input.messages.filter(function (message) {
return typeof message.text === 'string';
});
var source = input.source;
let messages = input.messages.filter((message) => typeof message.text === 'string');
let source = input.source;

if (!messages.length) return '';

var orderedMessages = messages.sort(sortFunction);
let orderedMessages = messages.sort(sortFunction);

var output = '\n';
let output = '\n';

if (source) {
output += pico.bold(pico.underline(logFrom(source))) + '\n';
}

orderedMessages.forEach(function (w) {
output += messageToString(w) + '\n';
});
orderedMessages.forEach((w) => output += messageToString(w) + '\n');

return output;

function messageToString(message) {
var location = util.getLocation(message);
var str = '';
let location = util.getLocation(message);
let str = '';

if (location.line) {
str += pico.bold(location.line);
Expand Down Expand Up @@ -86,8 +78,7 @@ module.exports = function (opts) {
}

function logFrom(fromValue) {
if (fromValue.charAt(0) === '<') return fromValue;
return path.relative(process.cwd(), fromValue).split(path.sep).join('/');
return fromValue.charAt(0) === '<' ? fromValue : path.relative(process.cwd(), fromValue).split(path.sep).join('/');
}
};
};
59 changes: 24 additions & 35 deletions lib/reporter.js
Original file line number Diff line number Diff line change
@@ -1,57 +1,50 @@
var defaultFormatter = require('./formatter');
var pico = require('picocolors');
var util = require('./util');
let defaultFormatter = require('./formatter');
let pico = require('picocolors');
let util = require('./util');
let hasOwn = Object.prototype.hasOwnProperty;

module.exports = function (opts = {}) {
var formatter =
let formatter =
opts.formatter ||
defaultFormatter({
noIcon: opts.noIcon,
noPlugin: opts.noPlugin,
});

var pluginFilter;
let pluginFilter;
if (!opts.plugins) {
// Every plugin
pluginFilter = function () {
return true;
};
pluginFilter = () => true;
} else if (
opts.plugins.every(function (plugin) {
return plugin[0] === '!';
})
opts.plugins.every((plugin) => plugin[0] === '!')
) {
// Deny list
pluginFilter = function (message) {
return opts.plugins.indexOf('!' + message.plugin) === -1;
};
pluginFilter = (message) => opts.plugins.indexOf('!' + message.plugin) === -1;
} else {
// Allow list
pluginFilter = function (message) {
return opts.plugins.indexOf(message.plugin) !== -1;
};
pluginFilter = (message) => opts.plugins.indexOf(message.plugin) !== -1;
}

var messageFilter = opts.filter || ((message) => message.type === 'warning' || message.type === 'error');
let messageFilter = opts.filter || ((message) => message.type === 'warning' || message.type === 'error');

return {
postcssPlugin: 'postcss-reporter',
OnceExit(css, { result }) {
var messagesToLog = result.messages
let messagesToLog = result.messages
.filter(pluginFilter)
.filter(messageFilter);

var resultSource = !result.root.source
let resultSource = !result.root.source
? ''
: result.root.source.input.file || result.root.source.input.id;

let errorCount = 0;
let warningCount = 0;

var sourceGroupedMessages = messagesToLog.reduce((grouped, message) => {
const key = util.getLocation(message).file || resultSource;
let sourceGroupedMessages = messagesToLog.reduce((grouped, message) => {
let key = util.getLocation(message).file || resultSource;

if (!grouped.hasOwnProperty(key)) {
if (!hasOwn.call(grouped, key)) {
grouped[key] = [];
}

Expand All @@ -66,9 +59,9 @@ module.exports = function (opts = {}) {
return grouped;
}, {});

var report = '';
for (const source in sourceGroupedMessages) {
if (sourceGroupedMessages.hasOwnProperty(source)) {
let report = '';
for (let source in sourceGroupedMessages) {
if (hasOwn.call(sourceGroupedMessages, source)) {
report += formatter({
messages: sourceGroupedMessages[source],
source: source,
Expand All @@ -81,31 +74,27 @@ module.exports = function (opts = {}) {
}

if (opts.clearAllMessages) {
var messagesToClear = result.messages.filter(pluginFilter);
let messagesToClear = result.messages.filter(pluginFilter);
result.messages = result.messages.filter(message => !messagesToClear.includes(message));
}

if (!report) return;

const summaryColor = errorCount > 0 ? 'red' : 'yellow';
const summarySymbol = errorCount > 0 ? util.errorSymbol : util.warningSymbol;
const summary = `${summarySymbol} ${messagesToLog.length} ${util.plur('problem', messagesToLog.length)} (${errorCount} ${util.plur('error')}, ${warningCount} ${util.plur('warning')})`
let summaryColor = errorCount > 0 ? 'red' : 'yellow';
let summarySymbol = errorCount > 0 ? util.errorSymbol : util.warningSymbol;
let summary = `${summarySymbol} ${messagesToLog.length} ${util.plur('problem', messagesToLog.length)} (${errorCount} ${util.plur('error')}, ${warningCount} ${util.plur('warning')})`

report += `\n ${pico[summaryColor](pico.bold(summary))}\n`;

console.log(report);

if (shouldThrowError()) {
if (opts.throwError || errorCount > 0) {
throw new Error(
pico.red(
pico.bold('\n** postcss-reporter: warnings or errors were found **')
)
);
}

function shouldThrowError() {
return opts.throwError || errorCount > 0;
}
},
};
};
10 changes: 5 additions & 5 deletions lib/util.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
var supportsLargeCharset =
let supportsLargeCharset =
process.platform !== 'win32' ||
process.env.CI ||
process.env.TERM === 'xterm-256color';

exports.getLocation = function (message) {
var messageNode = message.node;
let messageNode = message.node;

var location = {
let location = {
line: message.line,
column: message.column,
};

var messageInput = messageNode && messageNode.source && messageNode.source.input;
let messageInput = messageNode && messageNode.source && messageNode.source.input;

if (!messageInput) return location;

var originLocation =
let originLocation =
messageInput.origin && messageInput.origin(message.line, message.column);
if (originLocation) return originLocation;

Expand Down
Loading
Loading