apigeelint
Version:
Node module and tool to lint a bundle for an Apigee API Proxy or sharedflow.
79 lines (67 loc) • 2.18 kB
JavaScript
/**
* @fileoverview CodeClimate Reporter
* @author ipierre1
*/
;
const crypto = require('crypto');
/**
* Returns the severity of warning or error
* @param {Object} message message object to examine
* @returns {string} severity level
* @private
*/
function getMessageType(message) {
if (message.fatal || message.severity === 2) {
return "major";
} else if (message.severity === 1) {
return "minor";
} else {
return "info";
}
}
/**
* Generates a fingerprint for the issue based on its properties
* @param {Object} issue issue object
* @returns {string} fingerprint
* @private
*/
function generateFingerprint(issue) {
const data = `${issue.check_name}-${issue.location.path}-${issue.location.lines.begin}`;
return crypto.createHash('md5').update(data).digest('hex');
}
//------------------------------------------------------------------------------
// Public Interface
//------------------------------------------------------------------------------
module.exports = function(results) {
let output = [];
results.forEach(result => {
const messages = result.messages;
messages.forEach(message => {
const type = getMessageType(message);
const issue = {
"type": "issue",
"check_name": message.ruleId || "unknown_rule",
"description": message.message || "",
"categories": ["lint"],
"location": {
"path": result.filePath,
"lines": {
"begin": message.line || 0
}
},
"fingerprint": generateFingerprint({
"check_name": message.ruleId || "unknown_rule",
"location": {
"path": result.filePath,
"lines": {
"begin": message.line || 0
}
}
}),
"severity": type
};
output.push(issue);
});
});
return JSON.stringify(output, null, 2);
};