From 215e23deb51f26a4f16c3635412ce95d604af0fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9F=A0?= Date: Mon, 9 Jun 2025 14:54:17 +0800 Subject: [PATCH] Fix bugs for arkts-obj-no-constructor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue:https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICD9LH Test scenarios:Fix bugs for arkts-obj-no-constructor Signed-off-by: 钟柠 --- ets2panda/linter/src/lib/CookBookMsg.ts | 2 +- ets2panda/linter/src/lib/TypeScriptLinter.ts | 12 +++---- .../linter/test/main/class_no_constructor.ets | 10 ++++++ .../main/class_no_constructor.ets.arkts2.json | 32 ++++++++++++++++++- .../main/class_no_constructor.ets.migrate.ets | 10 ++++++ .../class_no_constructor.ets.migrate.json | 32 ++++++++++++++++++- 6 files changed, 87 insertions(+), 11 deletions(-) diff --git a/ets2panda/linter/src/lib/CookBookMsg.ts b/ets2panda/linter/src/lib/CookBookMsg.ts index 0f0fcffa77..0682f850be 100644 --- a/ets2panda/linter/src/lib/CookBookMsg.ts +++ b/ets2panda/linter/src/lib/CookBookMsg.ts @@ -245,7 +245,7 @@ cookBookTag[210] = cookBookTag[211] = 'No two case constant expressions have identical values.(arkts-case-expr)'; cookBookTag[212] = 'The index expression must be zero or positive value.(arkts-array-index-negative)'; cookBookTag[213] = 'Class cannot have static codeblocks. (arkts-class-lazy-import)'; -cookBookTag[214] = 'The Class object does not have a constructor. (arkts-no-arkts-constructor)'; +cookBookTag[214] = 'Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)'; cookBookTag[215] = 'Array bound not checked. (arkts-runtime-array-check)'; cookBookTag[222] = 'Import for side-effect only is prohibited.(arkts-no-side-effect-import)'; cookBookTag[232] = 'Lazy import is not supported(arkts-no-lazy-import)'; diff --git a/ets2panda/linter/src/lib/TypeScriptLinter.ts b/ets2panda/linter/src/lib/TypeScriptLinter.ts index e2ebe7badf..d8c9cd2892 100644 --- a/ets2panda/linter/src/lib/TypeScriptLinter.ts +++ b/ets2panda/linter/src/lib/TypeScriptLinter.ts @@ -1376,6 +1376,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { this.handleLimitedVoidTypeFromSdkOnPropertyAccessExpression(node as ts.PropertyAccessExpression); this.checkDepricatedIsConcurrent(node as ts.PropertyAccessExpression); this.propertyAccessExpressionForBuiltin(node as ts.PropertyAccessExpression); + this.checkConstrutorAccess(node as ts.PropertyAccessExpression); if (ts.isCallExpression(node.parent) && node === node.parent.expression) { return; @@ -5058,17 +5059,13 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { ); } - private checkConstrutorAccess(newExpr: ts.NewExpression): void { + private checkConstrutorAccess(propertyAccessExpr: ts.PropertyAccessExpression): void { if (!this.options.arkts2 || !this.useStatic) { return; } - if (!ts.isPropertyAccessExpression(newExpr.parent)) { - return; - } - - if (newExpr.parent.name.text === 'constructor') { - this.incrementCounters(newExpr.parent, FaultID.NoConstructorOnClass); + if (propertyAccessExpr.name.text === 'constructor') { + this.incrementCounters(propertyAccessExpr, FaultID.NoConstructorOnClass); } } @@ -5108,7 +5105,6 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { this.checkForInterfaceInitialization(tsNewExpr); this.handleSharedArrayBuffer(tsNewExpr); this.handleSdkDuplicateDeclName(tsNewExpr); - this.checkConstrutorAccess(tsNewExpr); this.checkCreatingPrimitiveTypes(tsNewExpr); if (this.options.advancedClassChecks || this.options.arkts2) { diff --git a/ets2panda/linter/test/main/class_no_constructor.ets b/ets2panda/linter/test/main/class_no_constructor.ets index c13aa9b54a..deb0598bc5 100644 --- a/ets2panda/linter/test/main/class_no_constructor.ets +++ b/ets2panda/linter/test/main/class_no_constructor.ets @@ -17,3 +17,13 @@ class A {} const variable = new A().constructor + +let a = new A() +console.log(a.constructor + ""); + +function foo3(): A { + return new A(); +} +console.log(foo3().constructor + ""); + +console.log(A.constructor + ""); \ No newline at end of file diff --git a/ets2panda/linter/test/main/class_no_constructor.ets.arkts2.json b/ets2panda/linter/test/main/class_no_constructor.ets.arkts2.json index 12f07f6aef..940e32b5f0 100644 --- a/ets2panda/linter/test/main/class_no_constructor.ets.arkts2.json +++ b/ets2panda/linter/test/main/class_no_constructor.ets.arkts2.json @@ -21,7 +21,37 @@ "endColumn": 37, "problem": "NoConstructorOnClass", "suggest": "", - "rule": "The Class object does not have a constructor. (arkts-no-arkts-constructor)", + "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)", + "severity": "ERROR" + }, + { + "line": 22, + "column": 13, + "endLine": 22, + "endColumn": 26, + "problem": "NoConstructorOnClass", + "suggest": "", + "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)", + "severity": "ERROR" + }, + { + "line": 27, + "column": 13, + "endLine": 27, + "endColumn": 31, + "problem": "NoConstructorOnClass", + "suggest": "", + "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)", + "severity": "ERROR" + }, + { + "line": 29, + "column": 13, + "endLine": 29, + "endColumn": 26, + "problem": "NoConstructorOnClass", + "suggest": "", + "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)", "severity": "ERROR" } ] diff --git a/ets2panda/linter/test/main/class_no_constructor.ets.migrate.ets b/ets2panda/linter/test/main/class_no_constructor.ets.migrate.ets index c13aa9b54a..deb0598bc5 100644 --- a/ets2panda/linter/test/main/class_no_constructor.ets.migrate.ets +++ b/ets2panda/linter/test/main/class_no_constructor.ets.migrate.ets @@ -17,3 +17,13 @@ class A {} const variable = new A().constructor + +let a = new A() +console.log(a.constructor + ""); + +function foo3(): A { + return new A(); +} +console.log(foo3().constructor + ""); + +console.log(A.constructor + ""); \ No newline at end of file diff --git a/ets2panda/linter/test/main/class_no_constructor.ets.migrate.json b/ets2panda/linter/test/main/class_no_constructor.ets.migrate.json index 12f07f6aef..940e32b5f0 100644 --- a/ets2panda/linter/test/main/class_no_constructor.ets.migrate.json +++ b/ets2panda/linter/test/main/class_no_constructor.ets.migrate.json @@ -21,7 +21,37 @@ "endColumn": 37, "problem": "NoConstructorOnClass", "suggest": "", - "rule": "The Class object does not have a constructor. (arkts-no-arkts-constructor)", + "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)", + "severity": "ERROR" + }, + { + "line": 22, + "column": 13, + "endLine": 22, + "endColumn": 26, + "problem": "NoConstructorOnClass", + "suggest": "", + "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)", + "severity": "ERROR" + }, + { + "line": 27, + "column": 13, + "endLine": 27, + "endColumn": 31, + "problem": "NoConstructorOnClass", + "suggest": "", + "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)", + "severity": "ERROR" + }, + { + "line": 29, + "column": 13, + "endLine": 29, + "endColumn": 26, + "problem": "NoConstructorOnClass", + "suggest": "", + "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)", "severity": "ERROR" } ] -- Gitee