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 🙏

© 2024 – Pkg Stats / Ryan Hefner

eslint-plugin-brackets

v0.1.3

Published

ESLint style rules for minimizing diffs with line breaks around brackets

Downloads

1,607

Readme

eslint-plugin-brackets

Build Status codecov npm

Opinionated ESLint style rules dealing with line breaks after opening brackets and before closing brackets of objects, arrays, conditionals, and functions.

Overview

This project is opinionated, meaning there are no options for any of the rules. However, this may change in the future.

The general goal of these rules is to enforce a coding style that minimizes diffs when items are added to lists (be it arrays, objects, parameter lists, etc.)

For example, we want to avoid this:

// Bad

array = ['a',
         'b',
         'c'];

array2 = ["this is a long string" +
          "spanning multiple lines"];

object = { a: 'a',
           b: 'b' };

function foo(bar,
             baz) {
}

call('a',
     'b');

if (test &&
    test2 &&
    test3) {
}

And instead prefer this:

// Good

array = [
  'a',
  'b',
  'c',
];

array2 = [
  "this is a long string" +
  "spanning multiple lines"
];

object = {
  a: 'a',
  b: 'b'
};

function foo(
  bar,
  baz
) {
}

call(
  'a',
  'b'
);

if (
  test &&
  test2 &&
  test3
) {
}

Why?

  • Adding an item to the top of the list or to the bottom of the list will afford smaller diffs.
  • Changing the name of the assigned variable/callee won't require shifting every other item in the list to fix indentation.
  • There's an argument for symmetry somewhere.

In other words, there shouldn't be items on the same line as the opening bracket or closing bracket enclosing the list if the list spans multiple line.

However, there is an exception to this: if the last token of the line containing the opening bracket is another opening bracket, or if the first token of the line containing the closing bracket is another closing bracket, then that is allowed:

// Fine

array = ['a', function() { // ends with an opening bracket
}];

call('a', {
  b: 'c',
});

if (confirm(
  'are you sure?'
)) {
}

The exception to that is it's not allowed for objects:

// Bad

obj = { a: 'b', c: {
  d: 'e',
} };

Preferring this:

// Good

obj = {
  a: 'b',
  c: {
    d: 'e',
  },
};

Note on auto-fixing

All rules can be auto-fixed (running eslint with --fix). The fix will add appropriate line breaks after the opening bracket and before the closing bracket at violation sites. This may produce code with bad indentation. We rely on eslint's indent rule to fix the indentation in a second pass.

Currently (as of ESLint 3.10) the indent rule is broken for params inside call expressions and expressions inside conditionals, but this should be fixed soon.

List of rules

  • brackets/array-bracket-newline
  • brackets/call-parens-newline
  • brackets/conditional-parens-newline
  • brackets/func-parens-newline
  • brackets/object-curly-newline

Take a look at the rule tests to see valid and invalid patterns for each rule.

Installation

You'll first need to install ESLint:

$ npm install eslint

Next, install eslint-plugin-brackets:

$ npm install eslint-plugin-brackets

Note: If you installed ESLint globally (using the -g flag) then you must also install eslint-plugin-brackets globally.

Usage

Add brackets to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:

{
  "plugins": [
    "brackets"
  ]
}

Then configure the rules you want to use under the rules section.

{
  "rules": {
    "brackets/array-bracket-newline": 2,
    "brackets/object-curly-newline": 2,
  }
}

Development

  • Install packages with npm install or yarn.
  • Run npm run test:watch to continually run the tests

License

MIT