modify to-do list doc

Signed-off-by: gou-jingjing <goujingjing@kaihong.com>
This commit is contained in:
gou-jingjing 2024-03-26 11:04:09 +08:00
parent 705368315b
commit 3a7f87591c

View File

@ -1,25 +1,36 @@
# To-do list
## issue
## History
| 需求 | 新需求提供了什么功能? | 该需求带来的价值、应用场景? |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------- |
| [新需求]:工具生成代码中增加打印调试信息 | 工具生成代码中增加关键节点信息打印,便于开发者确认流程 | 开发者通过关键信息打印,可以迅速定位问题 |
| [新需求]: 回调返回值不支持number类型&&箭头函数参数为回调函数时,编译报错 | 1.当前回调返回值只支持string/boolean/void, 不支持其为number类型<br/>2.箭头函数的参数是箭头函数形式的回调函数时,编译报错。<br/>.d.ts文件内容如下<br/>declare namespace napitest {<br />export class A {<br />a: string;<br />}<br />export interface InterfaceA {<br />callFunction: (result: number) => void;<br />}<br />export interface InterfaceB {<br />funcByClass: (a: A, b: number, callback: (result: number) => void, c: InterfaceA) => number;<br />}<br />// export const addByClass: (a: A, b: number, callback: (result: number) => void, c: InterfaceA) => number;<br />}<br />export default napitest; | 扩展工具的特性范围,提高工具可用性 |
| [新需求]: (等待更佳解决方案)分离生成的工具代码普通方法和回调方法,防止嵌套使用头文件 | 需求背景: 当前工具生成的中间代码,普通方法和回调方法的接口均在一个头文件里,这样会导致嵌套使用头文件造成可读性不强,需要整改生成代码将普通方法和回调方法的接口分离到不同头文件,增加易用性和可读性<br />需求阻塞点:<br/>由于工具生成的中间代码均在 XXXmiddle.cpp 中将XXX.h分离成XXXToC.h与XXXToJs.h之后XXXmiddle.cpp中include<XXXToC.h>, 若.d.ts中的文件声明一个interface类中全部定义为注册回调的方法按照预期应该将该interface声明在XXXToJs.h中而由于注册回调的中间代码都在XXXmiddle.cpp中 XXXmiddle.cpp中该interface的构造函数用到了XXXToJs.h中定义的类这时若要解决这个问题就需将XXXmiddle.cpp文件进行拆分这样代码改动太大需寻求更佳的解决方案<br />当前进展:<br/>当前修改无法跑过test_on测试用例集 | |
| [新需求]: [napi_tool] on/off第二个参数支持object | [napi_tool] on/off第二个参数支持object其中object中定义需要注册的回调<br />function on(type: 'missionEvent', listener: MissionListener): number;<br />export interface MissionListener {<br />onMissionCreated(mission: number): void;<br />onMissionDestroyed(mission: number): void;<br />} | 扩展注册的使用场景,增加工具易用性 |
| [新需求1130后]: on注册回调的箭头函数支持携带js返回值给C++ | on注册回调的箭头函数支持携带js返回值给C++<br/>1130后支持 | 业务需要根据回调返回值进行后续处理的场景 |
| [新需求1130后调研]: 支持js业务代码回调接口中的回调js函数 | function_direct处理逻辑覆盖此场景需要增加只传递回调不触发的场景<br />.d.ts定义<br />function callbackWrapper(original: Function): (err: Object, value: Object) => void;<br />调用方式:<br />function callbackWrapper(original) {<br />if (typeof original !== 'function') {<br />let error = new BusinessError(`Parameter error.The type of ${original} must be function`);<br />throw error;<br />}<br />const descriptors = getOwnPropertyDescriptors(original);<br />if (typeof descriptors.length.value === 'number') {<br />descriptors.length.value++;<br />}<br />if (typeof descriptors.name.value === 'string') {<br />descriptors.name.value += 'callbackified';<br />}<br />function cb(...args) {<br />callbackified(original, ...args);<br />}<br />Object.defineProperties(cb, descriptors);<br />return cb;<br />} | 扩展工具的特性范围,提高工具可用性 |
| [新需求1130后]: type, interface支持成员变量any, object, Enum为可选参数 | type, interface当前成员变量支持any, object, Enum可选参数的转换<br />当前interface/type支持可选参数类型已经包括number, string, boolean, Array<number/boolean/string>, string/number/boolean[], Map<string/number/boolean>, {[key:string]:string/number/boolean}, number \| string \|boolean<br />待支持类型any, object, Enum<br />.d.ts文件如下所示<br />export enum LaunchReason {<br />UNKNOWN = 0,<br />START_ABILITY = 1,<br />CALL = 2,<br />CONTINUATION = 3,<br />}<br />type test =<br />{<br />param1?: object;<br />param2?: any;<br />param3?: Array;<br />param4?: Map<string, any>;<br />$param5?: any;<br />param6?: Array;<br />param7?: Map<string, object>;<br />param8?: LaunchReason;<br />}<br />interface interfaceTest<br />{<br />param1?: object;<br />param2?: any;<br />param3?: Array;<br />param4?: Map<string, any>;<br />$param5?: any;<br />param6?: Array;<br />param7?: Map<string, object>;<br />param8?: LaunchReason;<br />}<br />function func(v1: test, v2: interfaceTest): void; | 扩展工具的特性范围,提高工具可用性 |
| modify gn faq and add storytest for api, service, ts tools | 修改gn工具faq文档并为ts, api, service工具增加storytest可自动化测试 | |
| [调研]ts接口定义入参/变量为anyJS调用时部分参数类型报错 | ts接口定义入参/变量为anyJS调用时参数类型为map、array、interface、interface(enum)嵌套时报错<br />ts定义如下<br />function fun1(v: any, v1: string): number;<br />JS调用如下<br />// map<Array<string/number/boolean>> --当前不支持<br />ret = test.fun1({"test": ["okay", "okay"], "test1": ["res", "res"]}, 'aaa');<br />assert.strictEqual(ret, 0);<br />// Array<map<string/number/boolean>> --当前不支持<br />ret = test.fun1([{"test": 15, "test1": 18}, {"test": 15, "test1": 18}], 'aaa');<br />assert.strictEqual(ret, 0);<br />// interface --当前不支持<br />ret = test.fun1({'name': 'aaaa', 'age': 18}, 'aaa');<br />assert.strictEqual(ret, 0);<br />// interface<enum> --当前不支持<br />ret = test.fun1({'type': LaunchReason.CALL, 'age': 'aaa'}, 'aaa');<br />assert.strictEqual(ret, 0); | |
| 版本号 | 修订人 | 修订日期 | 修订描述 |
| ------ | ------ | ------------- | -------- |
| V0.1 | 苟晶晶 | 2024年3月25日 | 新建 |
| | | | |
## Requirement
| issue | 描述 | 分析 | 结论 | ToDo |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------- | ---- |
| 【需求】[napi_tool]:工具生成代码中增加打印调试信息 | 工具生成代码中增加关键节点信息打印,便于开发者确认流程 | 开发者通过关键信息打印,可以迅速定位问题 | 优先级低 | |
| 【需求】[napi_tool]: 箭头函数参数为回调函数时,编译报错 | 箭头函数的参数是箭头函数形式的回调函数时,编译报错。<br/>.d.ts文件内容如下<br/>declare namespace napitest {<br />export class A {<br />a: string;<br />}<br />export interface InterfaceA {<br />callFunction: (result: number) => void;<br />}<br />export interface InterfaceB {<br />funcByClass: (a: A, b: number, callback: (result: number) => void, c: InterfaceA) => number;<br />}<br />// export const addByClass: (a: A, b: number, callback: (result: number) => void, c: InterfaceA) => number;<br />}<br />export default napitest; | 扩展工具的特性范围,提高工具可用性 | 优先级低 | |
| 【需求】[napi_tool]:(等待更佳解决方案)分离生成的工具代码普通方法和回调方法,防止嵌套使用头文件 | 需求背景: 当前工具生成的中间代码,普通方法和回调方法的接口均在一个头文件里,这样会导致嵌套使用头文件造成可读性不强,需要整改生成代码将普通方法和回调方法的接口分离到不同头文件,增加易用性和可读性<br />需求阻塞点:<br/>由于工具生成的中间代码均在 XXXmiddle.cpp 中将XXX.h分离成XXXToC.h与XXXToJs.h之后XXXmiddle.cpp中include<XXXToC.h>, 若.d.ts中的文件声明一个interface类中全部定义为注册回调的方法按照预期应该将该interface声明在XXXToJs.h中而由于注册回调的中间代码都在XXXmiddle.cpp中 XXXmiddle.cpp中该interface的构造函数用到了XXXToJs.h中定义的类这时若要解决这个问题就需将XXXmiddle.cpp文件进行拆分这样代码改动太大需寻求更佳的解决方案<br />当前进展:<br/>当前修改无法跑过test_on测试用例集 | 需求调研,提高工具可用性 | 优先级降低 | |
| 【需求】[napi_tool]: on/off第二个参数支持object | [napi_tool] on/off第二个参数支持object其中object中定义需要注册的回调<br />function on(type: 'missionEvent', listener: MissionListener): number;<br />export interface MissionListener {<br />onMissionCreated(mission: number): void;<br />onMissionDestroyed(mission: number): void;<br />} | 扩展注册的使用场景,增加工具易用性 | 优先级中 | |
| 【需求】[napi_tool]: on注册回调的箭头函数支持携带js返回值给C++ | on注册回调的箭头函数支持携带js返回值给C++<br/>1130后支持 | 需求调研,业务需要根据回调返回值进行后续处理的场景 | 优先级低 | |
| 【需求】[napi_tool]: 支持js业务代码回调接口中的回调js函数 | function_direct处理逻辑覆盖此场景需要增加只传递回调不触发的场景<br />.d.ts定义<br />function callbackWrapper(original: Function): (err: Object, value: Object) => void;<br />调用方式:<br />function callbackWrapper(original) {<br />if (typeof original !== 'function') {<br />let error = new BusinessError(`Parameter error.The type of ${original} must be function`);<br />throw error;<br />}<br />const descriptors = getOwnPropertyDescriptors(original);<br />if (typeof descriptors.length.value === 'number') {<br />descriptors.length.value++;<br />}<br />if (typeof descriptors.name.value === 'string') {<br />descriptors.name.value += 'callbackified';<br />}<br />function cb(...args) {<br />callbackified(original, ...args);<br />}<br />Object.defineProperties(cb, descriptors);<br />return cb;<br />} | 需求调研,扩展工具的特性范围,提高工具可用性。 | 优先级低 | |
| 【需求】[napi_tool]: type, interface支持成员变量any, object, Enum为可选参数 | type, interface当前成员变量支持any, object, Enum可选参数的转换<br />当前interface/type支持可选参数类型已经包括number, string, boolean, Array<number/boolean/string>, string/number/boolean[], Map<string/number/boolean>, {[key:string]:string/number/boolean}, number \| string \|boolean<br />待支持类型any, object, Enum<br />.d.ts文件如下所示<br />export enum LaunchReason {<br />UNKNOWN = 0,<br />START_ABILITY = 1,<br />CALL = 2,<br />CONTINUATION = 3,<br />}<br />type test =<br />{<br />param1?: object;<br />param2?: any;<br />param3?: Array;<br />param4?: Map<string, any>;<br />$param5?: any;<br />param6?: Array;<br />param7?: Map<string, object>;<br />param8?: LaunchReason;<br />}<br />interface interfaceTest<br />{<br />param1?: object;<br />param2?: any;<br />param3?: Array;<br />param4?: Map<string, any>;<br />$param5?: any;<br />param6?: Array;<br />param7?: Map<string, object>;<br />param8?: LaunchReason;<br />}<br />function func(v1: test, v2: interfaceTest): void; | 使用场景较少,建议暂不支持 | 优先级低 | |
| 【需求】[gn, api, service, ts]:modify gn faq and add storytest for api, service, ts tools | 修改gn工具faq文档并为ts, api, service工具增加storytest可自动化测试 | 确认需继续维护的工具可增加storytest和unittest | 优先级中 | |
| 【需求】[napi_tool]:ts接口定义入参/变量为anyJS调用时部分参数类型报错 | ts接口定义入参/变量为anyJS调用时参数类型为map、array、interface、interface(enum)嵌套时报错<br />ts定义如下<br />function fun1(v: any, v1: string): number;<br />JS调用如下<br />// map<Array<string/number/boolean>> --当前不支持<br />ret = test.fun1({"test": ["okay", "okay"], "test1": ["res", "res"]}, 'aaa');<br />assert.strictEqual(ret, 0);<br />// Array<map<string/number/boolean>> --当前不支持<br />ret = test.fun1([{"test": 15, "test1": 18}, {"test": 15, "test1": 18}], 'aaa');<br />assert.strictEqual(ret, 0);<br />// interface --当前不支持<br />ret = test.fun1({'name': 'aaaa', 'age': 18}, 'aaa');<br />assert.strictEqual(ret, 0);<br />// interface<enum> --当前不支持<br />ret = test.fun1({'type': LaunchReason.CALL, 'age': 'aaa'}, 'aaa');<br />assert.strictEqual(ret, 0); | 需求调研 | 优先级低 | |
| 【bug】[napi_tool]on回调&箭头函数回调,回调方式默认为同步,需约定异步回调方式入口 | on回调 & 箭头函数回调,回调方式默认为同步,无异步回调方式入口 | 扩展注册的使用场景,增加工具易用性,建议转需求 | 优先级中 | |
| 【bug】[napi_tool]函数返回值支持array<map>、array<{[key:string]:any}> | 函数返回值不支持array、array<{[key:string]:any}> | 使用场景较少,建议暂不支持 | 优先级低 | |
| 【bug】[napi_tool]支持ts接口文件中namespace域的new函数 | 目前不支持ts接口文件中namespace域interface中带参数的new函数new (value?: { width?: string \| number; height?: string \| number }): PolygonAttribute; | 使用场景较少,建议暂不支持 | 优先级低 | |
| 【bug】[napi_tool]工具代码中若在class1中构造函数使用的class2在class1之后生成后的代码编译报错 | 若class1中的有参构造的参数有class2时且class2声明在class1之后编译时报错field aPro has incomplete type example::A<br />.d.ts文件如下所示<br />declare namespace example {<br />class Demo {<br />constructor(intPro: number, strPro: string, boolPro: boolean, aPro: A);<br />intPro: number;<br />strPro: string;<br />boolPro: boolean;<br />aPro: A;<br />}<br />class A<br />{<br />constructor(proA: number, proB: string, proC: boolean);<br />func1(pro: number);<br />func2(pro: string);<br />func3(pro: boolean);<br />proA: number;<br />proB: string;<br />proC: boolean;<br />}<br />} | 该bug实际是为了支持class构造函数包含class的情况建议转需求调研 | 优先级中 | |
| BUG | 发生了什么问题? | 期望行为是什么? | 如何复现该缺陷 | 版本或分支信息 |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -------------- |
| [Bug]on回调&箭头函数回调,回调方式默认为同步,需约定异步回调方式入口 | on回调 & 箭头函数回调,回调方式默认为同步,无异步回调方式入口 | on回调 & 箭头函数回调,回调方式默认为同步,约定异步回调方式入口 | 代码检视 | master |
| [Bug]: [使用场景少,暂不支持]函数返回值支持array<map>、array<{[key:string]:any}> | 函数返回值不支持array、array<{[key:string]:any}> | 函数返回值支持array、array<{[key:string]:any}> | 增加上述用例 | master |
| [Bug]: [使用场景较少,暂不支持]支持ts接口文件中namespace域的new函数 | 目前不支持ts接口文件中namespace域interface中带参数的new函数new (value?: { width?: string \| number; height?: string \| number }): PolygonAttribute; | 期望支持 | 增加上述测试用例 | master |
| [Bug]: 工具代码中若在class1中使用的class2在class1之后生成后的代码编译报错 | 若class1中的有参构造的参数有class2时且class2声明在class1之后编译时报错field aPro has incomplete type example::A | 若class1中的有参构造的参数有class2时且class2声明在class1之后成功编译并生成 | .d.ts文件如下所示<br />declare namespace example {<br />class Demo {<br />constructor(intPro: number, strPro: string, boolPro: boolean, aPro: A);<br />intPro: number;<br />strPro: string;<br />boolPro: boolean;<br />aPro: A;<br />}<br />class A<br />{<br />constructor(proA: number, proB: string, proC: boolean);<br />func1(pro: number);<br />func2(pro: string);<br />func3(pro: boolean);<br />proA: number;<br />proB: string;<br />proC: boolean;<br />}<br />} | master |
## Change Log
| 计划 | 进展 | 结论 | 时间 |
| ---- | ---- | ---- | ---- |
| | | | |
| | | | |