arkanalyzer 1.0.86 → 1.0.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. package/README.en.md +69 -65
  2. package/README.md +56 -70
  3. package/config/arkanalyzer.json +7 -2
  4. package/docs/cppFrontend/ArkAnalyzer-cpp_usage_guide.md +245 -0
  5. package/docs/cppFrontend/cpp_frontend_build_guide.md +126 -0
  6. package/docs/cppFrontend/cpp_frontend_user_guide.md +175 -0
  7. package/docs/cppFrontend/img.png +0 -0
  8. package/docs/cppFrontend/img_1.png +0 -0
  9. package/docs/cppFrontend/img_10.png +0 -0
  10. package/docs/cppFrontend/img_11.png +0 -0
  11. package/docs/cppFrontend/img_12.png +0 -0
  12. package/docs/cppFrontend/img_13.png +0 -0
  13. package/docs/cppFrontend/img_14.png +0 -0
  14. package/docs/cppFrontend/img_15.png +0 -0
  15. package/docs/cppFrontend/img_16.png +0 -0
  16. package/docs/cppFrontend/img_17.png +0 -0
  17. package/docs/cppFrontend/img_18.png +0 -0
  18. package/docs/cppFrontend/img_19.png +0 -0
  19. package/docs/cppFrontend/img_2.png +0 -0
  20. package/docs/cppFrontend/img_20.png +0 -0
  21. package/docs/cppFrontend/img_21.png +0 -0
  22. package/docs/cppFrontend/img_22.png +0 -0
  23. package/docs/cppFrontend/img_23.png +0 -0
  24. package/docs/cppFrontend/img_3.png +0 -0
  25. package/docs/cppFrontend/img_4.png +0 -0
  26. package/docs/cppFrontend/img_5.png +0 -0
  27. package/docs/cppFrontend/img_6.png +0 -0
  28. package/docs/cppFrontend/img_7.png +0 -0
  29. package/docs/cppFrontend/img_8.png +0 -0
  30. package/docs/cppFrontend/img_9.png +0 -0
  31. package/docs/sig_programanalysis.en.md +66 -0
  32. package/docs/sig_programanalysis.md +73 -0
  33. package/lib/Config.d.ts +35 -1
  34. package/lib/Config.d.ts.map +1 -1
  35. package/lib/Config.js +91 -2
  36. package/lib/Scene.d.ts +25 -2
  37. package/lib/Scene.d.ts.map +1 -1
  38. package/lib/Scene.js +151 -44
  39. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +4 -3
  40. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
  41. package/lib/callgraph/algorithm/AbstractAnalysis.js +17 -17
  42. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +6 -1
  43. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
  44. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +117 -14
  45. package/lib/callgraph/common/Statistics.d.ts +4 -2
  46. package/lib/callgraph/common/Statistics.d.ts.map +1 -1
  47. package/lib/callgraph/common/Statistics.js +14 -2
  48. package/lib/callgraph/model/CallGraph.d.ts +12 -8
  49. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  50. package/lib/callgraph/model/CallGraph.js +53 -29
  51. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +1 -0
  52. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
  53. package/lib/callgraph/model/builder/CallGraphBuilder.js +5 -1
  54. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  55. package/lib/callgraph/pointerAnalysis/Pag.js +3 -0
  56. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
  57. package/lib/cli/cli.d.ts +3 -0
  58. package/lib/cli/cli.d.ts.map +1 -0
  59. package/lib/cli/cli.js +82 -0
  60. package/lib/cli/commands/cg.d.ts +53 -0
  61. package/lib/cli/commands/cg.d.ts.map +1 -0
  62. package/lib/cli/commands/cg.js +404 -0
  63. package/lib/cli/commands/index.d.ts +6 -0
  64. package/lib/cli/commands/index.d.ts.map +1 -0
  65. package/lib/cli/commands/index.js +64 -0
  66. package/lib/cli/commands/ir.d.ts +26 -0
  67. package/lib/cli/commands/ir.d.ts.map +1 -0
  68. package/lib/cli/commands/ir.js +94 -0
  69. package/lib/core/base/Constant.d.ts +1 -1
  70. package/lib/core/base/Constant.d.ts.map +1 -1
  71. package/lib/core/base/Constant.js +1 -1
  72. package/lib/core/base/Expr.d.ts +29 -5
  73. package/lib/core/base/Expr.d.ts.map +1 -1
  74. package/lib/core/base/Expr.js +145 -23
  75. package/lib/core/base/Position.d.ts +14 -0
  76. package/lib/core/base/Position.d.ts.map +1 -1
  77. package/lib/core/base/Position.js +27 -0
  78. package/lib/core/base/Ref.d.ts +1 -0
  79. package/lib/core/base/Ref.d.ts.map +1 -1
  80. package/lib/core/base/Ref.js +4 -1
  81. package/lib/core/base/Type.d.ts +64 -24
  82. package/lib/core/base/Type.d.ts.map +1 -1
  83. package/lib/core/base/Type.js +144 -49
  84. package/lib/core/common/ArkError.d.ts +26 -2
  85. package/lib/core/common/ArkError.d.ts.map +1 -1
  86. package/lib/core/common/ArkError.js +56 -2
  87. package/lib/core/common/ArkIRTransformer.d.ts +11 -10
  88. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  89. package/lib/core/common/ArkIRTransformer.js +1 -1
  90. package/lib/core/common/ArkValueTransformer.d.ts +14 -12
  91. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  92. package/lib/core/common/ArkValueTransformer.js +1 -5
  93. package/lib/core/common/Const.d.ts +4 -0
  94. package/lib/core/common/Const.d.ts.map +1 -1
  95. package/lib/core/common/Const.js +5 -1
  96. package/lib/core/common/DummyMainCreater.d.ts +23 -13
  97. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  98. package/lib/core/common/DummyMainCreater.js +66 -43
  99. package/lib/core/common/EtsConst.d.ts +11 -0
  100. package/lib/core/common/EtsConst.d.ts.map +1 -1
  101. package/lib/core/common/EtsConst.js +12 -1
  102. package/lib/core/common/IRInference.d.ts.map +1 -1
  103. package/lib/core/common/IRInference.js +6 -2
  104. package/lib/core/common/IRUtils.d.ts.map +1 -1
  105. package/lib/core/common/IRUtils.js +3 -33
  106. package/lib/core/common/ModelUtils.d.ts +4 -7
  107. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  108. package/lib/core/common/ModelUtils.js +77 -110
  109. package/lib/core/common/SdkUtils.d.ts +1 -1
  110. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  111. package/lib/core/common/SdkUtils.js +14 -5
  112. package/lib/core/common/TypeInference.d.ts.map +1 -1
  113. package/lib/core/common/TypeInference.js +9 -3
  114. package/lib/core/graph/BaseExplicitGraph.d.ts +4 -4
  115. package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
  116. package/lib/core/graph/BaseExplicitGraph.js +15 -8
  117. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  118. package/lib/core/graph/Scc.d.ts.map +1 -1
  119. package/lib/core/graph/Scc.js +7 -2
  120. package/lib/core/graph/builder/CfgBuilder.d.ts +10 -7
  121. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  122. package/lib/core/graph/builder/CfgBuilder.js +12 -5
  123. package/lib/core/inference/Inference.d.ts.map +1 -1
  124. package/lib/core/inference/Inference.js +7 -0
  125. package/lib/core/inference/ModelInference.d.ts +1 -1
  126. package/lib/core/inference/ModelInference.d.ts.map +1 -1
  127. package/lib/core/inference/ValueInference.d.ts +3 -2
  128. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  129. package/lib/core/inference/ValueInference.js +64 -12
  130. package/lib/core/inference/abc/AbcInference.d.ts +28 -2
  131. package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
  132. package/lib/core/inference/abc/AbcInference.js +105 -4
  133. package/lib/core/model/ArkBaseModel.d.ts +14 -1
  134. package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
  135. package/lib/core/model/ArkBaseModel.js +61 -2
  136. package/lib/core/model/ArkBody.d.ts.map +1 -1
  137. package/lib/core/model/ArkBody.js +1 -3
  138. package/lib/core/model/ArkClass.d.ts +25 -2
  139. package/lib/core/model/ArkClass.d.ts.map +1 -1
  140. package/lib/core/model/ArkClass.js +72 -30
  141. package/lib/core/model/ArkField.d.ts.map +1 -1
  142. package/lib/core/model/ArkField.js +3 -1
  143. package/lib/core/model/ArkFile.d.ts +4 -1
  144. package/lib/core/model/ArkFile.d.ts.map +1 -1
  145. package/lib/core/model/ArkFile.js +44 -3
  146. package/lib/core/model/ArkImport.d.ts.map +1 -1
  147. package/lib/core/model/ArkImport.js +9 -1
  148. package/lib/core/model/ArkMetadata.d.ts +32 -1
  149. package/lib/core/model/ArkMetadata.d.ts.map +1 -1
  150. package/lib/core/model/ArkMetadata.js +28 -2
  151. package/lib/core/model/ArkMethod.d.ts +5 -0
  152. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  153. package/lib/core/model/ArkMethod.js +33 -1
  154. package/lib/core/model/ArkNamespace.d.ts +2 -0
  155. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  156. package/lib/core/model/ArkNamespace.js +11 -0
  157. package/lib/core/model/ArkSignature.d.ts +3 -3
  158. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  159. package/lib/core/model/ArkSignature.js +14 -9
  160. package/lib/core/model/builder/ArkClassBuilder.d.ts +2 -0
  161. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  162. package/lib/core/model/builder/ArkClassBuilder.js +3 -3
  163. package/lib/core/model/builder/ArkMetadataBuilder.d.ts +21 -0
  164. package/lib/core/model/builder/ArkMetadataBuilder.d.ts.map +1 -0
  165. package/lib/core/model/builder/ArkMetadataBuilder.js +160 -0
  166. package/lib/core/model/builder/ArkMethodBuilder.d.ts +4 -1
  167. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  168. package/lib/core/model/builder/ArkMethodBuilder.js +50 -29
  169. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +1 -0
  170. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  171. package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -1
  172. package/lib/core/model/builder/BodyBuilder.d.ts +4 -0
  173. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  174. package/lib/core/model/builder/builderUtils.d.ts +1 -0
  175. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  176. package/lib/core/model/builder/builderUtils.js +7 -3
  177. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts +296 -0
  178. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +1 -0
  179. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.js +145 -0
  180. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.d.ts +8 -0
  181. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.d.ts.map +1 -0
  182. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.js +90 -0
  183. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.d.ts +8 -0
  184. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.d.ts.map +1 -0
  185. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.js +183 -0
  186. package/lib/frontend/cppFrontend/ast/astParser.d.ts +25 -0
  187. package/lib/frontend/cppFrontend/ast/astParser.d.ts.map +1 -0
  188. package/lib/frontend/cppFrontend/ast/astParser.js +280 -0
  189. package/lib/frontend/cppFrontend/ast/astUtils.d.ts +18 -0
  190. package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +1 -0
  191. package/lib/frontend/cppFrontend/ast/astUtils.js +158 -0
  192. package/lib/frontend/cppFrontend/ast/const.d.ts +17 -0
  193. package/lib/frontend/cppFrontend/ast/const.d.ts.map +1 -0
  194. package/lib/frontend/cppFrontend/ast/const.js +58 -0
  195. package/lib/frontend/cppFrontend/ast/index.d.ts +5 -0
  196. package/lib/frontend/cppFrontend/ast/index.d.ts.map +1 -0
  197. package/lib/frontend/cppFrontend/ast/index.js +31 -0
  198. package/lib/frontend/cppFrontend/base/Constant.d.ts +9 -0
  199. package/lib/frontend/cppFrontend/base/Constant.d.ts.map +1 -0
  200. package/lib/frontend/cppFrontend/base/Constant.js +33 -0
  201. package/lib/frontend/cppFrontend/base/Expr.d.ts +174 -0
  202. package/lib/frontend/cppFrontend/base/Expr.d.ts.map +1 -0
  203. package/lib/frontend/cppFrontend/base/Expr.js +530 -0
  204. package/lib/frontend/cppFrontend/base/Ref.d.ts +25 -0
  205. package/lib/frontend/cppFrontend/base/Ref.d.ts.map +1 -0
  206. package/lib/frontend/cppFrontend/base/Ref.js +53 -0
  207. package/lib/frontend/cppFrontend/base/Trap.d.ts +8 -0
  208. package/lib/frontend/cppFrontend/base/Trap.d.ts.map +1 -0
  209. package/lib/frontend/cppFrontend/base/Trap.js +28 -0
  210. package/lib/frontend/cppFrontend/base/Type.d.ts +264 -0
  211. package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -0
  212. package/lib/frontend/cppFrontend/base/Type.js +600 -0
  213. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +109 -0
  214. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -0
  215. package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +925 -0
  216. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +477 -0
  217. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -0
  218. package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +2746 -0
  219. package/lib/frontend/cppFrontend/common/Builtin.d.ts +57 -0
  220. package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -0
  221. package/lib/frontend/cppFrontend/common/Builtin.js +106 -0
  222. package/lib/frontend/cppFrontend/common/IRInference.d.ts +94 -0
  223. package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -0
  224. package/lib/frontend/cppFrontend/common/IRInference.js +1087 -0
  225. package/lib/frontend/cppFrontend/common/IRUtils.d.ts +23 -0
  226. package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -0
  227. package/lib/frontend/cppFrontend/common/IRUtils.js +168 -0
  228. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +44 -0
  229. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -0
  230. package/lib/frontend/cppFrontend/common/ModelUtils.js +567 -0
  231. package/lib/frontend/cppFrontend/common/TypeInference.d.ts +278 -0
  232. package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -0
  233. package/lib/frontend/cppFrontend/common/TypeInference.js +1354 -0
  234. package/lib/frontend/cppFrontend/common/ValueUtil.d.ts +16 -0
  235. package/lib/frontend/cppFrontend/common/ValueUtil.d.ts.map +1 -0
  236. package/lib/frontend/cppFrontend/common/ValueUtil.js +61 -0
  237. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +182 -0
  238. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -0
  239. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +1435 -0
  240. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts +21 -0
  241. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts.map +1 -0
  242. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.js +303 -0
  243. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts +15 -0
  244. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts.map +1 -0
  245. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.js +161 -0
  246. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts +21 -0
  247. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts.map +1 -0
  248. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.js +261 -0
  249. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts +12 -0
  250. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts.map +1 -0
  251. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.js +155 -0
  252. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts +29 -0
  253. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts.map +1 -0
  254. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.js +302 -0
  255. package/lib/frontend/cppFrontend/inference/CxxInference.d.ts +10 -0
  256. package/lib/frontend/cppFrontend/inference/CxxInference.d.ts.map +1 -0
  257. package/lib/frontend/cppFrontend/inference/CxxInference.js +41 -0
  258. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +28 -0
  259. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -0
  260. package/lib/frontend/cppFrontend/inference/CxxModelInference.js +98 -0
  261. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts +20 -0
  262. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -0
  263. package/lib/frontend/cppFrontend/inference/CxxValueInference.js +128 -0
  264. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +11 -0
  265. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -0
  266. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +413 -0
  267. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +5 -0
  268. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -0
  269. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +61 -0
  270. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +17 -0
  271. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -0
  272. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +284 -0
  273. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +6 -0
  274. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -0
  275. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.js +57 -0
  276. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +14 -0
  277. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -0
  278. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +422 -0
  279. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +8 -0
  280. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -0
  281. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +194 -0
  282. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +59 -0
  283. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -0
  284. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +605 -0
  285. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +46 -0
  286. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -0
  287. package/lib/frontend/cppFrontend/model/builder/builderUtils.js +499 -0
  288. package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts +44 -0
  289. package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts.map +1 -0
  290. package/lib/frontend/cppFrontend/utils/cmakeUtils.js +240 -0
  291. package/lib/index.d.ts +2 -1
  292. package/lib/index.d.ts.map +1 -1
  293. package/lib/index.js +8 -1
  294. package/lib/node_modules/ohos-typescript/.ohos-typescript-version +1 -0
  295. package/{node_modules → lib/node_modules}/ohos-typescript/package.json +2 -1
  296. package/lib/save/CGJsonPrinter.d.ts +8 -0
  297. package/lib/save/CGJsonPrinter.d.ts.map +1 -0
  298. package/lib/save/CGJsonPrinter.js +41 -0
  299. package/lib/save/GraphPrinter.js +2 -2
  300. package/lib/save/json/JsonDto.d.ts +86 -2
  301. package/lib/save/json/JsonDto.d.ts.map +1 -1
  302. package/lib/save/json/JsonSerialization.d.ts +1 -1
  303. package/lib/save/json/JsonSerialization.d.ts.map +1 -1
  304. package/lib/save/json/JsonSerialization.js +235 -145
  305. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  306. package/lib/save/source/SourceStmt.js +3 -1
  307. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  308. package/lib/save/source/SourceTransformer.js +0 -3
  309. package/lib/utils/CxxSceneUtils.d.ts +11 -0
  310. package/lib/utils/CxxSceneUtils.d.ts.map +1 -0
  311. package/lib/utils/CxxSceneUtils.js +178 -0
  312. package/lib/utils/FileUtils.d.ts +8 -8
  313. package/lib/utils/FileUtils.d.ts.map +1 -1
  314. package/lib/utils/FileUtils.js +35 -45
  315. package/lib/utils/LRUCacheDecorator.d.ts +20 -0
  316. package/lib/utils/LRUCacheDecorator.d.ts.map +1 -0
  317. package/lib/utils/LRUCacheDecorator.js +89 -0
  318. package/lib/utils/ModuleUtils.d.ts +39 -0
  319. package/lib/utils/ModuleUtils.d.ts.map +1 -0
  320. package/lib/utils/ModuleUtils.js +261 -0
  321. package/package.json +13 -7
  322. /package/{node_modules → lib/node_modules}/ohos-typescript/LICENSE +0 -0
  323. /package/{node_modules → lib/node_modules}/ohos-typescript/README.OpenSource +0 -0
  324. /package/{node_modules → lib/node_modules}/ohos-typescript/README.md +0 -0
  325. /package/{node_modules → lib/node_modules}/ohos-typescript/SECURITY.md +0 -0
  326. /package/{node_modules → lib/node_modules}/ohos-typescript/ThirdPartyNoticeText.txt +0 -0
  327. /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsc +0 -0
  328. /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsserver +0 -0
  329. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/README.md +0 -0
  330. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cancellationToken.js +0 -0
  331. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cs/diagnosticMessages.generated.json +0 -0
  332. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/de/diagnosticMessages.generated.json +0 -0
  333. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/es/diagnosticMessages.generated.json +0 -0
  334. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/fr/diagnosticMessages.generated.json +0 -0
  335. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/it/diagnosticMessages.generated.json +0 -0
  336. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ja/diagnosticMessages.generated.json +0 -0
  337. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ko/diagnosticMessages.generated.json +0 -0
  338. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.d.ts +0 -0
  339. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.d.ts +0 -0
  340. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.iterable.d.ts +0 -0
  341. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.collection.d.ts +0 -0
  342. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.core.d.ts +0 -0
  343. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.d.ts +0 -0
  344. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.generator.d.ts +0 -0
  345. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.iterable.d.ts +0 -0
  346. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.promise.d.ts +0 -0
  347. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.proxy.d.ts +0 -0
  348. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.reflect.d.ts +0 -0
  349. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.d.ts +0 -0
  350. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
  351. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.array.include.d.ts +0 -0
  352. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.d.ts +0 -0
  353. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.full.d.ts +0 -0
  354. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.d.ts +0 -0
  355. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.full.d.ts +0 -0
  356. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.intl.d.ts +0 -0
  357. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.object.d.ts +0 -0
  358. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
  359. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.string.d.ts +0 -0
  360. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
  361. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
  362. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
  363. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.d.ts +0 -0
  364. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.full.d.ts +0 -0
  365. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.intl.d.ts +0 -0
  366. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.promise.d.ts +0 -0
  367. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.regexp.d.ts +0 -0
  368. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.array.d.ts +0 -0
  369. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.d.ts +0 -0
  370. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.full.d.ts +0 -0
  371. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.intl.d.ts +0 -0
  372. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.object.d.ts +0 -0
  373. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.string.d.ts +0 -0
  374. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.symbol.d.ts +0 -0
  375. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.bigint.d.ts +0 -0
  376. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.d.ts +0 -0
  377. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.date.d.ts +0 -0
  378. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.full.d.ts +0 -0
  379. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.intl.d.ts +0 -0
  380. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.number.d.ts +0 -0
  381. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.promise.d.ts +0 -0
  382. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
  383. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.string.d.ts +0 -0
  384. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
  385. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.d.ts +0 -0
  386. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.full.d.ts +0 -0
  387. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.intl.d.ts +0 -0
  388. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.promise.d.ts +0 -0
  389. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.string.d.ts +0 -0
  390. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.weakref.d.ts +0 -0
  391. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.array.d.ts +0 -0
  392. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.d.ts +0 -0
  393. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.error.d.ts +0 -0
  394. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.full.d.ts +0 -0
  395. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.intl.d.ts +0 -0
  396. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.object.d.ts +0 -0
  397. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.sharedmemory.d.ts +0 -0
  398. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.string.d.ts +0 -0
  399. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es5.d.ts +0 -0
  400. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es6.d.ts +0 -0
  401. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.d.ts +0 -0
  402. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.full.d.ts +0 -0
  403. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.intl.d.ts +0 -0
  404. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.scripthost.d.ts +0 -0
  405. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.d.ts +0 -0
  406. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.importscripts.d.ts +0 -0
  407. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.iterable.d.ts +0 -0
  408. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pl/diagnosticMessages.generated.json +0 -0
  409. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
  410. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ru/diagnosticMessages.generated.json +0 -0
  411. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tr/diagnosticMessages.generated.json +0 -0
  412. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsc.js +0 -0
  413. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserver.js +0 -0
  414. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.d.ts +0 -0
  415. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.js +0 -0
  416. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typesMap.json +0 -0
  417. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.d.ts +0 -0
  418. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.js +0 -0
  419. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typingsInstaller.js +0 -0
  420. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/watchGuard.js +0 -0
  421. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
  422. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
