diff --git a/ets2panda/linter/src/lib/autofixes/Autofixer.ts b/ets2panda/linter/src/lib/autofixes/Autofixer.ts index a29f4742e47f407ad4db9cf4e8c7cddbfe64aea1..d03627bf80365a797e2a2edb5fbfb00afa2856e9 100644 --- a/ets2panda/linter/src/lib/autofixes/Autofixer.ts +++ b/ets2panda/linter/src/lib/autofixes/Autofixer.ts @@ -4918,7 +4918,6 @@ export class Autofixer { return this.printer.printNode(ts.EmitHint.Unspecified, arg, srcFile); }). join(', ')}>`; - // Insert the type arguments immediately after the constructor name const insertPos = node.expression.getEnd(); return [{ start: insertPos, end: insertPos, replacementText: typeArgsText }]; @@ -4960,7 +4959,6 @@ export class Autofixer { ): Autofix[] | undefined { const srcFile = node.getSourceFile(); const identifier = node.expression; - const args = node.arguments; const hasValidArgs = typeArgs.some((arg) => { return arg?.typeName && ts.isIdentifier(arg.typeName); }); @@ -4973,9 +4971,12 @@ export class Autofixer { if (hasAnyType) { return undefined; } - const newExpression = ts.factory.createNewExpression(identifier, typeArgs, args); - const text = this.printer.printNode(ts.EmitHint.Unspecified, newExpression, srcFile); - return [{ start: node.getStart(), end: node.getEnd(), replacementText: text }]; + const typeArgsText = `<${typeArgs?. + map((arg) => { + return this.printer.printNode(ts.EmitHint.Unspecified, arg, srcFile); + }). + join(', ')}>`; + return [{ start: identifier.getEnd(), end: identifier.getEnd(), replacementText: typeArgsText }]; } static getTypeArgumentsFromType(type: ts.Type): ts.Type[] { diff --git a/ets2panda/linter/test/main/func_inferred_type_args_2.ets b/ets2panda/linter/test/main/func_inferred_type_args_2.ets index 5a79d6f48059be3b840bd34a2de7f06f555218b3..0df022ea8f84420c74958141b51c379728356e93 100644 --- a/ets2panda/linter/test/main/func_inferred_type_args_2.ets +++ b/ets2panda/linter/test/main/func_inferred_type_args_2.ets @@ -97,4 +97,14 @@ new A(new C()) let a: Array | undefined = new Array(); let aa: Array | Set | undefined = new Array(); let b: Array | Array | undefined = new Array(); -let test: string[] = new Array(); \ No newline at end of file +let test: string[] = new Array(); + +class A { + test(key: string): Promise { + if (key == undefined || key.length == 0.0) { + return new Promise((resolve, reject) => { + reject("empty key");}); + } else { + } + } +} \ No newline at end of file diff --git a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.arkts2.json b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.arkts2.json index 81e3df826f6e04c15525ac0d1e1e403821d2945d..91c50bde479a54f2df97fcc33040d64191a5eed3 100644 --- a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.arkts2.json +++ b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.arkts2.json @@ -474,6 +474,16 @@ "rule": "Type inference in case of generic function calls is limited (arkts-no-inferred-generic-params)", "severity": "ERROR" }, + { + "line": 105, + "column": 14, + "endLine": 106, + "endColumn": 31, + "problem": "GenericCallNoTypeArgs", + "suggest": "", + "rule": "Type inference in case of generic function calls is limited (arkts-no-inferred-generic-params)", + "severity": "ERROR" + }, { "line": 84, "column": 2, @@ -513,6 +523,16 @@ "suggest": "", "rule": "The ArkUI interface \"CommonAttribute\" should be imported before it is used (arkui-modular-interface)", "severity": "ERROR" + }, + { + "line": 103, + "column": 22, + "endLine": 103, + "endColumn": 37, + "problem": "StrictDiagnostic", + "suggest": "Function lacks ending return statement and return type does not include 'undefined'.", + "rule": "Function lacks ending return statement and return type does not include 'undefined'.", + "severity": "ERROR" } ] } \ No newline at end of file diff --git a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.autofix.json b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.autofix.json index 202b0cc81c3e06d808bf74a138fdc5d8972386ac..f32d5755fd273d47cffcda090407101b362743b8 100644 --- a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.autofix.json +++ b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.autofix.json @@ -631,9 +631,9 @@ "problem": "GenericCallNoTypeArgs", "autofix": [ { - "start": 2264, - "end": 2275, - "replacementText": "new Array()", + "start": 2273, + "end": 2273, + "replacementText": "", "line": 83, "column": 5, "endLine": 83, @@ -727,6 +727,27 @@ "rule": "Type inference in case of generic function calls is limited (arkts-no-inferred-generic-params)", "severity": "ERROR" }, + { + "line": 105, + "column": 14, + "endLine": 106, + "endColumn": 31, + "problem": "GenericCallNoTypeArgs", + "autofix": [ + { + "start": 2880, + "end": 2880, + "replacementText": "", + "line": 105, + "column": 14, + "endLine": 106, + "endColumn": 31 + } + ], + "suggest": "", + "rule": "Type inference in case of generic function calls is limited (arkts-no-inferred-generic-params)", + "severity": "ERROR" + }, { "line": 84, "column": 2, @@ -810,6 +831,16 @@ "suggest": "", "rule": "The ArkUI interface \"CommonAttribute\" should be imported before it is used (arkui-modular-interface)", "severity": "ERROR" + }, + { + "line": 103, + "column": 22, + "endLine": 103, + "endColumn": 37, + "problem": "StrictDiagnostic", + "suggest": "Function lacks ending return statement and return type does not include 'undefined'.", + "rule": "Function lacks ending return statement and return type does not include 'undefined'.", + "severity": "ERROR" } ] } \ No newline at end of file diff --git a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.json b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.json index 616182be4e0c7ce4752b97ba2f6e5fa0230976f9..c3cf571d47c001259b422014701fc4184dc4faea 100644 --- a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.json +++ b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.json @@ -123,6 +123,16 @@ "suggest": "", "rule": "Type inference in case of generic function calls is limited (arkts-no-inferred-generic-params)", "severity": "ERROR" + }, + { + "line": 103, + "column": 22, + "endLine": 103, + "endColumn": 37, + "problem": "StrictDiagnostic", + "suggest": "Function lacks ending return statement and return type does not include 'undefined'.", + "rule": "Function lacks ending return statement and return type does not include 'undefined'.", + "severity": "ERROR" } ] } \ No newline at end of file diff --git a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.migrate.ets b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.migrate.ets index bdd57c5703a22d7da7870c58acf28c54bd9d4895..92362e1c98776138347d265fd4323e1ec68dfe74 100644 --- a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.migrate.ets +++ b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.migrate.ets @@ -104,4 +104,14 @@ new A(new C()) let a: Array | undefined = new Array(); let aa: Array | Set | undefined = new Array(); let b: Array | Array | undefined = new Array(); -let test: string[] = new Array(); \ No newline at end of file +let test: string[] = new Array(); + +class A { + test(key: string): Promise { + if (key == undefined || key.length == 0.0) { + return new Promise((resolve, reject) => { + reject("empty key");}); + } else { + } + } +} \ No newline at end of file diff --git a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.migrate.json b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.migrate.json index 620729cb92bfe0d9006df2b3d38e1ef3fb11aa44..e45393b94acd8d318778cae9b74cd0dedc943962 100644 --- a/ets2panda/linter/test/main/func_inferred_type_args_2.ets.migrate.json +++ b/ets2panda/linter/test/main/func_inferred_type_args_2.ets.migrate.json @@ -243,6 +243,16 @@ "suggest": "", "rule": "Type inference in case of generic function calls is limited (arkts-no-inferred-generic-params)", "severity": "ERROR" + }, + { + "line": 110, + "column": 22, + "endLine": 110, + "endColumn": 37, + "problem": "StrictDiagnostic", + "suggest": "Function lacks ending return statement and return type does not include 'undefined'.", + "rule": "Function lacks ending return statement and return type does not include 'undefined'.", + "severity": "ERROR" } ] } \ No newline at end of file