Skip to content

linter: extends doesnt work on oxlint.config.ts #20863

Description

@michaelhazan

What version of Oxlint are you using?

1.57.0

What command did you run?

pnpm exec oxlint -c oxlint.config.ts --print-config

What does your .oxlintrc.json (or oxlint.config.ts) config file look like?

// oxlint.config.ts
import baseConfig from "@config/lint/base";
import { defineConfig } from "oxlint";

export default defineConfig({
    extends: [baseConfig],
});
// config/lint/oxlint.base.ts
import { defineConfig } from "oxlint";

export default defineConfig({
    categories: { correctness: "error" },
});

What happened?

When attempting to create a global config for oxlint in a monorepo, it seems not to be able to extend the base config provider by a private package.
note: when printing the baseConfig in the oxlint.config.ts file, it prints the correct config.

This was noticed by printing the config and getting this result:
pnpm exec oxlint -c oxlint.config.ts --print-config
{
  "plugins": [
    "unicorn",
    "typescript",
    "oxc"
  ],
  "categories": {},
  "rules": {
    "capitalized-comments": "deny",
    "constructor-super": "deny",
    "eqeqeq": "deny",
    "for-direction": "deny",
    "getter-return": "deny",
    "no-async-promise-executor": "deny",
    "no-caller": "deny",
    "no-case-declarations": "deny",
    "no-class-assign": "deny",
    "no-compare-neg-zero": "deny",
    "no-cond-assign": "deny",
    "no-console": "deny",
    "no-const-assign": "deny",
    "no-constant-binary-expression": "deny",
    "no-constant-condition": "deny",
    "no-control-regex": "deny",
    "no-debugger": "deny",
    "no-delete-var": "deny",
    "no-dupe-class-members": "deny",
    "no-dupe-else-if": "deny",
    "no-dupe-keys": "deny",
    "no-duplicate-case": "deny",
    "no-empty": "deny",
    "no-empty-character-class": "deny",
    "no-empty-function": "warn",
    "no-empty-pattern": "deny",
    "no-empty-static-block": "deny",
    "no-eval": "deny",
    "no-ex-assign": "deny",
    "no-extra-boolean-cast": "deny",
    "no-fallthrough": "deny",
    "no-func-assign": "deny",
    "no-global-assign": "deny",
    "no-implicit-coercion": "warn",
    "no-import-assign": "deny",
    "no-invalid-regexp": "deny",
    "no-irregular-whitespace": "deny",
    "no-iterator": "deny",
    "no-loss-of-precision": "deny",
    "no-misleading-character-class": "deny",
    "no-new-native-nonconstructor": "deny",
    "no-nonoctal-decimal-escape": "deny",
    "no-obj-calls": "deny",
    "no-prototype-builtins": "deny",
    "no-redeclare": "deny",
    "no-regex-spaces": "deny",
    "no-self-assign": "deny",
    "no-sequences": "deny",
    "no-setter-return": "deny",
    "no-shadow-restricted-names": "deny",
    "no-sparse-arrays": "deny",
    "no-this-before-super": "deny",
    "no-unassigned-vars": "deny",
    "no-undef": "deny",
    "no-unexpected-multiline": "deny",
    "no-unreachable": "deny",
    "no-unsafe-finally": "deny",
    "no-unsafe-negation": "deny",
    "no-unsafe-optional-chaining": "warn",
    "no-unused-expressions": "deny",
    "no-unused-labels": "deny",
    "no-unused-private-class-members": "deny",
    "no-unused-vars": "deny",
    "no-useless-backreference": "deny",
    "no-useless-catch": "deny",
    "no-useless-escape": "deny",
    "no-useless-rename": "deny",
    "no-var": "deny",
    "no-with": "deny",
    "prefer-const": "deny",
    "require-await": "warn",
    "require-yield": "deny",
    "use-isnan": "deny",
    "valid-typeof": "deny",
    "yoda": "deny",
    "import/default": "deny",
    "import/namespace": "deny",
    "jest/expect-expect": "deny",
    "jest/no-conditional-expect": "deny",
    "jest/no-disabled-tests": "deny",
    "jest/no-export": "deny",
    "jest/no-focused-tests": "deny",
    "jest/no-standalone-expect": "deny",
    "jest/require-to-throw-message": "deny",
    "jest/valid-describe-callback": "deny",
    "jest/valid-expect": "deny",
    "jest/valid-title": "deny",
    "oxc/bad-array-method-on-arguments": "deny",
    "oxc/bad-char-at-comparison": "deny",
    "oxc/bad-comparison-sequence": "deny",
    "oxc/bad-min-max-func": "deny",
    "oxc/bad-object-literal-comparison": "deny",
    "oxc/bad-replace-all-arg": "deny",
    "oxc/const-comparisons": "deny",
    "oxc/double-comparisons": "deny",
    "oxc/erasing-op": "deny",
    "oxc/missing-throw": "deny",
    "oxc/number-arg-out-of-range": "deny",
    "oxc/only-used-in-recursion": "deny",
    "oxc/uninvoked-array-callback": "deny",
    "promise/no-callback-in-promise": "deny",
    "promise/no-new-statics": "deny",
    "promise/valid-params": "deny",
    "typescript/adjacent-overload-signatures": "deny",
    "typescript/array-type": "deny",
    "typescript/await-thenable": "deny",
    "typescript/class-literal-property-style": "deny",
    "typescript/consistent-generic-constructors": "deny",
    "typescript/consistent-indexed-object-style": "deny",
    "typescript/consistent-type-assertions": "deny",
    "typescript/consistent-type-definitions": "warn",
    "typescript/consistent-type-exports": "warn",
    "typescript/consistent-type-imports": "warn",
    "typescript/no-array-delete": "deny",
    "typescript/no-base-to-string": "deny",
    "typescript/no-confusing-non-null-assertion": "deny",
    "typescript/no-duplicate-enum-values": "deny",
    "typescript/no-duplicate-type-constituents": "deny",
    "typescript/no-explicit-any": "warn",
    "typescript/no-extra-non-null-assertion": "deny",
    "typescript/no-floating-promises": "deny",
    "typescript/no-for-in-array": "deny",
    "typescript/no-implied-eval": "deny",
    "typescript/no-inferrable-types": "deny",
    "typescript/no-meaningless-void-operator": "deny",
    "typescript/no-misused-new": "deny",
    "typescript/no-misused-promises": "deny",
    "typescript/no-misused-spread": "deny",
    "typescript/no-mixed-enums": "deny",
    "typescript/no-non-null-asserted-optional-chain": "deny",
    "typescript/no-redundant-type-constituents": "deny",
    "typescript/no-this-alias": "deny",
    "typescript/no-unnecessary-parameter-property-assignment": "deny",
    "typescript/no-unsafe-declaration-merging": "deny",
    "typescript/no-unsafe-unary-minus": "deny",
    "typescript/no-useless-empty-export": "deny",
    "typescript/no-wrapper-object-types": "deny",
    "typescript/only-throw-error": "warn",
    "typescript/prefer-as-const": "deny",
    "typescript/prefer-find": "deny",
    "typescript/prefer-for-of": "deny",
    "typescript/prefer-function-type": "deny",
    "typescript/prefer-includes": "deny",
    "typescript/prefer-namespace-keyword": "deny",
    "typescript/require-array-sort-compare": "deny",
    "typescript/restrict-template-expressions": "deny",
    "typescript/triple-slash-reference": "deny",
    "typescript/unbound-method": "deny",
    "unicorn/no-await-in-promise-methods": "deny",
    "unicorn/no-empty-file": "deny",
    "unicorn/no-invalid-fetch-options": "deny",
    "unicorn/no-invalid-remove-event-listener": "deny",
    "unicorn/no-new-array": "deny",
    "unicorn/no-single-promise-in-promise-methods": "deny",
    "unicorn/no-thenable": "deny",
    "unicorn/no-unnecessary-await": "deny",
    "unicorn/no-useless-fallback-in-spread": "deny",
    "unicorn/no-useless-length-check": "deny",
    "unicorn/no-useless-spread": "deny",
    "unicorn/prefer-includes": "deny",
    "unicorn/prefer-set-size": "deny",
    "unicorn/prefer-string-starts-ends-with": "deny",
    "vitest/consistent-each-for": "deny",
    "vitest/hoisted-apis-on-top": "deny",
    "vitest/no-conditional-tests": "deny",
    "vitest/require-local-test-context-for-concurrent-snapshots": "deny",
    "vitest/warn-todo": "deny"
  },
  "settings": {
    "jsx-a11y": {
      "polymorphicPropName": null,
      "components": {},
      "attributes": {}
    },
    "next": {
      "rootDir": []
    },
    "react": {
      "formComponents": [],
      "linkComponents": [],
      "version": null,
      "componentWrapperFunctions": []
    },
    "jsdoc": {
      "ignorePrivate": false,
      "ignoreInternal": false,
      "ignoreReplacesDocs": true,
      "overrideReplacesDocs": true,
      "augmentsExtendsReplacesDocs": false,
      "implementsReplacesDocs": false,
      "exemptDestructuredRootsFromChecks": false,
      "tagNamePreference": {}
    },
    "vitest": {
      "typecheck": false
    }
  },
  "env": {
    "builtin": true
  },
  "globals": {},
  "ignorePatterns": []
}

Metadata

Metadata

Assignees

Labels

Type

Fields

Priority

None yet

Effort

None yet

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions