# rn-code-shift-tool **Repository Path**: wu_xujie/rn-code-shift-tool ## Basic Information - **Project Name**: rn-code-shift-tool - **Description**: 用于rn自动化代码重构 - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-17 - **Last Updated**: 2025-02-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RnCodeShiftTool #### 介绍 RN组件扫描工具; 通过扫描js/ts等文件的抽象语法树,按照期望的方式对代码进行自动化重构 #### 软件架构 ```` |---- rn-code-shift-tool |---- scripts # 存放代码转化脚本的文件夹 |---- animated_shift.js # 用于在Animated部分方法中增加默认属性的脚本 |---- import_shift.js # 用于变更导入路径的脚本 |---- rename_shift.js # 用于变更属性名字的脚本 |---- remove_shift.js # 用于对于removeListener进行替换 |---- codeShift.js # 脚本入口 |---- package.json # 工程配置文件 |---- README.md # 安装使用方法 |---- LICENSE # 许可证声明 ```` #### 安装教程 1. 需要电脑安装node环境 #### 使用说明 1. 执行**npm install**,用于安装本工具相关依赖 2. 修改工程文件codeShift.js文件中**输入路径src**为package.json路径下的相对路径(原始代码存放位置) 3. 修改工程文件codeShift.js文件中**输出路径target**为package.json路径下的相对路径(转化结束后代码保存位置) 4. 修改工程文件codeShift.js文件中**脚本文件存放路径scripts**为package.json路径下的相对路径(脚本存放位置) 5. 在到工程根目录下,执行命令**node ./codeShift.js** ##### remove_shift.js使用说明 将`Keyboard.addListener(’eventName‘,’callback‘)`和`Keyboard.removeListener(’eventName‘,’callback‘)` 转化为`xxx = Keyboard.addListener(’eventName‘,’callback‘)`和`xxx.remove()` 可以对下列常量量进行初始化 - `objectName` :改造对象名,这里是 Keyboard; - `addPropertyName`:改造对象的属性名, 需要添加`返回值 = `; - `removePropertyName`: 改造对象的属性名,需要改造为 `返回值.remove()`形式; - `importDefault`: `返回值`的变量类型,需要判断是否要需要导入; - `importSource`: `返回值`变量类型的导入路径; - `baseName`:`返回值`变量的基础名,未了确保唯一性,使用`baseName_eventName_hash`。 - **修改位置展示** ![文件展示](readme_png/addlistener.png) - **输入文件展示** ![文件展示](readme_png/addlistener_input.png) - **输出结果展示** ![文件展示](readme_png/addlistener_output.png) 备注: 可以复制该脚本到当前目录下,修改对应的常量的初始化值作为新的脚本 ##### animated_shift.js使用说明 在指定的`Animated`的API接口中添加默认属性`useNativeDriver = false`, 需要在白名单中,添加需要修改的API,如`timing`、 `spring`、 `decay`。 - **白名单添加位置展示** ![文件展示](readme_png/animated.png) - **输入文件展示** ![文件展示](readme_png/animated_input.png) - **输出结果展示** ![文件展示](readme_png/animated_output.png) ##### import_shift.js使用说明 在导入文件中,将`xxx`的导入路径从`A`变成`B`, 这里将`ViewPropTypes`从`react-native`导入变更到 从`deprecated-react-native-prop-types`中导入。 - **导入路径修改位置展示** ![文件展示](readme_png/import.png) - **输入文件展示** ![文件展示](readme_png/import_input.png) - **输出结果展示** ![文件展示](readme_png/import_output.png) ##### rename_shift.js使用说明 找到所有的标识符并匹配名称为 `A` 的标识符替换为`B`. 这里找到所有的标识符并匹配名称为 `currentFocusField` 的标识符替换为`currentlyFocusedInput`。 - **标志符替换修改位置展示** ![文件展示](readme_png/rename.png) - **输入文件展示** ![文件展示](readme_png/rename_input.png) - **输出结果展示** ![文件展示](readme_png/rename_output.png) ## 贡献代码 使用过程中发现任何问题都可以提 [Issue](https://gitee.com/wu_xujie/rn-code-shift-tool/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://gitee.com/wu_xujie/rn-code-shift-tool/pulls) 。 ## 开源协议 本项目基于 [Apache-2.0](https://gitee.com/wu_xujie/rn-code-shift-tool/master/LICENSE) ,请自由地享受和参与开源。