review-edit-auto
Version:
scan your project, only review edited code in given time-range automatic
41 lines (35 loc) • 1.1 kB
text/typescript
import ignore from 'ignore';
const path = require('path');
const fs = require('fs');
/**
* 加载ignore配置文件,并处理成数组
* @param {*} ignoreFileName
*/
async function loadIgnorePatterns(ignoreFileName): Promise<string[]> {
const ignorePath = path.resolve(process.cwd(), ignoreFileName);
try {
const ignores = fs.readFileSync(ignorePath, 'utf8');
return ignores.split(/[\n\r]|\n\r/).filter((pattern) => Boolean(pattern));
} catch (e) {
return [];
}
}
/**
* 根据ignore配置过滤文件列表
*/
async function filterByIgnore(
files: string[],
ignoreFileName: string,
ignoreRules,
cwd = process.cwd(),
): Promise<string[]> {
const ignorePatterns = await loadIgnorePatterns(ignoreFileName);
const ig = ignore().add([...ignorePatterns, ...ignoreRules]);
const filtered = files
.map((raw) => (path.isAbsolute(raw) ? raw : path.resolve(cwd, raw)))
.map((raw) => path.relative(cwd, raw))
.filter((filePath) => !ig.ignores(filePath))
.map((path) => path.replaceAll('\\', '/'));
return filtered;
}
export default filterByIgnore;