Prefer @import tags to inline import() statements.
Creates @import tags if an already existing matching @typedef or
@import is not found.
A single options object has the following properties.
Whether or not to enable the fixer to add @import tags.
Whether to allow import() statements within @typedef
What kind of @import to generate when no matching @typedef or @import is found
| Context | everywhere |
| Tags | augments, class, constant, enum, implements, member, module, namespace, param, property, returns, throws, type, typedef, yields |
| Aliases | constructor, const, extends, var, arg, argument, prop, return, exception, yield |
| Closure-only | package, private, protected, public, static |
| Recommended | false |
| Settings | mode |
| Options | enableFixer, exemptTypedefs, outputType |
The following patterns are considered problems:
/**
* @type {import('eslint').Rule.Node}
*/
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').Rule.Node}
*/
// Settings: {"jsdoc":{"mode":"permissive"}}
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').Rule.Node}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}]
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').Rule.Node}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"named-import"}]
// Message: Inline `import()` found; prefer `@import`
// Copyright 2026
/**
* @type {import('foo')}
*/
let x;
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').Rule.Node}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"namespaced-import"}]
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').Rule['Node']}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"named-import"}]
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').Rule['Node']}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"namespaced-import"}]
// Message: Inline `import()` found; prefer `@import`
/** @typedef {import('eslint2').Rule.Node} RuleNode */
/**
* @type {import('eslint').Rule.Node}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":false}]
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint')}
*/
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint')}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}]
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').default}
*/
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').default}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}]
// Message: Inline `import()` found; prefer `@import`
/** @import * as eslint2 from 'eslint'; */
/**
* @type {import('eslint')}
*/
// Message: Inline `import()` found; prefer `@import`
/** @import eslint2 from 'eslint'; */
/**
* @type {import('eslint').default}
*/
// Message: Inline `import()` found; prefer `@import`
/** @import eslint2 from 'eslint'; */
/**
* @type {import('eslint').default}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}]
// Message: Inline `import()` found; prefer `@import`
/** @import {Rule} from 'eslint' */
/**
* @type {import('eslint').Rule.Node}
*/
// Message: Inline `import()` found; prefer `@import`
/** @import {Rule} from 'eslint' */
/**
* @type {import('eslint').Rule.Node}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}]
// Message: Inline `import()` found; prefer `@import`
/** @import * as eslint2 from 'eslint' */
/**
* @type {import('eslint').Rule.Node}
*/
// Message: Inline `import()` found; prefer `@import`
/** @import * as eslint2 from 'eslint' */
/**
* @type {import('eslint').Rule.Node}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}]
// Message: Inline `import()` found; prefer `@import`
/** @import LinterDef2, * as LinterDef3 from "eslint" */
/**
* @type {import('eslint').Rule.Node}
*/
// Message: Inline `import()` found; prefer `@import`
/**
* @import LinterDef2, * as LinterDef3 from "eslint"
*/
/**
* @type {import('eslint').Rule.Node}
*/
// Message: Inline `import()` found; prefer `@import`
/**
* @import LinterDef2,
* * as LinterDef3 from "eslint"
*/
/**
* @type {import('eslint').Rule.Node}
*/
// Message: Inline `import()` found; prefer `@import`
/**
* @import {
* ESLint
* } from "eslint"
*/
/**
* @type {import('eslint').ESLint.Node}
*/
// Message: Inline `import()` found; prefer `@import`
/** @typedef {import('eslint').Rule} Rule */
/**
* @type {import('eslint').Rule.Node}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; using `@typedef`
/** @typedef {import('eslint').Rule} Rule */
/**
* @type {import('eslint').Rule.Node.Abc.Def}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; using `@typedef`
/** @typedef {import('eslint').Rule} Rule */
/**
* @type {import('eslint').Rule.Node.Abc['Def']}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; using `@typedef`
/** @typedef {import('eslint').Rule.Node} RuleNode */
/**
* @type {import('eslint').Rule.Node}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; using `@typedef`
/**
* @type {number|import('eslint').Rule.Node}
*/
// Message: Inline `import()` found; prefer `@import`
/** @typedef {import('eslint').Rule.Node} Rule */
/**
* @type {import('eslint').Rule}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; prefer `@import`
/** @typedef {import('eslint').Rule.Node} Rule */
/**
* @type {import('eslint').Rule.Abc}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; prefer `@import`
/** @typedef {import('eslint').Rule} Rule */
/**
* @type {import('eslint').Rule.Node.Abc.Rule}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; using `@typedef`
/** @typedef {import('eslint').Rule} Rule */
/**
* @type {import('eslint').Rule.Node.Abc.Rule}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false,"exemptTypedefs":true}]
// Message: Inline `import()` found; using `@typedef`
/** @typedef {import('eslint').Rule.Rule} Rule */
/**
* @type {import('eslint').Abc.Rule}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; prefer `@import`
/**
* @type {import('eslint').anchors[keyof DataMap.anchors]}
*/
// Message: Inline `import()` found; prefer `@import`
/** @typedef {import('eslint').Rule[keyof import('eslint').Rule]} Rule */
/**
* @type {import('eslint').Abc.Rule}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; prefer `@import`
/** @typedef {import('eslint').Rule[keyof import('eslint').Rule]} Rule */
/**
* @type {import('eslint').Rule[keyof import('eslint').Rule]}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; using `@typedef`
/** @typedef {import('eslint').Rule} Rule */
/**
* @type {import('eslint').Rule[keyof import('eslint').Rule]}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
// Message: Inline `import()` found; using `@typedef`
/** @type {import('foo')} */
let foo;
// Message: Inline `import()` found; prefer `@import`
/** @type {import('foo')} */
let foo;
// Message: Inline `import()` found; prefer `@import`
/** @type {import('foo').bar} */
let foo;
// Message: Inline `import()` found; prefer `@import`
/** @type {import('foo').bar} */
let foo;
// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"named-import"}]
// Message: Inline `import()` found; prefer `@import`
/** @type {import('foo').default} */
let foo;
// Message: Inline `import()` found; prefer `@import`
/** @type { import('@typescript-eslint/utils').TSESLint.FlatConfig.Config['rules'] } */
// Message: Inline `import()` found; prefer `@import`
/** @type { import('node:zlib').createGzip } */
// Message: Inline `import()` found; prefer `@import`
/** @type { import('./lib/someFile.js').someImport } */
// Message: Inline `import()` found; prefer `@import`The following patterns are not considered problems:
/** @typedef {import('eslint').Rule.Node} RuleNode */
/**
* @type {RuleNode}
*/
// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}]
/** @import {Rule} from 'eslint' */
/**
* @type {Rule.Node}
*/
/** @import * as eslint from 'eslint' */
/**
* @type {eslint.Rule.Node}
*/
/**
* @type {Rule['Node']}
*/
/**
* Silently ignores error
* @type {Rule['Node'}
*/