Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kuceb/eslint-plugin-json-format
Format and auto-fix your JSON using ESLint
https://github.com/kuceb/eslint-plugin-json-format
Last synced: 14 days ago
JSON representation
Format and auto-fix your JSON using ESLint
- Host: GitHub
- URL: https://github.com/kuceb/eslint-plugin-json-format
- Owner: kuceb
- License: mit
- Created: 2019-08-02T16:07:39.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-04T06:11:07.000Z (almost 2 years ago)
- Last Synced: 2024-05-19T05:04:25.397Z (6 months ago)
- Language: JavaScript
- Size: 2.55 MB
- Stars: 41
- Watchers: 3
- Forks: 3
- Open Issues: 38
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
## Features
- lint, format, and auto-fix `json` files (files ending with `.json` or `rc`)
- auto-sort `package.json` files (default `true`, can be disabled and sorting configured)
- ignores `json-with-comments` files (default `["**/.tsconfig.json", ".vscode/**"]`)
- ignores certain files by default (default `["**/package-lock.json"]`)## Installation
You'll first need to install [ESLint](http://eslint.org):
```sh
npm install eslint --save-dev
```Next, install `eslint-plugin-json-format`:
```sh
npm install eslint-plugin-json-format --save-dev
```## Usage
Add `json-format` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix:
```json
{
"plugins": [
"json-format"
]
}
```Optional: setup [editor integration to format-on-save](#editor-configuration)
**cli example**:
```sh
# lint entire poject for js and various json files
eslint --ext .js,.json,.eslintrc,.babelrc --fix .
```> Note: **In order to lint hidden files** (e.g. `.eslintrc.json`), you'll need to modify/create a `.eslintignore` in your project root with these contents:
`.eslintignore`:
```gitignore
# eslint ignores hidden files by default
!.*.json
**/node_modules
```## Settings
### default settings (`.eslintrc`):
```json
"settings": {
"json/sort-package-json": "standard",
"json/ignore-files": ["**/package-lock.json"],
"json/json-with-comments-files": ["**/tsconfig.json", ".vscode/**"],
}
```
> Note: glob patterns use [`minimatch`](https://github.com/isaacs/minimatch/) against path names relative to the project root (cwd)### `sort-package-json` order
You can configure the exact sort order of your `package.json` files (or turn it off entirely with `false`)#### Available sorting options
**false**: disable `package.json` sorting.
**"standard"**: default from [`sort-package-json`](https://github.com/keithamus/sort-package-json). This is a sane, standard order.
**"pro"**: places scripts and dependencies at the top, reducing need to scroll down to view them. Pros only.
**["your", "custom", "order", "here"]**: provide an array to manually set the sort order.
### Settings examples
to turn off sorting `package.json` files for example, in your `.eslintrc`:
```json
{
"plugins": [
"json-format"
],
"settings": {
"json/sort-package-json": false,
}
}
```to format `tsconfig.json` (this will strip comments!), in your `.eslintrc`:
```json
{
"plugins": [
"json-format"
],
"settings": {
"json/json-with-comments-files": [],
}
}
```change the sort order of `package.json`:
```json
{
"plugins": [
"json-format"
],
"settings": {
"json/sort-package-json": ["license", "dependencies"],
}
}
```## Editor Configuration
**VSCode**:
In order for editor integration via the [`vscode-eslint`](https://github.com/microsoft/vscode-eslint) extension, you'll need to enable linting `json` files.
`.vscode/settings.json`:
```jsonc
{
"eslint.enable": true,
"editor.formatOnSave": true,
// enable for eslint-plugin json-format
"eslint.validate": ["json"],
}```
> to auto-format* `json-with-comments-files`, also add `"eslint.validate": ["jsonc"]` (* will strip comments)
## Related Tools
- [husky](https://github.com/typicode/husky) + [lint-staged](https://github.com/okonet/lint-staged) _set up lint and auto-fix on commit_
```sh
npm i -D husky lint-staged
```in your `package.json`:
```json
{
...
"lint-staged": {
"*.{js,jsx,ts,tsx,json}": [
"eslint --fix"
]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
...
}
```## License
[MIT](/LICENSE.md)## Credits
large amount of code borrowed from [`eslint-plugin-html`](https://github.com/BenoitZugmeyer/eslint-plugin-html)