prettier-config-solidity

    1.6.2 • Public • Published


    prettier-config-solidity

    a conformant prettier configuration for Solidity

    nodejs codecov

    Quickstart

    • create prettier.config.js file
    'use strict';
    const prettierConfig = require('prettier-config-solidity');
    module.exports = prettierConfig;
    • install
    npm i -D prettier prettier-plugin-solidity@latest prettier-config-solidity  --save-exact

    Overview

    Prettier configuration for Solidity

    Motivation

    This configuration is optimized to reduce diff churn and improve AST results.

    The following rules are employed, with specific reasonings to their choice (source: airbnb style guide):

    printWidth

    The behavior of printWidth is located here: prettier-solidity/prettier-plugin-solidity/blob/b504261047d0019c924d53a2b9ab0738b1e05703/src/nodes/FunctionDefinition.js#L99

    See more here prettier-plugin-solidity/issues/474#issuecomment-823670541

    whitespace

    source@airbnb/javascript#whitespace--in-braces

    • 19.12 Add spaces inside curly braces. eslint: object-curly-spacing
    // bad
    const foo = { clark: 'kent' };
    
    // good
    const foo = { clark: 'kent' };

    arrow-parens

    • 8.4 Always include parentheses around arguments for clarity and consistency. eslint: arrow-parens

    source@airbnb/javascript#arrows--one-arg-parens

    Why? Minimizes diff churn when adding or removing arguments.

    // bad
    [1, 2, 3].map((x) => x * x);
    
    // good
    [1, 2, 3].map((x) => x * x);
    
    // bad
    [1, 2, 3].map(
      (number) =>
        `A long string with the ${number}. It’s so long that we don’t want it to take up space on the .map line!`,
    );
    
    // good
    [1, 2, 3].map(
      (number) =>
        `A long string with the ${number}. It’s so long that we don’t want it to take up space on the .map line!`,
    );
    
    // bad
    [1, 2, 3].map((x) => {
      const y = x + 1;
      return x * y;
    });
    
    // good
    [1, 2, 3].map((x) => {
      const y = x + 1;
      return x * y;
    });

    one var

    • 13.2 Use one const or let declaration per variable or assignment. eslint: one-var

    Why? It’s easier to add new variable declarations this way, and you never have to worry about swapping out a ; for a , or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.

    ref:eslint/rules/one-var
    // bad
    const items = getItems(),
      goSportsTeam = true,
      dragonball = 'z';
    
    // bad
    // (compare to above, and try to spot the mistake)
    const items = getItems(),
      goSportsTeam = true;
    dragonball = 'z';
    
    // good
    const items = getItems();
    const goSportsTeam = true;
    const dragonball = 'z';

    20.2 Additional trailing comma: Yup. eslint: comma-dangle

    Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don’t have to worry about the trailing comma problem in legacy browsers.
    
    // bad - git diff without trailing comma
    const hero = {
         firstName: 'Florence',
    -    lastName: 'Nightingale'
    +    lastName: 'Nightingale',
    +    inventorOf: ['coxcomb chart', 'modern nursing']
    };
    
    // good - git diff with trailing comma
    const hero = {
         firstName: 'Florence',
         lastName: 'Nightingale',
    +    inventorOf: ['coxcomb chart', 'modern nursing'],
    };

    8.6 Enforce the location of arrow function bodies with implicit returns. eslint: implicit-arrow-linebreak

    // bad
    (foo) => bar;
    
    (foo) => bar;
    
    // good
    (foo) => bar;
    (foo) => bar;
    (foo) => bar;

    Install

    Prettier

    npm i -D prettier prettier-plugin-solidity@latest prettier-config-solidity  --save-exact
    npm i -D prettier prettier-plugin-solidity@latest prettier-config-solidity  --save-exact --legacy-peer-deps

    or

    yarn add -D prettier prettier-plugin-solidity@latest prettier-config-solidity  --save-exact

    with SolHint

    npm install --save-dev solhint solhint-plugin-prettier prettier prettier-plugin-solidity --save-exact
    {
      "plugins": ["prettier"],
      "rules": {
        "prettier/prettier": "error"
      }
    }

    License

    SPDX-License-Identifier: Apache-2.0

    Install

    npm i prettier-config-solidity

    DownloadsWeekly Downloads

    11

    Version

    1.6.2

    License

    Apache-2.0

    Unpacked Size

    24 kB

    Total Files

    13

    Last publish

    Collaborators

    • sambacha