package/README.en.md CHANGED
@@ -1,96 +1,100 @@
1
- # sig_programanalysis
1
+ # ArkAnalyzer: Static Program Analysis Framework for the ArkTS Language
2
2
 
3
- English | [简体中文](./README.md)
3
+ [简体中文](./README.md)
4
4
 
5
- ## SIG Group Work Objectives and Scope
5
+ ## Development environment setup
6
6
 
7
- ### Work Objectives
7
+ 1. Install [Visual Studio Code](https://code.visualstudio.com/download) or another IDE.
8
+ 2. Install [Node.js](https://nodejs.org/en/download/current) (includes npm).
9
+ 3. Install dependencies:
10
+ ```shell
11
+ npm install
12
+ ```
13
+ 4. [Optional] Generate the latest API documentation under `docs/api_docs`:
14
+ ```shell
15
+ npm run gendoc
16
+ ```
8
17
 
9
- * Sig_programanalysis aims to carry out program analysis technology exploration, key technology identification, and competitiveness building for OpenHarmony systems and apps, striving to become the gathering place for OpenHarmony system and app analysis capabilities and an incubation place for related engineering tools.
18
+ ## Command-line interface (CLI)
10
19
 
11
- * Sig_programanalysis will build a basic program analysis framework for OpenHarmony apps, and subsequently based on it to provide application developers with out-of-the-box defect scanning and analysis tools, making it possible to automatically vet code for scenarios such as IDE, CI/CD pipelines, etc.
20
+ The executable is `arkanalyzer` (see the `bin` field in `package.json`). **Build before using the CLI locally** so that `lib/` is generated:
12
21
 
13
- ### Work Scope
22
+ ```shell
23
+ npm run build
24
+ ```
14
25
 
15
- * Responsible for building and maintaining the key technology map of program analysis, as well as the decomposition of functional modules in the field, interface definition, and maintenance management.
26
+ Show help:
16
27
 
17
- * Responsible for the architecture design, open source development, and project maintenance of projects related to program analysis.
28
+ ```shell
29
+ npx arkanalyzer --help
30
+ npx arkanalyzer cg --help
31
+ npx arkanalyzer ir --help
32
+ ```
18
33
 
34
+ `<input>` is the **project root** of an ArkTS/TypeScript project.
19
35
 
20
- ### Projects
36
+ ### `cg`: call graph and reachability
21
37
 
22
- Sig_programanalysis currently incubates the following projects. Everyone is welcome to participate (you can apply to participate in the co-construction of existing projects, or you can apply to create a new program analysis project).
38
+ Usage: `arkanalyzer cg <input> [options]`
23
39
 
40
+ | Option | Description | Default |
41
+ |--------|-------------|---------|
42
+ | `-a, --algorithm <name>` | Graph algorithm: `cha` \| `rta` | `rta` |
43
+ | `-o, --output <file>` | Output file path | `stdout` |
44
+ | `-f, --format <type>` | Output format: `json` \| `text` \| `dot` \| `csv` | `json` |
45
+ | `-e, --entry <method>` | Entry method (repeatable); `@dummyMain` means default entries | auto |
46
+ | `-r, --reachable-from <method>` | Reachability roots (repeatable) | — |
47
+ | `--direction <dir>` | `forward` (callees) \| `backward` (callers toward roots) | `forward` |
48
+ | `--edges <type>` | Edge filter: `call` \| `virtual` \| `interface` \| `all` | `all` |
49
+ | `--ohos-sdk-home <path>` | OpenHarmony SDK root; falls back to `OHOS_SDK_HOME` | — |
24
50
 
25
- * ArkAnalyzer:
26
- The Static Analysis Framework for ArkTS-based OpenHarmony Apps.
51
+ Examples:
27
52
 
28
- * ArkCheck:
29
- Checking OpenHarmony Apps for Potential Code-level Defects
53
+ ```shell
54
+ npx arkanalyzer cg ./myapp -a rta -f json
55
+ npx arkanalyzer cg ./myapp -e "@dummyMain" -r MyClass.myMethod --direction backward -f text
56
+ ```
30
57
 
58
+ ### `ir`: export IR artifacts
31
59
 
32
- ## SIG Members
60
+ Usage: `arkanalyzer ir <input> [options]`
33
61
 
62
+ | Option | Description | Default |
63
+ |--------|-------------|---------|
64
+ | `-o, --output <dir>` | Output directory for artifacts | `out` |
65
+ | `-f, --format <type>` | `json` \| `text` \| `dot` | `text` |
66
+ | `--ohos-sdk-home <path>` | Same as `cg` | — |
67
+ | `--no-infer-types` | Skip `Scene.inferTypes()` for speed | inference on by default |
34
68
 
35
- ### Leader
69
+ The command prints one line of JSON summary to **stdout** (fields such as `input`, `format`, `outputDir`, `fileCount`).
36
70
 
37
- - [lilicoding](https://gitee.com/lilicoding)
71
+ Examples:
38
72
 
73
+ ```shell
74
+ npx arkanalyzer ir ./myapp -f text -o ./out
75
+ npx arkanalyzer ir ./myapp -f json -o ./out
76
+ ```
39
77
 
40
- ### Committers
41
- - [kubigao](https://gitee.com/kubigao)
42
- - [yifei-xue](https://gitee.com/yifei_xue)
43
- - [kubrick-hjh](https://gitee.com/kubrick-hjh)
44
- - [speed9](https://gitee.com/speeds)
45
- - [bbsun](https://gitee.com/bbsun)
46
- - [chn](https://gitee.com/chn)
47
- - [Elouan](https://gitee.com/Elouan)
48
- - [Rnine](https://gitee.com/Rnine)
49
- - [workspace_cb](https://gitee.com/workspace_cb)
50
- - [longyuC](https://gitee.com/longyuC)
51
- - [xyji95](https://gitee.com/xyji95)
52
- - [xulingyun-red](https://gitee.com/xulingyun-red)
78
+ For detailed option semantics and examples, see [skills/arkanalyzer/skills/cg.md](skills/arkanalyzer/skills/cg.md) and [skills/arkanalyzer/skills/ir.md](skills/arkanalyzer/skills/ir.md).
53
79
 
80
+ ## Documentation
54
81
 
55
- ### Meetings
56
- - Meeting Time: Bi-weekly meeting, Thursday 19:30 Beijing time
57
- - Meeting Application:[Link](https://shimo.im/forms/B1Awd60W7bU51g3m/fill)
58
- - Meeting Link: Welink or Others
59
- - Meeting Notification: [Subscribe to](https://lists.openatom.io/postorius/lists/dev.openharmony.io) mailing list dev@openharmony.io for the meeting link
60
- - Meeting Summary: [Archive link address](https://gitee.com/openharmony-sig/sig-content)
82
+ 1. Quick start: [QuickStart.md](docs/QuickStart.md).
83
+ 2. API reference: [globals.md](docs/api_docs/globals.md).
84
+ 3. Program Analysis SIG: [English](docs/sig_programanalysis.en.md).
61
85
 
62
- ### Contact
86
+ ## Contributing
63
87
 
64
- - Mailing list: [dev@openharmony.io](https://lists.openatom.io/postorius/lists/dev@openharmony.io/)
88
+ Follow the OpenHarmony-SIG contribution workflow: [HowToCreatePR.md (English)](docs/HowToCreatePR.md#english).
65
89
 
66
- ***
67
- # ArkAnalyzer: Static Program Analysis Framework for the ArkTS Language
68
- ## Develope environment setup
69
- 1. [Download Visual Studio Code](https://code.visualstudio.com/download) or other IDEA;
70
- 2. [Download Node.js](https://nodejs.org/en/download/current) and install it. Node.js is a runtime environment for JavaScript, which comes with its own package manager, npm.
71
- 3. Install Typescript via npm:
72
- ```shell
73
- npm install -g typescript
74
- ```
75
- 4. Install dependency libraries
76
- ```shell
77
- cd arkanalyzer
78
- npm install
79
- ```
80
- 5. [Optional] Generate the latest API documentation, which will be created at docs/api_docs.
81
- ```shell
82
- npm run gendoc
83
- ```
90
+ ## Debugging
84
91
 
85
- ## Docmentations
92
+ Set the `args` array in `.vscode/launch.json` to the file path you want to debug, then start debugging.
86
93
 
87
- 1. ArkAnalyzer API docmentations,refer to the [link](docs/api_docs/globals.md).
94
+ ## Adding test cases
88
95
 
89
- ## Commit codes
90
- Follow the code repository standards of Openharmony-Sig, refer to the [link](docs/HowToCreatePR.md#english)
96
+ Place new tests under `tests/`. Sample code and other resources go under `tests/resources/`, organized in folders per scenario.
91
97
 
92
- ## Debug
93
- Modify the `args` parameter array in the debug configuration file `.vscode/launch.json` to the path of the test file you want to debug, and then start the debugging process.
98
+ ## Issues
94
99
 
95
- ## Add test cases
96
- Place all new test codes in the `tests` directory. Corresponding sample code and other resource files should be placed in the ``tests\resources` directory, and create different folders for each testing scenario.
100
+ See [HowToHandleIssues.md](docs/HowToHandleIssues.md) to file issues.
package/README.md CHANGED
@@ -1,98 +1,84 @@
1
- # sig_programanalysis
2
-
3
- 简体中文 | [English](./README.en.md)
4
-
5
- 说明:本SIG的内容遵循OpenHarmony的PMC管理章程 [README](../../zh/pmc.md)中描述的约定。
6
-
7
-
8
- ## SIG组工作目标和范围
9
-
10
-
11
-
12
- ### 工作目标
13
-
14
- * 程序分析-SIG(Sig_programanalysis) 旨在面向OpenHarmony系统和原生应用开展程序分析技术洞察、关键技术识别和竞争力构建,同时成为OpenHarmony系统和应用程序分析能力的聚集地和相关工程工具的孵化地。
15
-
16
- * 程序分析-SIG(Sig_programanalysis)将面向OpenHarmony应用构建基础程序分析框架并基于此为应用开发者提供开箱即用的缺陷扫描分析工具,面向IDE、流水线门禁、应用市场上架审核等场景,打造自动化工具看护能力。
17
-
18
- ### 工作范围
19
-
20
- * 负责程序分析子领域关键根技术地图梳理,以及领域内功能模块分解、接口定义与维护管理等工作。
21
-
22
- * 负责程序分析子领域相关项目的架构设计、开源开发和项目维护等工作。
23
-
24
-
25
- ### 项目孵化
26
-
27
- 程序分析-SIG(Sig_programanalysis)正积极孵化如下项目,欢迎大家参与共享共建(可申请参与已有项目的共建,也可申请创建新的程序分析项目并联合社区启动开源共建)。
1
+ # 方舟分析器:面向ArkTS语言的静态程序分析框架
28
2
 
3
+ ## ArkAnalyzer 环境配置
4
+ 1. 从 [Download Visual Studio Code](https://code.visualstudio.com/download) 下载 VS Code 并安装,或安装其他 IDE。
5
+ 2. 从 [Download Node.js](https://nodejs.org/en/download/current) 下载 Node.js 并安装(自带 npm)。
6
+ 3. 安装依赖库:
7
+ ```shell
8
+ npm install
9
+ ```
10
+ 4. 【可选】生成最新 API 文档,输出目录为 `docs/api_docs`:
11
+ ```shell
12
+ npm run gendoc
13
+ ```
29
14
 
30
- * 方舟分析器(ArkAnalyzer):
31
- 面向ArkTS的OpenHarmony应用程序分析框架。
15
+ ## ArkAnalyzer 命令行(CLI)
32
16
 
33
- * 方舟检测器(ArkCheck):
34
- 面向OpenHarmony应用开发提供代码级缺陷自动检测(I期聚焦高性能编码规则的自动化检测)
17
+ 可执行入口为 `arkanalyzer`(见 `package.json` 的 `bin` 字段)。**本地使用 CLI 前请先编译**,生成 `lib/`:
35
18
 
19
+ ```shell
20
+ npm run build
21
+ ```
36
22
 
23
+ 查看帮助:
37
24
 
38
- ## SIG组成员
25
+ ```shell
26
+ npx arkanalyzer --help
27
+ npx arkanalyzer cg --help
28
+ npx arkanalyzer ir --help
29
+ ```
39
30
 
31
+ `<input>` 均指 ArkTS/TypeScript **工程根目录**。
40
32
 
41
- ### Leader
33
+ ### `cg`:调用图构建与可达性分析
42
34
 
43
- - [lilicoding](https://gitcode.com/lilicoding)
35
+ 用法:`arkanalyzer cg <input> [options]`
44
36
 
37
+ | 选项 | 说明 | 默认值 |
38
+ |------|------|--------|
39
+ | `-a, --algorithm <name>` | 构图算法:`cha` \| `rta` | `rta` |
40
+ | `-o, --output <file>` | 结果输出文件路径 | `stdout` |
41
+ | `-f, --format <type>` | 输出格式:`json` \| `text` \| `dot` \| `csv` | `json` |
42
+ | `-e, --entry <method>` | 入口方法,可多次指定;`@dummyMain` 表示与默认入口一致 | 自动推断 |
43
+ | `-r, --reachable-from <method>` | 可达性分析根方法,可多次指定 | — |
44
+ | `--direction <dir>` | 可达方向:`forward`(顺调)\| `backward`(谁调到根) | `forward` |
45
+ | `--edges <type>` | 边类型过滤:`call` \| `virtual` \| `interface` \| `all` | `all` |
46
+ | `--ohos-sdk-home <path>` | OpenHarmony SDK 根路径;未设置时读取环境变量 `OHOS_SDK_HOME` | — |
45
47
 
46
- ### Committers列表
47
- - [kubigao](https://gitcode.com/kubigao)
48
- - [yifei-xue](https://gitcode.com/yifei-xue)
49
- - [kubrick-hjh](https://gitcode.com/kubrick-hjh)
50
- - [speed9](https://gitee.com/speeds)
51
- - [bbsun](https://gitcode.com/bbsun)
52
- - [chn](https://gitcode.com/chn)
53
- - [Elouan](https://gitcode.com/Elouan)
54
- - [Rnine](https://gitcode.com/Rnine1)
55
- - [workspace_cb](https://gitee.com/workspace_cb)
56
- - [longyuC](https://gitee.com/longyuC)
57
- - [xyji95](https://gitcode.com/xyji95)
58
- - [xulingyun](https://gitcode.com/muya318)
48
+ 示例:
59
49
 
50
+ ```shell
51
+ npx arkanalyzer cg ./myapp -a rta -f json
52
+ npx arkanalyzer cg ./myapp -e "@dummyMain" -r MyClass.myMethod --direction backward -f text
53
+ ```
60
54
 
61
- ### 会议
62
- - 会议时间:双周例会,周四晚上19:00, UTC+8
63
- - 会议申报:[申报链接](https://shimo.im/forms/B1Awd60W7bU51g3m/fill)
64
- - 会议链接:Welink或其他会议
65
- - 会议通知:请[订阅](https://lists.openatom.io/postorius/lists/dev.openharmony.io)邮件列表 dev@openharmony.io 获取会议链接
66
- - 会议纪要:[归档链接地址](https://gitee.com/openharmony-sig/sig-content)
55
+ ### `ir`:导出工程 IR 产物
67
56
 
57
+ 用法:`arkanalyzer ir <input> [options]`
68
58
 
69
- ### Contact (optional)
59
+ | 选项 | 说明 | 默认值 |
60
+ |------|------|--------|
61
+ | `-o, --output <dir>` | 产物输出目录 | `out` |
62
+ | `-f, --format <type>` | `json` \| `text` \| `dot` | `text` |
63
+ | `--ohos-sdk-home <path>` | 同 `cg` | — |
64
+ | `--no-infer-types` | 跳过 `Scene.inferTypes()` 以加快执行 | 默认会做类型推断 |
70
65
 
71
- - 邮件列表:[dev@openharmony.io](https://lists.openatom.io/postorius/lists/dev@openharmony.io/)
66
+ 命令会在**标准输出**打印一行 JSON 摘要(含 `input`、`format`、`outputDir`、`fileCount` 等)。
72
67
 
73
- ***
68
+ 示例:
74
69
 
75
- # 方舟分析器:面向ArkTS语言的静态程序分析框架
76
- ## ArkAnalyzer 环境配置
77
- 1. 从[Download Visual Studio Code](https://code.visualstudio.com/download)下载vscode并安装,或安装其他IDE。
78
- 2. 从[Download Node.js](https://nodejs.org/en/download/current)下载Node.js并安装,Node.js为JavaScript的运行时环境,自带包管理器npm。
79
- 3. 通过npm安装TypeScript编译器,命令行输入
80
70
  ```shell
81
- npm install -g typescript
82
- ```
83
- 4. 安装依赖库
84
- ```shell
85
- npm install
86
- ```
87
- 5. 【可选】生成最新API文档,文档生成在 docs/api_docs。
88
- ```shell
89
- npm run gendoc
71
+ npx arkanalyzer ir ./myapp -f text -o ./out
72
+ npx arkanalyzer ir ./myapp -f json -o ./out
90
73
  ```
91
74
 
75
+ 更细的参数语义与典型用法可参考仓库内 [skills/arkanalyzer/skills/cg.md](skills/arkanalyzer/skills/cg.md)、[skills/arkanalyzer/skills/ir.md](skills/arkanalyzer/skills/ir.md)。
76
+
92
77
  ## ArkAnalyzer 文档
93
78
 
94
79
  1. ArkAnalyzer 快速入门文档,请参考:[链接](docs/QuickStart.md)。
95
80
  2. ArkAnalyzer API文档,请参考:[链接](docs/api_docs/globals.md)。
81
+ 3. 程序分析 SIG 说明:[简体中文](docs/sig_programanalysis.md) · [English](docs/sig_programanalysis.en.md)。
96
82
 
97
83
  ## ArkAnalyzer 代码上库
98
84
  遵守openharmony-sig代码上库规范, 操作方法请参考:[链接](docs/HowToCreatePR.md#中文)
@@ -8,13 +8,18 @@
8
8
  ],
9
9
  "enableLeadingComments": false,
10
10
  "enableBuiltIn": true,
11
+ "enableOhModulesBody": false,
11
12
  "ignoreFileNames": [
12
- "oh_modules",
13
13
  "node_modules",
14
14
  "build-tools",
15
15
  "hvigorfile.ts",
16
16
  "hvigorfile.js",
17
- "hvigor-wrapper.js"
17
+ "hvigor-wrapper.js",
18
+ "build-tools",
19
+ "build",
20
+ ".cxx",
21
+ ".test",
22
+ ".preview"
18
23
  ],
19
24
  "sdkGlobalFolders": [
20
25
  "component",
@@ -0,0 +1,245 @@
1
+ # ArkAnalyzer-cpp使用指导
2
+
3
+ ## 一、arkCppAstDumper工具生成与使用
4
+ * 简介:解析C/C++源码文件生成抽象语法树
5
+
6
+ ### 1、构建环境(根据构建要求选择)
7
+ * **LLVM**:使用19.1.7版本,llvm中clang-c目录下的13个头文件为arkCppAstDumper工具提供解析处理抽象语法节点的方法,libclang动态链接库为arkCppAstDumper工具提供编译器接口,下载地址:https://github.com/llvm/llvm-project/releases
8
+
9
+ * **Visual Studio 2022**:使用2022版本,通过Visual Studio下载windows平台的MSVC标准库头文件,也作为构建系统在windows平台构建arkCppAstDumper工具,下载地址:https://visualstudio.microsoft.com/zh-hans/downloads
10
+
11
+ * **llvm-mingw**:用于在linux上交叉编译构建windows版本的arkCppAstDumper工具,下载地址:https://github.com/mstorsjo/llvm-mingw/releases
12
+
13
+ * **osxcross**:用于在linux上交叉编译构建mac版本的arkCppAstDumper工具,下载地址:https://github.com/tpoechtrager/osxcross
14
+
15
+ * **macosx-sdks**:用于在linux上交叉编译构建mac版本的arkCppAstDumper工具,下载地址:https://github.com/joseluisq/macosX-sdks
16
+
17
+ * **cmake**:使用3.22.5及以上版本,构建命令构建arkCppAstDumper工具,下载地址:https://cmake.org/download
18
+
19
+ * **json.hpp**:用于将抽象语法树以json的格式输出,下载地址:https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp
20
+
21
+ ### 2、构建arkCppAstDumper工具
22
+ #### 2.1、构建windows版本的arkCppAstDumper
23
+
24
+ ##### 2.1.1、在windows平台构建arkCppAstDumper
25
+
26
+ 根据windows平台下载对应的llvm预编译版本并解压
27
+
28
+ ![img_7.png](img_7.png)
29
+
30
+ 配置llvm的bin目录到环境变量
31
+
32
+ ![img_22.png](img_22.png)
33
+
34
+ 下载Visual Studio 2022安装包进行安装,打开Visual Studio install选择C++的桌面开发进行安装环境
35
+
36
+ ![img_20.png](img_20.png)
37
+
38
+ 下载arkAnalyzer-cpp代码,将json.hpp文件放在arkanalyzer\src\cpp_frontend\ast\utils的目录下,在arkanalyzer\src\cpp_frontend\ast\cmake\toolchains\windows.cmake文件中配置llvm的clang-c和libclang的路径
39
+
40
+ ![img_23.png](img_23.png)
41
+
42
+ 在arkanalyzer\src\cpp_frontend\ast的目录下执行以下命令,在arkanalyzer\src\cpp_frontend\ast\build\Release目录下生成工具
43
+
44
+ mkdir build && cd build
45
+ cmake -DCMAKE_TOOLCHAIN_FILE=..\cmake\toolchains\windows.cmake ..
46
+ cmake --build . --config Release
47
+
48
+ 执行依赖的文件:
49
+ * libclang.dll(可从llvm预编译版本的bin目录下获取)
50
+
51
+ ##### 2.1.2、在linux平台交叉编译构建windows版本的arkCppAstDumper
52
+
53
+ 下载windows版本的llvm预编译版本并解压
54
+
55
+ ![img_7.png](img_7.png)
56
+
57
+ 根据LLVM版本下载对应的llvm-mingw包并解压
58
+
59
+ ![img_9.png](img_9.png)
60
+
61
+ 下载arkAnalyzer-cpp代码,将json.hpp文件放在arkanalyzer\src\cpp_frontend\ast\utils的目录下,在arkanalyzer\src\cpp_frontend\ast\cmake\toolchains\mingw.cmake文件中配置llvm的clang-c和libclang.dll的路径,配置llvm-mingw的clang编译器和链接库
62
+
63
+ ![img_6.png](img_6.png)
64
+
65
+ 在arkanalyzer\src\cpp_frontend\ast的目录下执行以下命令,在arkanalyzer\src\cpp_frontend\ast\build目录下生成工具
66
+
67
+ mkdir build && cd build
68
+ cmake -DCMAKE_TOOLCHAIN_FILE=..\cmake\toolchains\mingw.cmake ..
69
+ make
70
+
71
+ 执行依赖的文件:
72
+ * libclang.dll(可从llvm预编译版本的bin目录下获取)
73
+ * libc++.dll(可从llvm-mingw的x86_64-w64-mingw32/bin目录下获取)
74
+ * libunwind.dll(可从llvm-mingw的x86_64-w64-mingw32/bin目录下获取)
75
+
76
+ #### 2.2、构建linux版本的arkCppAstDumper(x86和arm同理)
77
+ 下载linux版本的llvm预编译版本并解压
78
+
79
+ ![img_21.png](img_21.png)
80
+
81
+ 下载arkAnalyzer-cpp代码,将json.hpp文件放在arkanalyzer\src\cpp_frontend\ast\utils的目录下,在arkanalyzer\src\cpp_frontend\ast\cmake\toolchains\linux.cmake文件中配置llvm的clang-c和libclang.so的路径
82
+
83
+ ![img_5.png](img_5.png)
84
+
85
+ 在arkanalyzer\src\cpp_frontend\ast的目录下执行以下命令,在arkanalyzer\src\cpp_frontend\ast\build目录下生成工具
86
+
87
+ mkdir build && cd build
88
+ cmake -DCMAKE_TOOLCHAIN_FILE=..\cmake\toolchains\linux.cmake ..
89
+ make
90
+
91
+ 执行依赖的文件:
92
+ libclang.so(可从llvm预编译版本的LLVM-19.1.7-Linux-X64/lib目录下获取)
93
+
94
+ #### 2.3、构建mac版本的arkCppAstDumper(x86和arm同理)
95
+ ##### 2.3.1、在linux平台交叉编译构建mac版本的arkCppAstDumper
96
+ 下载mac版本的llvm预编译版本并解压
97
+
98
+ ![img_10.png](img_10.png)
99
+
100
+ 下载osxcross源码,执行下列命令安装基础依赖环境
101
+
102
+ apt install cmake clang git patch libssl-dev libxml2-dev xz-utils bzip2 cpio zliblg-dev
103
+
104
+ 下载mac的SDK包放在osxcross/tarball目录下
105
+
106
+ ![img_11.png](img_11.png)
107
+
108
+ 执行下列命令配置osxcross环境变量
109
+
110
+ export OSXCROSS_INSTALL_DIR=osxcross根目录
111
+
112
+ 在osxcross根目录执行构建脚本
113
+
114
+ TARGET_DIR=${OSXCROSS_INSTALL_DIR} SDK_VERSION=sdk版本号 OSX_VERSION_MIN=14.0 ./build.sh
115
+
116
+ 执行下列命令配置环境变量
117
+
118
+ export OSXCROSS_TARGET_DIR=osxcross/target
119
+ export LLVM_MACOS_ARM64_PATH=llvm的目录
120
+ export PATH=${OSXCROSS_TARGET_DIR}/bin:$PATH
121
+ export OSXCROSS_TARGET=darwin24.5
122
+ export OSXCROSS_SDK=MacOSX15.5.sdk
123
+ export OSXCROSS_HOST=arm64-apple-darwin24.5
124
+
125
+ 下载arkAnalyzer-cpp代码,将json.hpp文件放在arkanalyzer\src\cpp_frontend\ast\utils的目录下,在arkanalyzer\src\cpp_frontend\ast的目录下执行以下命令,在arkanalyzer\src\cpp_frontend\ast\build目录下生成工具
126
+
127
+ mkdir build && cd build
128
+ cmake -DCMAKE_TOOLCHAIN_FILE=${OSXCROSS_INSTALL_DIR}/toolchain.cmake -DCLANG_INCLUDE_DIRS=${LLVM_MACOS_ARM64_PATH}/include -DCLANG_LIBRARIES=${LLVM_MACOS_ARM64_PATH}/lib/libclang.dylib ..
129
+ make
130
+
131
+ 执行依赖的文件:
132
+ * libclang.dylib(可从llvm预编译版本的LLVM-19.1.7-macOS-ARM64/lib目录下获取)
133
+
134
+ ### 3、使用arkCppAstDumper工具
135
+
136
+ #### 3.1、arkCppAstDumper工具使用示例
137
+
138
+ ##### 对单个文件生成抽象语法树并输出到文件.cpp同级路径下(默认路径)
139
+
140
+ ./arkCppAstDumper.exe <文件.cpp>
141
+
142
+ ##### 对单个文件生成抽象语法树并输出到指定路径
143
+
144
+ ./arkCppAstDumper.exe <文件.cpp> -o <json文件指定路径>
145
+
146
+ ##### 对单个文件生成抽象语法树并提供编译数据库文件
147
+
148
+ ./arkCppAstDumper.exe <文件.cpp> -o <json文件指定路径> -c <编译数据库文件路径>
149
+
150
+ ##### 对单个文件生成抽象语法树并提供多个-I编译参数
151
+
152
+ ./arkCppAstDumper.exe <文件.cpp> -o <json文件指定路径> -i <头文件路径> -i <头文件路径> ...
153
+
154
+ ##### 对单个文件生成抽象语法树并指定 TU Flags
155
+
156
+ ./arkCppAstDumper.exe <文件.cpp> -o <json文件指定路径> -f <flags>
157
+
158
+ 其中 -f 参数用于控制 libClang 的 TranslationUnit 解析标志:
159
+ 默认总是包含 KeepGoing(保证 AST 构建在遇到错误时尽量继续)。
160
+ 允许与 DetailedPreprocessingRecord 组合,开启详细预处理记录(可以获取 #include 和 #define 等信息)。
161
+ 允许与 SingleFileParse 组合,仅解析单个源文件而不递归解析包含的头文件。
162
+ 多个标志可以用 , 或 | 分隔,例如:
163
+ ./arkCppAstDumper.exe test.cpp -f "DPP|SingleFileParse"
164
+ 等价于 KeepGoing | DetailedPreprocessingRecord | SingleFileParse。
165
+
166
+ #### 3.2、arkCppAstDumper工具解析策略
167
+ - arkCppAstDumper会优先从-c获取编译数据库引入头文件的编译参数,如果编译数据库不存在再从-i获取引入头文件的编译参数,-c参数和-i参数不能同时存在,只能选其一。
168
+
169
+ ## 二、使用ArkAnalyzer源码分析C++项目
170
+
171
+ 1、将arkCppAstDumper工具及其依赖的文件放在arkanalyzer\src\cpp_frontend\ast\dumper目录下
172
+
173
+ ![img_12.png](img_12.png)
174
+
175
+ 2、对需要分析的项目生成编译数据库,推荐的三种方式:
176
+
177
+ * 用DevEco Studio打开项目,点击file下的Sync and Refresh Project对项目自动生成编译数据库
178
+
179
+ ![img_13.png](img_13.png)
180
+
181
+ * 使用cmake原生支持生成编译数据库,在CMakeLists.txt文件添加下列设置
182
+
183
+ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
184
+
185
+ * 安装bear拦截编译生成编译数据库
186
+
187
+ sudo apt install bear
188
+ bear -- cmake ..
189
+
190
+ 3、设置SceneConfig,路径:arkanalyzer\src\Config.ts
191
+
192
+ ![img_14.png](img_14.png)
193
+
194
+ 4、设置c++头文件到环境变量,当没有编译数据库时作为头文件搜索路径
195
+
196
+ * windows平台设置DevEco studio目录下的c++头文件
197
+ ![img_8.png](img_8.png)
198
+
199
+ * linux平台设置commomd-line-tools目录下的c++头文件
200
+ ![img_16.png](img_16.png)
201
+
202
+ * mac平台设置DevEco studio和MacOSX.sdk目录下的c++头文件
203
+ ![img_19.png](img_19.png)
204
+
205
+ 5、执行接口,SceneConfig作为参数传给buildSceneFromFiles方法生成Scene结构的ArkIR,路径:arkanalyzer\src\Scene.ts
206
+
207
+ ![img_18.png](img_18.png)
208
+
209
+ 6、执行流程:
210
+
211
+ * 根据SceneConfig中项目目录编译所有的文件,通过配置中的文件后缀过滤掉其它不需要分析的文件。
212
+
213
+ * 遍历需要分析的文件分别执行arkCppAstDumper工具对单个文件生成抽象语法树。
214
+
215
+ * arkAnalyzer-cpp遍历抽象语法树对每个节点进行解析处理生成Scene结构的ArkIR。
216
+
217
+ ## 三、基于ArkAnalyzer npm包分析C++项目
218
+
219
+ 1、修改package.json文件中dumper工具的目录,删除postinstall配置,将dumper工具打包到包中
220
+
221
+ ![img_17.png](img_17.png)
222
+
223
+ 2、在arkanalyzer根目录下执行下列命令进行打包生成arkanalyzer-1.0.8.tgz包
224
+
225
+ npm pack
226
+
227
+ 3、将arkanalyzer-1.0.8.tgz包放在homecheck根目录下执行下列命令进行安装
228
+
229
+ npm install arkanalyzer-1.0.8.tgz
230
+
231
+ 4、在homecheck中引入arkanalyzer的SceneConfig和Scene,在SceneConfig配置项目信息,将SceneConfig配置传给Scene的buildSceneFromFiles方法生成Scene结构的ArkIR
232
+
233
+ ![img_15.png](img_15.png)
234
+
235
+ ## 四、单元测试运行
236
+
237
+ 配置:将arkCppAstDumper工具及其依赖的文件放在arkanalyzer\src\cpp_frontend\ast\dumper目录下
238
+
239
+ 1、运行单个单元测试,执行以下终端命令
240
+
241
+ npm test 单元测试用例路径
242
+
243
+ 2、运行所有单元测试,在项目的跟目录下执行以下终端命令
244
+
245
+ npm test