From d72abd9fc582599efe687fe89845c50a301bd230 Mon Sep 17 00:00:00 2001 From: zhangkai366 Date: Sat, 17 May 2025 15:10:09 +0800 Subject: [PATCH] Modify the duplicated code snippet Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICQ45Y Test: grammar&ut Signed-off-by: zhangkai366 Change-Id: I73b8537365335417ac3baaa02096da527356962d --- .../advanced_type/intersection_types.ts | 37 ++++++++++--------- .../grammar/advanced_type/predefined_types.ts | 16 ++++---- .../predefined_types_expected.txt | 37 +++++++++++++++++++ ...umericLiteralsWithTrailingDecimalPoints.ts | 32 ++++++++-------- ...ralsWithTrailingDecimalPoints_expected.txt | 2 +- ...WithTrailingDecimalPoints_expected_map.txt | 2 +- .../interface_class_method.ts | 22 +++++------ .../grammar/module_validation/name_space.ts | 36 +++++++++--------- 8 files changed, 110 insertions(+), 74 deletions(-) create mode 100644 arkguard/test/grammar/advanced_type/predefined_types_expected.txt diff --git a/arkguard/test/grammar/advanced_type/intersection_types.ts b/arkguard/test/grammar/advanced_type/intersection_types.ts index 182de6165a..6d4457b850 100644 --- a/arkguard/test/grammar/advanced_type/intersection_types.ts +++ b/arkguard/test/grammar/advanced_type/intersection_types.ts @@ -15,35 +15,36 @@ import assert = require('assert'); -function extend(first: T, second: U): T & U { - let result = {}; - for (let id in first) { - (result)[id] = (first)[id]; +function mergeObjects(primary: T, secondary: U): T & U { + const merged = {} as T & U; + + for (const prop in primary) { + merged[prop] = primary[prop] as any; } - for (let id in second) { - if (!result.hasOwnProperty(id)) { - (result)[id] = (second)[id]; + + for (const prop in secondary) { + if (!Object.prototype.hasOwnProperty.call(merged, prop)) { + merged[prop] = secondary[prop] as any; } } - return result; + return merged; } -class Person { - constructor(public name: string) { - } +class Human { + constructor(public username: string) {} } -interface Loggable { - log(): void; +interface LoggingCapability { + writeLog(): void; } -class ConsoleLogger implements Loggable { - log(): void { +class TerminalLogger implements LoggingCapability { + writeLog(): void { console.log('Jim'); } } -const jim = extend(new Person('Jim'), new ConsoleLogger()); -const n = jim.name; +const user = mergeObjects(new Human('Jim'), new TerminalLogger()); +const currentUser = user.username; -assert(n === 'Jim', 'success'); +assert(currentUser === 'Jim', 'success'); diff --git a/arkguard/test/grammar/advanced_type/predefined_types.ts b/arkguard/test/grammar/advanced_type/predefined_types.ts index 22d55829e5..d12d9d5aca 100644 --- a/arkguard/test/grammar/advanced_type/predefined_types.ts +++ b/arkguard/test/grammar/advanced_type/predefined_types.ts @@ -13,8 +13,6 @@ * limitations under the License. */ -import assert = require('assert'); - type T00 = Exclude<'a' | 'b' | 'c' | 'd', 'a' | 'c' | 'f'>; // 'b' | 'd' type T01 = Extract<'a' | 'b' | 'c' | 'd', 'a' | 'c' | 'f'>; // 'a' | 'c' @@ -33,13 +31,13 @@ class C { y = 0; } -type T10 = ReturnType<() => string>; // string -type T11 = ReturnType<(s: string) => void>; // void -type T12 = ReturnType<(() => T)>; // {} -type T13 = ReturnType<(() => T)>; // number[] -type T14 = ReturnType; // { a: number, b: string } -type T15 = ReturnType; // any -type T16 = ReturnType; // any +type ResultString = ReturnType<() => string>; // string +type ResultVoid = ReturnType<(s: string) => void>; // void +type ResultGeneric = ReturnType<(() => T)>; // {} +type ResultConstrained = ReturnType<(() => T)>; // number[] +type ResultInstance = ReturnType; // { a: number, b: string } +type ResultAny = ReturnType; // any +type ResultNever = ReturnType; // any type T20 = InstanceType; // C type T21 = InstanceType; // any diff --git a/arkguard/test/grammar/advanced_type/predefined_types_expected.txt b/arkguard/test/grammar/advanced_type/predefined_types_expected.txt new file mode 100644 index 0000000000..b22f02196e --- /dev/null +++ b/arkguard/test/grammar/advanced_type/predefined_types_expected.txt @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +type l1 = Exclude<'a' | 'b' | 'c' | 'd', 'a' | 'c' | 'f'>; // 'b' | 'd' +type m1 = Extract<'a' | 'b' | 'c' | 'd', 'a' | 'c' | 'f'>; // 'a' | 'c' +type n1 = Exclude void), Function>; // string | number +type o1 = Extract void), Function>; // () => void +type q1 = NonNullable; // string | number +type s1 = NonNullable<(() => string) | string[] | null | undefined>; // (() => string) | string[] +function j1(g2: string): any { + return { a: 1, b: g2 }; +} +class t1 { + x = 0; + y = 0; +} +type u1 = ReturnType<() => string>; // string +type v1 = ReturnType<(s: string) => void>; // void +type w1 = ReturnType<(() => T)>; // {} +type z1 = ReturnType<(() => T)>; // number[] +type a2 = ReturnType; // { a: number, b: string } +type b2 = ReturnType; // any +type c2 = ReturnType; // any +type d2 = InstanceType; // C +type e2 = InstanceType; // any +type f2 = InstanceType; // any diff --git a/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints.ts b/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints.ts index ff33413147..4b9cb71089 100644 --- a/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints.ts +++ b/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints.ts @@ -18,33 +18,33 @@ 1. + 2.0 + 3.; var i: number = 1; -var test1 = i.toString(); -var test3 = 3 .toString(); -var test4 = 3 .toString(); -var test5 = 3 .toString(); -var test6 = 3.['toString'](); -var test7 = 3 +var compactTest1 = i.toString(); +var compactTest3 = 3 .toString(); +var compactTest4 = 3 .toString(); +var compactTest5 = 3 .toString(); +var compactTest6 = 3.['toString'](); +var compactTest7 = 3 .toString(); -var test8 = new Number(4).toString(); -var test9 = 3. + 3.; -var test10 = 0 /* comment */.toString(); -var test11 = 3. /* comment */.toString(); -var test12 = 3 +var compactTest8 = new Number(4).toString(); +var compactTest9 = 3. + 3.; +var compactTest10 = 0 /* comment */.toString(); +var compactTest11 = 3. /* comment */.toString(); +var compactTest12 = 3 /* comment */ .toString(); var test122 = 3 /* comment */.toString(); var test1222 = 3 .toString(); -var test13 = 3. +var compactTest13 = 3. /* comment */.toString(); -var test14 = 3 +var compactTest14 = 3 // comment .toString(); -var test15 = 3. +var compactTest15 = 3. // comment .toString(); -var test16 = 3 // comment time +var compactTest16 = 3 // comment time .toString(); -var test17 = 3. // comment time again +var compactTest17 = 3. // comment time again .toString(); \ No newline at end of file diff --git a/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints_expected.txt b/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints_expected.txt index c00d3215e5..91796cd9c1 100644 --- a/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints_expected.txt +++ b/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints_expected.txt @@ -1 +1 @@ -1..toString();1.0.toString();1. + 2.0 + 3.;var i: number = 1;var test1 = i.toString();var test3 = 3..toString();var test4 = 3..toString();var test5 = 3..toString();var test6 = 3.['toString']();var test7 = 3 .toString();var test8 = new Number(4).toString();var test9 = 3. + 3.;var test10 = 0 .toString();var test11 = 3. .toString();var test12 = 3 .toString();var test122 = 3 .toString();var test1222 = 3 .toString();var test13 = 3. .toString();var test14 = 3 .toString();var test15 = 3. .toString();var test16 = 3 .toString();var test17 = 3. .toString(); \ No newline at end of file +1..toString();1.0.toString();1. + 2.0 + 3.;var i: number = 1;var compactTest1 = i.toString();var compactTest3 = 3..toString();var compactTest4 = 3..toString();var compactTest5 = 3..toString();var compactTest6 = 3.['toString']();var compactTest7 = 3 .toString();var compactTest8 = new Number(4).toString();var compactTest9 = 3. + 3.;var compactTest10 = 0 .toString();var compactTest11 = 3. .toString();var compactTest12 = 3 .toString();var test122 = 3 .toString();var test1222 = 3 .toString();var compactTest13 = 3. .toString();var compactTest14 = 3 .toString();var compactTest15 = 3. .toString();var compactTest16 = 3 .toString();var compactTest17 = 3. .toString(); \ No newline at end of file diff --git a/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints_expected_map.txt b/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints_expected_map.txt index 4e7f94de3f..69efdc4f7c 100644 --- a/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints_expected_map.txt +++ b/arkguard/test/grammar/compact/numericLiteralsWithTrailingDecimalPoints_expected_map.txt @@ -6,5 +6,5 @@ "test/grammar/compact/numericLiteralsWithTrailingDecimalPoints.ts" ], "names": [], - "mappings": "AAeA,EAAE,CAAC,QAAQ,EAAE,CACb,GAAG,CAAC,QAAQ,EAAE,CACd,EAAE,GAAG,GAAG,GAAG,EAAE,CAEb,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,CACjB,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CACxB,IAAI,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,CACzB,IAAI,KAAK,GAAG,CAAC,EAAK,QAAQ,EAAE,CAC5B,IAAI,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,CACzB,IAAI,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAC5B,IAAI,KAAK,GAAG,CAAC,EACV,QAAQ,EAAE,CACb,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CACpC,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,CACnB,IAAI,MAAM,GAAG,CAAC,CAAc,CAAC,QAAQ,EAAE,CACvC,IAAI,MAAM,GAAG,EAAE,CAAc,CAAC,QAAQ,EAAE,CACxC,IAAI,MAAM,GAAG,CAAC,CACC,EAAE,QAAQ,EAAE,CAC3B,IAAI,OAAO,GAAG,CAAC,CACF,EAAC,QAAQ,EAAE,CACxB,IAAI,QAAQ,GAAG,CAAC,EAEb,QAAQ,EAAE,CACb,IAAI,MAAM,GAAG,EAAE,CACA,EAAC,QAAQ,EAAE,CAC1B,IAAI,MAAM,GAAG,CAAC,CACF,CACT,QAAQ,EAAE,CACb,IAAI,MAAM,GAAG,EAAE,CACH,CACT,QAAQ,EAAE,CACb,IAAI,MAAM,GAAG,CAAC,CAAiB,CAC5B,QAAQ,EAAE,CACb,IAAI,MAAM,GAAG,EAAE,CAAsB,CAClC,QAAQ,EAAE,CAAC" + "mappings": "AAeA,EAAE,CAAC,QAAQ,EAAE,CACb,GAAG,CAAC,QAAQ,EAAE,CACd,EAAE,GAAG,GAAG,GAAG,EAAE,CAEb,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,CACjB,IAAI,YAAY,GAAG,CAAC,CAAC,QAAQ,EAAE,CAC/B,IAAI,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAChC,IAAI,YAAY,GAAG,CAAC,EAAK,QAAQ,EAAE,CACnC,IAAI,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAChC,IAAI,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CACnC,IAAI,YAAY,GAAG,CAAC,EACjB,QAAQ,EAAE,CACb,IAAI,YAAY,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC3C,IAAI,YAAY,GAAG,EAAE,GAAG,EAAE,CAC1B,IAAI,aAAa,GAAG,CAAC,CAAc,CAAC,QAAQ,EAAE,CAC9C,IAAI,aAAa,GAAG,EAAE,CAAc,CAAC,QAAQ,EAAE,CAC/C,IAAI,aAAa,GAAG,CAAC,CACN,EAAE,QAAQ,EAAE,CAC3B,IAAI,OAAO,GAAG,CAAC,CACF,EAAC,QAAQ,EAAE,CACxB,IAAI,QAAQ,GAAG,CAAC,EAEb,QAAQ,EAAE,CACb,IAAI,aAAa,GAAG,EAAE,CACP,EAAC,QAAQ,EAAE,CAC1B,IAAI,aAAa,GAAG,CAAC,CACT,CACT,QAAQ,EAAE,CACb,IAAI,aAAa,GAAG,EAAE,CACV,CACT,QAAQ,EAAE,CACb,IAAI,aAAa,GAAG,CAAC,CAAiB,CACnC,QAAQ,EAAE,CACb,IAAI,aAAa,GAAG,EAAE,CAAsB,CACzC,QAAQ,EAAE,CAAC" } \ No newline at end of file diff --git a/arkguard/test/grammar/interface_validation/interface_class_method.ts b/arkguard/test/grammar/interface_validation/interface_class_method.ts index f9bea5f4f4..1636c31168 100644 --- a/arkguard/test/grammar/interface_validation/interface_class_method.ts +++ b/arkguard/test/grammar/interface_validation/interface_class_method.ts @@ -15,27 +15,27 @@ import assert = require('assert'); -interface ClockInterface { - currentTime: Date; +interface TimepieceInterface { + currentDateTime: Date; - setTime(d: Date); + updateTime(newTime: Date); } -class Clock implements ClockInterface { - currentTime: Date; +class WallClock implements TimepieceInterface { + currentDateTime: Date; - setTime(d: Date) { - this.currentTime = d; + updateTime(newTime: Date) { + this.currentDateTime = newTime; } - constructor(h: number, m: number) { + constructor(hour: number, minute: number) { } } -let nowClock = new Clock(3, 20); +let nowClock = new WallClock(3, 20); let now = Date.prototype; -nowClock.setTime(now); +nowClock.updateTime(now); -assert(nowClock.currentTime === now, 'success'); \ No newline at end of file +assert(nowClock.currentDateTime === now, 'success'); \ No newline at end of file diff --git a/arkguard/test/grammar/module_validation/name_space.ts b/arkguard/test/grammar/module_validation/name_space.ts index bc9379802a..582fb79513 100644 --- a/arkguard/test/grammar/module_validation/name_space.ts +++ b/arkguard/test/grammar/module_validation/name_space.ts @@ -15,33 +15,33 @@ import assert = require('assert'); -interface StringValidator { - isAcceptable(s: string): boolean; +interface TextValidationRule { + isValid(text: string): boolean; } -let lettersRegexp = /^[A-Za-z]+$/; -let numberRegexp = /^[0-9]+$/; +const alphabeticPattern = /^[A-Za-z]+$/; +const numericPattern = /^[0-9]+$/; -class LettersOnlyValidator implements StringValidator { - isAcceptable(s: string) { - return lettersRegexp.test(s); +class AlphabeticalValidator implements TextValidationRule { + isValid(text: string) { + return alphabeticPattern.test(text); } } -class ZipCodeValidator implements StringValidator { - isAcceptable(s: string) { - return s.length === 5 && numberRegexp.test(s); +class PostalCodeValidator implements TextValidationRule { + isValid(text: string) { + return text.length === 5 && numericPattern.test(text); } } -// Some samples to try -let strings = ["Hello", "98052", "101"]; +// Test cases +const testInputs = ["Hello", "98052", "101"]; -// Validators to use -let validators: { [s: string]: StringValidator; } = {}; -validators["ZIP code"] = new ZipCodeValidator(); -validators["Letters only"] = new LettersOnlyValidator(); +// Validation registry +const validationRules: { [ruleName: string]: TextValidationRule } = {}; +validationRules["Postal Code"] = new PostalCodeValidator(); +validationRules["Alphabetical"] = new AlphabeticalValidator(); -assert(validators["Letters only"].isAcceptable(strings[0]), 'success'); -assert(validators["ZIP code"].isAcceptable(strings[1]), 'success'); +assert(validationRules["Alphabetical"].isValid(testInputs[0]), 'success'); +assert(validationRules["Postal Code"].isValid(testInputs[1]), 'success'); -- Gitee