Delete a bunch of unused strings
Co-authored-by: Jamie Kyle <jamie@signal.org>
This commit is contained in:
parent
9b997836c2
commit
c11b8fb5e3
4 changed files with 210 additions and 112 deletions
75
ts/scripts/mark-unused-strings-deleted.ts
Normal file
75
ts/scripts/mark-unused-strings-deleted.ts
Normal file
|
@ -0,0 +1,75 @@
|
|||
// Copyright 2024 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
import { spawnSync } from 'node:child_process';
|
||||
import path from 'node:path';
|
||||
import { readFileSync, writeFileSync } from 'node:fs';
|
||||
import { DELETED_REGEXP } from './constants';
|
||||
|
||||
const rootDir = path.resolve(__dirname, '..', '..');
|
||||
const messagesPath = path.join(rootDir, '_locales/en/messages.json');
|
||||
|
||||
function getIcuLikeStrings(): Set<string> {
|
||||
const { status, stdout } = spawnSync(
|
||||
'grep',
|
||||
[
|
||||
// Match 'icu:Example__Element--StateAnd123'
|
||||
'--extended-regexp',
|
||||
'icu:[a-zA-Z0-9_.-]+',
|
||||
// Each line should just be the ICU message name without any noise
|
||||
'--no-filename',
|
||||
'--only-matching',
|
||||
// Search in these folders
|
||||
'--recursive',
|
||||
'ts/',
|
||||
'app/',
|
||||
],
|
||||
{
|
||||
cwd: rootDir,
|
||||
stdio: ['ignore', 'pipe', 'inherit'],
|
||||
encoding: 'utf-8',
|
||||
}
|
||||
);
|
||||
if (status !== 0) {
|
||||
throw new Error(`grep failed with status ${status}`);
|
||||
}
|
||||
return new Set(stdout.trim().split('\n'));
|
||||
}
|
||||
|
||||
function getDateStr(date: Date) {
|
||||
const year = String(date.getFullYear());
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
return `${year}/${month}/${day}`;
|
||||
}
|
||||
|
||||
const dateStr = getDateStr(new Date());
|
||||
const lines = getIcuLikeStrings();
|
||||
const messages = JSON.parse(readFileSync(messagesPath, 'utf-8'));
|
||||
let deletedCount = 0;
|
||||
for (const key of Object.keys(messages)) {
|
||||
const message = messages[key];
|
||||
if (key === 'smartling') {
|
||||
continue;
|
||||
}
|
||||
if (message.ignoreUnused) {
|
||||
continue;
|
||||
}
|
||||
if (DELETED_REGEXP.test(message.description)) {
|
||||
continue;
|
||||
}
|
||||
if (!lines.has(key)) {
|
||||
deletedCount += 1;
|
||||
console.log(`Marking ${key} as deleted`);
|
||||
if (message.description) {
|
||||
message.description = `(Deleted ${dateStr}) ${message.description}`;
|
||||
} else {
|
||||
message.description = `(Deleted ${dateStr})`;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (deletedCount === 0) {
|
||||
console.log('No strings to delete');
|
||||
} else {
|
||||
writeFileSync(messagesPath, `${JSON.stringify(messages, null, 2)}\n`);
|
||||
console.log(`Marked ${deletedCount} strings as deleted`);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue