Skip to content

ESLint Plugins

@studnicky/eslint-config ships two custom ESLint plugins:

  • @studnicky — 22 structural and semantic rules that enforce the substrate codebase doctrine.
  • @studnicky/v8 — 24 V8 performance rules that flag patterns preventing V8 from using optimized code paths.

Register both plugins in your flat config to enable the rules.

Install

Add the GitHub Packages registry to .npmrc:

@studnicky:registry=https://npm.pkg.github.com

Then install the package:

sh
pnpm add -D @studnicky/eslint-config

Install peer dependencies:

sh
pnpm add -D eslint@>=10 typescript-eslint@>=8 @typescript-eslint/eslint-plugin@>=8 @typescript-eslint/parser@>=8 @stylistic/eslint-plugin@>=5 eslint-plugin-import-x@>=4 eslint-plugin-perfectionist@>=5 eslint-plugin-regexp@>=3 eslint-plugin-unused-imports@>=4 typescript@>=6

Subpath exports

SubpathExports
@studnicky/eslint-configplugin, v8Plugin, and all individual rule modules
@studnicky/eslint-config/pluginplugin (the @studnicky ESLint plugin object)
@studnicky/eslint-config/v8v8Plugin (the @studnicky/v8 ESLint plugin object)

Usage

Import plugin and v8Plugin and register them in a flat-config entry:

js
// eslint.config.mjs
import { plugin, v8Plugin } from '@studnicky/eslint-config';

export default [
  {
    plugins: { '@studnicky': plugin, '@studnicky/v8': v8Plugin },
    rules: {
      '@studnicky/type-alias-invariants': 'error',
      '@studnicky/v8/array-spread-outside-loops': 'error'
    }
  }
];

Combine with additional rules in the same entry:

js
// eslint.config.mjs
import { plugin, v8Plugin } from '@studnicky/eslint-config';

export default [
  {
    plugins: { '@studnicky': plugin, '@studnicky/v8': v8Plugin },
    rules: {
      '@studnicky/type-alias-invariants': 'error',
      '@studnicky/v8/array-spread-outside-loops': 'error',
      'no-console': 'warn'
    }
  }
];

Using the plugins directly

Import the raw plugin objects for hand-rolled flat config:

ts
// eslint.config.ts
import { plugin, v8Plugin } from '@studnicky/eslint-config';

export default [
  {
    plugins: {
      '@studnicky': plugin,
      '@studnicky/v8': v8Plugin
    },
    rules: {
      '@studnicky/single-export': 'error',
      '@studnicky/v8/delete-property': 'error'
    }
  }
];

Or import from the dedicated subpath exports:

ts
import { plugin } from '@studnicky/eslint-config/plugin';
import { v8Plugin } from '@studnicky/eslint-config/v8';

Configuration rules

22 rules that enforce structural, semantic, and stylistic constraints.

RuleFixableSeverity
@studnicky/adapter-only-importNoerror
@studnicky/all-types-are-entitiesNoerror
@studnicky/canonical-export-namesNoerror
@studnicky/clean-diagnosticsYeserror
@studnicky/descriptive-identifiersNoerror
@studnicky/direct-invocation-onlyNoerror
@studnicky/domain-purityNoerror
@studnicky/folder-content-shapeNoerror
@studnicky/hash-private-fieldsNoerror
@studnicky/inline-trivial-logicYeserror
@studnicky/interface-must-be-contractYeserror
@studnicky/interface-suffixNoerror
@studnicky/interfaces-compose-named-typesNoerror
@studnicky/known-types-outside-adaptersNoerror
@studnicky/layer-import-boundaryNoerror
@studnicky/lexical-this-onlyNoerror
@studnicky/prefer-collection-typesNowarn
@studnicky/require-options-objectNoerror
@studnicky/single-exportNoerror
@studnicky/static-method-verbsNoerror
@studnicky/type-alias-invariantsPartialerror
@studnicky/whole-canonical-typesNoerror

V8 performance rules

24 rules that flag patterns preventing V8 from using optimized code paths.

RuleFixableSeverity
@studnicky/v8/arguments-objectNoerror
@studnicky/v8/array-concat-outside-loopsNoerror
@studnicky/v8/array-from-iteratorsNoerror
@studnicky/v8/array-from-map-callbackNoerror
@studnicky/v8/array-spread-outside-loopsNoerror
@studnicky/v8/computed-class-propertiesNoerror
@studnicky/v8/computed-object-propertiesNoerror
@studnicky/v8/conditional-property-assignmentNoerror
@studnicky/v8/define-propertyNoerror
@studnicky/v8/delete-propertyNoerror
@studnicky/v8/dynamic-property-accessNoerror
@studnicky/v8/eval-functionNoerror
@studnicky/v8/for-in-loopsNoerror
@studnicky/v8/for-of-arraysNoerror
@studnicky/v8/inline-arrow-functionsNoerror
@studnicky/v8/inline-functionsNoerror
@studnicky/v8/max-switch-casesNoerror
@studnicky/v8/memoize-array-lengthNoerror
@studnicky/v8/object-spreadNoerror
@studnicky/v8/prototype-modificationNoerror
@studnicky/v8/regexp-in-loopsNoerror
@studnicky/v8/switch-statementsNoerror
@studnicky/v8/try-catch-in-loopsNoerror
@studnicky/v8/with-statementNoerror