原子 npm 包装器
Atom是应用程序的新型中间代表,也是由Atom提供动力的独立工具 陈 图书馆。 中间代表(一个有节点和链接的网络)是用于应用分析和机器学习的典型操作的最优化的,包括: 切开 和传入.
这个包包包了原子Java可分配,并通过npm包注册提供. 确保 Java 21 在 PATH 中可用 .
使用量
npm install @appthreat/atom
对于更广泛的语言支持,也安装 @appthreat/atom-parsetools。 。 。 .
npm install -g @appthreat/atom-parsetools
支助语文
- 页:1
- H(仅C/C++ 标题和已预处理的.i文件)
- Java (需要汇编)
- 贾
- Android APK(要求Android SDK. 设置环境变量
ANDROID_HOME或使用容器图像。 ) - Java 脚本
- 流动
- 类型脚本
- Python( 支持 3. x 至 3. 14)
- PHP( 需要 PHP QQ 7.4. 支持 PHP 7. 0 到 8.5, 有限支持 PHP 5. x)
- Ruby( 需要Ruby 运行时间 )
rbastgen生成器; 语法由 功能,而不是运行时的版本,所以Ruby 1.8 - 4.0.x 语法在任意一个语法上得到支持 支持运行时间) - 斯卡拉(WIP)
CLI 使用量
Usage: atom [parsedeps|data-flow|usages|reachables] [options] [input]
input source file or directory
-o, --output <value> output filename. Default app.⚛ or app.atom in windows
-s, --slice-outfile <value>
export intra-procedural slices as json
-l, --language <value> source language
--with-data-deps generate the atom with data-dependencies - defaults to `false`
--remove-atom do not persist the atom file - defaults to `false`
--reuse-atom reuse existing atom file - defaults to `false`
-x, --export-atom export the atom file with data-dependencies to graphml - defaults to `false`
--export-dir <value> export directory. Default: atom-exports
--file-filter <value> the name of the source file to generate slices from. Uses regex.
--method-name-filter <value>
filters in slices that go through specific methods by names. Uses regex.
--method-parameter-filter <value>
filters in slices that go through methods with specific types on the method parameters. Uses regex.
--method-annotation-filter <value>
filters in slices that go through methods with specific annotations on the methods. Uses regex.
--max-num-def <value> maximum number of definitions in per-method data flow calculation - defaults to 2000
Command: parsedeps
Extract dependencies from the build file and imports
Command: data-flow [options]
Extract backward data-flow slices
--slice-depth <value> the max depth to traverse the DDG for the data-flow slice - defaults to 7.
--sink-filter <value> filters on the sink's `code` property. Uses regex.
Command: usages [options]
Extract local variable and parameter usages
--min-num-calls <value> the minimum number of calls required for a usage slice - defaults to 1.
--include-source includes method source code in the slices - defaults to false.
--extract-endpoints extract http endpoints and convert to openapi format using atom-tools - defaults to false.
Command: reachables [options]
Extract reachable data-flow slices based on automated framework tags
--source-tag <value> source tag - defaults to framework-input. Comma-separated values allowed.
--sink-tag <value> sink tag - defaults to framework-output. Comma-separated values allowed.
--include-crypto includes crypto library flows - defaults to false.
--help display this help message
请求样本
生成一个原子
# Compile java project
atom -o app.atom -l java .
atom -o app.atom -l jar <jar file>
export ANDROID_HOME=<path to android sdk>
atom -o app.atom -l apk <apk file>
为 Java 项目创建可达切片 .
cd <path to repo>
cdxgen -t java --deep -o bom.json .
atom reachables -o app.atom -s reachables.json -l java .
通过辩论 --reuse-atom 以已存在的原子文件为基础切换.
atom reachables --reuse-atom -o app.atom -s reachables.json -l java .
环境变量
| 变量 | 说明 |
|---|---|
| CHEN IGNORE 数字 | 逗号分隔目录列表,用于忽略每种语言的前端. |
| 中国 IGNORE TEST DIRS | 设定为真以忽略常见的测试目录( T)test, (中文(简体) ), tests, (中文(简体) ), mocks) 对于每种语言的前端. |
| 陈行 C IGNORE DIRS | 逗号分隔的要忽略的 C/C++ 和页眉前端目录列表 . |
| CHEN CPP IGNORE 数字 | 要忽略 C++ 前端的逗号分隔目录列表 . |
| 陈起来 贾瓦 IGNORE DIRS | 逗号分隔的要忽略Java源前端的额外目录列表 . |
| CHEN JIMPLE IGNORE 数字 | 要忽略 Jimple/JAR/Android/APK/DEX 前端的逗号分隔目录列表 . |
| CHEN SCALA IGNORE DIRS (中文(简体) ) | 为斯卡拉前端忽略的逗号分隔目录列表 . |
| (原始内容存档于2013-10-12) (中文(中国大陆) ). CHEN JAVASCRIPT IGNORE DIRS | 为 JavaScript 、 TypeScript 和 Flow 前端忽略的逗号分隔目录列表 . |
| CHEN JS IGNORE 数字 | 别名 JavaScript, TypeScript, 和 Flow 忽略目录 . |
| (简体中文) | TypeScript 和 Flow 的异名被忽略目录 . |
| (中文(简体) ) | 为 Python 忽略的逗号分隔目录列表 。 如果未设置, Atom 使用 Python 默认被忽略的目录 . |
| (简体中文) | 逗号分隔的要忽略 PHP 前端目录列表 . |
| (中文(简体) ) | 为 Ruby 前端忽略的逗号分隔目录列表 . |
| CHEN DELOMBOK MODE 游戏机 | Java 前端的 Delombok 模式 (no-delombok, (中文(简体) ), default, (中文(简体) ), types-only, (中文(简体) ), run-delombok) (中文(简体) ). |
| 陈起平 (中文(简体) ) | 包含 C 前端的目录 。 分离路径 : 或者说 ;。 。 。 . |
| 陈思成 | 已存在的 astgen 输出目录 。 重复引用时通过重用已存在的AST json数据来提高JavaScript,TypeScript,和Flow的性能. |
| ATOM TOOLS OPENAPI FORMAT | 原子工具的 OpenAPI 格式 。 默认 : openapi3.1.0; 备选案文: openapi3.0.1。 。 。 . |
| ATOM TOOLS 工作站 DIR | 原子工具工作目录. 默认为原子输入路径 . |
| ATOM SCALASEM WORK DIR | Scalasem的工作目录. 默认为原子输入路径 . |
| ATOM SCALASEM SLICES 文件 | 切片文件名. 默认为 semantics.slices.json。 。 。 . |
| ATOM JVM 目标 | 覆盖由原子节点.js slapper构建的JVM参数,包括堆积内存值. |
| (原始内容存档于2018-07-21). ATOM JAVA HOME | Java 21或以上被原子所使用. |
| ƯΜ㼯A | 覆盖 PHP 前端使用的 PHP 命令. |
| ƯΜ㼯A | 覆盖 PHP 前端所使用的php-parse 命令. |
| SCALA CMD 卫星 | 超过scala命令. |
| SCALAC CMD 移动 | 覆盖 scala 前端使用的 scala 命令 . |
| ASTGEN IGNORE 数字 | 逗号分隔的目录列表,由JavaScript astgen预处理器命令忽略. |
| ASTGEN IGNORE FILE PATERN (法语) | JavaScript astgen 预处理器命令忽略的文件模式 . |
| ASTGEN INCLUDE NODE MODULES BUNDLES 互联网档案馆的存檔,存档日期2014-12-02 | 也包含从节点-模块目录中的源代码. 以增加内存使用为代价,使流量更加完整. |
| JAVA CMD (印度尼西亚) | 推翻了java命令. |
| (原始内容存档于2019-09-26) (英语). RUBY CMD | 覆盖 Ruby 命令 rbastgen 包装. |
| (原始内容存档于2018-09-21) (英语). ATOM RUBY HOME | Ruby 安装目录 rbastgen 包装,当Ruby不在时 PATH。 。 。 . |
| (原始内容存档于2018-10-21) (英语). RUBY ASTGEN BIN | 路径 ruby_ast_gen 脚本 rbastgen 包装器运行。 最简单的方法测试一个发电机组. |
| 区域局 | 路径 rbastgen 可执行文件本身,凌驾于 PATH; 数据 rbastgen.path 系统财产优先. |
解决问题
大型工程的原子文件不完整
astgen可能需要大量大型JavaScript项目,尤其是流项目的大量内存. 使用环境变量 NODE_OPTIONS 用于增加可用的内存.
export NODE_OPTIONS="--expose-gc --max-old-space-size=16288"
对于React 19等大型项目,astgen需要超过80GB的堆积内存! 使用环境变量 CHEN_ASTGEN_OUT 要制作原子和正则,请重新使用含有 astgen 生成的 json 和 typemap 文件的现有目录.
为进一步提高准确性,将源代码从 node_modules 设置目录 ASTGEN_INCLUDE_NODE_MODULES_BUNDLES。 。 。 .
export ASTGEN_INCLUDE_NODE_MODULES_BUNDLES=true
export ASTGEN_IGNORE_DIRS=""
许可证
麻省理工学院