@wirby/codestyle
wir.by codestyle tools shared configs
Install
npm i -D @wirby/codestyle
Development
make release # to push new version & generate changelog
make prerelease # only push new version to npm, for testing
EditorConfig
Create configuration file .editorconfig
at the root of the project. Insert the following content:
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
max_line_length = 100
trim_trailing_whitespace = true
[Makefile]
indent_style = tab
ide
If you use Visual Studio Code, install EditorConfig plugin.
Prettier
config
- Create configuration file
.prettierrc.js
at the root of the project. Insert the following content:
const config = require('@wirby/codestyle/prettier');
module.exports = config;
- Also create file
.prettierignore
, add some ignore patterns:
# ide
.idea/
.vscode/
# npm
node_modules/
package.json
package-lock.json
yarn.lock
# misc
coverage
tsconfig.json
# changelog
*.hbs
CHANGELOG.md
npm
- Add following lines to yout
package.json
:
{
"scripts": {
"format": "prettier --write ."
}
}
- And then use as
npm run format
ide
JetBrains IDE
Install extension (It is already bundled to WebStorm). You can read more information in Prettier site.
Visual Studio Code
Install extension. Detailed documentation can be found at the extension page.
ESLint
- Create configuration file
.eslintrc.js
at the root of the project. Insert the following content:
module.exports = {
root: true,
extends: [
// choose and enable needed configs
'./node_modules/@wirby/codestyle/eslint/prettier', // prettier first!
'./node_modules/@wirby/codestyle/eslint/base',
'./node_modules/@wirby/codestyle/eslint/typescript',
'./node_modules/@wirby/codestyle/eslint/import',
// './node_modules/@wirby/codestyle/eslint/next',
// './node_modules/@wirby/codestyle/eslint/react',
// './node_modules/@wirby/codestyle/eslint/node',
],
};
- Add following lines to your
package.json
:
{
"scripts": {
"lint": "eslint . --ext .ts,.tsx,.js,.jsx,.json --fix --cache --max-warnings=0"
}
}
- Also create file
.eslintignore
, add some ignore patterns:
# ide
.idea/
.vscode/
# npm
**/node_modules/*
package.json
- Add
.eslintcache
to.gitignore
Stylelint
TBD
Conventional Commits
-
We use Conventional Commits convention.
-
You can use @commitizen/cz-cli helper, and then call
git-cz
,git cz
or justgit commit
npm i -g commitizen git-cz
- All commit messages checked with commitlint, feel free to add new
scope
's andtype
's tochangelog.config.js
- add
.cz.json
:
{
"path": "git-cz"
}
- add
changelog.config.js
and insert following:
const getChangelogConfig = require('@wirby/codestyle/changelog.config');
module.exports = getChangelogConfig({
scopes: [
/* additional scopes */
'auth',
],
types: {
/* additional types */
temp: ['🚧', 'temporary changes'],
},
});
- add
commitlint.config.js
and insert following:
const getCommitlintConfig = require('@wirby/codestyle/commitlint.config');
const czConfig = require('./changelog.config');
module.exports = getCommitlintConfig(czConfig);
- add
.release-it.js
:
module.exports = require('@wirby/codestyle/release-it');
- Add following lines to your
package.json
:
{
"scripts": {
"commit": "git-cz",
"changelog": "auto-changelog -p && git add CHANGELOG.md",
"release": "release-it"
}
}
- add badges to
README.md
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
lint-staged & husky
- add
lint-staged.config.js
and insert following:
module.exports = {
'*.@(js|jsx|ts|tsx)': ['prettier --write', 'eslint --fix'],
};
-
add
.husky
folder to.gitignore
-
run
npx husky install
in your project root
You can extend current husky hooks, by adding scripts in you package.json:
- "husky:commit-msg": "commitlint --edit $HUSKY_GIT_PARAMS"
- "husky:pre-commit": "lint-staged"
- "husky:pre-push": "npm run type-check"
- "husky:prepare-commit-msg": "exec < /dev/tty && git cz --hook || true"
Note: If node_modules are installed and you decide to delete the .husky folder then you need to delete all node_modules and install them again.