42 lines
1.5 KiB
JavaScript
42 lines
1.5 KiB
JavaScript
// @ts-check
|
|
|
|
const { dirname } = require("path");
|
|
const ts = require("typescript");
|
|
const fs = require("fs");
|
|
|
|
function findUnusedSymbols(
|
|
/** @type string */ tsconfigPath
|
|
) {
|
|
// Initialize a program using the project's tsconfig.json
|
|
const configFile = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
|
|
const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, dirname(tsconfigPath));
|
|
|
|
// Initialize a program with the parsed configuration
|
|
const program = ts.createProgram(parsedConfig.fileNames, {
|
|
...parsedConfig.options,
|
|
noUnusedLocals: true
|
|
});
|
|
const sourceFiles = program.getSourceFiles();
|
|
const usedBaseSourceFiles = sourceFiles.filter(e => e.fileName.includes('src/vs/base/'));
|
|
const usedFilesInBase = usedBaseSourceFiles.map(e => e.fileName.replace(/^.+\/src\//, 'src/')).sort((a, b) => a.localeCompare(b));
|
|
// console.log('Source files used in src/vs/base/:', used);
|
|
|
|
// Get an array of all files that exist in src/vs/base/
|
|
const allFilesInBase = (
|
|
fs.readdirSync('src/vs/base', { recursive: true, withFileTypes: true })
|
|
.filter(e => e.isFile())
|
|
// @ts-ignore HACK: This is only available in Node 20
|
|
.map(e => `${e.parentPath}/${e.name}`.replace(/\\/g, '/'))
|
|
);
|
|
const unusedFilesInBase = allFilesInBase.filter(e => !usedFilesInBase.includes(e));
|
|
|
|
console.log({
|
|
allFilesInBase,
|
|
usedFilesInBase,
|
|
unusedFilesInBase
|
|
});
|
|
}
|
|
|
|
// Example usage
|
|
findUnusedSymbols("./src/browser/tsconfig.json");
|