From a4b96efc2efc254486da1b8df5fdc3a76af83522 Mon Sep 17 00:00:00 2001 From: c30058867 Date: Sat, 6 Sep 2025 10:49:41 +0800 Subject: [PATCH] Discard rule arkts-no-exponent-op Issue:https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICWOJT Signed-off-by: caiy --- ets2panda/linter/docs/rules-cn/recipe203.md | 43 ---------- ets2panda/linter/rule-config.json | 1 - ets2panda/linter/src/lib/CookBookMsg.ts | 1 - ets2panda/linter/src/lib/FaultAttrs.ts | 1 - ets2panda/linter/src/lib/FaultDesc.ts | 1 - ets2panda/linter/src/lib/Problems.ts | 1 - ets2panda/linter/src/lib/TypeScriptLinter.ts | 10 --- .../linter/src/lib/autofixes/Autofixer.ts | 54 ------------ .../binary_operation_js_obj.ets.arkts2.json | 40 --------- .../binary_operation_js_obj.ets.autofix.json | 84 ------------------- .../binary_operation_js_obj.ets.migrate.ets | 8 +- .../binary_operation_js_obj.ets.migrate.json | 40 --------- .../linter/test/main/exponent.ets.arkts2.json | 20 ----- .../test/main/exponent.ets.autofix.json | 42 ---------- .../linter/test/main/exponent.ets.migrate.ets | 4 +- .../test/main/exponent.ets.migrate.json | 20 ----- 16 files changed, 6 insertions(+), 364 deletions(-) delete mode 100644 ets2panda/linter/docs/rules-cn/recipe203.md diff --git a/ets2panda/linter/docs/rules-cn/recipe203.md b/ets2panda/linter/docs/rules-cn/recipe203.md deleted file mode 100644 index 0c05d2115e..0000000000 --- a/ets2panda/linter/docs/rules-cn/recipe203.md +++ /dev/null @@ -1,43 +0,0 @@ -## 不支持指数操作符 - -**规则:**`arkts-no-exponent-op` - -**级别:error** - -ArkTS1.2不支持指数运算符(`**`和`**=`),采用语言基础库。 - -**ArkTS1.1** - -```typescript -let x = 2 ** 5; - -let y = 3; -y **= 4; // 违反规则 - -let result = (1 + 2) ** (3 * 2); // 违反规则 - -function power(base: number, exponent: number) { - return base ** exponent; // 违反规则 -} - -let values = [1, 2, 3]; -let squared = values.map(v => v ** 2); // 违反规则 -``` - -**ArkTS1.2** - -```typescript -let x = Math.pow(2, 5); - -let y = 3; -y = Math.pow(y, 4); // 直接使用 `Math.pow()` - -let result = Math.pow(1 + 2, 3 * 2); // 直接使用 `Math.pow()` - -function power(base: number, exponent: number) { - return Math.pow(base, exponent); // 使用 `Math.pow()` -} - -let values = [1, 2, 3]; -let squared = values.map(v => Math.pow(v, 2)); // 使用 `Math.pow()` -``` diff --git a/ets2panda/linter/rule-config.json b/ets2panda/linter/rule-config.json index 3ad3d9d45d..e5d2eec1ef 100644 --- a/ets2panda/linter/rule-config.json +++ b/ets2panda/linter/rule-config.json @@ -19,7 +19,6 @@ "arkts-no-void-operator", "arkts-no-ts-overload", "arkts-limited-literal-types", - "arkts-no-exponent-op", "arkts-no-debugger", "arkts-no-arguments-obj", "arkts-no-tagged-templates", diff --git a/ets2panda/linter/src/lib/CookBookMsg.ts b/ets2panda/linter/src/lib/CookBookMsg.ts index cfd5fc0a1b..254fa3b05e 100644 --- a/ets2panda/linter/src/lib/CookBookMsg.ts +++ b/ets2panda/linter/src/lib/CookBookMsg.ts @@ -250,7 +250,6 @@ cookBookTag[193] = '"void" operator is not supported (arkts-no-void-operator)'; cookBookTag[198] = 'Class TS overloading is not supported(arkts-no-ts-overload)'; cookBookTag[199] = 'Sendable containers are not supported (arkts-no-need-stdlib-sendable-containers)'; cookBookTag[202] = 'Literal types are restricted(arkts-limited-literal-types)'; -cookBookTag[203] = 'exponent opartions "**" and "**=" are disabled (arkts-no-exponent-op)'; cookBookTag[206] = '"debugger" is not supported (arkts-no-debugger)'; cookBookTag[207] = 'Special arguments object inside functions are not supported (arkts-no-arguments-obj)'; cookBookTag[208] = 'Tagged templates are not supported (arkts-no-tagged-templates)'; diff --git a/ets2panda/linter/src/lib/FaultAttrs.ts b/ets2panda/linter/src/lib/FaultAttrs.ts index 7de7999b99..0e7dbeba2f 100644 --- a/ets2panda/linter/src/lib/FaultAttrs.ts +++ b/ets2panda/linter/src/lib/FaultAttrs.ts @@ -163,7 +163,6 @@ faultsAttrs[FaultID.VoidOperator] = new FaultAttributes(193); faultsAttrs[FaultID.TsOverload] = new FaultAttributes(198); faultsAttrs[FaultID.NoNeedStdLibSendableContainer] = new FaultAttributes(199); faultsAttrs[FaultID.LimitedLiteralType] = new FaultAttributes(202); -faultsAttrs[FaultID.ExponentOp] = new FaultAttributes(203); faultsAttrs[FaultID.DebuggerStatement] = new FaultAttributes(206); faultsAttrs[FaultID.ArgumentsObject] = new FaultAttributes(207); faultsAttrs[FaultID.TaggedTemplates] = new FaultAttributes(208); diff --git a/ets2panda/linter/src/lib/FaultDesc.ts b/ets2panda/linter/src/lib/FaultDesc.ts index 5b39e917f8..c79191de91 100644 --- a/ets2panda/linter/src/lib/FaultDesc.ts +++ b/ets2panda/linter/src/lib/FaultDesc.ts @@ -151,7 +151,6 @@ faultDesc[FaultID.MathPow] = 'Exponent call'; faultDesc[FaultID.InvalidAbstractOverrideReturnType] = 'Missing return type on abstract method'; faultDesc[FaultID.IncompationbleFunctionType] = 'Incompationble function type'; faultDesc[FaultID.VoidOperator] = 'Void operator'; -faultDesc[FaultID.ExponentOp] = 'Exponent operation'; faultDesc[FaultID.RegularExpressionLiteral] = 'Regex literals'; faultDesc[FaultID.ArgumentsObject] = 'Special arguments object inside functions'; faultDesc[FaultID.LimitedVoidType] = 'Limited void type'; diff --git a/ets2panda/linter/src/lib/Problems.ts b/ets2panda/linter/src/lib/Problems.ts index fd32b020c0..e23d87a50a 100644 --- a/ets2panda/linter/src/lib/Problems.ts +++ b/ets2panda/linter/src/lib/Problems.ts @@ -147,7 +147,6 @@ export enum FaultID { MathPow, InvalidAbstractOverrideReturnType, VoidOperator, - ExponentOp, RegularExpressionLiteral, ArgumentsObject, LimitedVoidType, diff --git a/ets2panda/linter/src/lib/TypeScriptLinter.ts b/ets2panda/linter/src/lib/TypeScriptLinter.ts index 317b9035bd..628f4a7edb 100644 --- a/ets2panda/linter/src/lib/TypeScriptLinter.ts +++ b/ets2panda/linter/src/lib/TypeScriptLinter.ts @@ -539,9 +539,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { [ts.SyntaxKind.ReturnStatement, this.handleReturnStatement], [ts.SyntaxKind.Decorator, this.handleDecorator], [ts.SyntaxKind.ImportType, this.handleImportType], - [ts.SyntaxKind.AsteriskAsteriskToken, this.handleExponentOperation], [ts.SyntaxKind.VoidExpression, this.handleVoidExpression], - [ts.SyntaxKind.AsteriskAsteriskEqualsToken, this.handleExponentOperation], [ts.SyntaxKind.RegularExpressionLiteral, this.handleRegularExpressionLiteral], [ts.SyntaxKind.DebuggerStatement, this.handleDebuggerStatement], [ts.SyntaxKind.SwitchStatement, this.handleSwitchStatement], @@ -8424,14 +8422,6 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { return false; } - private handleExponentOperation(node: ts.Node): void { - if (!this.options.arkts2) { - return; - } - const autofix = this.autofixer?.fixExponent(node.parent); - this.incrementCounters(node, FaultID.ExponentOp, autofix); - } - private handleNonNullExpression(node: ts.Node): void { if (!this.options.arkts2) { return; diff --git a/ets2panda/linter/src/lib/autofixes/Autofixer.ts b/ets2panda/linter/src/lib/autofixes/Autofixer.ts index c23c9127f9..92b50725b9 100644 --- a/ets2panda/linter/src/lib/autofixes/Autofixer.ts +++ b/ets2panda/linter/src/lib/autofixes/Autofixer.ts @@ -2749,60 +2749,6 @@ export class Autofixer { return { pattern, flag }; } - /* - * "unsafe" (result is not common subset) autofixes - */ - - // to use special lib functions it's need to import it - static SPECIAL_LIB_NAME = 'specialAutofixLib'; - - // autofix for '**', '**=' operations and 'math.pow()' call - fixExponent(exponentNode: ts.Node): Autofix[] | undefined { - let autofix: Autofix[] = []; - let replaceText: Autofix = { replacementText: '', start: 0, end: 0 }; - - // ts.BinaryExpression - let callArgs: ts.Expression[] | undefined; - if (exponentNode.kind === ts.SyntaxKind.CallExpression) { - callArgs = [...(exponentNode as ts.CallExpression).arguments]; - } else if (exponentNode.kind === ts.SyntaxKind.BinaryExpression) { - callArgs = [(exponentNode as ts.BinaryExpression).left, (exponentNode as ts.BinaryExpression).right]; - } else { - // if we get here - it was an error! - return undefined; - } - - const newCall = ts.factory.createCallExpression( - ts.factory.createPropertyAccessExpression( - ts.factory.createIdentifier('Math'), - ts.factory.createIdentifier('pow') - ), - undefined, - callArgs - ); - - if ( - exponentNode.kind === ts.SyntaxKind.BinaryExpression && - (exponentNode as ts.BinaryExpression).operatorToken.kind === ts.SyntaxKind.AsteriskAsteriskEqualsToken - ) { - const newAssignment = ts.factory.createAssignment((exponentNode as ts.BinaryExpression).left, newCall); - replaceText = { - replacementText: this.printer.printNode(ts.EmitHint.Unspecified, newAssignment, exponentNode.getSourceFile()), - start: exponentNode.getStart(), - end: exponentNode.getEnd() - }; - } else { - replaceText = { - replacementText: this.printer.printNode(ts.EmitHint.Unspecified, newCall, exponentNode.getSourceFile()), - start: exponentNode.getStart(), - end: exponentNode.getEnd() - }; - } - - autofix = [replaceText]; - return autofix; - } - fixNativeBidirectionalBinding( expr: ts.NonNullExpression, interfacesNeedToImport: Set diff --git a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.arkts2.json b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.arkts2.json index 39a05cb869..b52441252a 100644 --- a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.arkts2.json +++ b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.arkts2.json @@ -164,16 +164,6 @@ "rule": "Binary operations on js objects (arkts-interop-js2s-binary-op)", "severity": "ERROR" }, - { - "line": 23, - "column": 3, - "endLine": 23, - "endColumn": 5, - "problem": "ExponentOp", - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, { "line": 25, "column": 1, @@ -234,26 +224,6 @@ "rule": "Binary operations on js objects (arkts-interop-js2s-binary-op)", "severity": "ERROR" }, - { - "line": 27, - "column": 3, - "endLine": 27, - "endColumn": 5, - "problem": "ExponentOp", - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, - { - "line": 33, - "column": 3, - "endLine": 33, - "endColumn": 5, - "problem": "ExponentOp", - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, { "line": 35, "column": 11, @@ -264,16 +234,6 @@ "rule": "Object literal must correspond to some explicitly declared class or interface (arkts-no-untyped-obj-literals)", "severity": "ERROR" }, - { - "line": 41, - "column": 4, - "endLine": 41, - "endColumn": 6, - "problem": "ExponentOp", - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, { "line": 43, "column": 1, diff --git a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.autofix.json b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.autofix.json index e69f9263e1..8a6b48d413 100644 --- a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.autofix.json +++ b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.autofix.json @@ -318,27 +318,6 @@ "rule": "Binary operations on js objects (arkts-interop-js2s-binary-op)", "severity": "ERROR" }, - { - "line": 23, - "column": 3, - "endLine": 23, - "endColumn": 5, - "problem": "ExponentOp", - "autofix": [ - { - "replacementText": "Math.pow(a, b)", - "start": 715, - "end": 721, - "line": 23, - "column": 3, - "endLine": 23, - "endColumn": 5 - } - ], - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, { "line": 25, "column": 1, @@ -465,48 +444,6 @@ "rule": "Binary operations on js objects (arkts-interop-js2s-binary-op)", "severity": "ERROR" }, - { - "line": 27, - "column": 3, - "endLine": 27, - "endColumn": 5, - "problem": "ExponentOp", - "autofix": [ - { - "replacementText": "Math.pow(m, n)", - "start": 735, - "end": 741, - "line": 27, - "column": 3, - "endLine": 27, - "endColumn": 5 - } - ], - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, - { - "line": 33, - "column": 3, - "endLine": 33, - "endColumn": 5, - "problem": "ExponentOp", - "autofix": [ - { - "replacementText": "Math.pow(x, y)", - "start": 782, - "end": 788, - "line": 33, - "column": 3, - "endLine": 33, - "endColumn": 5 - } - ], - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, { "line": 35, "column": 11, @@ -537,27 +474,6 @@ "rule": "Object literal must correspond to some explicitly declared class or interface (arkts-no-untyped-obj-literals)", "severity": "ERROR" }, - { - "line": 41, - "column": 4, - "endLine": 41, - "endColumn": 6, - "problem": "ExponentOp", - "autofix": [ - { - "replacementText": "Math.pow(x2, y2)", - "start": 873, - "end": 881, - "line": 41, - "column": 4, - "endLine": 41, - "endColumn": 6 - } - ], - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, { "line": 43, "column": 1, diff --git a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.migrate.ets b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.migrate.ets index 4ab35224f7..00a0c78dc1 100644 --- a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.migrate.ets +++ b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.migrate.ets @@ -20,17 +20,17 @@ a - b a * b a / b a % b -Math.pow(a, b) +a ** b m.toNumber() + n.toNumber() m.toNumber() % n.toNumber() -Math.pow(m.toNumber(), n.toNumber()) +m.toNumber() ** n.toNumber() let x = 1, y = 2; x + y; x - y; x % y; -Math.pow(x, y); +x ** y; interface GeneratedObjectLiteralInterface_1 { a: number; @@ -42,6 +42,6 @@ let x2 = bar.a, y2 = bar.b; x2 + y2; x2 - y2; x2 % y2; -Math.pow(x2, y2); +x2 ** y2; foo.getProperty("a").toNumber() + foo.getProperty("b").toNumber(); \ No newline at end of file diff --git a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.migrate.json b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.migrate.json index 0f7384dffa..71df603e05 100644 --- a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.migrate.json +++ b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.migrate.json @@ -43,46 +43,6 @@ "suggest": "", "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)", "severity": "ERROR" - }, - { - "line": 23, - "column": 1, - "endLine": 23, - "endColumn": 15, - "problem": "MathPow", - "suggest": "", - "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", - "severity": "ERROR" - }, - { - "line": 27, - "column": 1, - "endLine": 27, - "endColumn": 37, - "problem": "MathPow", - "suggest": "", - "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", - "severity": "ERROR" - }, - { - "line": 33, - "column": 1, - "endLine": 33, - "endColumn": 15, - "problem": "MathPow", - "suggest": "", - "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", - "severity": "ERROR" - }, - { - "line": 45, - "column": 1, - "endLine": 45, - "endColumn": 17, - "problem": "MathPow", - "suggest": "", - "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", - "severity": "ERROR" } ] } \ No newline at end of file diff --git a/ets2panda/linter/test/main/exponent.ets.arkts2.json b/ets2panda/linter/test/main/exponent.ets.arkts2.json index b596b5f3c2..4c2290f269 100644 --- a/ets2panda/linter/test/main/exponent.ets.arkts2.json +++ b/ets2panda/linter/test/main/exponent.ets.arkts2.json @@ -24,26 +24,6 @@ "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", "severity": "ERROR" }, - { - "line": 19, - "column": 11, - "endLine": 19, - "endColumn": 13, - "problem": "ExponentOp", - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, - { - "line": 22, - "column": 3, - "endLine": 22, - "endColumn": 6, - "problem": "ExponentOp", - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, { "line": 25, "column": 5, diff --git a/ets2panda/linter/test/main/exponent.ets.autofix.json b/ets2panda/linter/test/main/exponent.ets.autofix.json index 980ccb0385..4c2290f269 100644 --- a/ets2panda/linter/test/main/exponent.ets.autofix.json +++ b/ets2panda/linter/test/main/exponent.ets.autofix.json @@ -24,48 +24,6 @@ "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", "severity": "ERROR" }, - { - "line": 19, - "column": 11, - "endLine": 19, - "endColumn": 13, - "problem": "ExponentOp", - "autofix": [ - { - "replacementText": "Math.pow(5, 2)", - "start": 656, - "end": 662, - "line": 19, - "column": 11, - "endLine": 19, - "endColumn": 13 - } - ], - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, - { - "line": 22, - "column": 3, - "endLine": 22, - "endColumn": 6, - "problem": "ExponentOp", - "autofix": [ - { - "replacementText": "k = Math.pow(k, 2)", - "start": 681, - "end": 688, - "line": 22, - "column": 3, - "endLine": 22, - "endColumn": 6 - } - ], - "suggest": "", - "rule": "exponent opartions \"**\" and \"**=\" are disabled (arkts-no-exponent-op)", - "severity": "ERROR" - }, { "line": 25, "column": 5, diff --git a/ets2panda/linter/test/main/exponent.ets.migrate.ets b/ets2panda/linter/test/main/exponent.ets.migrate.ets index eb206ab2f4..46f7cb267e 100644 --- a/ets2panda/linter/test/main/exponent.ets.migrate.ets +++ b/ets2panda/linter/test/main/exponent.ets.migrate.ets @@ -16,10 +16,10 @@ let kk = Math.pow(6, 3); console.log(kk); -let k = Math.pow(5, 2); +let k = 5 ** 2; console.log(k); -k = Math.pow(k, 2); +k **= 2; console.log(k); k = Math.pow(-1, Infinity); diff --git a/ets2panda/linter/test/main/exponent.ets.migrate.json b/ets2panda/linter/test/main/exponent.ets.migrate.json index 4ed19bbff5..4c2290f269 100644 --- a/ets2panda/linter/test/main/exponent.ets.migrate.json +++ b/ets2panda/linter/test/main/exponent.ets.migrate.json @@ -24,26 +24,6 @@ "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", "severity": "ERROR" }, - { - "line": 19, - "column": 9, - "endLine": 19, - "endColumn": 23, - "problem": "MathPow", - "suggest": "", - "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", - "severity": "ERROR" - }, - { - "line": 22, - "column": 5, - "endLine": 22, - "endColumn": 19, - "problem": "MathPow", - "suggest": "", - "rule": "function \"Math.pow()\" behavior for ArkTS differs from Typescript version (arkts-math-pow-standard-diff)", - "severity": "ERROR" - }, { "line": 25, "column": 5, -- Gitee