Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { dirname, relative, resolve } from 'path';
- import findUnusedExports from 'ts-unused-exports';
- import { RuleFailure, Rules, RuleWalker } from 'tslint';
- import { ClassDeclaration, Identifier, SourceFile } from 'typescript';
- const srcDir = resolve(dirname(__filename), '../src');
- const unusedExports: Record<string, string[]> = findUnusedExports(resolve(srcDir, 'tsconfig.app.json'));
- export class Rule extends Rules.AbstractRule {
- static FAILURE_STRING = 'Class is not used in project';
- apply(sourceFile: SourceFile): RuleFailure[] {
- return this.applyWithWalker(new NoUnusedExportWalker(sourceFile, this.getOptions()));
- }
- }
- class NoUnusedExportWalker extends RuleWalker {
- visitClassDeclaration(node: ClassDeclaration) {
- const nodeName = node.name;
- if (nodeName && this.isUnused(nodeName)) {
- this.addFailureAt(nodeName.getStart(), nodeName.text.length, Rule.FAILURE_STRING);
- }
- super.visitClassDeclaration(node);
- }
- private isUnused(nodeName: Identifier): boolean {
- const { fileName } = nodeName.getSourceFile();
- const relativePath = relative(srcDir, fileName).replace(/\.ts$/, '');
- const unusedVars = unusedExports[relativePath];
- return unusedVars && unusedVars.includes(`${nodeName.text}`);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement