# JSTypeFilter **Repository Path**: Rnine/jstype-filter ## Basic Information - **Project Name**: JSTypeFilter - **Description**: No description available - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-06 - **Last Updated**: 2024-10-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JSTypeFilter:面向JavaScript语言的静态程序分析框架 ## JSTypeFilter 环境配置 1. 从[Download Node.js](https://nodejs.org/en/download/current)下载Node.js并安装,Node.js为JavaScript的运行时环境,自带包管理器npm。 2. 通过npm安装TypeScript编译器,命令行输入 ```shell npm install -g typescript ``` 3. 安装依赖库 ```shell npm install ``` ## 测试 运行test/PointerAnalysisTest.ts文件 ``` let config: SceneConfig = new SceneConfig() config.buildFromProjectDir('./tests/resources/pta/singleton'); // 指定需要进行分析的项目根路径 function runScene(config: SceneConfig, output: string) { ... // 打印所有文件下的变量及对应类型信息 projectScene.getFiles().forEach((arkFile) => { arkFile.getAllNamespacesUnderThisFile().forEach((arkNamespace) => { arkNamespace.getClasses().forEach((arkClass) => { arkClass.getMethods().forEach((arkMethod) => { arkMethod.getBody()?.getLocals().forEach((local) => { if (pta.getTypeDiffMap().has(local)) { let types = pta.getTypeDiffMap().get(local)?.values()! let typeStr = "" for (let type of types) { typeStr += ` ${type.toString()}` } console.log(`local: ${local.getName()}: ${typeStr}`) } else { console.log(`local: ${local.getName()}: ${local.getType().toString()}`) } }) }) }) }) arkFile.getClasses().forEach((arkClass) => { arkClass.getMethods().forEach((arkMethod) => { arkMethod.getBody()?.getLocals().forEach((local) => { if (pta.getTypeDiffMap().has(local)) { console.log(`local: ${local.getName()}: ${pta.getTypeDiffMap().get(local)}`) } else { console.log(`local: ${local.getName()}: ${local.getType().toString()}`) } }) }) }) }) console.log("finish") } runScene(config, "./out"); ``` ## 调试 将调试配置文件`.vscode/launch.json`中`args`参数数组修改为想要调试的文件路径,然后启动调试。 ## 添加自验证测试用例 新增测试代码统一放至`tests`目录下,对应的样例代码和其他资源文件统一放至`tests\resources`,按测试场景创建不同文件夹。