mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-10 22:21:22 -07:00
fix(scripts): add tsconfig linter to prevent adding files to the exclude list (#11602)
This commit is contained in:
@@ -251,6 +251,79 @@ export function runSensitiveKeywordLinter() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function stripJSONComments(json) {
|
||||||
|
return json.replace(
|
||||||
|
/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g,
|
||||||
|
(m, g) => (g ? '' : m),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function runTSConfigLinter() {
|
||||||
|
console.log('\nRunning tsconfig linter...');
|
||||||
|
|
||||||
|
let files = [];
|
||||||
|
try {
|
||||||
|
// Find all tsconfig.json files under packages/ using a git pathspec
|
||||||
|
files = execSync("git ls-files 'packages/**/tsconfig.json'")
|
||||||
|
.toString()
|
||||||
|
.trim()
|
||||||
|
.split('\n')
|
||||||
|
.filter(Boolean);
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error finding tsconfig.json files:', e.message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let hasError = false;
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
const tsconfigPath = join(process.cwd(), file);
|
||||||
|
if (!existsSync(tsconfigPath)) {
|
||||||
|
console.error(`Error: ${tsconfigPath} does not exist.`);
|
||||||
|
hasError = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const content = readFileSync(tsconfigPath, 'utf-8');
|
||||||
|
const config = JSON.parse(stripJSONComments(content));
|
||||||
|
|
||||||
|
// Check if exclude exists and matches exactly
|
||||||
|
if (config.exclude) {
|
||||||
|
if (!Array.isArray(config.exclude)) {
|
||||||
|
console.error(
|
||||||
|
`Error: ${file} "exclude" must be an array. Found: ${JSON.stringify(
|
||||||
|
config.exclude,
|
||||||
|
)}`,
|
||||||
|
);
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
const allowedExclude = new Set(['node_modules', 'dist']);
|
||||||
|
const invalidExcludes = config.exclude.filter(
|
||||||
|
(item) => !allowedExclude.has(item),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (invalidExcludes.length > 0) {
|
||||||
|
console.error(
|
||||||
|
`Error: ${file} "exclude" contains invalid items: ${JSON.stringify(
|
||||||
|
invalidExcludes,
|
||||||
|
)}. Only "node_modules" and "dist" are allowed.`,
|
||||||
|
);
|
||||||
|
hasError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Error parsing ${tsconfigPath}: ${error.message}`);
|
||||||
|
hasError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasError) {
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
const args = process.argv.slice(2);
|
const args = process.argv.slice(2);
|
||||||
|
|
||||||
@@ -275,6 +348,9 @@ function main() {
|
|||||||
if (args.includes('--sensitive-keywords')) {
|
if (args.includes('--sensitive-keywords')) {
|
||||||
runSensitiveKeywordLinter();
|
runSensitiveKeywordLinter();
|
||||||
}
|
}
|
||||||
|
if (args.includes('--tsconfig')) {
|
||||||
|
runTSConfigLinter();
|
||||||
|
}
|
||||||
|
|
||||||
if (args.length === 0) {
|
if (args.length === 0) {
|
||||||
setupLinters();
|
setupLinters();
|
||||||
@@ -284,6 +360,7 @@ function main() {
|
|||||||
runYamllint();
|
runYamllint();
|
||||||
runPrettier();
|
runPrettier();
|
||||||
runSensitiveKeywordLinter();
|
runSensitiveKeywordLinter();
|
||||||
|
runTSConfigLinter();
|
||||||
console.log('\nAll linting checks passed!');
|
console.log('\nAll linting checks passed!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user