From 5a2747dc1c64d380e9c81d26cb8b5115024d356f Mon Sep 17 00:00:00 2001 From: zhongning Date: Sat, 14 Jun 2025 18:22:30 +0800 Subject: [PATCH] fix issue for arkts-array-index-expr-type Issue:https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICEX6N Test scenarios:fix bug Signed-off-by: zhongning --- ets2panda/linter/src/lib/TypeScriptLinter.ts | 14 +-- .../test/main/array_index_expr_type.ets | 4 + .../array_index_expr_type.ets.arkts2.json | 42 ++++++++- .../array_index_expr_type.ets.autofix.json | 88 ++++++++++++++++++- .../array_index_expr_type.ets.migrate.ets | 4 + .../test/main/index_negative.ets.arkts2.json | 10 +-- 6 files changed, 144 insertions(+), 18 deletions(-) diff --git a/ets2panda/linter/src/lib/TypeScriptLinter.ts b/ets2panda/linter/src/lib/TypeScriptLinter.ts index a15641503f..0cf7338b2f 100644 --- a/ets2panda/linter/src/lib/TypeScriptLinter.ts +++ b/ets2panda/linter/src/lib/TypeScriptLinter.ts @@ -4195,7 +4195,6 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { return; } - const argExpr = TypeScriptLinter.getUnwrappedArgumentExpression(expr.argumentExpression); const validStringLiteralTypes = [ STRINGLITERAL_INT, STRINGLITERAL_BYTE, @@ -4206,19 +4205,14 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { const argTypeString = this.tsTypeChecker.typeToString(argType); if (this.tsUtils.isNumberLikeType(argType)) { - this.handleNumericArgument(argExpr, expr.argumentExpression, argType); + this.handleNumericArgument(expr.argumentExpression, argType); } else if (!validStringLiteralTypes.includes(argTypeString)) { - this.incrementCounters(argExpr, FaultID.ArrayIndexExprType); + this.incrementCounters(expr.argumentExpression, FaultID.ArrayIndexExprType); } } - private static getUnwrappedArgumentExpression(argExpr: ts.Expression): ts.Expression { - return argExpr.kind === ts.SyntaxKind.AsExpression ? (argExpr as ts.AsExpression).expression : argExpr; - } - - private handleNumericArgument(argExpr: ts.Expression, asExpr: ts.Expression, argType: ts.Type): void { + private handleNumericArgument(argExpr: ts.Expression, argType: ts.Type): void { const isNumericLiteral = ts.isNumericLiteral(argExpr); - const isAsExpression = asExpr.kind === ts.SyntaxKind.AsExpression; const argText = argExpr.getText(); const argValue = Number(argText); @@ -4227,7 +4221,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { const containsDot = argText.includes('.'); if (!isInteger || containsDot) { - const autofix = this.autofixer?.fixArrayIndexExprType(isAsExpression ? asExpr : argExpr); + const autofix = this.autofixer?.fixArrayIndexExprType(argExpr); this.incrementCounters(argExpr, FaultID.ArrayIndexExprType, autofix); } } else if (this.tsTypeChecker.typeToString(argType) === 'number') { diff --git a/ets2panda/linter/test/main/array_index_expr_type.ets b/ets2panda/linter/test/main/array_index_expr_type.ets index fe370c16cd..a2120f59ea 100644 --- a/ets2panda/linter/test/main/array_index_expr_type.ets +++ b/ets2panda/linter/test/main/array_index_expr_type.ets @@ -83,3 +83,7 @@ arr[a] = 1; arr[b] = 1; arr[c] = 1; arr[d] = 1; + +let test = 1; +arr[1 as number]; +arr[test as number]; \ No newline at end of file diff --git a/ets2panda/linter/test/main/array_index_expr_type.ets.arkts2.json b/ets2panda/linter/test/main/array_index_expr_type.ets.arkts2.json index 3643204633..9ddfab6560 100644 --- a/ets2panda/linter/test/main/array_index_expr_type.ets.arkts2.json +++ b/ets2panda/linter/test/main/array_index_expr_type.ets.arkts2.json @@ -778,7 +778,7 @@ "line": 73, "column": 6, "endLine": 73, - "endColumn": 9, + "endColumn": 19, "problem": "ArrayIndexExprType", "suggest": "", "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", @@ -943,6 +943,46 @@ "suggest": "", "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", "severity": "ERROR" + }, + { + "line": 87, + "column": 5, + "endLine": 87, + "endColumn": 13, + "problem": "NumericSemantics", + "suggest": "", + "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", + "severity": "ERROR" + }, + { + "line": 87, + "column": 12, + "endLine": 87, + "endColumn": 13, + "problem": "NumericSemantics", + "suggest": "", + "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", + "severity": "ERROR" + }, + { + "line": 88, + "column": 5, + "endLine": 88, + "endColumn": 16, + "problem": "ArrayIndexExprType", + "suggest": "", + "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", + "severity": "ERROR" + }, + { + "line": 89, + "column": 5, + "endLine": 89, + "endColumn": 19, + "problem": "ArrayIndexExprType", + "suggest": "", + "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", + "severity": "ERROR" } ] } \ No newline at end of file diff --git a/ets2panda/linter/test/main/array_index_expr_type.ets.autofix.json b/ets2panda/linter/test/main/array_index_expr_type.ets.autofix.json index f3c4133394..3e80f6b789 100644 --- a/ets2panda/linter/test/main/array_index_expr_type.ets.autofix.json +++ b/ets2panda/linter/test/main/array_index_expr_type.ets.autofix.json @@ -1339,7 +1339,7 @@ "line": 73, "column": 6, "endLine": 73, - "endColumn": 9, + "endColumn": 19, "problem": "ArrayIndexExprType", "autofix": [ { @@ -1349,7 +1349,7 @@ "line": 73, "column": 6, "endLine": 73, - "endColumn": 9 + "endColumn": 19 } ], "suggest": "", @@ -1636,6 +1636,90 @@ "suggest": "", "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", "severity": "ERROR" + }, + { + "line": 87, + "column": 5, + "endLine": 87, + "endColumn": 13, + "problem": "NumericSemantics", + "autofix": [ + { + "start": 1924, + "end": 1932, + "replacementText": "test: number = 1", + "line": 87, + "column": 5, + "endLine": 87, + "endColumn": 13 + } + ], + "suggest": "", + "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", + "severity": "ERROR" + }, + { + "line": 87, + "column": 12, + "endLine": 87, + "endColumn": 13, + "problem": "NumericSemantics", + "autofix": [ + { + "start": 1931, + "end": 1932, + "replacementText": "1.0", + "line": 87, + "column": 12, + "endLine": 87, + "endColumn": 13 + } + ], + "suggest": "", + "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", + "severity": "ERROR" + }, + { + "line": 88, + "column": 5, + "endLine": 88, + "endColumn": 16, + "problem": "ArrayIndexExprType", + "autofix": [ + { + "start": 1938, + "end": 1949, + "replacementText": "1 as int", + "line": 88, + "column": 5, + "endLine": 88, + "endColumn": 16 + } + ], + "suggest": "", + "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", + "severity": "ERROR" + }, + { + "line": 89, + "column": 5, + "endLine": 89, + "endColumn": 19, + "problem": "ArrayIndexExprType", + "autofix": [ + { + "start": 1956, + "end": 1970, + "replacementText": "test as int", + "line": 89, + "column": 5, + "endLine": 89, + "endColumn": 19 + } + ], + "suggest": "", + "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", + "severity": "ERROR" } ] } \ No newline at end of file diff --git a/ets2panda/linter/test/main/array_index_expr_type.ets.migrate.ets b/ets2panda/linter/test/main/array_index_expr_type.ets.migrate.ets index 5ba7613e1b..c9ae018af1 100644 --- a/ets2panda/linter/test/main/array_index_expr_type.ets.migrate.ets +++ b/ets2panda/linter/test/main/array_index_expr_type.ets.migrate.ets @@ -83,3 +83,7 @@ arr[a] = 1.0; arr[b] = 1.0; arr[c] = 1.0; arr[d] = 1.0; + +let test: number = 1.0; +arr[1 as int]; +arr[test as int]; \ No newline at end of file diff --git a/ets2panda/linter/test/main/index_negative.ets.arkts2.json b/ets2panda/linter/test/main/index_negative.ets.arkts2.json index d8c630fa30..df9e6cfd3e 100755 --- a/ets2panda/linter/test/main/index_negative.ets.arkts2.json +++ b/ets2panda/linter/test/main/index_negative.ets.arkts2.json @@ -998,7 +998,7 @@ "line": 88, "column": 5, "endLine": 88, - "endColumn": 7, + "endColumn": 17, "problem": "ArrayIndexExprType", "suggest": "", "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", @@ -1018,7 +1018,7 @@ "line": 89, "column": 5, "endLine": 89, - "endColumn": 7, + "endColumn": 17, "problem": "ArrayIndexExprType", "suggest": "", "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", @@ -1038,7 +1038,7 @@ "line": 90, "column": 5, "endLine": 90, - "endColumn": 7, + "endColumn": 17, "problem": "ArrayIndexExprType", "suggest": "", "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", @@ -1168,7 +1168,7 @@ "line": 99, "column": 5, "endLine": 99, - "endColumn": 14, + "endColumn": 24, "problem": "ArrayIndexExprType", "suggest": "", "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", @@ -1188,7 +1188,7 @@ "line": 100, "column": 5, "endLine": 100, - "endColumn": 8, + "endColumn": 18, "problem": "ArrayIndexExprType", "suggest": "", "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)", -- Gitee