brackt/.oxlintrc.json
Chris Parsons 618bc57ec1
Replace console.* with structured logger, fix no-inferrable-types (closes #98) (#199)
- Add app/lib/logger.ts: dev passes through to console; prod routes errors
  to Sentry.captureException and warnings to Sentry.captureMessage, with
  extra context preserved. Uses captureMessage (not captureException) for
  string-only args to avoid fabricated stack traces.
- Add server/logger.ts: dev passes through; prod silences log/info but
  keeps warn/error on stderr (Sentry not initialized in that process).
- Replace all console.* calls across 44 app files and 4 server files.
- Upgrade no-console from warn → error in oxlint; exempt logger files and
  scripts/** via overrides.
- Add typescript/no-inferrable-types rule; fix violations in services and
  simulators. Exempt test files (intentional string widening for switch/if
  tests would break under literal type inference).

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 13:41:39 -07:00

75 lines
2 KiB
JSON

{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": ["react", "typescript", "vitest", "unicorn", "import"],
"env": {
"browser": true,
"node": true,
"es2022": true
},
"categories": {
"correctness": "error",
"suspicious": "warn"
},
"rules": {
"no-console": "error",
"no-var": "error",
"prefer-const": "error",
"eqeqeq": ["error", "always"],
"no-unused-vars": "off",
"no-undef": "off",
"typescript/no-unused-vars": [
"error",
{ "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" }
],
"typescript/no-explicit-any": "error",
"typescript/no-non-null-assertion": "error",
"typescript/no-inferrable-types": "error",
"typescript/consistent-type-imports": [
"error",
{ "prefer": "type-imports" }
],
"react/jsx-no-leaked-render": "error",
"react/react-in-jsx-scope": "off",
"react/rules-of-hooks": "error",
"react/exhaustive-deps": "error",
"react/jsx-key": "error",
"react/no-array-index-key": "error",
"react/self-closing-comp": "warn",
"import/no-cycle": "error",
"import/no-duplicates": "error",
"import/no-unassigned-import": ["error", {
"allow": ["**/*.css", "@testing-library/jest-dom", "@testing-library/cypress/add-commands"]
}],
"no-shadow": "error",
"unicorn/consistent-function-scoping": "error",
"unicorn/prefer-add-event-listener": "error",
"unicorn/require-module-specifiers": "error"
},
"overrides": [
{
"files": ["**/__tests__/**", "**/*.test.ts", "**/*.test.tsx", "cypress/**"],
"rules": {
"no-console": "off",
"typescript/no-explicit-any": "off",
"typescript/no-inferrable-types": "off"
}
},
{
"files": ["app/lib/logger.ts", "server/logger.ts"],
"rules": {
"no-console": "off"
}
}
],
"ignorePatterns": [
"build/**",
"dist/**",
"node_modules/**",
"drizzle/**",
".react-router/**",
"cypress/fixtures/**",
"scripts/**"
]
}