Skip to content

All Rules

Browse every rule by name, behavior, or category. All rules remain available when JavaScript is disabled.

Showing 90 rules

Ban React Fc

React Rules
ban-react-fc

Ban React.FC and similar component type annotations. Use explicit function declarations instead.

  • Problem

Memoized Effect Dependencies

React Rules
memoized-effect-dependencies

Flags effect dependencies that are not memoized. Unmemoized dependencies can cause unnecessary re-renders or infinite loops.

  • Problem

No Cascading Set State

React Rules
no-cascading-set-state

Disallow effect hooks with many cascading state updates.

  • Problem

No Giant Component

React Rules
no-giant-component

Report React components whose bodies exceed 300 lines.

  • Problem

No God Components

React Rules
no-god-components

Enforce React component size and complexity limits inspired by the 'Refactor God Component' checklist.

  • Problem

No Inline Property On Memo Component

React Rules
no-inline-property-on-memo-component

Prevent inline properties from being passed to memoized components.

  • Problem

No New Instance In Use Memo

React Rules
no-new-instance-in-use-memo

Disallow configured constructor calls (default: new Instance) inside React useMemo callbacks.

  • Problem

No Render Helper Functions

React Rules
no-render-helper-functions

Disallow non-component functions that return JSX or React elements.

  • Suggestion

No Static React Create Element

React Rules
no-static-react-create-element

Require JSX for static React.createElement calls.

  • Problem

No Underscore React Props

React Rules
no-underscore-react-props

Ban React property names that begin with an underscore in JSX.

  • Problem

No Unused Use Memo

React Rules
no-unused-use-memo

Disallow standalone useMemo calls that ignore the memoized value.

  • Problem

No Use Memo Simple Expression

React Rules
no-use-memo-simple-expression

Disallow useMemo for expressions that are already trivial to compute.

  • Problem

No Useless Use Effect

React Rules
no-useless-use-effect

Disallow empty effects, duplicate dependencies, effect chains, log-only effects, derived state, external-store state sync, state initialization, reset effects, parent notifications, parent ref callbacks, and event side effects routed through state.

  • Suggestion

No Useless Use Memo

React Rules
no-useless-use-memo

Disallow useMemo calls that only wrap values static enough to live at module scope.

  • Suggestion

No Useless Use Spring

React Rules
no-useless-use-spring

Disallow useSpring hooks whose config and dependencies are entirely static

  • Suggestion

Prefer Constant Dispatch

React Rules
prefer-constant-dispatch

Disallow inline useReducer action objects that could be module-level constants.

  • Suggestion
  • Editor suggestions

Prefer Context Stack

React Rules
prefer-context-stack

Prefer a local ContextStack component over directly nesting multiple context providers.

  • Suggestion
  • Automatic fix

Prefer Hoisted Jsx Elements

React Rules
prefer-hoisted-jsx-elements

Prefer extracting static Roblox JSX intrinsic elements to module-level constants.

  • Suggestion

Prefer Hoisted Jsx Object Properties

React Rules
prefer-hoisted-jsx-object-properties

Prefer extracting inline JSX object props to module-level constants when the entire object is statically hoistable.

  • Suggestion

Prefer Local Portal Component

React Rules
prefer-local-portal-component

Prefer a local Portal component over direct createPortal calls when the project already defines one.

  • Suggestion
  • Automatic fix

Prefer Padding Components

React Rules
prefer-padding-components

Prefer local EqualPadding and DirectionalPadding components over matching <uipadding /> declarations.

  • Suggestion
  • Automatic fix

Prefer Ternary Conditional Rendering

React Rules
prefer-ternary-conditional-rendering

Prefer ternary expressions over complementary JSX && branches.

  • Suggestion
  • Automatic fix

Prefer Use Reducer

React Rules
prefer-use-reducer

Suggest using useReducer for related state updates instead of multiple useState calls.

  • Problem

React Hooks Strict Return

React Rules
react-hooks-strict-return

Restrict React hooks to object returns or short tuples.

  • Suggestion

Require Named Effect Functions

React Rules
require-named-effect-functions

Enforce named effect functions for better debuggability. Prevents inline arrow functions in useEffect and similar hooks.

  • Problem

Require React Component Keys

React Rules
require-react-component-keys

Require keys on nested React JSX children, fragments, and configured iteration or memoization contexts.

  • Problem

Require React Display Names

React Rules
require-react-display-names

Require displayName on exported memo components and contexts.

  • Problem

Rerender Memo With Default Value

React Rules
rerender-memo-with-default-value

Prevent inline empty object and array defaults in component prop destructuring.

  • Problem

Strict Component Boundaries

React Rules
strict-component-boundaries

Prevent imports that reach into another component's nested modules.

  • Problem

Use Exhaustive Dependencies

React Rules
use-exhaustive-dependencies

Enforce exhaustive and correct dependency specification in React hooks to prevent stale closures and unnecessary re-renders

  • Problem
  • Automatic fix and editor suggestions

Use Hook At Top Level

React Rules
use-hook-at-top-level

Enforce that React hooks are only called at the top level of components or custom hooks, never conditionally or in nested functions

  • Problem

