.oxlintrc.json

{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "plugins": [
    "eslint",
    "typescript",
    "react",
    "jsx-a11y",
    "nextjs",
    "import",
    "oxc",
    "unicorn"
  ],
  "categories": {
    "correctness": "error"
  },
  "env": {
    "browser": true,
    "es2024": true,
    "node": true
  },
  "settings": {
    "jsx-a11y": {
      "components": {
        "Image": "img"
      }
    }
  },
  "rules": {
    "no-var": "error",
    "prefer-const": "error",
    "prefer-rest-params": "error",
    "prefer-spread": "error",

    "typescript/ban-ts-comment": "error",
    "typescript/no-array-constructor": "error",
    "typescript/no-duplicate-enum-values": "error",
    "typescript/no-empty-object-type": "error",
    "typescript/no-explicit-any": "error",
    "typescript/no-extra-non-null-assertion": "error",
    "typescript/no-misused-new": "error",
    "typescript/no-namespace": "error",
    "typescript/no-non-null-asserted-optional-chain": "error",
    "typescript/no-require-imports": "error",
    "typescript/no-this-alias": "error",
    "typescript/no-unnecessary-type-constraint": "error",
    "typescript/no-unsafe-declaration-merging": "error",
    "typescript/no-unsafe-function-type": "error",
    "typescript/no-unused-expressions": "warn",
    "typescript/no-unused-vars": "warn",
    "typescript/no-wrapper-object-types": "error",
    "typescript/prefer-as-const": "error",
    "typescript/prefer-namespace-keyword": "error",
    "typescript/triple-slash-reference": "error",

    "react/display-name": "error",
    "react/jsx-key": "error",
    "react/jsx-no-comment-textnodes": "error",
    "react/jsx-no-duplicate-props": "error",
    "react/jsx-no-undef": "error",
    "react/no-children-prop": "error",
    "react/no-danger-with-children": "error",
    "react/no-direct-mutation-state": "error",
    "react/no-find-dom-node": "error",
    "react/no-is-mounted": "error",
    "react/no-render-return-value": "error",
    "react/no-string-refs": "error",
    "react/no-unescaped-entities": "error",
    "react/require-render-return": "error",
    "react/jsx-no-target-blank": "off",
    "react/no-unknown-property": "off",
    "react/react-in-jsx-scope": "off",

    "react-hooks/rules-of-hooks": "error",
    "react-hooks/exhaustive-deps": "warn",
    "react-hooks/static-components": "error",
    "react-hooks/use-memo": "error",
    "react-hooks/preserve-manual-memoization": "error",
    "react-hooks/incompatible-library": "warn",
    "react-hooks/immutability": "error",
    "react-hooks/globals": "error",
    "react-hooks/refs": "error",
    "react-hooks/set-state-in-effect": "error",
    "react-hooks/error-boundaries": "error",
    "react-hooks/purity": "error",
    "react-hooks/set-state-in-render": "error",
    "react-hooks/unsupported-syntax": "warn",

    "import/no-anonymous-default-export": "warn",

    "jsx-a11y/alt-text": ["warn", { "elements": ["img"], "img": ["Image"] }],
    "jsx-a11y/aria-props": "warn",
    "jsx-a11y/aria-proptypes": "warn",
    "jsx-a11y/aria-unsupported-elements": "warn",
    "jsx-a11y/role-has-required-aria-props": "warn",
    "jsx-a11y/role-supports-aria-props": "warn",

    "nextjs/google-font-display": "warn",
    "nextjs/google-font-preconnect": "warn",
    "nextjs/next-script-for-ga": "warn",
    "nextjs/no-async-client-component": "warn",
    "nextjs/no-before-interactive-script-outside-document": "warn",
    "nextjs/no-css-tags": "warn",
    "nextjs/no-head-element": "warn",
    "nextjs/no-html-link-for-pages": "error",
    "nextjs/no-img-element": "warn",
    "nextjs/no-page-custom-font": "warn",
    "nextjs/no-styled-jsx-in-document": "warn",
    "nextjs/no-sync-scripts": "error",
    "nextjs/no-title-in-document-head": "warn",
    "nextjs/no-typos": "warn",
    "nextjs/no-unwanted-polyfillio": "warn",
    "nextjs/inline-script-id": "error",
    "nextjs/no-assign-module-variable": "error",
    "nextjs/no-document-import-in-page": "error",
    "nextjs/no-duplicate-head": "error",
    "nextjs/no-head-import-in-document": "error",
    "nextjs/no-script-component-in-head": "error"
  },
  "ignorePatterns": [
    ".next/**",
    ".claude/worktrees/**",
    ".vercel/**",
    "convex/_generated/**",
    "node_modules/**"
  ]
}