@fenge/eslint-plugin 0.2.0 → 0.3.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @fenge/eslint-plugin
2
2
 
3
+ ## 0.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 9f27f60: chore: remove rule `@fenge/no-jsx-in-non-jsx-file`
8
+
3
9
  ## 0.2.0
4
10
 
5
11
  ### 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
- [x: string]: import("eslint").Rule.RuleModule;
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,KAAK;;CASjB,CAAC"}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXhGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtJQUNoRCxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLENBQUMsSUFBSTtJQUN4QyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDOUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO0lBQ2hELENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsSUFBSTtJQUM1RCxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLDJCQUEyQixDQUFDLElBQUk7Q0FDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNhbGxBcmd1bWVudHNMZW5ndGggfSBmcm9tIFwiLi9ydWxlcy9jYWxsLWFyZ3VtZW50cy1sZW5ndGgudHNcIjtcbmltcG9ydCB7IG5vSW5zdGFuY2VvZkJ1aWx0aW4gfSBmcm9tIFwiLi9ydWxlcy9uby1pbnN0YW5jZW9mLWJ1aWx0aW4udHNcIjtcbmltcG9ydCB7IG5vSnN4SW5Ob25Kc3hGaWxlIH0gZnJvbSBcIi4vcnVsZXMvbm8tanN4LWluLW5vbi1qc3gtZmlsZS50c1wiO1xuaW1wb3J0IHsgbm9OZXN0ZWRDbGFzcyB9IGZyb20gXCIuL3J1bGVzL25vLW5lc3RlZC1jbGFzcy50c1wiO1xuaW1wb3J0IHsgbm9OZXN0ZWRGdW5jdGlvbiB9IGZyb20gXCIuL3J1bGVzL25vLW5lc3RlZC1mdW5jdGlvbi50c1wiO1xuaW1wb3J0IHsgbm9SZXN0cmljdGVkTG9vcHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZXN0cmljdGVkLWxvb3BzLnRzXCI7XG5pbXBvcnQgeyBub1RvcExldmVsQXJyb3dGdW5jdGlvbiB9IGZyb20gXCIuL3J1bGVzL25vLXRvcC1sZXZlbC1hcnJvdy1mdW5jdGlvbi50c1wiO1xuaW1wb3J0IHsgbm9Vbm5lY2Vzc2FyeVRlbXBsYXRlU3RyaW5nIH0gZnJvbSBcIi4vcnVsZXMvbm8tdW5uZWNlc3NhcnktdGVtcGxhdGUtc3RyaW5nLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgW2NhbGxBcmd1bWVudHNMZW5ndGgubmFtZV06IGNhbGxBcmd1bWVudHNMZW5ndGgucnVsZSxcbiAgW25vSW5zdGFuY2VvZkJ1aWx0aW4ubmFtZV06IG5vSW5zdGFuY2VvZkJ1aWx0aW4ucnVsZSxcbiAgW25vSnN4SW5Ob25Kc3hGaWxlLm5hbWVdOiBub0pzeEluTm9uSnN4RmlsZS5ydWxlLFxuICBbbm9OZXN0ZWRDbGFzcy5uYW1lXTogbm9OZXN0ZWRDbGFzcy5ydWxlLFxuICBbbm9OZXN0ZWRGdW5jdGlvbi5uYW1lXTogbm9OZXN0ZWRGdW5jdGlvbi5ydWxlLFxuICBbbm9SZXN0cmljdGVkTG9vcHMubmFtZV06IG5vUmVzdHJpY3RlZExvb3BzLnJ1bGUsXG4gIFtub1RvcExldmVsQXJyb3dGdW5jdGlvbi5uYW1lXTogbm9Ub3BMZXZlbEFycm93RnVuY3Rpb24ucnVsZSxcbiAgW25vVW5uZWNlc3NhcnlUZW1wbGF0ZVN0cmluZy5uYW1lXTogbm9Vbm5lY2Vzc2FyeVRlbXBsYXRlU3RyaW5nLnJ1bGUsXG59O1xuIl19
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.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "ESLint plugin for JavaScript.",
5
5
  "keywords": [
6
6
  "opinionated",
@@ -22,13 +22,12 @@
22
22
  "exports": "./dist/index.js",
23
23
  "devDependencies": {
24
24
  "@types/estree": "1.0.6",
25
- "@types/node": "22.10.5",
26
- "eslint": "9.18.0",
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
  },
30
29
  "scripts": {
31
30
  "build": "tsc",
32
- "test": "node --test --import tsx/esm \"**/*.spec.ts\""
31
+ "test": "node --test --experimental-strip-types \"**/*.spec.ts\""
33
32
  }
34
33
  }
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,
@@ -1,6 +0,0 @@
1
- import type { Rule } from "eslint";
2
- export declare const noJsxInNonJsxFile: {
3
- name: string;
4
- rule: Rule.RuleModule;
5
- };
6
- //# sourceMappingURL=no-jsx-in-non-jsx-file.d.ts.map
@@ -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 };