quality-bot
Version:
QBot Online Code Review Application
191 lines (177 loc) • 9.68 kB
JavaScript
const simpleGit = require('simple-git');
const tempDirectory = require('temp-dir');
const version = require('./../package.json').version;
const colors = require('./../common/colors');
const Utils = require('./utils');
const git = simpleGit();
const welcome = async (isConfigure) => {
const command = 'config --get user.name'.split(' ');
let res = await git.raw(command);
const hColor = isConfigure ? colors.FgYellow : colors.FgBlue;
console.log(); // New Line
console.log(colors.Bright + hColor, "===========================================", colors.Reset);
console.log(colors.Bright + hColor, " Welcome to QBot-Review v" + version, colors.Reset);
console.log(colors.Bright + hColor, "===========================================", colors.Reset);
console.log(); // New Line
console.log(
colors.Bright + colors.FgCyan,
"Hello!",
colors.Reset, res || "User",
isConfigure
? "Please provide all the information which is help to review our code. Thanks"
: "I am processing your request. Take a breath. I will get back to you shortly."
);
console.log();
//success();
}
const configurationSuccess = async (hooksPath, scope) => {
console.log();
console.log(colors.Bright + colors.FgGreen, "----------------------------------------------------------", colors.Reset);
console.log(colors.Bright + colors.FgGreen, "QBot precommit plugin configuration completed successfully", colors.Reset);
console.log(colors.Bright + colors.FgGreen, "-----------------------------------------------------------", colors.Reset);
console.log();
console.log(colors.Bright + colors.FgWhite, "Your core.hookspath is :" + hooksPath, colors.Reset);
if (scope === 'local') {
console.log(" it is only configured in this current repository this won't affect other repository thanks. Happy coding!");
}
console.log();
}
const configurationError = async (message) => {
console.log();
console.log(colors.Bright + colors.FgYellow, "Configuration Error", colors.Reset);
console.log(colors.Bright + colors.FgYellow, "-------------------", colors.Reset);
console.log(colors.Bright + colors.FgRed, message, colors.Reset);
console.log();
process.exit(1);
}
const success = async () => {
const fileList = await Utils.getFileList();
if (!fileList.length) {
noFiles();
return;
}
console.log(colors.Bright + colors.FgWhite, "Reviewed Files", colors.Reset); // New Line
console.table(fileList.map(e => ({ "File Name": e })));
console.log("\n");
console.log(colors.Bright + colors.FgGreen, "----------------------------------------", colors.Reset);
console.log(colors.Bright + colors.FgGreen, " Code Looks Good!", colors.FgCyan, "Happy Coding... ", colors.Reset);
console.log(colors.Bright + colors.FgGreen, "----------------------------------------", colors.Reset);
console.log();
process.exit();
}
const comments = (comments) => {
console.log();
console.log(colors.FgWhite, "Rule Name: " + comments.checkName, colors.Reset);
console.log(colors.Bright + colors.FgCyan, `${comments.description}`, colors.Reset);
console.log();
console.log(colors.Bright + colors.FgWhite, `Location: ${colors.FgYellow} ${comments.location.path} ${colors.FgGreen} (Line: ${comments.location.lines.begin} - ${comments.location.lines.end} )`, colors.Reset);
console.log(colors.Bright + colors.FgWhite, "----------------------------------------", colors.Reset);
console.log();
}
const commentsInfo = (comments, fileList) => {
const dir = tempDirectory + '/qbot-report';
console.log("\n");
console.log(colors.Bright + colors.FgWhite, `Total number of files reviewed: ${fileList.length}`, colors.Reset);
console.log();
console.log(colors.Bright + colors.FgWhite, `You have ${comments} comments`, colors.Reset); // New Line
console.log();
console.log(colors.Bright + colors.FgRed, "-----------------------------------------------------", colors.Reset);
console.log(colors.Bright + colors.FgRed, " Commit Aborted, You have comments.. ", colors.Reset);
console.log(colors.Bright + colors.FgRed, "-----------------------------------------------------", colors.Reset);
console.log();
console.log(colors.Bright + colors.FgWhite, "Your Report available in bellow location please check", colors.Reset);
console.log(colors.Bright + colors.FgBlue, "file:///" + dir + "/report.html", colors.Reset);
console.log();
console.log(colors.Bright + colors.FgWhite, "Note: If you want to commit immediately without resolving the comments, add -n or --no-verify with git commit command.", colors.Reset);
console.log(colors.Bright + colors.FgWhite, "Example: git commit -m \"You Commit Message\" -n or git commit -m \"You Commit Message\" --no-verify", colors.Reset);
console.log(colors.Bright + colors.FgWhite, "This will skip entire pre-commit hooks.", colors.Reset);
console.log();
process.exit(1);
}
const serverError = (message) => {
console.log();
console.log(colors.Bright + colors.FgRed, message, colors.Reset);
console.log();
console.log(colors.Bright + colors.FgYellow, "----------------------------", colors.Reset);
console.log(colors.Bright + colors.FgYellow, " Server Error ", colors.Reset);
console.log(colors.Bright + colors.FgYellow, "----------------------------", colors.Reset);
console.log();
process.exit(1);
}
const invalidLocation = (message) => {
console.log();
console.log(colors.Bright + colors.FgYellow, "----------------------------", colors.Reset);
console.log(colors.Bright + colors.FgYellow, " Invalid Location ", colors.Reset);
console.log(colors.Bright + colors.FgYellow, "----------------------------", colors.Reset);
console.log();
console.log(colors.FgRed, message, colors.Reset);
console.log(colors.Bright + colors.FgWhite, "Please use root location of your project", colors.Reset);
console.log();
process.exit(1);
}
const invalidToken = () => {
console.log();
console.log(colors.Bright + colors.FgYellow, "----------------------------", colors.Reset);
console.log(colors.Bright + colors.FgYellow, " Invalid Token ", colors.Reset);
console.log(colors.Bright + colors.FgYellow, "----------------------------", colors.Reset);
console.log();
console.log(colors.Bright + colors.FgRed, "Need a valid token to review your files. Please follow the below instructions", colors.Reset);
console.log()
console.log(colors.Bright + colors.FgWhite, " git config --global user.qbot-token '**************' ", colors.Reset);
console.log(colors.Bright + colors.FgWhite, " (OR)", colors.Reset);
console.log(colors.Bright + colors.FgWhite, " quality-bot review <Your-token>", colors.Reset);
console.log();
process.exit(1);
}
const helpMessage = () => {
console.log();
console.log(colors.Bright + colors.FgCyan, "----------------------", colors.Reset);
console.log(colors.Bright + colors.FgCyan, " Help ", colors.Reset);
console.log(colors.Bright + colors.FgCyan, "----------------------", colors.Reset);
console.log();
console.log(colors.Bright + colors.FgWhite, "Hello there...", colors.Reset);
console.log(colors.FgWhite, "I am QBot. I am here to help you review your code to improve the code quality.", colors.Reset);
console.log(colors.FgWhite, "Here is the some command which is help to review your code", colors.Reset);
console.log();
console.log(colors.Bright, `${colors.FgYellow}Qbot Configuration ${colors.FgWhite}- One time setup`, colors.Reset);
console.log(colors.Bright, `${colors.FgWhite}-----------------------------------`, colors.Reset);
console.log(` Qbot configure is the one time process which will ask the qbot token and git hooks path.`);
console.log(` Once you setup everything your code will automatically review before every commit.`);
console.log();
console.log(` Note: The hooks path required only for global configuration.`);
console.log();
console.log(colors.Bright + colors.FgWhite, " quality-bot configure", colors.Reset);
console.log(colors.FgWhite, " - Qbot token", colors.Reset);
console.log(colors.FgWhite, " - Git Hook Path", colors.Reset);
console.log();
console.log(colors.Bright + colors.FgGreen, "Available Command", colors.Reset);
console.log();
console.log(colors.Bright + colors.FgWhite, " 1. quality-bot configure", colors.Reset);
console.log(colors.Bright + colors.FgWhite, " 2. quality-bot review", colors.Reset);
console.log(colors.Bright + colors.FgWhite, " 3. quality-bot review --token=<qbot-token>", colors.Reset);
console.log();
process.exit();
}
const noFiles = () => {
console.log("\n");
console.log(colors.Bright + colors.FgRed, "Sorry!... No Files to Review", colors.Reset); // New Line
console.log();
console.log(colors.Bright + colors.FgYellow, "----------------------------------------", colors.Reset);
console.log(colors.Bright + colors.FgYellow, " Please stage your files ", colors.Reset);
console.log(colors.Bright + colors.FgYellow, "----------------------------------------", colors.Reset);
console.log();
process.exit(1);
}
module.exports = {
welcome,
success,
noFiles,
serverError,
invalidLocation,
invalidToken,
helpMessage,
commentsInfo,
comments,
configurationSuccess,
configurationError
}