diff --git a/ets2panda/linter/src/lib/TypeScriptLinter.ts b/ets2panda/linter/src/lib/TypeScriptLinter.ts index 1ba26f68a66fd4705c83ef78e502ecdc7a6cb8b8..ec2f4c2862d83906932b181db46a05c3e91f80e2 100644 --- a/ets2panda/linter/src/lib/TypeScriptLinter.ts +++ b/ets2panda/linter/src/lib/TypeScriptLinter.ts @@ -6649,13 +6649,12 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { if (!this.options.arkts2) { return; } - if ( - !( - this.tsUtils.isOrDerivedFrom(lhsType, this.tsUtils.isArray) && - this.tsUtils.isOrDerivedFrom(rhsType, this.tsUtils.isArray) && - lhsType !== rhsType - ) - ) { + const isArray = + this.tsUtils.isOrDerivedFrom(lhsType, this.tsUtils.isArray) && + this.tsUtils.isOrDerivedFrom(rhsType, this.tsUtils.isArray); + const isTuple = + this.tsUtils.isOrDerivedFrom(lhsType, TsUtils.isTuple) && this.tsUtils.isOrDerivedFrom(rhsType, TsUtils.isTuple); + if (!((isArray || isTuple) && lhsType !== rhsType)) { return; } diff --git a/ets2panda/linter/test/main/arkts-array-type-immutable.ets b/ets2panda/linter/test/main/arkts-array-type-immutable.ets index c0d79ba0658af6cb3cf6311beede7039474c380f..8f805d822991f5155bfc793f9a0f344ca9c1bc33 100644 --- a/ets2panda/linter/test/main/arkts-array-type-immutable.ets +++ b/ets2panda/linter/test/main/arkts-array-type-immutable.ets @@ -37,7 +37,7 @@ function test(a: number[]): void { } let arrayTypeImmutableA2: [number] = [1]; -let arrayTypeImmutableB2: [number | string] = arrayTypeImmutableA2; +let arrayTypeImmutableB2: [number | string] = arrayTypeImmutableA2; // error class ArrayTypeImmutableA{ arrayTypeImmutableA: number[] = [1]; @@ -45,8 +45,8 @@ class ArrayTypeImmutableA{ arrayTypeImmutableB1: (number | string)[] = this.arrayTypeImmutableA; // error arrayTypeImmutableA2: [number] = [1]; - arrayTypeImmutableB2: [number | string] = arrayTypeImmutableA2; - arrayTypeImmutableB21: [number | string] = this.arrayTypeImmutableA2; + arrayTypeImmutableB2: [number | string] = arrayTypeImmutableA2; // error + arrayTypeImmutableB21: [number | string] = this.arrayTypeImmutableA2; // error } interface IA { diff --git a/ets2panda/linter/test/main/arkts-array-type-immutable.ets.arkts2.json b/ets2panda/linter/test/main/arkts-array-type-immutable.ets.arkts2.json index fa6b50ae6c7b630a3d41a333f3b2360dcc316ab1..e2441885c34ec65cda9f6053db97f9fcbe36c3af 100644 --- a/ets2panda/linter/test/main/arkts-array-type-immutable.ets.arkts2.json +++ b/ets2panda/linter/test/main/arkts-array-type-immutable.ets.arkts2.json @@ -134,6 +134,16 @@ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", "severity": "ERROR" }, + { + "line": 40, + "column": 5, + "endLine": 40, + "endColumn": 67, + "problem": "ArrayTypeImmutable", + "suggest": "", + "rule": "Array type is immutable in ArkTS1.2 (arkts-array-type-immutable)", + "severity": "ERROR" + }, { "line": 43, "column": 36, @@ -174,6 +184,26 @@ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)", "severity": "ERROR" }, + { + "line": 48, + "column": 3, + "endLine": 48, + "endColumn": 66, + "problem": "ArrayTypeImmutable", + "suggest": "", + "rule": "Array type is immutable in ArkTS1.2 (arkts-array-type-immutable)", + "severity": "ERROR" + }, + { + "line": 49, + "column": 3, + "endLine": 49, + "endColumn": 72, + "problem": "ArrayTypeImmutable", + "suggest": "", + "rule": "Array type is immutable in ArkTS1.2 (arkts-array-type-immutable)", + "severity": "ERROR" + }, { "line": 67, "column": 6,