Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. import { dirname, relative, resolve } from 'path';
  2. import findUnusedExports from 'ts-unused-exports';
  3. import { RuleFailure, Rules, RuleWalker } from 'tslint';
  4. import { ClassDeclaration, Identifier, SourceFile } from 'typescript';
  5.  
  6. const srcDir = resolve(dirname(__filename), '../src');
  7. const unusedExports: Record<string, string[]> = findUnusedExports(resolve(srcDir, 'tsconfig.app.json'));
  8.  
  9. export class Rule extends Rules.AbstractRule {
  10. static FAILURE_STRING = 'Class is not used in project';
  11.  
  12. apply(sourceFile: SourceFile): RuleFailure[] {
  13. return this.applyWithWalker(new NoUnusedExportWalker(sourceFile, this.getOptions()));
  14. }
  15. }
  16.  
  17. class NoUnusedExportWalker extends RuleWalker {
  18. visitClassDeclaration(node: ClassDeclaration) {
  19. const nodeName = node.name;
  20. if (nodeName && this.isUnused(nodeName)) {
  21. this.addFailureAt(nodeName.getStart(), nodeName.text.length, Rule.FAILURE_STRING);
  22. }
  23. super.visitClassDeclaration(node);
  24. }
  25.  
  26. private isUnused(nodeName: Identifier): boolean {
  27. const { fileName } = nodeName.getSourceFile();
  28. const relativePath = relative(srcDir, fileName).replace(/\.ts$/, '');
  29. const unusedVars = unusedExports[relativePath];
  30. return unusedVars && unusedVars.includes(`${nodeName.text}`);
  31. }
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement