Skip to content

Byunk/eslint-plugin-import-oneline

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eslint-plugin-import-oneline

ESLint plugin that enforces one imported binding per import declaration.

This keeps import diffs small, reduces merge conflicts, and makes imports easier to edit by hand, inspired by Rust's M-SINGLE-USE style guideline.

Installation

npm install --save-dev eslint-plugin-import-oneline

The package is ESM-only and supports ESLint 9 and 10 with flat config.

Usage

// eslint.config.js
import importOneline from "eslint-plugin-import-oneline";

export default [
  ...importOneline.configs.recommended
];

Or configure the rule directly:

// eslint.config.js
import importOneline from "eslint-plugin-import-oneline";

export default [
  {
    plugins: {
      "import-oneline": importOneline
    },
    rules: {
      "import-oneline/import-oneline": "error"
    }
  }
];

The recommended config also disables ESLint core no-duplicate-imports. That rule conflicts with this plugin because import-oneline intentionally creates separate import declarations from the same module.

If you use eslint-plugin-import, also disable import/no-duplicates in the same config layer:

// eslint.config.js
import importOneline from "eslint-plugin-import-oneline";

export default [
  ...importOneline.configs.recommended,
  {
    rules: {
      "import/no-duplicates": "off"
    }
  }
];

Rule

import-oneline/import-oneline

Requires each imported binding to use its own import declaration.

Incorrect:

import { RichTextRun, TextBounds } from "./text-utils";

import type { RichTextRun, TextBounds } from "./text-utils";

import React, { useMemo, useState } from "react";

import {
  RichTextRun,
  TextBounds
} from "./text-utils";

Correct:

import { RichTextRun } from "./text-utils";
import { TextBounds } from "./text-utils";

import type { RichTextRun } from "./text-utils";
import type { TextBounds } from "./text-utils";

import React from "react";
import { useMemo } from "react";
import { useState } from "react";

This rule is autofixable. It preserves the module source, aliases, type-only imports, import attributes, quote style, and semicolon style.

About

ESLint plugin that enforces one imported binding per import declaration.

Topics

Resources

License

Stars

Watchers

Forks

Contributors