clean-code-metrics
Version:
metrics for clean code
72 lines (66 loc) • 1.61 kB
text/typescript
import fs from "fs";
import { Config } from "./types/TaskMetrics";
export const defaultConfig: Config = {
basePath: "./",
ignorePath: [".gitignore"],
ignoreCase: false,
searchPattern: [
"TODO",
"FIXME",
"NOTE",
"OPTIMIZE",
"HACK",
"BUG",
"XXX",
"DOCME",
"PENDING",
"DISCUSS",
"REVIEW",
],
type: "Config",
};
type InitConfig = {
type: "InitConfig";
basePath?: string;
ignorePath?: string[];
ignoreCase?: boolean;
searchPattern?: string[];
};
function loadConfigFile(path: fs.PathLike): InitConfig | undefined {
if (fs.existsSync(path)) {
const file = fs.readFileSync(path).toString("utf-8");
return JSON.parse(file) as InitConfig; //TODO validate JSON input
} else {
return undefined;
}
}
function loadPackageJSON(packageJSON: fs.PathLike): InitConfig | undefined {
if (fs.existsSync(packageJSON)) {
const packJSON = JSON.parse(fs.readFileSync(packageJSON).toString("utf-8"));
return packJSON.cleanCodeMetrics as InitConfig;
} else {
return undefined;
}
}
export function load(
configOverridePath?: fs.PathLike,
packageJSONPath: fs.PathLike = "package.json",
configPath: fs.PathLike = "test.config.json",
): Config {
if (configOverridePath) {
// override Path doesn't load package.json or default config file
return {
...defaultConfig,
...loadConfigFile(configOverridePath),
} as Config;
} else {
//package.json values have precedence
const config = loadConfigFile(configPath);
const packageJsonConfig = loadPackageJSON(packageJSONPath);
return {
...defaultConfig,
...config,
...packageJsonConfig,
} as Config;
}
}