LogoSheriff
Documentation

Configuration

Straightforward at the start, flexible when you need it

Base options

The eslint-config-sheriff package exports a sheriff function.
You can configure Sheriff as desired using a simple javascript object as the first input parameter of the sheriff function.
Every config option can be set on/off (you just pass them a boolean value). As they are all opt-in, they are all disabled by default. If you bootstrapped the config with the Scaffolder some of these values will be inferred automatically from your project.

eslint.config.mjs
import { sheriff, tseslint } from "eslint-config-sheriff";

// Sheriff configuration object
const sheriffOptions = { 
  react: false, 
  next: false, 
  astro: false, 
  lodash: false, 
  remeda: false, 
  playwright: false, 
  storybook: true, 
  jest: false, 
  vitest: false, 
}; 

export default tseslint.config(sheriff(sheriffOptions));
eslint.config.ts
import { , type SheriffSettings,   } from "eslint-config-sheriff";

// Sheriff configuration object
const : SheriffSettings = { 
  : false, 
  : false, 
  : false, 
  : false, 
  : false, 
  : false, 
  : true, 
  : false, 
  : false, 
}; 

export default .(());

Remodeling

You can override any Sheriff rule as desired in the eslint.config.mjs file.

For example, let's say you want to disable a Sheriff rule, like import/first:

eslint.config.mjs
import { sheriff, tseslint } from "eslint-config-sheriff";

const sheriffOptions = {
  react: false,
  next: false,
  astro: false,
  lodash: false,
  remeda: false,
  playwright: false,
  storybook: true,
  jest: false,
  vitest: false,
};

export default tseslint.config(sheriff(sheriffOptions),
  {
    rules: {
      "import/first": 0, // 'import/first' is now disabled everywhere.
    },
  },
);
eslint.config.ts
import { , type SheriffSettings,   } from "eslint-config-sheriff";

const : SheriffSettings = {
  : false,
  : false,
  : false,
  : false,
  : false,
  : false,
  : true,
  : false,
  : false,
};

export default .((),
  {
    : {
      "import/first": 0, // 'import/first' is now disabled everywhere.
    },
  },
);

Likewise, let's say you want to enable a new rule:

eslint.config.mjs
import { sheriff, tseslint } from "eslint-config-sheriff";

const sheriffOptions = {
  react: false,
  next: false,
  astro: false,
  lodash: false,
  remeda: false,
  playwright: false,
  storybook: true,
  jest: false,
  vitest: false,
};

export default tseslint.config(sheriff(sheriffOptions),
  {
    rules: {
      "import/first": 2, // 'import/first' is now enabled everywhere.
    },
  },
);
eslint.config.ts
import { , type SheriffSettings,  } from "eslint-config-sheriff";

const : SheriffSettings = {
  : false,
  : false,
  : false,
  : false,
  : false,
  : false,
  : true,
  : false,
  : false,
};

export default .((),
  {
    : {
      "import/first": 2, // 'import/first' is now enabled everywhere.
    },
  },
);

This is just the standard behavior of the FlatConfig system of ESLint, which is being illustrated here for your convenience. Sheriff doesn't alter this in any way.

For more in-depth information, refer to the official docs.

Advanced options

The upcoming configuration options are meant to be situational, tailored to serve only a niche group of users and designed to address specific use cases. Use these only if and when you end up needing them.

files

This option is primarily meant to be used while introducing Sheriff to an existing project.

Learn more in the Migration guide.

ignores

By default, Sheriff will ignore certain filepaths, but you can choose to opt-out of this behavior.

ignores: {
  recommended: boolean;
  inheritedFromGitignore: boolean;
}

ignores.recommended

