npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@lint-suite/eslint-arrow-fits-line

v1.0.2

Published

Require expression-bodied arrow functions to fit on one line

Readme

@lint-suite/eslint-arrow-fits-line

This ESLint plugin keeps TypeScript and JavaScript expression-bodied arrow functions readable by requiring the expression body itself to occupy one physical source line. It reports multi-line non-object expression bodies and fixes them by adding a block with an explicit return; it does not impose a maximum line width.

Install

Requires Node.js 24, ESLint ^10.9.1, and TypeScript >=6.0.3 (required by typescript-eslint's runtime utilities).

pnpm add -D @lint-suite/eslint-arrow-fits-line eslint typescript
// eslint.config.js
import arrowBody from '@lint-suite/eslint-arrow-fits-line';

export default [
  {
    plugins: { arrowBody },
    rules: { 'arrowBody/arrow-fits-line': 'error' }
  }
];

For TypeScript syntax, configure a TypeScript parser such as typescript-eslint separately. This rule does not require type services. Installing this plugin does not configure a parser.

Behavior

There are no options. Severity is chosen by the consumer. The rule checks the physical lines occupied by an expression body, not its rendered width: do not reformat these examples across lines if you want the same result. Parentheses around a reported body are removed by the fix. Object-expression bodies and existing block bodies are exempt.

Examples

Each example is checked by this rule alone, not by an entire ESLint suite.

Valid examples

1. Single-line property read

const idOf = (user) => user.id;

2. Single-line logical expression

const isReady = (value) => value.loaded && value.enabled;

3. Multi-line parameters with a one-line body

const sum = (
  left,
  right
) => left + right;

4. Multi-line object expression

const createUser = () => ({
  active: true
});

5. Block-bodied arrow function

const load = async () => {
  return fetch('/api/user');
};

Invalid examples

1. Logical expression split after an operator

const isAllowed = (user) => user.active &&
  user.verified;

2. Parenthesized expression body on several lines

const isComplete = () => (
  loaded &&
  saved
);

3. Multi-line conditional expression

const label = (ready) => ready
  ? 'Ready'
  : 'Waiting';

4. Multi-line member-call expression

const first = () => items
  .find((item) => item.active);

5. Multi-line call arguments in the body

const message = () => format(
  title,
  count
);

The default export is an ESLint plugin; the named arrowFitsLineRule export is intended for composed rule registries. Versions are released independently from other @lint-suite packages.