Вложенные файлы конфигурации
В одном репозитории может быть несколько конфигов Oxlint. Автоматически подхватываются .oxlintrc.json и oxlint.config.ts; какой применять — зависит от расположения файла в дереве каталогов.
Удобно в монорепо: у пакетов свои настройки при общем базовом уровне.
Если нужно только исключить файлы или каталоги, см. игнорирование файлов.
Как это устроено
Для каждого линтуемого файла берётся ближайший конфиг (.oxlintrc.json или oxlint.config.ts) относительно этого файла.
Структура:
my-project/
├── .oxlintrc.json
├── src/
│ ├── index.js
├── package1/
│ ├── oxlint.config.ts
│ └── index.js
└── package2/
├── .oxlintrc.json
└── index.jsРазрешение:
src/index.js→my-project/.oxlintrc.jsonpackage1/index.js→my-project/package1/oxlint.config.tspackage2/index.js→my-project/package2/.oxlintrc.json
Ожидаемое поведение
Конфиги не сливаются автоматически: конфиг в дочернем каталоге не меняет родительский.
Опции командной строки перекрывают конфиг вне зависимости от вложенности.
Явный -c / --config отключает поиск вложенных конфигов — используется только указанный файл.
Отключить вложенные конфиги: --disable-nested-config.
options.typeAware и options.typeCheck только в корневом конфиге. Если задать их во вложенном, Oxlint выдаст ошибку.
Монорепо: общий базовый конфиг через extends
Часто нужен общий baseline в корне и небольшие дополнения в пакетах.
Корневой конфиг (.oxlintrc.json или oxlint.config.ts), пакеты подключают его через extends.
{
"rules": {
"no-debugger": "error"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"no-debugger": "error",
},
});{
"extends": ["../.oxlintrc.json"],
"rules": {
"no-console": "off"
}
}import baseConfig from "../oxlint.config.ts";
import { defineConfig } from "oxlint";
export default defineConfig({
extends: [baseConfig],
rules: {
"no-console": "off",
},
});Общая база в одном месте, локальные конфиги остаются короткими.
Наследование файлов конфигурации
extends — массив путей, разрешаемых относительно файла, где объявлено extends.
Расширяемые файлы могут иметь любые имена; для JSON достаточно валидного конфига. Файл с полем extends в форме TypeScript должен называться oxlint.config.ts.
Пример:
{
"plugins": ["typescript"],
"rules": {
"typescript/no-explicit-any": "error"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
plugins: ["typescript"],
rules: {
"typescript/no-explicit-any": "error",
},
});{
"extends": ["oxlint-typescript.json"],
"rules": {
"no-unused-vars": "warn"
}
}import typescriptConfig from "./oxlint-typescript.config.ts";
import { defineConfig } from "oxlint";
export default defineConfig({
extends: [typescriptConfig],
rules: {
"no-unused-vars": "warn",
},
});Наследоваться можно только для части свойств:
rulespluginsoverrides