From dc27342187cd9200932710c739a30248ec1657e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9F=A0?= Date: Wed, 2 Jul 2025 13:57:07 +0800 Subject: [PATCH] fix issue for arkts-no-number-values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICJ9F5 Test scenarios: arkts-no-number-values Signed-off-by: 钟柠 --- ets2panda/linter/src/lib/TypeScriptLinter.ts | 11 +++++ .../linter/src/lib/autofixes/Autofixer.ts | 8 ++-- .../test/main/enum_not_support_float.ets | 6 +++ .../enum_not_support_float.ets.arkts2.json | 40 +++++++++++++++++++ 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/ets2panda/linter/src/lib/TypeScriptLinter.ts b/ets2panda/linter/src/lib/TypeScriptLinter.ts index 1760649828..cab17c1d45 100644 --- a/ets2panda/linter/src/lib/TypeScriptLinter.ts +++ b/ets2panda/linter/src/lib/TypeScriptLinter.ts @@ -4368,6 +4368,17 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { if (!initializer) { return; } + if (ts.isAsExpression(initializer) || ts.isTypeAssertionExpression(initializer)) { + const typeNode = ts.isAsExpression(initializer) + ? initializer.type + : initializer.type; + + if (typeNode.kind === ts.SyntaxKind.NumberKeyword) { + this.incrementCounters(enumMember, FaultID.EnumMemberNonConstInit); + return; + } + } + let value; if (ts.isNumericLiteral(initializer)) { value = parseFloat(initializer.text); diff --git a/ets2panda/linter/src/lib/autofixes/Autofixer.ts b/ets2panda/linter/src/lib/autofixes/Autofixer.ts index 323536e118..e960c78390 100644 --- a/ets2panda/linter/src/lib/autofixes/Autofixer.ts +++ b/ets2panda/linter/src/lib/autofixes/Autofixer.ts @@ -4950,7 +4950,7 @@ export class Autofixer { const srcFile = node.getSourceFile(); const typeArgsText = `<${typeNode.typeArguments?. map((arg) => { - return this.printer.printNode(ts.EmitHint.Unspecified, arg, srcFile); + return this.nonCommentPrinter.printNode(ts.EmitHint.Unspecified, arg, srcFile); }). join(', ')}>`; // Insert the type arguments immediately after the constructor name @@ -4961,7 +4961,7 @@ export class Autofixer { private fixGenericCallNoTypeArgsForArrayType(node: ts.NewExpression, arrayTypeNode: ts.ArrayTypeNode): Autofix[] | undefined { const elementTypeNode = arrayTypeNode.elementType; const srcFile = node.getSourceFile(); - const typeArgsText = `<${this.printer.printNode(ts.EmitHint.Unspecified, elementTypeNode, srcFile)}>`; + const typeArgsText = `<${this.nonCommentPrinter.printNode(ts.EmitHint.Unspecified, elementTypeNode, srcFile)}>`; const insertPos = node.expression.getEnd(); return [{ start: insertPos, end: insertPos, replacementText: typeArgsText }]; } @@ -4977,7 +4977,7 @@ export class Autofixer { const srcFile = node.getSourceFile(); const typeArgsText = `<${matchingType.typeArguments. map((arg) => { - return this.printer.printNode(ts.EmitHint.Unspecified, arg, srcFile); + return this.nonCommentPrinter.printNode(ts.EmitHint.Unspecified, arg, srcFile); }). join(', ')}>`; @@ -5008,7 +5008,7 @@ export class Autofixer { } const typeArgsText = `<${typeArgs?. map((arg) => { - return this.printer.printNode(ts.EmitHint.Unspecified, arg, srcFile); + return this.nonCommentPrinter.printNode(ts.EmitHint.Unspecified, arg, srcFile); }). join(', ')}>`; return [{ start: identifier.getEnd(), end: identifier.getEnd(), replacementText: typeArgsText }]; diff --git a/ets2panda/linter/test/main/enum_not_support_float.ets b/ets2panda/linter/test/main/enum_not_support_float.ets index 593f6c64b9..69c8157c75 100644 --- a/ets2panda/linter/test/main/enum_not_support_float.ets +++ b/ets2panda/linter/test/main/enum_not_support_float.ets @@ -53,3 +53,9 @@ enum ExprInits { H = '123'.length, I = 1 && 2, } + +enum Numbers14{ + RED = 1 as number, + BLUE = 2, + GREEN = -1 +} \ No newline at end of file diff --git a/ets2panda/linter/test/main/enum_not_support_float.ets.arkts2.json b/ets2panda/linter/test/main/enum_not_support_float.ets.arkts2.json index 95b3bdaefb..50bcd459cf 100644 --- a/ets2panda/linter/test/main/enum_not_support_float.ets.arkts2.json +++ b/ets2panda/linter/test/main/enum_not_support_float.ets.arkts2.json @@ -163,6 +163,46 @@ "suggest": "", "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", "severity": "ERROR" + }, + { + "line": 58, + "column": 3, + "endLine": 58, + "endColumn": 20, + "problem": "EnumMemberNonConstInit", + "suggest": "", + "rule": "Enumeration members can be initialized only with compile time expressions of the same type (arkts-no-enum-mixed-types)", + "severity": "ERROR" + }, + { + "line": 58, + "column": 9, + "endLine": 58, + "endColumn": 10, + "problem": "NumericSemantics", + "suggest": "", + "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", + "severity": "ERROR" + }, + { + "line": 59, + "column": 10, + "endLine": 59, + "endColumn": 11, + "problem": "NumericSemantics", + "suggest": "", + "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", + "severity": "ERROR" + }, + { + "line": 60, + "column": 12, + "endLine": 60, + "endColumn": 13, + "problem": "NumericSemantics", + "suggest": "", + "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", + "severity": "ERROR" } ] } \ No newline at end of file -- Gitee