@fenge/eslint-plugin 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/package.json +7 -5
- package/src/index.ts +0 -2
- package/tsconfig.json +1 -1
- package/dist/rules/no-jsx-in-non-jsx-file.d.ts +0 -6
- package/dist/rules/no-jsx-in-non-jsx-file.d.ts.map +0 -1
- package/dist/rules/no-jsx-in-non-jsx-file.js +0 -24
- package/doc/rules/no-jsx-in-non-jsx-file.md +0 -37
- package/src/rules/no-jsx-in-non-jsx-file.spec.ts +0 -22
- package/src/rules/no-jsx-in-non-jsx-file.ts +0 -26
- /package/src/rules/{call-arguments-length.spec.ts → call-arguments-length.test.ts} +0 -0
- /package/src/rules/{no-instanceof-builtin.spec.ts → no-instanceof-builtin.test.ts} +0 -0
- /package/src/rules/{no-nested-class.spec.ts → no-nested-class.test.ts} +0 -0
- /package/src/rules/{no-nested-function.spec.ts → no-nested-function.test.ts} +0 -0
- /package/src/rules/{no-restricted-loops.spec.ts → no-restricted-loops.test.ts} +0 -0
- /package/src/rules/{no-top-level-arrow-function.spec.ts → no-top-level-arrow-function.test.ts} +0 -0
- /package/src/rules/{no-unnecessary-template-string.spec.ts → no-unnecessary-template-string.test.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @fenge/eslint-plugin
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 28d8553: chore: required node ^18.20.0 or >=20.10.0
|
|
8
|
+
|
|
9
|
+
## 0.3.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 9f27f60: chore: remove rule `@fenge/no-jsx-in-non-jsx-file`
|
|
14
|
+
|
|
3
15
|
## 0.2.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
+
import { callArgumentsLength } from "./rules/call-arguments-length.ts";
|
|
2
|
+
import { noInstanceofBuiltin } from "./rules/no-instanceof-builtin.ts";
|
|
3
|
+
import { noNestedClass } from "./rules/no-nested-class.ts";
|
|
4
|
+
import { noNestedFunction } from "./rules/no-nested-function.ts";
|
|
5
|
+
import { noRestrictedLoops } from "./rules/no-restricted-loops.ts";
|
|
6
|
+
import { noTopLevelArrowFunction } from "./rules/no-top-level-arrow-function.ts";
|
|
7
|
+
import { noUnnecessaryTemplateString } from "./rules/no-unnecessary-template-string.ts";
|
|
1
8
|
export declare const rules: {
|
|
2
|
-
[
|
|
9
|
+
[callArgumentsLength.name]: import("eslint").Rule.RuleModule;
|
|
10
|
+
[noInstanceofBuiltin.name]: import("eslint").Rule.RuleModule;
|
|
11
|
+
[noNestedClass.name]: import("eslint").Rule.RuleModule;
|
|
12
|
+
[noNestedFunction.name]: import("eslint").Rule.RuleModule;
|
|
13
|
+
[noRestrictedLoops.name]: import("eslint").Rule.RuleModule;
|
|
14
|
+
[noTopLevelArrowFunction.name]: import("eslint").Rule.RuleModule;
|
|
15
|
+
[noUnnecessaryTemplateString.name]: import("eslint").Rule.RuleModule;
|
|
3
16
|
};
|
|
4
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAExF,eAAO,MAAM,KAAK;IAChB,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,aAAa,CAAC,IAAI,CAAC,mCAAoB;IACxC,CAAC,gBAAgB,CAAC,IAAI,CAAC,mCAAuB;IAC9C,CAAC,iBAAiB,CAAC,IAAI,CAAC,mCAAwB;IAChD,CAAC,uBAAuB,CAAC,IAAI,CAAC,mCAA8B;IAC5D,CAAC,2BAA2B,CAAC,IAAI,CAAC,mCAAkC;CACrE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { callArgumentsLength } from "./rules/call-arguments-length.js";
|
|
2
2
|
import { noInstanceofBuiltin } from "./rules/no-instanceof-builtin.js";
|
|
3
|
-
import { noJsxInNonJsxFile } from "./rules/no-jsx-in-non-jsx-file.js";
|
|
4
3
|
import { noNestedClass } from "./rules/no-nested-class.js";
|
|
5
4
|
import { noNestedFunction } from "./rules/no-nested-function.js";
|
|
6
5
|
import { noRestrictedLoops } from "./rules/no-restricted-loops.js";
|
|
@@ -9,11 +8,10 @@ import { noUnnecessaryTemplateString } from "./rules/no-unnecessary-template-str
|
|
|
9
8
|
export const rules = {
|
|
10
9
|
[callArgumentsLength.name]: callArgumentsLength.rule,
|
|
11
10
|
[noInstanceofBuiltin.name]: noInstanceofBuiltin.rule,
|
|
12
|
-
[noJsxInNonJsxFile.name]: noJsxInNonJsxFile.rule,
|
|
13
11
|
[noNestedClass.name]: noNestedClass.rule,
|
|
14
12
|
[noNestedFunction.name]: noNestedFunction.rule,
|
|
15
13
|
[noRestrictedLoops.name]: noRestrictedLoops.rule,
|
|
16
14
|
[noTopLevelArrowFunction.name]: noTopLevelArrowFunction.rule,
|
|
17
15
|
[noUnnecessaryTemplateString.name]: noUnnecessaryTemplateString.rule,
|
|
18
16
|
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXhGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJO0lBQ3hDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtJQUM5QyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLGlCQUFpQixDQUFDLElBQUk7SUFDaEQsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxJQUFJO0lBQzVELENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEVBQUUsMkJBQTJCLENBQUMsSUFBSTtDQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FsbEFyZ3VtZW50c0xlbmd0aCB9IGZyb20gXCIuL3J1bGVzL2NhbGwtYXJndW1lbnRzLWxlbmd0aC50c1wiO1xuaW1wb3J0IHsgbm9JbnN0YW5jZW9mQnVpbHRpbiB9IGZyb20gXCIuL3J1bGVzL25vLWluc3RhbmNlb2YtYnVpbHRpbi50c1wiO1xuaW1wb3J0IHsgbm9OZXN0ZWRDbGFzcyB9IGZyb20gXCIuL3J1bGVzL25vLW5lc3RlZC1jbGFzcy50c1wiO1xuaW1wb3J0IHsgbm9OZXN0ZWRGdW5jdGlvbiB9IGZyb20gXCIuL3J1bGVzL25vLW5lc3RlZC1mdW5jdGlvbi50c1wiO1xuaW1wb3J0IHsgbm9SZXN0cmljdGVkTG9vcHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZXN0cmljdGVkLWxvb3BzLnRzXCI7XG5pbXBvcnQgeyBub1RvcExldmVsQXJyb3dGdW5jdGlvbiB9IGZyb20gXCIuL3J1bGVzL25vLXRvcC1sZXZlbC1hcnJvdy1mdW5jdGlvbi50c1wiO1xuaW1wb3J0IHsgbm9Vbm5lY2Vzc2FyeVRlbXBsYXRlU3RyaW5nIH0gZnJvbSBcIi4vcnVsZXMvbm8tdW5uZWNlc3NhcnktdGVtcGxhdGUtc3RyaW5nLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgW2NhbGxBcmd1bWVudHNMZW5ndGgubmFtZV06IGNhbGxBcmd1bWVudHNMZW5ndGgucnVsZSxcbiAgW25vSW5zdGFuY2VvZkJ1aWx0aW4ubmFtZV06IG5vSW5zdGFuY2VvZkJ1aWx0aW4ucnVsZSxcbiAgW25vTmVzdGVkQ2xhc3MubmFtZV06IG5vTmVzdGVkQ2xhc3MucnVsZSxcbiAgW25vTmVzdGVkRnVuY3Rpb24ubmFtZV06IG5vTmVzdGVkRnVuY3Rpb24ucnVsZSxcbiAgW25vUmVzdHJpY3RlZExvb3BzLm5hbWVdOiBub1Jlc3RyaWN0ZWRMb29wcy5ydWxlLFxuICBbbm9Ub3BMZXZlbEFycm93RnVuY3Rpb24ubmFtZV06IG5vVG9wTGV2ZWxBcnJvd0Z1bmN0aW9uLnJ1bGUsXG4gIFtub1VubmVjZXNzYXJ5VGVtcGxhdGVTdHJpbmcubmFtZV06IG5vVW5uZWNlc3NhcnlUZW1wbGF0ZVN0cmluZy5ydWxlLFxufTtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fenge/eslint-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "ESLint plugin for JavaScript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"opinionated",
|
|
@@ -22,13 +22,15 @@
|
|
|
22
22
|
"exports": "./dist/index.js",
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/estree": "1.0.6",
|
|
25
|
-
"@types/node": "22.10
|
|
26
|
-
"eslint": "9.
|
|
27
|
-
"tsx": "4.19.2",
|
|
25
|
+
"@types/node": "22.13.10",
|
|
26
|
+
"eslint": "9.22.0",
|
|
28
27
|
"@fenge/dev-utils": "0.0.0"
|
|
29
28
|
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": "^18.20.0 || >=20.10.0"
|
|
31
|
+
},
|
|
30
32
|
"scripts": {
|
|
31
33
|
"build": "tsc",
|
|
32
|
-
"test": "node --test --
|
|
34
|
+
"test": "node --test --experimental-strip-types"
|
|
33
35
|
}
|
|
34
36
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { callArgumentsLength } from "./rules/call-arguments-length.ts";
|
|
2
2
|
import { noInstanceofBuiltin } from "./rules/no-instanceof-builtin.ts";
|
|
3
|
-
import { noJsxInNonJsxFile } from "./rules/no-jsx-in-non-jsx-file.ts";
|
|
4
3
|
import { noNestedClass } from "./rules/no-nested-class.ts";
|
|
5
4
|
import { noNestedFunction } from "./rules/no-nested-function.ts";
|
|
6
5
|
import { noRestrictedLoops } from "./rules/no-restricted-loops.ts";
|
|
@@ -10,7 +9,6 @@ import { noUnnecessaryTemplateString } from "./rules/no-unnecessary-template-str
|
|
|
10
9
|
export const rules = {
|
|
11
10
|
[callArgumentsLength.name]: callArgumentsLength.rule,
|
|
12
11
|
[noInstanceofBuiltin.name]: noInstanceofBuiltin.rule,
|
|
13
|
-
[noJsxInNonJsxFile.name]: noJsxInNonJsxFile.rule,
|
|
14
12
|
[noNestedClass.name]: noNestedClass.rule,
|
|
15
13
|
[noNestedFunction.name]: noNestedFunction.rule,
|
|
16
14
|
[noRestrictedLoops.name]: noRestrictedLoops.rule,
|
package/tsconfig.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-jsx-in-non-jsx-file.d.ts","sourceRoot":"","sources":["../../src/rules/no-jsx-in-non-jsx-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAyBnC,eAAO,MAAM,iBAAiB;;;CAAiB,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { getRuleName } from "../utils.js";
|
|
2
|
-
const name = getRuleName(import.meta.url);
|
|
3
|
-
const rule = {
|
|
4
|
-
meta: {
|
|
5
|
-
docs: {
|
|
6
|
-
description: "Only allow JSX syntax in `.jsx` and `.tsx` file.",
|
|
7
|
-
},
|
|
8
|
-
messages: {
|
|
9
|
-
[`${name}/error`]: "Only allow JSX syntax in `.jsx` and `.tsx` file.",
|
|
10
|
-
},
|
|
11
|
-
},
|
|
12
|
-
create: (context) => {
|
|
13
|
-
// ignore jsx files
|
|
14
|
-
if (/\.[tj]sx$/.test(context.filename))
|
|
15
|
-
return {};
|
|
16
|
-
return {
|
|
17
|
-
":matches(JSXElement, JSXFragment)": (node) => {
|
|
18
|
-
context.report({ node, messageId: `${name}/error` });
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
export const noJsxInNonJsxFile = { name, rule };
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tanN4LWluLW5vbi1qc3gtZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1qc3gtaW4tbm9uLWpzeC1maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsTUFBTSxJQUFJLEdBQW9CO0lBQzVCLElBQUksRUFBRTtRQUNKLElBQUksRUFBRTtZQUNKLFdBQVcsRUFBRSxrREFBa0Q7U0FDaEU7UUFDRCxRQUFRLEVBQUU7WUFDUixDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxrREFBa0Q7U0FDdEU7S0FDRjtJQUNELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2xCLG1CQUFtQjtRQUNuQixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2xELE9BQU87WUFDTCxtQ0FBbUMsRUFBRSxDQUFDLElBQVUsRUFBRSxFQUFFO2dCQUNsRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tIFwiZXN0cmVlXCI7XG5pbXBvcnQgeyBnZXRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5jb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9ubHkgYWxsb3cgSlNYIHN5bnRheCBpbiBgLmpzeGAgYW5kIGAudHN4YCBmaWxlLlwiLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtgJHtuYW1lfS9lcnJvcmBdOiBcIk9ubHkgYWxsb3cgSlNYIHN5bnRheCBpbiBgLmpzeGAgYW5kIGAudHN4YCBmaWxlLlwiLFxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IHtcbiAgICAvLyBpZ25vcmUganN4IGZpbGVzXG4gICAgaWYgKC9cXC5bdGpdc3gkLy50ZXN0KGNvbnRleHQuZmlsZW5hbWUpKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHtcbiAgICAgIFwiOm1hdGNoZXMoSlNYRWxlbWVudCwgSlNYRnJhZ21lbnQpXCI6IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZUlkOiBgJHtuYW1lfS9lcnJvcmAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3Qgbm9Kc3hJbk5vbkpzeEZpbGUgPSB7IG5hbWUsIHJ1bGUgfTtcbiJdfQ==
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
<!-- prettier-ignore-start -->
|
|
2
|
-
# no-jsx-in-non-jsx-file
|
|
3
|
-
|
|
4
|
-
Only allow JSX syntax in `.jsx` and `.tsx` file.
|
|
5
|
-
|
|
6
|
-
## Rule Details
|
|
7
|
-
|
|
8
|
-
### Fail
|
|
9
|
-
|
|
10
|
-
```ts
|
|
11
|
-
const Foo = () => <div></div> // filename: foo.js
|
|
12
|
-
const Foo = () => <></> // filename: foo.js
|
|
13
|
-
function Foo(){const x = <div>foo</div>} // filename: foo.js
|
|
14
|
-
function Foo(){const x = <>foo</>} // filename: foo.js
|
|
15
|
-
const Foo = () => <div></div> // filename: foo.cjs
|
|
16
|
-
const Foo = () => <></> // filename: foo.cjs
|
|
17
|
-
function Foo(){const x = <div>foo</div>} // filename: foo.cjs
|
|
18
|
-
function Foo(){const x = <>foo</>} // filename: foo.cjs
|
|
19
|
-
const Foo = () => <div></div> // filename: foo.mjs
|
|
20
|
-
const Foo = () => <></> // filename: foo.mjs
|
|
21
|
-
function Foo(){const x = <div>foo</div>} // filename: foo.mjs
|
|
22
|
-
function Foo(){const x = <>foo</>} // filename: foo.mjs
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### Pass
|
|
26
|
-
|
|
27
|
-
```ts
|
|
28
|
-
const Foo = () => <div></div> // filename: foo.jsx
|
|
29
|
-
const Foo = () => <></> // filename: foo.jsx
|
|
30
|
-
function Foo(){const x = <div>foo</div>} // filename: foo.jsx
|
|
31
|
-
function Foo(){const x = <>foo</>} // filename: foo.jsx
|
|
32
|
-
const Foo = () => <div></div> // filename: foo.tsx
|
|
33
|
-
const Foo = () => <></> // filename: foo.tsx
|
|
34
|
-
function Foo(){const x = <div>foo</div>} // filename: foo.tsx
|
|
35
|
-
function Foo(){const x = <>foo</>} // filename: foo.tsx
|
|
36
|
-
```
|
|
37
|
-
<!-- prettier-ignore-end -->
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { test } from "@fenge/dev-utils";
|
|
2
|
-
import { noJsxInNonJsxFile } from "./no-jsx-in-non-jsx-file.ts";
|
|
3
|
-
|
|
4
|
-
const codes = [
|
|
5
|
-
"const Foo = () => <div></div>",
|
|
6
|
-
"const Foo = () => <></>",
|
|
7
|
-
"function Foo(){const x = <div>foo</div>}",
|
|
8
|
-
"function Foo(){const x = <>foo</>}",
|
|
9
|
-
];
|
|
10
|
-
|
|
11
|
-
const valid = [
|
|
12
|
-
...codes.map((code) => ({ code, filename: "foo.jsx" })),
|
|
13
|
-
...codes.map((code) => ({ code, filename: "foo.tsx" })),
|
|
14
|
-
];
|
|
15
|
-
|
|
16
|
-
const invalid = [
|
|
17
|
-
...codes.map((code) => ({ code, filename: "foo.js" })),
|
|
18
|
-
...codes.map((code) => ({ code, filename: "foo.cjs" })),
|
|
19
|
-
...codes.map((code) => ({ code, filename: "foo.mjs" })),
|
|
20
|
-
];
|
|
21
|
-
|
|
22
|
-
test({ valid, invalid, ...noJsxInNonJsxFile });
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { Rule } from "eslint";
|
|
2
|
-
import type { Node } from "estree";
|
|
3
|
-
import { getRuleName } from "../utils.ts";
|
|
4
|
-
|
|
5
|
-
const name = getRuleName(import.meta.url);
|
|
6
|
-
const rule: Rule.RuleModule = {
|
|
7
|
-
meta: {
|
|
8
|
-
docs: {
|
|
9
|
-
description: "Only allow JSX syntax in `.jsx` and `.tsx` file.",
|
|
10
|
-
},
|
|
11
|
-
messages: {
|
|
12
|
-
[`${name}/error`]: "Only allow JSX syntax in `.jsx` and `.tsx` file.",
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
create: (context) => {
|
|
16
|
-
// ignore jsx files
|
|
17
|
-
if (/\.[tj]sx$/.test(context.filename)) return {};
|
|
18
|
-
return {
|
|
19
|
-
":matches(JSXElement, JSXFragment)": (node: Node) => {
|
|
20
|
-
context.report({ node, messageId: `${name}/error` });
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const noJsxInNonJsxFile = { name, rule };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/rules/{no-top-level-arrow-function.spec.ts → no-top-level-arrow-function.test.ts}
RENAMED
|
File without changes
|
/package/src/rules/{no-unnecessary-template-string.spec.ts → no-unnecessary-template-string.test.ts}
RENAMED
|
File without changes
|