---
title: "Rules and renaming"
description: "Override rules, rename plugin prefixes and target generated configs by name."
canonical_url: "https://vinicunca.dev/eslint/configuration/rules-overrides"
---
# Rules and renaming

> Override rules, rename plugin prefixes and target generated configs by name.

You can change rules in four places. Later entries win when they apply to the same file.

## 1. Integration `overrides`

Most integrations accept `overrides`. Those rules are merged into **that** integration's config, so they keep its `files` glob:

```js [eslint.config.js]
import { vinicuncaESLint } from '@vinicunca/eslint-config';

export default vinicuncaESLint({
  vue: {
    overrides: {
      'vue/max-attributes-per-line': 'off',
    },
  },
  typescript: {
    overrides: {
      'ts/no-explicit-any': 'error',
    },
    overridesTypeAware: {
      'ts/no-unsafe-assignment': 'off',
    },
  },
});
```

`unicorn` and `unocss` accept `overrides` in the type but **ignore** them. Put those rules in an extra config instead.

## 2. `rules` on the first argument

The factory treats `rules` (and `languageOptions`, `plugins`, `settings`, …) on the first argument as one extra config **after** the generated ones and **before** your extra configs. It applies to every file:

```js [eslint.config.js]
export default vinicuncaESLint({
  rules: {
    'no-console': 'off',
  },
});
```

Do not pass `files` here — the factory throws. Use a later argument for file-scoped configs.

## 3. Extra flat configs

Every argument after the options object is appended as-is:

```js [eslint.config.js]
export default vinicuncaESLint(
  { vue: true },
  {
    files: ['**/*.ts'],
    rules: {
      'no-console': ['error', { allow: ['warn', 'error', 'info'] }],
    },
  },
);
```

## 4. Composer methods

`vinicuncaESLint()` returns a `FlatConfigComposer`. Use `.override(name, config)` to patch a generated config by name, or `.overrideRules()` to change a rule everywhere it is set:

```js [eslint.config.js]
export default vinicuncaESLint()
  .override('vinicunca/stylistic/rules', {
    rules: {
      'style/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
    },
  })
  .overrideRules({
    'antfu/top-level-function': 'off',
  });
```

See [Composer API](https://vinicunca.dev/eslint/configuration#composer-api) for the full method list. Names always start with `vinicunca/`; inspect them with the [config inspector](https://vinicunca.dev/eslint/guides/config-inspector).

## Plugin renaming

With `autoRenamePlugins: true` (the default), prefixes are rewritten in **every** config, including yours:

| From | To | Example |
| --- | --- | --- |
| `@eslint-react` | `react` | `react/no-leaked-conditional-rendering` |
| `@next/next` | `next` | `next/no-html-link-for-pages` |
| `@stylistic` | `style` | `style/semi` |
| `@typescript-eslint` | `ts` | `ts/no-unused-vars` |
| `import-lite` | `import` | `import/first` |
| `n` | `node` | `node/prefer-global/process` |
| `vitest` | `test` | `test/consistent-test-it` |
| `yml` | `yaml` | `yaml/sort-keys` |

Write the **short** names in your overrides. `eslint-plugin-vuejs-accessibility` is already registered as `vue-a11y`, and `eslint-plugin-react-refresh` as `react-refresh` — they are not in this map.

```js [eslint.config.js]
export default vinicuncaESLint(
  { typescript: true },
  {
    rules: {
      // Use ts/, not @typescript-eslint/
      'ts/consistent-type-definitions': ['error', 'type'],
    },
  },
);
```

Set `autoRenamePlugins: false` if you need the original prefixes (for example when composing configs that already use `ts/` themselves).


## Sitemap

See the full [sitemap](https://vinicunca.dev/sitemap.md) for all pages.
