46 lines
1.2 KiB
JavaScript
46 lines
1.2 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const dir = 'src';
|
|
const exts = ['.tsx', '.ts', '.jsx', '.js'];
|
|
|
|
function walk(d) {
|
|
let r = [];
|
|
for (const f of fs.readdirSync(d)) {
|
|
const p = path.join(d, f);
|
|
if (fs.statSync(p).isDirectory()) {
|
|
if (p.includes('locales')) continue;
|
|
r = r.concat(walk(p));
|
|
} else if (exts.some((e) => f.endsWith(e))) {
|
|
r.push(p);
|
|
}
|
|
}
|
|
return r;
|
|
}
|
|
|
|
// strip comments (line + block) and template strings, then find remaining Chinese
|
|
function stripCommentsAndStrings(code) {
|
|
// Remove block comments
|
|
code = code.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
// Remove line comments (careful with URLs, but ok)
|
|
code = code.replace(/^\s*\/\/.*$/gm, '');
|
|
return code;
|
|
}
|
|
|
|
let total = 0;
|
|
for (const f of walk(dir)) {
|
|
const code = fs.readFileSync(f, 'utf8');
|
|
const cleaned = stripCommentsAndStrings(code);
|
|
const lines = cleaned.split('\n');
|
|
lines.forEach((line, i) => {
|
|
if (/[\u4e00-\u9fa5]/.test(line)) {
|
|
total++;
|
|
const trimmed = line.trim();
|
|
if (trimmed.length > 0 && !trimmed.startsWith('//')) {
|
|
console.log(f + ':' + (i + 1) + ': ' + line.trim().slice(0, 120));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
console.log('TOTAL non-comment lines with Chinese:', total);
|