eslint-plugin-react-dom 2.0.0-next.47 → 2.0.0-next.48

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/dist/index.d.ts CHANGED
@@ -1,6 +1,10 @@
1
+ import { CamelCase } from 'string-ts';
1
2
  import * as _typescript_eslint_utils_ts_eslint from '@typescript-eslint/utils/ts-eslint';
2
3
  import { RulePreset } from '@eslint-react/kit';
3
4
 
5
+ declare const RULE_NAME = "no-missing-button-type";
6
+ type MessageID = CamelCase<typeof RULE_NAME> | "addButtonType";
7
+
4
8
  declare const _default: {
5
9
  configs: {
6
10
  recommended: {
@@ -16,7 +20,7 @@ declare const _default: {
16
20
  readonly "no-find-dom-node": _typescript_eslint_utils_ts_eslint.RuleModule<"noFindDomNode", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
17
21
  readonly "no-flush-sync": _typescript_eslint_utils_ts_eslint.RuleModule<"noFlushSync", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
18
22
  readonly "no-hydrate": _typescript_eslint_utils_ts_eslint.RuleModule<"noHydrate", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
19
- readonly "no-missing-button-type": _typescript_eslint_utils_ts_eslint.RuleModule<"noMissingButtonType", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
23
+ readonly "no-missing-button-type": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID, [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
20
24
  readonly "no-missing-iframe-sandbox": _typescript_eslint_utils_ts_eslint.RuleModule<"noMissingIframeSandbox", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
21
25
  readonly "no-namespace": _typescript_eslint_utils_ts_eslint.RuleModule<"noNamespace", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
22
26
  readonly "no-render": _typescript_eslint_utils_ts_eslint.RuleModule<"noRender", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
@@ -48,7 +52,7 @@ declare const _default: {
48
52
  readonly "no-find-dom-node": _typescript_eslint_utils_ts_eslint.RuleModule<"noFindDomNode", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
49
53
  readonly "no-flush-sync": _typescript_eslint_utils_ts_eslint.RuleModule<"noFlushSync", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
50
54
  readonly "no-hydrate": _typescript_eslint_utils_ts_eslint.RuleModule<"noHydrate", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
51
- readonly "no-missing-button-type": _typescript_eslint_utils_ts_eslint.RuleModule<"noMissingButtonType", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
55
+ readonly "no-missing-button-type": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID, [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
52
56
  readonly "no-missing-iframe-sandbox": _typescript_eslint_utils_ts_eslint.RuleModule<"noMissingIframeSandbox", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
53
57
  readonly "no-namespace": _typescript_eslint_utils_ts_eslint.RuleModule<"noNamespace", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
54
58
  readonly "no-render": _typescript_eslint_utils_ts_eslint.RuleModule<"noRender", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
package/dist/index.js CHANGED
@@ -44,7 +44,7 @@ var settings = {
44
44
 
45
45
  // package.json
46
46
  var name2 = "eslint-plugin-react-dom";
47
- var version = "2.0.0-next.47";
47
+ var version = "2.0.0-next.48";
48
48
  function createJsxElementResolver(context) {
49
49
  const { components, polymorphicPropName } = getSettingsFromContext(context);
50
50
  return {
@@ -324,6 +324,7 @@ function getFix(context, node) {
324
324
  }
325
325
  var RULE_NAME6 = "no-missing-button-type";
326
326
  var RULE_FEATURES6 = [];
327
+ var BUTTON_TYPES = ["button", "submit", "reset"];
327
328
  var no_missing_button_type_default = createRule({
328
329
  meta: {
329
330
  type: "problem",
@@ -331,7 +332,9 @@ var no_missing_button_type_default = createRule({
331
332
  description: "Enforces explicit `type` attribute for `button` elements.",
332
333
  [Symbol.for("rule_features")]: RULE_FEATURES6
333
334
  },
335
+ hasSuggestions: true,
334
336
  messages: {
337
+ addButtonType: "Add 'type' attribute with value '{{type}}'.",
335
338
  noMissingButtonType: "Add missing 'type' attribute on 'button' component."
336
339
  },
337
340
  schema: []
@@ -363,7 +366,10 @@ function create6(context) {
363
366
  if (attributeValue.kind === "some" && typeof attributeValue.value !== "string") {
364
367
  context.report({
365
368
  messageId: "noMissingButtonType",
366
- node: attributeNode
369
+ node: attributeNode,
370
+ suggest: getSuggest((type) => (fixer) => {
371
+ return fixer.replaceText(node, `${propNameOnJsx}="${type}"`);
372
+ })
367
373
  });
368
374
  }
369
375
  return;
@@ -371,12 +377,24 @@ function create6(context) {
371
377
  if (typeof customComponentProp?.defaultValue !== "string") {
372
378
  context.report({
373
379
  messageId: "noMissingButtonType",
374
- node
380
+ node,
381
+ suggest: getSuggest((type) => (fixer) => {
382
+ const lastToken = context.sourceCode.getLastToken(node.openingElement);
383
+ if (lastToken == null) return null;
384
+ return fixer.insertTextBefore(lastToken, ` type="${type}"`);
385
+ })
375
386
  });
376
387
  }
377
388
  }
378
389
  };
379
390
  }
391
+ function getSuggest(getFix4) {
392
+ return BUTTON_TYPES.map((type) => ({
393
+ messageId: "addButtonType",
394
+ data: { type },
395
+ fix: getFix4(type)
396
+ }));
397
+ }
380
398
  var RULE_NAME7 = "no-missing-iframe-sandbox";
381
399
  var RULE_FEATURES7 = [];
382
400
  var validTypes = [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-dom",
3
- "version": "2.0.0-next.47",
3
+ "version": "2.0.0-next.48",
4
4
  "description": "ESLint React's ESLint plugin for React DOM related rules.",
5
5
  "keywords": [
6
6
  "react",
@@ -41,12 +41,12 @@
41
41
  "compare-versions": "^6.1.1",
42
42
  "string-ts": "^2.2.1",
43
43
  "ts-pattern": "^5.7.1",
44
- "@eslint-react/ast": "2.0.0-next.47",
45
- "@eslint-react/eff": "2.0.0-next.47",
46
- "@eslint-react/core": "2.0.0-next.47",
47
- "@eslint-react/shared": "2.0.0-next.47",
48
- "@eslint-react/var": "2.0.0-next.47",
49
- "@eslint-react/kit": "2.0.0-next.47"
44
+ "@eslint-react/ast": "2.0.0-next.48",
45
+ "@eslint-react/eff": "2.0.0-next.48",
46
+ "@eslint-react/shared": "2.0.0-next.48",
47
+ "@eslint-react/kit": "2.0.0-next.48",
48
+ "@eslint-react/var": "2.0.0-next.48",
49
+ "@eslint-react/core": "2.0.0-next.48"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/react": "^19.1.8",