@preply/ds-eslint-plugin-storybook-tags
v14.2.0
Published
ESLint plugin for Storybook tag conventions
Downloads
143
Maintainers
Keywords
Readme
@preply/ds-eslint-plugin-storybook-tags
Generic ESLint rule — require a companion tag when a given tag is present.
require-companion-tag
If a tags: [...] array literal contains the string ifTag and does not also contain requireTag, the rule reports and autofixes by inserting requireTag right after ifTag.
Options:
{
ifTag?: string; // default: '!autodocs'
requireTag?: string; // default: '!manifest'
}It only inspects tags-keyed array literals of string literals — spread elements or identifiers in the array are ignored rather than causing false positives or crashes. The fix is idempotent: an array that already contains both tags is left untouched.
Why this exists
Storybook's component manifest (used by AI/MCP tooling) includes every story by default; a story or component is excluded from it only if its source tags contain !manifest.
Stories tagged !autodocs are test/implementation-only — hidden from the docs site — and generally shouldn't appear in the component manifest either. But the two tags are independent, and authors routinely add !autodocs while forgetting !manifest.
This rule, configured with { ifTag: '!autodocs', requireTag: '!manifest' } and scoped to **/*.stories.{ts,tsx} in eslint.config.ts, keeps the two tags in sync and autofixes the omission — so the manifest stays clean without relying on authors to remember.
The rule itself is generic and reusable for any "tag A implies tag B" pairing via its options.
Usage
// eslint.config.ts
import storybookTags from './support/eslint-plugin-storybook-tags/index.ts';
export default ts.config(
// ...
{
files: ['**/*.stories.{ts,tsx}'],
plugins: {
'storybook-tags': storybookTags,
},
rules: {
'storybook-tags/require-companion-tag': 'error',
},
},
);