No Array Constructor Index Assignment

Roblox & Luau Rules
no-array-constructor-index-assignment

Disallow new Array<T>() followed by contiguous index assignments; use an array literal instead.

  • Suggestion
  • Automatic fix

Ban Instances

Roblox & Luau Rules
ban-instances

Ban specified Roblox Instance classes and configured Instance properties.

  • Problem

Enforce Ianitor Check Type

Roblox & Luau Rules
enforce-ianitor-check-type

Enforce Ianitor.Check<T> type annotations on complex TypeScript types

  • Problem

No Array Constructor Elements

Roblox & Luau Rules
no-array-constructor-elements

Disallow array constructor element forms and enforce roblox-ts-aware constructor patterns.

  • Problem
  • Automatic fix and editor suggestions

No Array Size Assignment

Roblox & Luau Rules
no-array-size-assignment

Disallow array append assignments using array[array.size()] = value (roblox-ts) or array[array.length] = value (standard) and prefer push-based appends.

  • Problem
  • Automatic fix

No Async In System

Roblox & Luau Rules
no-async-in-system

Disallow yielding Roblox API calls in synchronous Planck system execution.

  • Problem

No Color3 Constructor

Roblox & Luau Rules
no-color3-constructor

Ban new Color3(...) except new Color3() or new Color3(0, 0, 0). Use Color3.fromRGB() instead.

  • Problem
  • Automatic fix

No Events In Events Callback

Roblox & Luau Rules
no-events-in-events-callback

Disallow sending Events back to the same player inside an Events.connect callback; use Functions for request/response.

  • Problem

No Ianitor In Function Body

Roblox & Luau Rules
no-ianitor-in-function-body

Disallow Ianitor validator creation inside function bodies. Hoist to module scope to avoid recreating validators on every call.

  • Problem

No Ianitor Success Access

Roblox & Luau Rules
no-ianitor-success-access

Disallow accessing `.success` on Ianitor check results when the full result object is not needed.

  • Suggestion

No Instance Methods Without This

Roblox & Luau Rules
no-instance-methods-without-this

Detect instance methods that do not use 'this' and suggest converting them to standalone functions for better performance in roblox-ts.

  • Problem

No Native Properties Spread

Roblox & Luau Rules
no-native-properties-spread

