| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- {
- "$schema": "./node_modules/oxlint/configuration_schema.json",
- "plugins": [],
- "categories": {
- "correctness": "off"
- },
- "options": {
- "reportUnusedDisableDirectives": "warn",
- "typeAware": true
- },
- "env": {
- "builtin": true
- },
- "ignorePatterns": [
- "**/lib/**",
- "**/node_modules/**",
- "**/.sessions/**",
- ".claude/**", // Harness-local state belongs to other checkouts, not this checkout's sources.
- "**/.doc-typecheck-*/**",
- "**/.node-next-types-*/**",
- "**/.oxlint-contract-*/**", // Scratch files created by the executable lint-contract tests.
- "**/oxlint-contract-*", // Flat probes use real TypeScript project include paths.
- "packages/typert/generator/tests/fixtures/type-model/**", // tsgolint rejects this fixture's preserved project shapes before rules run.
- "website/.generated/**",
- "vendor/**", // Vendored source keeps upstream style and idioms.
- "native/**", // The imported landlock-run subtree has its own gates; see native/README.md.
- "**/*.js",
- "**/*.mjs",
- "**/*.config.ts", // Tool and app configs are outside the repository TypeScript programs.
- "packages/client/tsdown.client.ts" // Shared client build preset, also outside a TypeScript program.
- ],
- "overrides": [
- {
- // Shared strict type-aware rules. Source/test differences stay in the short overrides below.
- "files": [
- "packages/*/*/src/**/*.{ts,tsx}",
- "packages/*/*/tests/**/*.{ts,tsx}",
- "apps/*/src/**/*.{ts,tsx}",
- "apps/*/tests/**/*.{ts,tsx}",
- "examples/**/*.{ts,tsx}",
- "scripts/**/*.{ts,tsx}",
- "website/**/*.{ts,tsx}"
- ],
- "rules": {
- "no-var": "error",
- "prefer-const": "error",
- "prefer-rest-params": "error",
- "prefer-spread": "error",
- "no-array-constructor": "error",
- "no-unused-expressions": "error",
- "no-unused-vars": [
- "error",
- {
- "argsIgnorePattern": "^_",
- "varsIgnorePattern": "^_",
- "caughtErrorsIgnorePattern": "^_"
- }
- ],
- "no-useless-constructor": "error",
- "no-restricted-properties": [
- "error",
- {
- "object": "crypto",
- "property": "randomUUID",
- "message": "browsers withhold crypto.randomUUID outside secure contexts (plain-HTTP LAN pages); mint through @deepseek-ai/dsh-util-crypto instead"
- }
- ],
- "typescript/await-thenable": "error",
- "typescript/ban-ts-comment": [
- "error",
- {
- "minimumDescriptionLength": 10
- }
- ],
- "typescript/no-array-delete": "error",
- "typescript/no-base-to-string": "error",
- "typescript/no-confusing-void-expression": "error",
- "typescript/no-deprecated": "error",
- "typescript/no-duplicate-enum-values": "error",
- "typescript/no-duplicate-type-constituents": "error",
- "typescript/no-dynamic-delete": "error",
- "typescript/no-empty-object-type": "off", // Merge-extensible maps intentionally use empty object types.
- "typescript/no-explicit-any": "error", // Every intentional any needs a narrow suppression with rationale.
- "typescript/no-extra-non-null-assertion": "error",
- "typescript/no-extraneous-class": "error",
- // Lost promises in the agent loop are the repository's highest-value linted bug class.
- "typescript/no-floating-promises": "error",
- "typescript/no-for-in-array": "error",
- "typescript/no-implied-eval": "error",
- "typescript/no-invalid-void-type": "off", // Event signatures intentionally use void in source.
- "typescript/no-meaningless-void-operator": "error",
- "typescript/no-misused-new": "error",
- "typescript/no-misused-promises": "error",
- "typescript/no-misused-spread": "error",
- "typescript/no-mixed-enums": "error",
- "typescript/no-namespace": "off", // Cordis Config namespaces are the repository idiom.
- "typescript/no-non-null-asserted-nullish-coalescing": "error",
- "typescript/no-non-null-asserted-optional-chain": "error",
- "typescript/no-redundant-type-constituents": "error",
- "typescript/no-require-imports": "error",
- "typescript/no-this-alias": "error",
- "typescript/no-unnecessary-boolean-literal-compare": "error",
- "typescript/no-unnecessary-template-expression": "error",
- "typescript/no-unnecessary-type-arguments": "error",
- "typescript/no-unnecessary-type-assertion": "error",
- "typescript/no-unnecessary-type-constraint": "error",
- "typescript/no-unnecessary-type-conversion": "error",
- "typescript/no-unnecessary-type-parameters": "error",
- "typescript/no-unsafe-argument": "error",
- "typescript/no-unsafe-assignment": "error",
- "typescript/no-unsafe-call": "error",
- "typescript/no-unsafe-declaration-merging": "error",
- "typescript/no-unsafe-enum-comparison": "error",
- "typescript/no-unsafe-function-type": "error",
- "typescript/no-unsafe-member-access": "error",
- "typescript/no-unsafe-return": "error",
- "typescript/no-unsafe-unary-minus": "error",
- "typescript/no-useless-default-assignment": "error",
- "typescript/no-wrapper-object-types": "error",
- "typescript/prefer-as-const": "error",
- "typescript/prefer-literal-enum-member": "error",
- "typescript/prefer-namespace-keyword": "error",
- "typescript/prefer-promise-reject-errors": "error",
- "typescript/prefer-reduce-type-parameter": "error",
- "typescript/prefer-return-this-type": "error",
- "typescript/related-getter-setter-pairs": "error",
- "typescript/restrict-plus-operands": [
- "error",
- {
- "allowAny": false,
- "allowBoolean": false,
- "allowNullish": false,
- "allowNumberAndString": false,
- "allowRegExp": false
- }
- ],
- "typescript/return-await": [
- "error",
- "error-handling-correctness-only"
- ],
- "typescript/triple-slash-reference": "error",
- "typescript/unbound-method": "error",
- "typescript/unified-signatures": "error",
- "typescript/use-unknown-in-catch-callback-variable": "error",
- "no-void": "off" // void foo() marks deliberate fire-and-forget arrow listeners.
- },
- "plugins": [
- "typescript"
- ]
- },
- {
- "files": [
- "packages/*/*/src/**/*.{ts,tsx}",
- "apps/*/src/**/*.{ts,tsx}",
- "examples/**/*.{ts,tsx}",
- "scripts/**/*.{ts,tsx}",
- "website/**/*.{ts,tsx}"
- ],
- "rules": {
- "typescript/no-non-null-assertion": "error",
- "typescript/no-unnecessary-condition": [
- "error",
- {
- "allowConstantLoopConditions": true
- }
- ],
- "typescript/only-throw-error": "error",
- "typescript/require-await": "error",
- "typescript/restrict-template-expressions": [
- "error",
- {
- "allowNumber": true,
- "allowBoolean": true
- }
- ],
- "typescript/switch-exhaustiveness-check": [
- "error",
- {
- "considerDefaultExhaustiveForUnions": true
- }
- ]
- },
- "plugins": [
- "typescript"
- ]
- },
- {
- "files": [
- "examples/**/*.ts"
- ],
- "rules": {
- "typescript/require-await": "off" // Demo callbacks conform to async interfaces without awaiting.
- },
- "plugins": [
- "typescript"
- ]
- },
- {
- "files": [
- "packages/*/*/tests/**/*.{ts,tsx}",
- "apps/*/tests/**/*.{ts,tsx}",
- "examples/*/tests/**/*.{ts,tsx}",
- "scripts/**/*.spec.{ts,tsx}"
- ],
- "rules": {
- "typescript/no-invalid-void-type": "error",
- "typescript/no-non-null-assertion": "off", // Assertions commonly follow an expect() that proves presence.
- "typescript/no-unnecessary-condition": "off",
- "typescript/only-throw-error": "off", // Tests deliberately exercise non-Error throws.
- "typescript/require-await": "off", // Mock execute() implementations must retain async signatures.
- "typescript/restrict-template-expressions": "off"
- },
- "plugins": [
- "typescript"
- ]
- },
- {
- "files": [
- "packages/**/*.{ts,tsx}",
- "apps/**/*.{ts,tsx}",
- "examples/**/*.{ts,tsx}",
- "scripts/**/*.{ts,tsx}",
- "website/**/*.{ts,tsx}"
- ],
- "rules": {
- "sonarjs/duplicates-in-character-class": "error",
- "sonarjs/no-all-duplicated-branches": "error",
- "sonarjs/no-duplicate-in-composite": "error",
- "sonarjs/no-duplicate-test-title": "error",
- "sonarjs/no-identical-conditions": "error",
- "sonarjs/no-identical-expressions": "error",
- "sonarjs/no-identical-functions": "error",
- "sonarjs/no-duplicated-branches": "error"
- },
- "jsPlugins": [
- "eslint-plugin-sonarjs"
- ]
- },
- {
- "files": [
- "packages/**/*.{ts,tsx}",
- "apps/**/*.{ts,tsx}",
- "examples/**/*.{ts,tsx}",
- "scripts/**/*.{ts,tsx}",
- "website/**/*.{ts,tsx}"
- ],
- "rules": {
- "@stylistic/indent": [
- "error",
- 2
- ],
- "@stylistic/semi": [
- "error",
- "never"
- ],
- "@stylistic/quotes": [
- "error",
- "single",
- {
- "avoidEscape": true
- }
- ],
- "@stylistic/comma-dangle": [
- "error",
- "always-multiline"
- ],
- "@stylistic/eol-last": [
- "error",
- "always"
- ],
- "@stylistic/no-trailing-spaces": "error",
- "@stylistic/object-curly-spacing": [
- "error",
- "always"
- ],
- "@stylistic/arrow-parens": [
- "error",
- "as-needed",
- {
- "requireForBlockBody": true
- }
- ],
- "@stylistic/member-delimiter-style": [
- "error",
- {
- "multiline": {
- "delimiter": "none"
- },
- "singleline": {
- "delimiter": "semi",
- "requireLast": false
- }
- }
- ],
- // Validation-only: line length has no safe formatter fix.
- "@stylistic/max-len": [
- "error",
- {
- "code": 140,
- "ignoreUrls": true,
- "ignoreStrings": true,
- "ignoreTemplateLiterals": true
- }
- ]
- },
- "jsPlugins": [
- "@stylistic/eslint-plugin"
- ]
- },
- {
- // The project-free staged profile re-includes this syntax-coverage fixture.
- "files": [
- "packages/typert/generator/tests/fixtures/type-model/**/*.{ts,tsx}"
- ],
- "rules": {
- "typescript/no-explicit-any": "off"
- }
- },
- {
- // TypeGraph coverage must retain source-authored syntax that the normal quote rule forbids.
- "files": [
- "packages/typert/generator/tests/fixtures/type-model/packages/host/src/models.ts"
- ],
- "rules": {
- "@stylistic/quotes": "off"
- }
- },
- {
- "files": [
- "packages/experimental/webworker-runtime/src/node/**/*.ts",
- "packages/experimental/webworker-runtime/src/storage/memory.ts",
- "packages/experimental/webworker-runtime/src/module-system/module-loader.ts",
- "packages/experimental/webworker-runtime/src/transport/synthetic-http.ts"
- ],
- "rules": {
- "typescript/require-await": "off", // Async faces Node and Cordis define (fs promises, the module seam) reject rather than throw; the VFS beneath them never awaits.
- "typescript/no-extraneous-class": "off" // Node constructs these (`new Script()`, `new Worker()`), so a stub that refuses must still be a class.
- },
- "plugins": [
- "typescript"
- ]
- }
- ]
- }
|