Package detail

eslint-type-tracer

ota-meshi424MIT0.4.0

The type tracer for ESLint rules.

eslint, eslintplugin, eslint-plugin, math

readme

Introduction

eslint-type-tracer is the type tracer for ESLint rules.

NPM license NPM version NPM downloads NPM downloads NPM downloads NPM downloads NPM downloads Build Status

📛 Features

Trace and infer types of expression nodes for ESLint rules.

🚧 Limitations

This tool cannot always infer the complete or exact type of an expression. In particular, ESLint analyzes one file at a time, so types that are defined or imported from other files cannot be inferred. As a result, type inference is limited to what can be determined within the current file only.

💿 Installation

npm install eslint-type-tracer

Requirements

  • ESLint v8.57.0 and above
  • Node.js v14.18.0, v16.0.0 and above

📖 Usage

API

buildTypeTracer

import { buildTypeTracer } from "eslint-type-tracer";

Builds a type tracer function for use in ESLint rules. This function infers the type name of a given AST expression node.

Signature:

function buildTypeTracer(
  sourceCode: SourceCode
): (node: TSESTree.Expression) => TypeName[];
  • sourceCode: The ESLint SourceCode object.

Returns:

A function that takes an expression node and returns an array of inferred type names (e.g., ["Array"]). If the type cannot be determined, it returns an empty array []

Example:

const typeTrace = buildTypeTracer(context.sourceCode);
const typeNames = typeTrace(node);
if (typeNames.includes("Array")) {
  // node is inferred as Array
}

buildTypeChecker

import { buildTypeChecker } from "eslint-type-tracer";

Builds a type checker function for use in ESLint rules. This function helps you determine if a given AST node is of a specific type.

Signature:

function buildTypeChecker(
  sourceCode: SourceCode,
  options?: { aggressive?: boolean }
): (
  node: TSESTree.Expression,
  className: TypeName,
  memberAccessNode?: TSESTree.MemberExpression | TSESTree.Property
) => boolean | "aggressive";
  • sourceCode: The ESLint SourceCode object.
  • options.aggressive: If set to true, returns "aggressive" when the type cannot be determined. Default is false.

Returns:

A function that takes an expression node, a type name, and optionally a member access node, and returns true if the node is of the specified type, false if not, or "aggressive" if undetermined and the option is set.

Example:

const typeChecker = buildTypeChecker(context.sourceCode);
if (typeChecker(node, "Array")) {
  // node is an Array
}

🍻 Contributing

Welcome contributing!

Please use GitHub's Issues/PRs.

Development Tools

  • npm run test runs tests.

🔒 License

See the LICENSE file for license rights and limitations (MIT).

changelog