Skip to content

Commit 8518140

Browse files
committed
chore: document package.json integration
Fixes #39.
1 parent c14def8 commit 8518140

File tree

4 files changed

+166
-1
lines changed

4 files changed

+166
-1
lines changed

README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,57 @@ Copying these rules into your `rules` object will achieve the same effect as usi
7575
> Our type-aware rules depend on TypeScript ESLint's parser, which means they
7676
> will not work with oxlint at this time.
7777
78+
## Linting `package.json`
79+
80+
Some rules (e.g. `ban-dependencies`) can be used against your `package.json`.
81+
82+
You can achieve this by using `@eslint/json` or `jsonc-eslint-parser`.
83+
84+
For example, with `@eslint/json` and `eslint.config.js`:
85+
86+
```ts
87+
import e18e from '@e18e/eslint-plugin';
88+
import json from '@eslint/json';
89+
import {defineConfig} from 'eslint/config';
90+
91+
export default defineConfig([
92+
{
93+
files: ['package.json'],
94+
language: 'json/json',
95+
plugins: {
96+
e18e,
97+
json
98+
},
99+
extends: ['e18e/recommended'],
100+
}
101+
]);
102+
```
103+
104+
Or with `jsonc-eslint-parser` and `eslint.config.js`:
105+
106+
```ts
107+
import e18e from '@e18e/eslint-plugin';
108+
import jsonParser from 'jsonc-eslint-parser';
109+
import {defineConfig} from 'eslint/config';
110+
111+
export default defineConfig([
112+
{
113+
files: ['package.json'],
114+
languageOptions: {
115+
parser: jsonParser
116+
},
117+
plugins: {
118+
e18e
119+
},
120+
extends: ['e18e/recommended'],
121+
}
122+
]);
123+
```
124+
125+
Read more at the
126+
[`@eslint/json` docs](https://github.com/eslint/json) and
127+
[`jsonc-eslint-parser` docs](https://github.com/ota-meshi/jsonc-eslint-parser).
128+
78129
## Rules
79130

80131
**Legend:**

package-lock.json

Lines changed: 78 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@
3636
},
3737
"devDependencies": {
3838
"@eslint/js": "^9.39.2",
39+
"@eslint/json": "^0.14.0",
3940
"@types/node": "^25.0.6",
4041
"@typescript-eslint/rule-tester": "^8.52.0",
4142
"@typescript-eslint/typescript-estree": "^8.52.0",
4243
"@vitest/coverage-v8": "^4.0.16",
4344
"eslint": "^9.39.2",
4445
"eslint-plugin-eslint-plugin": "^7.3.0",
46+
"jsonc-eslint-parser": "^2.4.2",
4547
"oxlint": "^1.38.0",
4648
"prettier": "^3.7.4",
4749
"typescript": "^5.9.3",

src/rules/ban-dependencies.test.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import {RuleTester} from 'eslint';
22
import {rules} from 'eslint-plugin-depend';
3+
import json from '@eslint/json';
4+
import jsoncParser from 'jsonc-eslint-parser';
35

46
const ruleTester = new RuleTester({
57
languageOptions: {
@@ -8,6 +10,11 @@ const ruleTester = new RuleTester({
810
}
911
});
1012

13+
const jsonRuleTester = new RuleTester({
14+
language: 'json/json',
15+
plugins: {json}
16+
});
17+
1118
// TODO (jg): one day the ban-dependencies rule will live in this repo, so
1219
// we should move all the tests from the depend repo to here.
1320

@@ -22,7 +29,12 @@ ruleTester.run('ban-dependencies', banDependencies, {
2229

2330
// Built-in modules are allowed
2431
'import path from "path"',
25-
'import {readFile} from "fs/promises"'
32+
'import {readFile} from "fs/promises"',
33+
{
34+
code: `{"dependencies": {"typescript": "^5.3.2"}}`,
35+
filename: 'package.json',
36+
languageOptions: {parser: jsoncParser}
37+
}
2638
],
2739
invalid: [
2840
{
@@ -36,6 +48,28 @@ ruleTester.run('ban-dependencies', banDependencies, {
3648
{
3749
code: 'import _ from "lodash"',
3850
errors: [{messageId: 'documentedReplacement'}]
51+
},
52+
{
53+
code: `{"dependencies": {"moment": "^1.0.0"}}`,
54+
filename: 'package.json',
55+
languageOptions: {parser: jsoncParser},
56+
errors: [{messageId: 'documentedReplacement'}]
57+
}
58+
]
59+
});
60+
61+
jsonRuleTester.run('ban-dependencies (JSON)', banDependencies, {
62+
valid: [
63+
{
64+
filename: 'package.json',
65+
code: `{"dependencies": {"typescript": "^5.3.2"}}`
66+
}
67+
],
68+
invalid: [
69+
{
70+
filename: 'package.json',
71+
code: `{"dependencies": {"moment": "^1.0.0"}}`,
72+
errors: [{messageId: 'documentedReplacement'}]
3973
}
4074
]
4175
});

0 commit comments

Comments
 (0)