testPruneUnusedImports
tcmts.cli.main.testPruneUnusedImports · #wleexkbc · term
import { pruneUnusedImports } from "#codebase/tcmts/cli/main";
import assert from "node:assert/strict";
export const testPruneUnusedImports = () => {
const prune = (text: string, file = "s.ts") => pruneUnusedImports(file, text);
// a whole import, and some of another's names
assert.deepEqual(
prune(
`// tcm: namespace lib\nimport { randomBytes } from "node:crypto";\nimport { a, b, c } from "#codebase/lib";\n\nexport const f = () => a() + c();\n`,
),
{
text: `// tcm: namespace lib\nimport { a, c } from "#codebase/lib";\n\nexport const f = () => a() + c();\n`,
dropped: ["randomBytes", "b"],
},
);
// a run at the end, over lines as `tcm edit` groups them; an alias by its local name
assert.equal(
prune(
`import {\n a, b as b_1, c,\n d,\n} from "#codebase/lib";\nexport const f = () => b_1;\n`,
).text,
`import {\n b as b_1,\n} from "#codebase/lib";\nexport const f = () => b_1;\n`,
);
// a default name with named ones, either part unused; a namespace import
assert.equal(
prune(`import d, { a } from "m";\nexport const f = a;\n`).text,
`import { a } from "m";\nexport const f = a;\n`,
);
assert.equal(
prune(`import d, { a } from "m";\nexport const f = d;\n`).text,
`import d from "m";\nexport const f = d;\n`,
);
assert.equal(
prune(`import * as ts from "m";\nexport const f = 1;\n`).text,
`export const f = 1;\n`,
);
// kept: what runs for its effect, a type used as a type, a name only a comment's {@link} or a conflict's other
// side uses, and React where JSX is
const kept = [
`import "./setup";\nexport const f = 1;\n`,
`import type { T } from "#codebase/lib";\nexport const f = (t: T) => t;\n`,
`import { g } from "#codebase/lib";\n/** Like {@link g}. */\nexport const f = 1;\n`,
`import { g, h } from "#codebase/lib";\nexport const f = () =>\n<<<<<<< ours\n g();\n=======\n h();\n>>>>>>> theirs\n`,
];
for (const text of kept) assert.deepEqual(prune(text), { text, dropped: [] });
const jsx = `import React from "react";\nexport const F = () => <div />;\n`;
assert.deepEqual(prune(jsx, "s.tsx"), { text: jsx, dropped: [] });
}
uses