Skip to content

linter: Failed to load external plugin because no external linter was configured. This means the Oxlint binary was executed directly rather than via napi bindings #13739

@dalisoft

Description

@dalisoft

What version of Oxlint are you using?

1.15.0

What command did you run?

bun run oxlint

What does your .oxlintrc.json config file look like?

{
  "extends": ["./packages/eslint-config-node/oxlintrc.json"],
  "rules": {
    "@typescript-eslint/no-var-requires": "off",
    "complexity": ["error", { "max": 7 }],
    "max-lines-per-function": [
      "error",
      { "max": 48, "skipBlankLines": true, "skipComments": true, "IIFEs": true }
    ]
  },
  "ignorePatterns": [".history", ".release-me", "scripts"]
}

And the referenced JSON config

{
  "env": {
    "es2015": true,
    "es2020": true,
    "node": true,
    "browser": false,
    "jest": true
  },
  "globals": {},
  "plugins": [
    "@typescript-eslint",
    "promise",
    "optimize-regex",
    "no-secrets",
    "import"
  ],
  "rules": {
    "brace-style": [
      "error",
      "1tbs",
      {
        "allowSingleLine": true
      }
    ],
    "comma-dangle": [
      "error",
      "never"
    ],
    "comma-spacing": [
      "error",
      {
        "before": false,
        "after": true
      }
    ],
    "func-call-spacing": [
      "error",
      "never"
    ],
    "quotes": [
      "error",
      "single",
      {
        "avoidEscape": true
      }
    ],
    "semi": [
      "error",
      "always"
    ],
    "space-before-function-paren": [
      "error",
      {
        "anonymous": "always",
        "named": "never",
        "asyncArrow": "always"
      }
    ],
    "keyword-spacing": [
      "error",
      {
        "before": true,
        "after": true,
        "overrides": {
          "return": {
            "after": true
          },
          "throw": {
            "after": true
          },
          "case": {
            "after": true
          }
        }
      }
    ],
    "lines-between-class-members": [
      "error",
      "always",
      {
        "exceptAfterSingleLine": false
      }
    ],
    "space-infix-ops": "error",
    "object-curly-spacing": [
      "error",
      "always"
    ],
    "space-before-blocks": "error",
    "no-extra-semi": "error",
    "default-param-last": "off",
    "@typescript-eslint/default-param-last": "error",
    "indent": [
      "error",
      2,
      {
        "SwitchCase": 1,
        "flatTernaryExpressions": false,
        "offsetTernaryExpressions": true
      }
    ],
    "@typescript-eslint/indent": [
      "off"
    ],
    "no-array-constructor": "off",
    "@typescript-eslint/no-array-constructor": "error",
    "no-dupe-class-members": "off",
    "@typescript-eslint/no-dupe-class-members": "error",
    "no-empty-function": [
      "error"
    ],
    "@typescript-eslint/no-empty-function": "off",
    "no-extra-parens": "off",
    "@typescript-eslint/no-extra-parens": [
      "off",
      "all",
      {
        "conditionalAssign": true,
        "nestedBinaryExpressions": false,
        "returnAssign": false,
        "ignoreJSX": "all",
        "enforceForArrowConditionals": false
      }
    ],
    "no-loss-of-precision": "off",
    "@typescript-eslint/no-loss-of-precision": "error",
    "no-loop-func": "off",
    "@typescript-eslint/no-loop-func": "error",
    "no-magic-numbers": "off",
    "@typescript-eslint/no-magic-numbers": [
      "off",
      {
        "ignore": [],
        "ignoreArrayIndexes": true,
        "enforceConst": true,
        "detectObjects": false
      }
    ],
    "no-redeclare": "off",
    "@typescript-eslint/no-redeclare": "error",
    "no-shadow": [
      "error",
      {
        "hoist": "functions"
      }
    ],
    "@typescript-eslint/no-shadow": "off",
    "no-unused-expressions": "off",
    "@typescript-eslint/no-unused-expressions": [
      "error",
      {
        "allowShortCircuit": false,
        "allowTernary": false,
        "allowTaggedTemplates": false
      }
    ],
    "no-unused-vars": "off",
    "@typescript-eslint/no-unused-vars": [
      "error",
      {
        "vars": "all",
        "args": "all",
        "argsIgnorePattern": "^_",
        "caughtErrors": "all",
        "caughtErrorsIgnorePattern": "^_",
        "destructuredArrayIgnorePattern": "^_",
        "varsIgnorePattern": "^_",
        "ignoreRestSiblings": false
      }
    ],
    "no-use-before-define": "off",
    "@typescript-eslint/no-use-before-define": [
      "error",
      {
        "functions": true,
        "classes": true,
        "variables": true
      }
    ],
    "no-useless-constructor": "off",
    "@typescript-eslint/no-useless-constructor": "error",
    "require-await": "off",
    "@typescript-eslint/require-await": "off",
    "@typescript-eslint/ban-ts-comment": "error",
    "import/extensions": [
      "error",
      "ignorePackages",
      {
        "js": "always",
        "cjs": "never",
        "mjs": "always",
        "jsx": "never",
        "ts": "never",
        "tsx": "never",
        "json": "always",
        "node": "always",
        "wasm": "always"
      }
    ],
    "import/no-extraneous-dependencies": [
      "error",
      {
        "optionalDependencies": false,
        "devDependencies": [
          "test/**",
          "tests/**",
          "spec/**",
          "**/__tests__/**",
          "**/__mocks__/**",
          "test.{js,jsx}",
          "test.{ts,tsx}",
          "test-*.{js,jsx}",
          "test-*.{ts,tsx}",
          "**/*{.,_}{test,spec}.{js,jsx}",
          "**/*{.,_}{test,spec}.{ts,tsx}",
          "**/jest.config.js",
          "**/jest.config.ts",
          "**/jest.setup.js",
          "**/jest.setup.ts",
          "**/vue.config.js",
          "**/vue.config.ts",
          "**/webpack.config.js",
          "**/webpack.config.ts",
          "**/webpack.config.*.js",
          "**/webpack.config.*.ts",
          "**/rollup.config.js",
          "**/rollup.config.ts",
          "**/rollup.config.*.js",
          "**/rollup.config.*.ts",
          "**/gulpfile.js",
          "**/gulpfile.ts",
          "**/gulpfile.*.js",
          "**/gulpfile.*.ts",
          "**/Gruntfile{,.js}",
          "**/Gruntfile{,.ts}",
          "**/protractor.conf.js",
          "**/protractor.conf.ts",
          "**/protractor.conf.*.js",
          "**/protractor.conf.*.ts",
          "**/karma.conf.js",
          "**/karma.conf.ts",
          "**/.eslintrc.js",
          "**/.eslintrc.ts",
          "**/eslint.config.js",
          "**/eslint.config.ts",
          "**/eslint.config.cjs",
          "**/eslint.config.mjs"
        ]
      }
    ],
    "@eslint-community/eslint-comments/no-unused-disable": "error",
    "@eslint-community/eslint-comments/disable-enable-pair": "warn",
    "@typescript-eslint/explicit-function-return-type": "off",
    "@typescript-eslint/explicit-module-boundary-types": "off",
    "@typescript-eslint/class-literal-property-style": [
      "error"
    ],
    "@typescript-eslint/no-non-null-asserted-optional-chain": [
      "error"
    ],
    "operator-linebreak": [
      "off",
      "after"
    ],
    "prefer-template": "error",
    "complexity": [
      "error",
      {
        "max": 7
      }
    ],
    "max-depth": [
      "error",
      {
        "max": 3
      }
    ],
    "max-nested-callbacks": [
      "error",
      {
        "max": 3
      }
    ],
    "max-lines-per-function": [
      "error",
      {
        "max": 60,
        "skipBlankLines": true,
        "skipComments": true,
        "IIFEs": true
      }
    ],
    "max-lines": [
      "error",
      {
        "max": 100,
        "skipBlankLines": true,
        "skipComments": true
      }
    ],
    "no-useless-concat": "error",
    "no-console": "warn",
    "no-template-curly-in-string": "error",
    "no-underscore-dangle": "off",
    "camelcase": "off",
    "import/prefer-default-export": "warn",
    "import/no-mutable-exports": "error",
    "no-secrets/no-secrets": "error",
    "import/no-unresolved": "error",
    "n/no-unsupported-features/es-syntax": [
      "error",
      {
        "ignores": [
          "modules"
        ]
      }
    ]
  },
  "settings": {
    "node": {
      "tryExtensions": [
        ".ts",
        ".js",
        ".d.ts",
        ".html",
        ".md",
        ".json",
        ".wasm",
        ".node"
      ]
    },
    "import/resolver": {
      "node": {
        "extensions": [
          ".ts",
          ".mjs",
          ".js",
          ".d.ts",
          ".html",
          ".md",
          ".json",
          ".wasm",
          ".node"
        ]
      },
      "typescript": {
        "alwaysTryTypes": true,
        "project": [
          "packages/*/tsconfig.json",
          "tsconfig.json"
        ]
      }
    },
    "import/extensions": [
      ".ts",
      ".mjs",
      ".js",
      ".d.ts",
      ".html",
      ".md",
      ".json",
      ".wasm",
      ".node"
    ],
    "import/external-module-folders": [
      "node_modules",
      "node_modules/@types"
    ],
    "import/parsers": {
      "@typescript-eslint/parser": [
        ".ts",
        ".tsx",
        ".d.ts"
      ]
    }
  }
}

What happened?

❯ bun run oxlint
Failed to parse configuration file.

  × Failed to load external plugin because no external linter was configured. This means the Oxlint binary was executed directly rather than via napi bindings.

error: "oxlint" exited with code 1

Related issues

Environment details

  • OS: macOS 15.6.1 (24G90)
  • Arch: Apple Silicon
  • Runtime: Bun

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions