Skip to content

JQuezada0/prettier-plugin-detect-throw

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

prettier-plugin-detect-throw

npm version

NPM

A Prettier plugin that identifies and highlights throw statements in your TypeScript code, optionally enforcing that only specific error classes are thrown.

Features

  • Highlight Throw Statements: Add comments above all throw statements for easy identification
  • Enforce Error Classes: Define allowed error classes and receive warnings for non-compliant throws
  • Flexible Configuration: Include or exclude files using glob patterns

Installation

# Using npm
npm install --save-dev prettier-plugin-detect-throw

# Using yarn
yarn add --dev prettier-plugin-detect-throw

# Using bun
bun add --dev prettier-plugin-detect-throw

Usage

Add the plugin to your Prettier configuration:

// .prettierrc.js
module.exports = {
  plugins: ["prettier-plugin-detect-throw"],
  highlightThrows: true,
  allowedErrorClasses: '["Error", "CustomError", "ValidationError"]',
  enforceAllowedClasses: true,
  include: '["**/*.ts", "**/*.tsx"]',
  exclude: '["**/node_modules/**"]',
}

Or as JSON:

{
  "plugins": ["prettier-plugin-detect-throw"],
  "highlightThrows": true,
  "allowedErrorClasses": "[\"Error\", \"CustomError\", \"ValidationError\"]",
  "enforceAllowedClasses": true,
  "include": "[\"**/*.ts\", \"**/*.tsx\"]",
  "exclude": "[\"**/node_modules/**\"]"
}

Configuration Options

Option Type Default Description
highlightThrows boolean false When true, adds a /* THROW STATEMENT */ comment above each throw
allowedErrorClasses string (JSON array) "[]" JSON string array of allowed error class names
enforceAllowedClasses boolean true When true, adds warning comments to throws that use non-allowed error classes
include string (JSON array) "[\"**/*.ts\", \"**/*.tsx\"]" JSON string array of glob patterns for files to include
exclude string (JSON array) "[]" JSON string array of glob patterns for files to exclude

Example

Before:

function processData(data) {
  if (!data) {
    throw new Error("Data is required")
  }

  if (!isValid(data)) {
    throw new InvalidDataError("Invalid data format")
  }

  try {
    return transform(data)
  } catch (e) {
    throw e
  }
}

After (with highlightThrows: true and allowedErrorClasses: ["Error"]):

function processData(data) {
  if (!data) {
    /* THROW STATEMENT */
    throw new Error("Data is required")
  }

  if (!isValid(data)) {
    /* WARNING: Only throw instances of: Error */
    /* THROW STATEMENT */
    throw new InvalidDataError("Invalid data format")
  }

  try {
    return transform(data)
  } catch (e) {
    /* THROW STATEMENT */
    throw e
  }
}

Development

# Install dependencies
bun install

# Build as edits are made
bun run watch

# Build once
bun run build

# Typecheck
bun run typecheck

About

A prettier plugin that inserts warning comments above throw statements

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published