Disallow spreading static property bags into nativeProperties/*NativeProperties props and onto JSX elements via intermediate objects, because the spread creates a new copied table every render.

  • Problem

No Print

Roblox & Luau Rules
no-print

Use Log instead of print().

  • Problem

No Redundant Aspect Ratio Constraint

Roblox & Luau Rules
no-redundant-aspect-ratio-constraint

Disallow redundant uiaspectratioconstraint children inside components that already manage their own aspect ratio internally.

  • Problem

No Table Create Map

Roblox & Luau Rules
no-table-create-map

Disallow map(...) directly on table.create(...) and new Array(...) constructor patterns in roblox-ts.

  • Suggestion

No Task Wait

Roblox & Luau Rules
no-task-wait

Disallow task.wait() and Promise.delay(...).await() calls.

  • Problem

No Useless Default

Roblox & Luau Rules
no-useless-default

Disallow Roblox JSX properties whose values already match the class defaults.

  • Suggestion
  • Automatic fix

No Warn

Roblox & Luau Rules
no-warn

Use Log instead of warn().

  • Problem

Prefer Idiv

Roblox & Luau Rules
prefer-idiv

Prefer .idiv() for integer division instead of math.floor(x / y).

  • Suggestion
  • Automatic fix

Prefer Math Min Max

Roblox & Luau Rules
prefer-math-min-max

Prefer math.min() and math.max() over simple clamp-like ternaries.

  • Suggestion
  • Automatic fix

Prefer Modding Inspect

Roblox & Luau Rules
prefer-modding-inspect

Prefer Modding.inspect over manually enumerating every enum member in a Record<Enum, true>.

  • Suggestion
  • Automatic fix

Prefer Sequence Overloads

Roblox & Luau Rules
prefer-sequence-overloads

Prefer direct ColorSequence and NumberSequence overloads over identical direct arguments and two-keypoint arrays.

  • Suggestion
  • Automatic fix

Prefer Single World Query

Roblox & Luau Rules
prefer-single-world-query

Enforce combining multiple world.get() or world.has() calls into a single call for better Jecs performance.

  • Suggestion
  • Automatic fix

Prefer Udim2 Shorthand

Roblox & Luau Rules
prefer-udim2-shorthand

Prefer UDim2.fromScale() or UDim2.fromOffset() over new UDim2() when all offsets or all scales are zero.

  • Suggestion
  • Automatic fix

Require Module Level Instantiation

Roblox & Luau Rules
require-module-level-instantiation

Require configured classes to be instantiated at module level only.

  • Problem

Array Type Generic

Naming & Conventions
array-type-generic

Disallow bracket array type syntax and require Array<T> / ReadonlyArray<T>.

  • Problem
  • Automatic fix

Ban Types

Naming & Conventions
ban-types

Ban configured TypeScript utility types, defaulting to Omit in favor of Except.

  • Problem

No Spec File Extension

Naming & Conventions
no-spec-file-extension

Disallow the .spec.{ts,tsx} file extension for test files. Use .test.{ts,tsx} instead.

  • Problem

Prefer Pascal Case Enums

Naming & Conventions
prefer-pascal-case-enums

Enforce PascalCase names for enums and enum members.

  • Suggestion

Prefer Singular Enums

Naming & Conventions
prefer-singular-enums

Prefer singular naming for enums.

  • Suggestion

Prevent Abbreviations

Naming & Conventions
prevent-abbreviations

Prevent abbreviations.

  • Suggestion
  • Automatic fix

Require Async Suffix

Naming & Conventions
require-async-suffix

Require async function names to end with Async.

  • Problem

No Recursive

General Logic & Style
no-recursive

<MISSING-DESCRIPTION>

  • Suggestion

Directive Disable Enable Pair

General Logic & Style
directive-disable-enable-pair

Require a matching enable comment for every `oxlint-disable` or `eslint-disable` block directive.

  • Suggestion

Directive No Aggregating Enable

General Logic & Style
directive-no-aggregating-enable

Disallow aggregating `oxlint-enable` or `eslint-enable` comments across multiple disable directives.

  • Suggestion

Directive No Duplicate Disable

General Logic & Style
directive-no-duplicate-disable

Disallow duplicate `oxlint-disable` or `eslint-disable` comments.

  • Problem

Directive No Restricted Disable

General Logic & Style
directive-no-restricted-disable

Disallow `oxlint-disable` or `eslint-disable` comments for configured rules.

  • Suggestion

Directive No Unlimited Disable

General Logic & Style
directive-no-unlimited-disable

Disallow `oxlint-disable` or `eslint-disable` comments without rule names.

  • Suggestion

Directive No Unused Enable

General Logic & Style
directive-no-unused-enable

Disallow unused `oxlint-enable` or `eslint-enable` comments.

  • Suggestion

Directive No Use

General Logic & Style
directive-no-use

Disallow block ESLint/Oxlint directive comments.

  • Suggestion

Directive Require Description

General Logic & Style
directive-require-description

Require descriptions for `oxlint` and `eslint` disable/enable directives.

  • Suggestion

No Async Constructor

General Logic & Style
no-async-constructor

Disallow asynchronous operations inside class constructors. Constructors return immediately, so async work causes race conditions, unhandled rejections, and incomplete object states.

  • Problem

No Commented Code

General Logic & Style
no-commented-code

Disallow commented-out code

  • Suggestion
  • Editor suggestions

No Constant Condition With Break

General Logic & Style
no-constant-condition-with-break

Disallow constant conditions, but allow constant loops that include loop exits such as break, return, or configured calls.

  • Problem

No Error

General Logic & Style
no-error

Use throw instead of error().

  • Problem

No Identity Map

General Logic & Style
no-identity-map

Disallow pointless identity `.map()` calls that return the parameter unchanged

  • Suggestion
  • Automatic fix

No Increment Decrement

General Logic & Style
no-increment-decrement

Disallow standalone `++` and `--` statements and for-loop update clauses.

  • Suggestion
  • Automatic fix

No Restricted Property Assignment

General Logic & Style
no-restricted-property-assignment

Disallow assignment to restricted object properties.

  • Problem

No Unused Imports

General Logic & Style
no-unused-imports

Disallow unused imports

  • Problem
  • Automatic fix

No Useless Constants

General Logic & Style
no-useless-constants

Disallow constants that do not add value.

  • Problem
  • Automatic fix

Only Type Imports

General Logic & Style
only-type-imports

Require all imports to be type-only imports. Benchmarks cannot import non-types because the benchmarker plugin will throw an error.

  • Problem

Prefer Class Properties

General Logic & Style
prefer-class-properties

Prefer class properties to assignment of literals in constructors.

  • Suggestion

Prefer Early Return

General Logic & Style
prefer-early-return

Prefer early returns over full-body conditional wrapping.

  • Suggestion

Prefer Expect Assertions

General Logic & Style
prefer-expect-assertions

Enforce expect assertion guards in tests and prefer expect.assertions(n) over expect.hasAssertions() when the count is known.

  • Suggestion
  • Automatic fix and editor suggestions

Prefer Module Scope Constants

General Logic & Style
prefer-module-scope-constants

Prefer screaming snake case constants at module scope or the allowed top-level wrapper scope.

  • Suggestion

Require Paired Calls

General Logic & Style
require-paired-calls

Enforces balanced opener/closer function calls across all execution paths

  • Problem

Require Switch Case Braces

General Logic & Style
require-switch-case-braces

Require braces around switch case bodies selected by line span or statement count.

  • Problem
  • Automatic fix

Require Throw Error Capture

General Logic & Style
require-throw-error-capture

Require 'Error.captureStackTrace' before directly throwing new Error instances in named functions.

  • Suggestion
  • Automatic fix

Require Unicode Regex

General Logic & Style
require-unicode-regex

Require the 'u' or 'v' unicode flag on calls named regex().

  • Problem