Skip to content

Find unused class variables and methods in a typescript project

License

Notifications You must be signed in to change notification settings

Faire/ts-unused-class-members

Repository files navigation

semantic-release: angular

ts-unused-class-members

A CLI tool for finding unused class variables and methods in a TypeScript project.

Screen Shot 2021-07-01 at 2 13 47 PM

Table of Contents
  1. Getting Started
  2. Configuration File
  3. Ignoring a Specific Declaration
  4. Acknowledgements

Getting Started

Prerequisites

@faire/ts-unused-class-members is hosted on :octocat:GitHub Packages. To configure npm to download @faire packages from GitHub Packages registry you need to

  1. Create a personal access token with the read:packages scope
  2. Use the command below to add the personal access token to ~/.npmrc
    echo "//npm.pkg.github.com/:_authToken=YOUR_TOKEN" >> ~/.npmrc
    
  3. Use the command below to configure npm to download @faire packages from GitHub Packages registry
    npm config set @faire:registry https://npm.pkg.github.com
    

Usage

In the same directory as your tsconfig.json, run

npx @faire/ts-unused-class-members

CLI Options

Run ts-unused-class-members with --help to see all available CLI options.

Options:
  --project          Path to the project's tsconfig.json                [string]
  --path             Path to a single directory/file to scan            [string]
  --ignoreFileRegex  Regex pattern for excluding files                  [string]

These options are optional, and you can also set them in a config file.

Configuration File

By default, ts-unused-class-members flags every class member that has no references in the project. Depends on the framework/library you use, you may want to tell the checker to ignore certain class members. You can do that by including a configuration file.

Example config file for a React + MobX project:

ts-unused-class-members.config.js in the project root

module.exports = {
  ignoreFileRegex: "(?:(\\.d)|(\\.stories)|(\\.test))\\.tsx?$",
  ignoreMemberNames: [
    "render",
    "state",
    "componentDidMount",
    "componentWillUnmount",
    "componentDidCatch",
    "componentDidUpdate",
    "shouldComponentUpdate",
    "UNSAFE_componentWillReceiveProps",
    "UNSAFE_componentWillUpdate",
    "UNSAFE_componentWillMount",
  ],
  /**
   * Ignore members decorated by MobX's @disposeOnUnmount
   */
  ignoreDecoratorNames: ["disposeOnUnmount"],
  /**
   * Ignore members initialized with MobX's reaction()
   * e.g. public myReaction = reaction(...);
   */
  ignoreInitializerNames: ["reaction"],
};

ts-unused-class-members consumes configuration using cosmiconfig, which supports some other config formats too.

  • a ts-unused-class-members property in package.json
  • a ts-unused-class-members.config.js or ts-unused-class-members.config.cjs CommonJS module exporting an object
  • a .ts-unused-class-membersrc file in JSON or YAML format

Ignoring a Specific Declaration

You can also tell ts-unused-class-members to ignore a specific class or class member by prefixing its declaration with // unused-class-members-ignore-next.

// unused-class-members-ignore-next
class Unused {
  ...
}

class A {
  // unused-class-members-ignore-next
  unused = undefined;
  ...
}

Contributing

Issues and PRs are welcome!

This project uses semantic-release to automate version management and package publishing, so make sure to follow the commit message conventions when contributing.

Acknowledgements