Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sambacha/prettier-config-solidity
Prettier config optimized to reduce AST churn & conform to solidity spec
https://github.com/sambacha/prettier-config-solidity
config defi ethereum prettier prettier-config solidity
Last synced: about 1 month ago
JSON representation
Prettier config optimized to reduce AST churn & conform to solidity spec
- Host: GitHub
- URL: https://github.com/sambacha/prettier-config-solidity
- Owner: sambacha
- License: apache-2.0
- Created: 2020-11-13T03:09:22.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2022-12-19T16:04:13.000Z (almost 2 years ago)
- Last Synced: 2024-10-29T22:27:37.893Z (about 1 month ago)
- Topics: config, defi, ethereum, prettier, prettier-config, solidity
- Language: Solidity
- Homepage:
- Size: 2.37 MB
- Stars: 30
- Watchers: 3
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-solidity - sambacha/prettier-config-solidity - Prettier config optimized to reduce AST churn & conform to the Solidity spec. (Tools)
- awesome-solidity - sambacha/prettier-config-solidity - Prettier config optimized to reduce AST churn & conform to the Solidity spec. (Tools)
- awesome-solidity - sambacha/prettier-config-solidity - Prettier config optimized to reduce AST churn & conform to the Solidity spec. (Tools)
README
prettier-config-solidity
a conformant prettier configuration for Solidity[![nodejs](https://github.com/sambacha/prettier-config-solidity/actions/workflows/nodejs.yml/badge.svg)](https://github.com/sambacha/prettier-config-solidity/actions/workflows/nodejs.yml)
[![codecov](https://codecov.io/gh/sambacha/prettier-solidity-config/branch/master/graph/badge.svg?token=1k3OYjAl8C)](https://codecov.io/gh/sambacha/prettier-solidity-config)- [Quickstart](#quickstart)
- [Overview](#overview)
- [Motivation](#motivation)
- [Reducing AST Churn](#whitespace)
- [whitespace](#whitespace)
- [arrow-parens](#arrow-parens)
- [one var](#one-var)
- [Install](#install)
- [Prettier](#prettier)
- [with SolHint](#with-solhint)
- [License](#license)## Quickstart
See the [dappspec format](https://github.com/sambacha/dappspec) for additional style guide directives
#### Prettier & Plugin+Config
>**Warning**
>A Major Semver release for prettier is upcoming, ensure you are using compatible versions```bash
npm i -D prettier@^2 prettier-plugin-solidity@latest prettier-config-solidity@latest --save-exact
```#### create `prettier.config.js` file
```javascript
'use strict';
const prettierConfig = require('prettier-config-solidity');
module.exports = prettierConfig;
```#### Editorconfig
```cfg
# Stop the editor from looking for .editorconfig files in the parent directories
# root = true[*]
# Non-configurable Prettier behaviors
charset = utf-8
insert_final_newline = true
# Caveat: Prettier won’t trim trailing whitespace inside template strings, but your editor might.
# trim_trailing_whitespace = true# Configurable Prettier behaviors
# (change these if your Prettier config differs)
end_of_line = lf
indent_style = space
indent_size = 2
max_line_length = 80# Solidity
# https://github.com/sambacha/prettier-config-solidity
[*.sol]
indent_size = 4
indent_style = space# Ignore fixtures and vendored files
[{dist,artifacts,vendor,test,fixtures,tests,cache,__snapshot__,}/**]
charset = unset
end_of_line = unset
indent_size = unset
indent_style = unset
insert_final_newline = unset
trim_trailing_spaces = unset
```## Style Convention
Example:
- Changes `unit` to `unit256`
-### unformatted
```solidity
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
override
payable
ensure(deadline)
returns (uint[] memory amounts)
{
```### formatted
```solidity
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable override ensure(deadline) returns (uint256[] memory amounts) {
require(path[0] == WETH, "UniswapV2Router: INVALID_PATH");
```## 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](https://github.com/prettier-solidity/prettier-plugin-solidity/blob/b504261047d0019c924d53a2b9ab0738b1e05703/src/nodes/FunctionDefinition.js#L99)See more here
[prettier-plugin-solidity/issues/474#issuecomment-823670541](https://github.com/prettier-solidity/prettier-plugin-solidity/issues/474#issuecomment-823670541)### whitespace
[source@airbnb/javascript#whitespace--in-braces](https://github.com/airbnb/javascript#whitespace--in-braces)
- 19.12 Add spaces inside curly braces. eslint: object-curly-spacing
```jsx
// 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](https://github.com/airbnb/javascript#arrows--one-arg-parens)
> Why? Minimizes diff churn when adding or removing arguments.
```jsx
// 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](https://eslint.org/docs/rules/one-var)
```jsx
// 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.
```diff
// 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
```js
// bad
(foo) => bar;(foo) => bar;
// good
(foo) => bar;
(foo) => bar;
(foo) => bar;
```## Install
#### Prettier
```bash
npm i -D prettier prettier-plugin-solidity@latest prettier-config-solidity --save-exact
``````bash
npm i -D prettier prettier-plugin-solidity@latest prettier-config-solidity --save-exact --legacy-peer-deps
```or
```bash
yarn add -D prettier prettier-plugin-solidity@latest prettier-config-solidity --save-exact
```#### with SolHint
```bash
npm install --save-dev solhint solhint-plugin-prettier prettier prettier-plugin-solidity --save-exact
``````json
{
"plugins": ["prettier"],
"rules": {
"prettier/prettier": "error"
}
}
```## License
SPDX-License-Identifier: Apache-2.0