With this option, Sheriff will ignore a list of commonly ignored folders:

  • **/node_modules/**
  • **/dist/**
  • **/build/**
  • **/artifacts/**
  • **/coverage/**
  • eslint.config.{js,mjs,cjs}

Example:

eslint.config.mjs
import { sheriff, tseslint } from "eslint-config-sheriff";

const sheriffOptions = {
  react: false,
  next: false,
  astro: false,
  lodash: false,
  remeda: false,
  playwright: false,
  storybook: true,
  jest: false,
  vitest: false,
  ignores: {
    recommended: true, // true by default. False to disable.
  },
};

export default tseslint.config(sheriff(sheriffOptions));
eslint.config.ts
import { , type SheriffSettings,  } from "eslint-config-sheriff";

const : SheriffSettings = {
  : false,
  : false,
  : false,
  : false,
  : false,
  : false,
  : true,
  : false,
  : false,
  : {
    : true, // true by default. False to disable.
  },
};

export default .(());

ignores.inheritedFromGitignore

With this option, Sheriff will ignore the same filepaths specified in your .gitignore file.

Example:

eslint.config.mjs
import { sheriff, tseslint } from "eslint-config-sheriff";

const sheriffOptions = {
  react: false,
  next: false,
  astro: false,
  lodash: false,
  remeda: false,
  playwright: false,
  storybook: true,
  jest: false,
  vitest: false,
  ignores: {
    inheritedFromGitignore: true, // true by default. False to disable.
  },
};

export default tseslint.config(sheriff(sheriffOptions));
eslint.config.ts
import { , type SheriffSettings,  } from "eslint-config-sheriff";

const : SheriffSettings = {
  : false,
  : false,
  : false,
  : false,
  : false,
  : false,
  : true,
  : false,
  : false,
  : {
    : true, // true by default. False to disable.
  },
};

export default .(());

pathsOverrides

As outlined in the criteria page, Sheriff comes with sensible defaults. However, as your project grows, your team may come across the need to override some of these defaults. This option lets you do just that.

pathsOverrides: {
  tsconfigLocation: string | string[];
  tests: string[];
}

pathsOverrides.tsconfigLocation

By default, Sheriff will use the project: true option to locate the tsconfig.json of your project.

But, if you have multiple tsconfig.json files in your project (like tsconfig.json, tsconfig.eslint.json, tsconfig.node.json, etc...), you can use this parameter to specify which config Sheriff will pickup.

You can pass it a path as a string (or a list of paths as a array of strings, see: one-tsconfigjson-per-package).

Example:

eslint.config.mjs
import { sheriff, tseslint } from "eslint-config-sheriff";

const sheriffOptions = {
  react: false,
  next: false,
  astro: false,
  lodash: false,
  remeda: false,
  playwright: false,
  storybook: true,
  jest: false,
  vitest: false,
  pathsOverrides: {
    tsconfigLocation: "./tsconfig.eslint.json", 
  },
};

export default tseslint.config(sheriff(sheriffOptions));
eslint.config.ts
import { , type SheriffSettings,  } from "eslint-config-sheriff";

const : SheriffSettings = {
  : false,
  : false,
  : false,
  : false,
  : false,
  : false,
  : true,
  : false,
  : false,
  : {
    : "./tsconfig.eslint.json", 
  },
};

export default .(());

pathsOverrides.tests

By default, Sheriff will apply Jest or Vitest rules only on specific files.

[
  "**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts}",
  "**/tests/**/*.{js,mjs,cjs,ts,mts,cts}",
  "**/__tests__/**/*.{js,mjs,cjs,ts,mts,cts}"
]

This setting overrides this default.

It accepts an array of filepaths, dictaced by minimatch syntax.

Example:

eslint.config.mjs
import { sheriff, tseslint } from "eslint-config-sheriff";

const sheriffOptions = {
  react: false,
  next: false,
  astro: false,
  lodash: false,
  remeda: false,
  playwright: false,
  storybook: true,
  jest: false,
  vitest: false,
  pathsOverrides: {
    tests: [ 
      "**/*.mySpecialName.{js,mjs,cjs,ts,mts,cts}", 
      "**/mySpecialFolder/**/*.{js,mjs,cjs,ts,mts,cts}", 
      "**/__mySpecialFolder__/**/*.{js,mjs,cjs,ts,mts,cts}", 
    ], 
  },
};

export default tseslint.config(sheriff(sheriffOptions));
eslint.config.ts
import { , type SheriffSettings,  } from "eslint-config-sheriff";

const : SheriffSettings = {
  : false,
  : false,
  : false,
  : false,
  : false,
  : false,
  : true,
  : false,
  : false,
  : {
    : [ 
      "**/*.mySpecialName.{js,mjs,cjs,ts,mts,cts}", 
      "**/mySpecialFolder/**/*.{js,mjs,cjs,ts,mts,cts}", 
      "**/__mySpecialFolder__/**/*.{js,mjs,cjs,ts,mts,cts}", 
    ], 
  },
};

export default .(());

pathsOverrides.playwrightTests

By default, Sheriff will apply Playwright rules only on specific files.

"js,mjs,cjs,ts,mts,cts"

This setting overrides this default.

It accepts an array of filepaths, dictaced by minimatch syntax.

Example:

eslint.config.mjs
import { sheriff, tseslint } from "eslint-config-sheriff";

const sheriffOptions = {
  react: false,
  next: false,
  astro: false,
  lodash: false,
  remeda: false,
  playwright: false,
  storybook: true,
  jest: false,
  vitest: false,
  pathsOverrides: {
    playwrightTests: [ 
      "**/*.mySpecialName.{js,mjs,cjs,ts,mts,cts}", 
      "**/mySpecialFolder/**/*.{js,mjs,cjs,ts,mts,cts}", 
      "**/__mySpecialFolder__/**/*.{js,mjs,cjs,ts,mts,cts}", 
    ], 
  },
};

export default tseslint.config(sheriff(sheriffOptions));
eslint.config.ts
import { , type SheriffSettings,  } from "eslint-config-sheriff";

const : SheriffSettings = {
  : false,
  : false,
  : false,
  : false,
  : false,
  : false,
  : true,
  : false,
  : false,
  : {
    : [ 
      "**/*.mySpecialName.{js,mjs,cjs,ts,mts,cts}", 
      "**/mySpecialFolder/**/*.{js,mjs,cjs,ts,mts,cts}", 
      "**/__mySpecialFolder__/**/*.{js,mjs,cjs,ts,mts,cts}", 
    ], 
  },
};

export default .(());

Last updated on