Skip to content

Linter configs and tools for Node, React and React Native.

Notifications You must be signed in to change notification settings

blockmatic-icebox/dev-configs

Repository files navigation

Blockmatic Code Style Configs

A monorepo of base configs to speed up development @ Blockmatic.

This package contains everything you need for building, linting, testing, formatting, and releasing libraries for React Native, Node and the browser..

yarn add -D @blockmatic/eslint-config @blockmatic/prettier-config typescript husky eslint prettier lint-staged

It is intended to be used within a project as a series of npm scripts.

ReactJS Config

{
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "lint": "eslint --ignore-path .gitignore \"**/*.+(js|ts|tsx)\"",
    "format": "prettier --ignore-path .gitignore --write \"**/*.+(js|json|ts|tsx)\""
  },
  "lint-staged": {
    "*.{ts,tsx,js}": [
      "prettier --write",
      "eslint --fix"
    ]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
}

.prettierrc.js

module.exports = require('@blockmatic/prettier-config')

.eslintrc.js

module.exports = {
  extends: [
    '@blockmatic',
  ]
}

NodeJS Config

Also available as template https://github.com/blockmatic/nodejs-template/

"scripts": {
    "dev": "ts-node-dev --no-deps --respawn src/index",
    "build": "tsc",
    "lint": "eslint --ignore-path .gitignore \"**/*.+(js|ts|tsx)\"",
    "format": "prettier --ignore-path .gitignore --write \"**/*.+(js|json|ts|tsx)\""
  },
  "lint-staged": {
    "*.{ts,tsx,js}": [
      "prettier --write",
      "eslint --fix"
    ]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  }

.prettierrc.js

module.exports = require('@blockmatic/prettier-config')

.eslintrc.js

module.exports = {
  extends: [
    '@blockmatic',
  ]
}

Suggested VSCode Settings

{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "eslint.alwaysShowStatus": true
}

```### Blockmatic shared configurations

They can be installed separately and used by anyone should they opt to follow our standards.

- [@blockmatic/eslint-config](./packages/eslint-config)
- [@blockmatic/eslint-config-base](./packages/eslint-config-base)
- [@blockmatic/eslint-config-react](./packages/eslint-config-react)
- [@blockmatic/eslint-config-typescript](./packages/eslint-config-typescript)
- [@blockmatic/prettier-config](./packages/prettier-config)

## Methodology

We have a few guiding principles for this project.

1. Style rules should be auto-fixable and if you can, errors should be linted ahead of runtime.
2. Avoid enforcing code style in static analysis; search for bugs with static analysis, and let auto-formatting deal with code style.
3. Push "fast" checks as far left as you can. Optimize for code editors/IDEs fixing issues and enforcing things; write Git hooks that catch things as a failsafe; and use static analysis in CI to prevent bad things from getting into master.

## Related projects we use

- [TypeScript]: a superset of JavaScript which we think helps make code readable and less bug-prone.
- [ESLint]: used for static code analysis with some auto-fixing.
- [Prettier]: use to format code pre-commit and automatically in your editor.
- [Jest]: our preferred JavaScript test framework.
- [husky]: allows us to hook into git events in a convenient way.
- [lint-staged]: allows us to write pre-commit hooks which target specific paths and run a series of commands.

## Contributing

See https://developers.blockmatic.io

### Running Tests locally

```bash
$ yarn lerna run bootstrap

Releasing

For now, we will release this repo manually with fixed versions. To do that, use:

lerna publish --conventional-commits --registry=https://registry.npmjs.com

Credits

Blockmatic

Blockmatic is building a robust ecosystem of people and tools for the development of blockchain applications.

blockmatic.io

Blockmatic Twitter Blockmatic Facebook Blockmatic Github