UNPKG

clean-code-metrics

Version:
89 lines (82 loc) 2.52 kB
import TaskMetrics from "../TaskMetrics"; import chalk from "chalk"; import { TaskFile } from "../types/TaskMetrics"; import { getColor } from "./TaskStyles"; import fs from "fs"; export default async function list( fileFilter: string[] | undefined, verbose: boolean, configOverridePath?: fs.PathLike, ): Promise<void> { fileFilter = fileFilter?.length ? fileFilter : undefined; if (verbose) { console.info( `Listing Tasks grouped by File: ${formatFileList(fileFilter)}`, ); } const taskMetric = ( await TaskMetrics.createMetrics(configOverridePath) ).get(); const taskLength = Math.max( ...taskMetric.getRawData().map((s) => s.task.length), ); const list = taskMetric.getList(fileFilter); const lineMaxLength = Math.max( ...list.map((t) => t.tasks.map((v) => String(v.lineNumber).length)).flat(2), ); console.info(prettyPrint(list, taskLength, lineMaxLength)); } function formatFileList(fileList: string[] | undefined) { return fileList ? `(${fileList.join(", ")})` : ""; } function prettyPrint( allTasks: TaskFile[], taskLength: number, lineMaxLength: number, ) { return allTasks .sort((a, b) => b.tasks.length - a.tasks.length) .map( (t) => prettyFile(t) + "\n" + prettyTasks(t.tasks, taskLength, lineMaxLength) + "\n", ) .join("\n"); } const prettyFile = (task: TaskFile): string => `at ${task.file}:0\t${chalk.bold.inverse(`#tasks: ${task.tasks.length}`)}`; function prettyTasks( tasks: { task: string; lineNumber: number; content: string }[], taskLength: number, lineMaxLength: number, ) { return ( tasks //.sort((a, b) => getPrio(a.task) - getPrio(b.task)) // TODO use a flag to decide the sorting parameter .sort((a, b) => a.lineNumber - b.lineNumber) .map((task) => prettyTask(task, taskLength, lineMaxLength)) .join("\n") ); } function prettyTask( task: { task: string; lineNumber: number; content: string; }, taskLength: number, lineMaxLength: number, ): string { const taskAppender = " ".repeat(taskLength - task.task.length); const lineAppender = " ".repeat( lineMaxLength - String(task.lineNumber).length, ); const color = getColor(task.task); const line_string = chalk.gray(lineAppender + task.lineNumber); const task_string = color.inverse(`${task.task}${taskAppender}`); //const taskStart = task.content.indexOf(task.task) + task.task.length; //TODO cut task if in the beginning const content_string = color(task.content.trim()); return ` ${line_string} ${task_string} ${content_string}`; }