kloc-cli
Version:
A simple CLI tool to count lines of code in current working directory
45 lines (32 loc) • 1.24 kB
JavaScript
import { validateFile, validateDir } from "../../utils/validateItem.js"
import { readFileSync, readdirSync, statSync } from "fs"
import { config } from "../../utils/tableConfig.js"
import { table } from 'table'
import { join } from "path"
const formattedTableData = [["Language", "Loc"]]
let tableData = {}
const countKloc = (path) => {
const root = readdirSync(path)
root.forEach((item) => {
const itemPath = join(path, item)
if (statSync(itemPath).isDirectory() && validateDir(item)) {
countKloc(itemPath)
}
else {
if (validateFile(item)) {
const file = readFileSync(itemPath, "utf8").toString()
const extension = item.split(".").pop()
if (!tableData[extension]) tableData[extension] = 0
tableData[extension] += file.split("\n").length
}
}
})
}
export const klocTable = () => {
countKloc(process.cwd())
const sortedTableData = Object.entries(tableData).sort(([, locA], [, locB]) => locB - locA)
sortedTableData.forEach(([language, loc]) => {
formattedTableData.push([language, loc])
})
console.log("\n" + table(formattedTableData, config).trim())
}