Skip to content

Commit 5c11866

Browse files
authoredNov 30, 2024··
feat: changed to prevent crash when used with language plugins (#385)
* feat: changed to prevent crash when used with language plugins * Create yellow-suits-nail.md * fix
1 parent 7eb9122 commit 5c11866

36 files changed

+90
-42
lines changed
 

‎.changeset/yellow-suits-nail.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-yml": minor
3+
---
4+
5+
feat: changed to prevent crash when used with language plugins

‎package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
"@eslint-community/eslint-plugin-eslint-comments": "^4.3.0",
7373
"@eslint/eslintrc": "^3.1.0",
7474
"@eslint/js": "^9.5.0",
75+
"@eslint/json": "^0.8.0",
7576
"@ota-meshi/eslint-plugin": "^0.17.3",
7677
"@ota-meshi/site-kit-eslint-editor-vue": "^0.2.0",
7778
"@types/debug": "^4.1.5",
@@ -90,7 +91,7 @@
9091
"env-cmd": "^10.1.0",
9192
"esbuild": "^0.24.0",
9293
"esbuild-register": "^3.2.0",
93-
"eslint": "^9.5.0",
94+
"eslint": "^9.16.0",
9495
"eslint-config-prettier": "^9.0.0",
9596
"eslint-plugin-eslint-plugin": "^6.0.0",
9697
"eslint-plugin-eslint-rule-tester": "^0.6.0",

‎src/rules/block-mapping-colon-indicator-newline.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default createRule("block-mapping-colon-indicator-newline", {
3030
},
3131
create(context) {
3232
const sourceCode = getSourceCode(context);
33-
if (!sourceCode.parserServices.isYAML) {
33+
if (!sourceCode.parserServices?.isYAML) {
3434
return {};
3535
}
3636
const option: "never" | "always" = context.options[0] || "never";

‎src/rules/block-mapping-question-indicator-newline.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export default createRule("block-mapping-question-indicator-newline", {
2626
},
2727
create(context) {
2828
const sourceCode = getSourceCode(context);
29-
if (!sourceCode.parserServices.isYAML) {
29+
if (!sourceCode.parserServices?.isYAML) {
3030
return {};
3131
}
3232
const option: "never" | "always" = context.options[0] || "never";

‎src/rules/block-mapping.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export default createRule("block-mapping", {
101101
},
102102
create(context) {
103103
const sourceCode = getSourceCode(context);
104-
if (!sourceCode.parserServices.isYAML) {
104+
if (!sourceCode.parserServices?.isYAML) {
105105
return {};
106106
}
107107
const options = parseOptions(context.options[0]);

‎src/rules/block-sequence-hyphen-indicator-newline.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default createRule("block-sequence-hyphen-indicator-newline", {
3333
},
3434
create(context) {
3535
const sourceCode = getSourceCode(context);
36-
if (!sourceCode.parserServices.isYAML) {
36+
if (!sourceCode.parserServices?.isYAML) {
3737
return {};
3838
}
3939
const style: "never" | "always" = context.options[0] || "never";

‎src/rules/block-sequence.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export default createRule("block-sequence", {
111111
},
112112
create(context) {
113113
const sourceCode = getSourceCode(context);
114-
if (!sourceCode.parserServices.isYAML) {
114+
if (!sourceCode.parserServices?.isYAML) {
115115
return {};
116116
}
117117
const options = parseOptions(context.options[0]);

‎src/rules/file-extension.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default createRule("file-extension", {
3131
},
3232
create(context) {
3333
const sourceCode = getSourceCode(context);
34-
if (!sourceCode.parserServices.isYAML) {
34+
if (!sourceCode.parserServices?.isYAML) {
3535
return {};
3636
}
3737
const expected: string = context.options[0]?.extension || "yaml";

‎src/rules/flow-mapping-curly-newline.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export default createRule("flow-mapping-curly-newline", {
128128
},
129129
create(context) {
130130
const sourceCode = getSourceCode(context);
131-
if (!sourceCode.parserServices.isYAML) {
131+
if (!sourceCode.parserServices?.isYAML) {
132132
return {};
133133
}
134134
const options = normalizeOptionValue(context.options[0]);

‎src/rules/flow-mapping-curly-spacing.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export default createRule("flow-mapping-curly-spacing", {
5151
},
5252
create(context) {
5353
const sourceCode = getSourceCode(context);
54-
if (!sourceCode.parserServices.isYAML) {
54+
if (!sourceCode.parserServices?.isYAML) {
5555
return {};
5656
}
5757

‎src/rules/flow-sequence-bracket-newline.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export default createRule("flow-sequence-bracket-newline", {
6161
},
6262
create(context) {
6363
const sourceCode = getSourceCode(context);
64-
if (!sourceCode.parserServices.isYAML) {
64+
if (!sourceCode.parserServices?.isYAML) {
6565
return {};
6666
}
6767

‎src/rules/flow-sequence-bracket-spacing.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export default createRule("flow-sequence-bracket-spacing", {
4949
},
5050
create(context) {
5151
const sourceCode = getSourceCode(context);
52-
if (!sourceCode.parserServices.isYAML) {
52+
if (!sourceCode.parserServices?.isYAML) {
5353
return {};
5454
}
5555

‎src/rules/indent.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ export default createRule("indent", {
116116
},
117117
create(context) {
118118
const sourceCode = getSourceCode(context);
119-
if (!sourceCode.parserServices.isYAML) {
119+
if (!sourceCode.parserServices?.isYAML) {
120120
return {};
121121
}
122122

‎src/rules/key-name-casing.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export default createRule("key-name-casing", {
6464
},
6565
create(context) {
6666
const sourceCode = getSourceCode(context);
67-
if (!sourceCode.parserServices.isYAML) {
67+
if (!sourceCode.parserServices?.isYAML) {
6868
return {};
6969
}
7070
const option: Option = { ...context.options[0] };

‎src/rules/key-spacing.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ export default createRule("key-spacing", {
271271
*/
272272
function create(context: RuleContext): RuleListener {
273273
const sourceCode = getSourceCode(context);
274-
if (!sourceCode.parserServices.isYAML) {
274+
if (!sourceCode.parserServices?.isYAML) {
275275
return {};
276276
}
277277
/**

‎src/rules/no-empty-document.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default createRule("no-empty-document", {
1818
},
1919
create(context) {
2020
const sourceCode = getSourceCode(context);
21-
if (!sourceCode.parserServices.isYAML) {
21+
if (!sourceCode.parserServices?.isYAML) {
2222
return {};
2323
}
2424

‎src/rules/no-empty-key.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default createRule("no-empty-key", {
1818
},
1919
create(context) {
2020
const sourceCode = getSourceCode(context);
21-
if (!sourceCode.parserServices.isYAML) {
21+
if (!sourceCode.parserServices?.isYAML) {
2222
return {};
2323
}
2424

‎src/rules/no-empty-mapping-value.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default createRule("no-empty-mapping-value", {
1818
},
1919
create(context) {
2020
const sourceCode = getSourceCode(context);
21-
if (!sourceCode.parserServices.isYAML) {
21+
if (!sourceCode.parserServices?.isYAML) {
2222
return {};
2323
}
2424

‎src/rules/no-empty-sequence-entry.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default createRule("no-empty-sequence-entry", {
1919
},
2020
create(context) {
2121
const sourceCode = getSourceCode(context);
22-
if (!sourceCode.parserServices.isYAML) {
22+
if (!sourceCode.parserServices?.isYAML) {
2323
return {};
2424
}
2525

‎src/rules/no-irregular-whitespace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export default createRule("no-irregular-whitespace", {
4444
},
4545
create(context) {
4646
const sourceCode = getSourceCode(context);
47-
if (!sourceCode.parserServices.isYAML) {
47+
if (!sourceCode.parserServices?.isYAML) {
4848
return {};
4949
}
5050
// Module store of error indexes that we have found

‎src/rules/no-multiple-empty-lines.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default createRule("no-multiple-empty-lines", {
4545
},
4646
create(context) {
4747
const sourceCode = getSourceCode(context);
48-
if (!sourceCode.parserServices.isYAML) {
48+
if (!sourceCode.parserServices?.isYAML) {
4949
return {};
5050
}
5151

‎src/rules/no-tab-indent.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default createRule("no-tab-indent", {
1818
},
1919
create(context: RuleContext) {
2020
const sourceCode = getSourceCode(context);
21-
if (!sourceCode.parserServices.isYAML) {
21+
if (!sourceCode.parserServices?.isYAML) {
2222
return {};
2323
}
2424
return {

‎src/rules/no-trailing-zeros.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default createRule("no-trailing-zeros", {
1919
},
2020
create(context) {
2121
const sourceCode = getSourceCode(context);
22-
if (!sourceCode.parserServices.isYAML) {
22+
if (!sourceCode.parserServices?.isYAML) {
2323
return {};
2424
}
2525

‎src/rules/plain-scalar.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ export default createRule("plain-scalar", {
8787
},
8888
create(context) {
8989
const sourceCode = getSourceCode(context);
90-
if (!sourceCode.parserServices.isYAML) {
90+
if (!sourceCode.parserServices?.isYAML) {
9191
return {};
9292
}
9393
type Option = {

‎src/rules/quotes.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default createRule("quotes", {
3131
},
3232
create(context) {
3333
const sourceCode = getSourceCode(context);
34-
if (!sourceCode.parserServices.isYAML) {
34+
if (!sourceCode.parserServices?.isYAML) {
3535
return {};
3636
}
3737
const objectOption = context.options[0] || {};

‎src/rules/require-string-key.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default createRule("require-string-key", {
1818
},
1919
create(context) {
2020
const sourceCode = getSourceCode(context);
21-
if (!sourceCode.parserServices.isYAML) {
21+
if (!sourceCode.parserServices?.isYAML) {
2222
return {};
2323
}
2424

‎src/rules/sort-keys.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ export default createRule("sort-keys", {
460460
},
461461
create(context) {
462462
const sourceCode = getSourceCode(context);
463-
if (!sourceCode.parserServices.isYAML) {
463+
if (!sourceCode.parserServices?.isYAML) {
464464
return {};
465465
}
466466

‎src/rules/sort-sequence-values.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ export default createRule("sort-sequence-values", {
440440
},
441441
create(context) {
442442
const sourceCode = getSourceCode(context);
443-
if (!sourceCode.parserServices.isYAML) {
443+
if (!sourceCode.parserServices?.isYAML) {
444444
return {};
445445
}
446446
// Parse options.

‎src/rules/spaced-comment.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ export default createRule("spaced-comment", {
159159
},
160160
create(context) {
161161
const sourceCode = getSourceCode(context);
162-
if (!sourceCode.parserServices.isYAML) {
162+
if (!sourceCode.parserServices?.isYAML) {
163163
return {};
164164
}
165165

‎src/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ export interface SourceCode {
103103
ast: AST.YAMLProgram;
104104
lines: string[];
105105
hasBOM: boolean;
106-
parserServices: {
106+
parserServices?: {
107107
isYAML?: true;
108108
parseError?: any;
109109
};

‎src/utils/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export function createRule(
2727
create(context: Rule.RuleContext): any {
2828
const sourceCode = getSourceCode(context);
2929
if (
30-
typeof sourceCode.parserServices.defineCustomBlocksVisitor ===
30+
typeof sourceCode.parserServices?.defineCustomBlocksVisitor ===
3131
"function" &&
3232
path.extname(getFilename(context)) === ".vue"
3333
) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import json from "@eslint/json";
2+
import { getPlugin } from "../plugin-store.cjs";
3+
const yaml = getPlugin()
4+
export default [
5+
...yaml.configs["flat/recommended"],
6+
{
7+
plugins: {
8+
json,
9+
},
10+
},
11+
12+
// lint JSON files
13+
{
14+
files: ["**/*.json"],
15+
language: "json/json",
16+
rules: {
17+
"json/no-duplicate-keys": "error",
18+
},
19+
},
20+
21+
// lint JSONC files
22+
{
23+
files: ["**/*.jsonc", ".vscode/*.json"],
24+
language: "json/jsonc",
25+
rules: {
26+
"json/no-duplicate-keys": "error",
27+
},
28+
},
29+
30+
// lint JSON5 files
31+
{
32+
files: ["**/*.json5"],
33+
language: "json/json5",
34+
rules: {
35+
"json/no-duplicate-keys": "error",
36+
},
37+
},
38+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"foo": "bar"}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"foo": "bar"

‎tests/src/eslint-plugin.ts

+13-11
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ describe("Integration with eslint-plugin-yml", () => {
3838
it(dir, async () => {
3939
const engine = new LegacyESLint({
4040
cwd: path.join(TEST_ROOT, dir),
41+
// @ts-expect-error -- ignore
4142
extensions: [".js", ".yml"],
4243
plugins: { "eslint-plugin-yml": plugin as any },
4344
});
@@ -60,17 +61,18 @@ describe("Integration with eslint-plugin-yml", () => {
6061
errors: 0,
6162
},
6263
},
63-
// ...(semver.satisfies(process.version, ">=18")
64-
// ? [
65-
// {
66-
// dir: "with-json",
67-
// expects: {
68-
// files: 2,
69-
// errors: 0,
70-
// },
71-
// },
72-
// ]
73-
// : []),
64+
...(semver.satisfies(process.version, ">=18") &&
65+
semver.satisfies(ESLint.version, ">=9")
66+
? [
67+
{
68+
dir: "with-json",
69+
expects: {
70+
files: 2,
71+
errors: 0,
72+
},
73+
},
74+
]
75+
: []),
7476
]) {
7577
it(dir, async () => {
7678
const engine = new ESLint({

‎tools/new-rule.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default createRule("${ruleId}", {
5555
},
5656
create(context) {
5757
const sourceCode = getSourceCode(context)
58-
if (!sourceCode.parserServices.isYAML) {
58+
if (!sourceCode.parserServices?.isYAML) {
5959
return {}
6060
}
6161

0 commit comments

Comments
 (0)
Please sign in to comment.