arkanalyzer 1.0.85 → 1.0.87
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.
- package/README.en.md +69 -65
- package/README.md +56 -70
- package/config/arkanalyzer.json +7 -2
- package/docs/cppFrontend/ArkAnalyzer-cpp_usage_guide.md +245 -0
- package/docs/cppFrontend/cpp_frontend_build_guide.md +126 -0
- package/docs/cppFrontend/cpp_frontend_user_guide.md +175 -0
- package/docs/cppFrontend/img.png +0 -0
- package/docs/cppFrontend/img_1.png +0 -0
- package/docs/cppFrontend/img_10.png +0 -0
- package/docs/cppFrontend/img_11.png +0 -0
- package/docs/cppFrontend/img_12.png +0 -0
- package/docs/cppFrontend/img_13.png +0 -0
- package/docs/cppFrontend/img_14.png +0 -0
- package/docs/cppFrontend/img_15.png +0 -0
- package/docs/cppFrontend/img_16.png +0 -0
- package/docs/cppFrontend/img_17.png +0 -0
- package/docs/cppFrontend/img_18.png +0 -0
- package/docs/cppFrontend/img_19.png +0 -0
- package/docs/cppFrontend/img_2.png +0 -0
- package/docs/cppFrontend/img_20.png +0 -0
- package/docs/cppFrontend/img_21.png +0 -0
- package/docs/cppFrontend/img_22.png +0 -0
- package/docs/cppFrontend/img_23.png +0 -0
- package/docs/cppFrontend/img_3.png +0 -0
- package/docs/cppFrontend/img_4.png +0 -0
- package/docs/cppFrontend/img_5.png +0 -0
- package/docs/cppFrontend/img_6.png +0 -0
- package/docs/cppFrontend/img_7.png +0 -0
- package/docs/cppFrontend/img_8.png +0 -0
- package/docs/cppFrontend/img_9.png +0 -0
- package/docs/sig_programanalysis.en.md +66 -0
- package/docs/sig_programanalysis.md +73 -0
- package/lib/Config.d.ts +32 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +76 -2
- package/lib/Scene.d.ts +25 -2
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +148 -40
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +4 -3
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +17 -17
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +6 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +117 -14
- package/lib/callgraph/common/Statistics.d.ts +4 -2
- package/lib/callgraph/common/Statistics.d.ts.map +1 -1
- package/lib/callgraph/common/Statistics.js +14 -2
- package/lib/callgraph/model/CallGraph.d.ts +12 -8
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +53 -29
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +1 -0
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.js +5 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +3 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
- package/lib/cli/cli.d.ts +3 -0
- package/lib/cli/cli.d.ts.map +1 -0
- package/lib/cli/cli.js +82 -0
- package/lib/cli/commands/cg.d.ts +32 -0
- package/lib/cli/commands/cg.d.ts.map +1 -0
- package/lib/cli/commands/cg.js +401 -0
- package/lib/cli/commands/index.d.ts +6 -0
- package/lib/cli/commands/index.d.ts.map +1 -0
- package/lib/cli/commands/index.js +64 -0
- package/lib/cli/commands/ir.d.ts +26 -0
- package/lib/cli/commands/ir.d.ts.map +1 -0
- package/lib/cli/commands/ir.js +94 -0
- package/lib/core/base/Constant.d.ts +1 -1
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +1 -1
- package/lib/core/base/Expr.d.ts +29 -5
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +144 -22
- package/lib/core/base/Position.d.ts +14 -0
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +27 -0
- package/lib/core/base/Ref.d.ts +1 -0
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +4 -1
- package/lib/core/base/Type.d.ts +64 -24
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +144 -49
- package/lib/core/common/ArkError.d.ts +26 -2
- package/lib/core/common/ArkError.d.ts.map +1 -1
- package/lib/core/common/ArkError.js +56 -2
- package/lib/core/common/ArkIRTransformer.d.ts +11 -10
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +1 -1
- package/lib/core/common/ArkValueTransformer.d.ts +14 -12
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +1 -5
- package/lib/core/common/Const.d.ts +3 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +4 -1
- package/lib/core/common/DummyMainCreater.d.ts +23 -13
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +66 -43
- package/lib/core/common/EtsConst.d.ts +11 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +12 -1
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +5 -1
- package/lib/core/common/ModelUtils.d.ts +4 -7
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +77 -110
- package/lib/core/common/SdkUtils.d.ts +1 -1
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +14 -5
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +9 -3
- package/lib/core/graph/BaseExplicitGraph.d.ts +4 -4
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +15 -8
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/Scc.d.ts.map +1 -1
- package/lib/core/graph/Scc.js +7 -2
- package/lib/core/graph/builder/CfgBuilder.d.ts +10 -7
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +12 -5
- package/lib/core/inference/Inference.d.ts.map +1 -1
- package/lib/core/inference/Inference.js +7 -0
- package/lib/core/inference/ModelInference.d.ts +1 -1
- package/lib/core/inference/ModelInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.d.ts +3 -2
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +64 -12
- package/lib/core/inference/abc/AbcInference.d.ts +28 -2
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +105 -4
- package/lib/core/model/ArkBaseModel.d.ts +14 -1
- package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
- package/lib/core/model/ArkBaseModel.js +61 -2
- package/lib/core/model/ArkBody.d.ts.map +1 -1
- package/lib/core/model/ArkBody.js +1 -3
- package/lib/core/model/ArkClass.d.ts +22 -2
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +59 -28
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +3 -1
- package/lib/core/model/ArkFile.d.ts +4 -1
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +44 -3
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +9 -1
- package/lib/core/model/ArkMethod.d.ts +5 -0
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +33 -1
- package/lib/core/model/ArkNamespace.d.ts +2 -0
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +11 -0
- package/lib/core/model/ArkSignature.d.ts +3 -3
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +14 -9
- package/lib/core/model/builder/ArkClassBuilder.d.ts +2 -0
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +3 -3
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +4 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +19 -6
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +1 -0
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -1
- package/lib/core/model/builder/BodyBuilder.d.ts +4 -0
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.d.ts +1 -0
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +7 -3
- package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts +296 -0
- package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.js +145 -0
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts +51 -0
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astUtils.js +470 -0
- package/lib/frontend/cppFrontend/ast/const.d.ts +30 -0
- package/lib/frontend/cppFrontend/ast/const.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/const.js +134 -0
- package/lib/frontend/cppFrontend/base/Constant.d.ts +9 -0
- package/lib/frontend/cppFrontend/base/Constant.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Constant.js +33 -0
- package/lib/frontend/cppFrontend/base/Expr.d.ts +174 -0
- package/lib/frontend/cppFrontend/base/Expr.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Expr.js +530 -0
- package/lib/frontend/cppFrontend/base/Ref.d.ts +25 -0
- package/lib/frontend/cppFrontend/base/Ref.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Ref.js +53 -0
- package/lib/frontend/cppFrontend/base/Trap.d.ts +8 -0
- package/lib/frontend/cppFrontend/base/Trap.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Trap.js +28 -0
- package/lib/frontend/cppFrontend/base/Type.d.ts +264 -0
- package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Type.js +600 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +109 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +925 -0
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +477 -0
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +2746 -0
- package/lib/frontend/cppFrontend/common/Builtin.d.ts +57 -0
- package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/Builtin.js +106 -0
- package/lib/frontend/cppFrontend/common/IRInference.d.ts +94 -0
- package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/IRInference.js +1087 -0
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +23 -0
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/IRUtils.js +168 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +44 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.js +567 -0
- package/lib/frontend/cppFrontend/common/TypeInference.d.ts +278 -0
- package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/TypeInference.js +1354 -0
- package/lib/frontend/cppFrontend/common/ValueUtil.d.ts +16 -0
- package/lib/frontend/cppFrontend/common/ValueUtil.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/ValueUtil.js +61 -0
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +182 -0
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +1435 -0
- package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts +21 -0
- package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.js +303 -0
- package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts +15 -0
- package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/IfBuilder.js +161 -0
- package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts +21 -0
- package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.js +261 -0
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts +12 -0
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.js +155 -0
- package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts +29 -0
- package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.js +302 -0
- package/lib/frontend/cppFrontend/inference/CxxInference.d.ts +10 -0
- package/lib/frontend/cppFrontend/inference/CxxInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/inference/CxxInference.js +41 -0
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +28 -0
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/inference/CxxModelInference.js +98 -0
- package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts +20 -0
- package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/inference/CxxValueInference.js +128 -0
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +11 -0
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +413 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +5 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +61 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +17 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +285 -0
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +6 -0
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.js +57 -0
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +14 -0
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +422 -0
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +8 -0
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +194 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +59 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +605 -0
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +46 -0
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +499 -0
- package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts +44 -0
- package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/utils/cmakeUtils.js +240 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -1
- package/lib/node_modules/ohos-typescript/.ohos-typescript-version +1 -0
- package/{node_modules → lib/node_modules}/ohos-typescript/package.json +2 -1
- package/lib/save/CGJsonPrinter.d.ts +8 -0
- package/lib/save/CGJsonPrinter.d.ts.map +1 -0
- package/lib/save/CGJsonPrinter.js +41 -0
- package/lib/save/GraphPrinter.js +2 -2
- package/lib/save/json/JsonDto.d.ts +86 -2
- package/lib/save/json/JsonDto.d.ts.map +1 -1
- package/lib/save/json/JsonSerialization.d.ts +1 -1
- package/lib/save/json/JsonSerialization.d.ts.map +1 -1
- package/lib/save/json/JsonSerialization.js +235 -145
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +0 -3
- package/lib/utils/CxxSceneUtils.d.ts +11 -0
- package/lib/utils/CxxSceneUtils.d.ts.map +1 -0
- package/lib/utils/CxxSceneUtils.js +178 -0
- package/lib/utils/FileUtils.d.ts +7 -8
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +27 -45
- package/lib/utils/LRUCacheDecorator.d.ts +20 -0
- package/lib/utils/LRUCacheDecorator.d.ts.map +1 -0
- package/lib/utils/LRUCacheDecorator.js +89 -0
- package/lib/utils/ModuleUtils.d.ts +39 -0
- package/lib/utils/ModuleUtils.d.ts.map +1 -0
- package/lib/utils/ModuleUtils.js +261 -0
- package/package.json +15 -12
- /package/{node_modules → lib/node_modules}/ohos-typescript/LICENSE +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/README.OpenSource +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/README.md +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/SECURITY.md +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/ThirdPartyNoticeText.txt +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsc +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsserver +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/README.md +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cancellationToken.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cs/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/de/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/es/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/fr/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/it/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ja/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ko/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.iterable.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.collection.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.core.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.generator.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.iterable.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.promise.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.proxy.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.reflect.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.array.include.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.object.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.promise.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.regexp.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.array.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.object.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.symbol.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.bigint.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.date.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.number.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.promise.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.promise.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.weakref.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.array.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.error.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.object.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.sharedmemory.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es5.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es6.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.scripthost.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.importscripts.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.iterable.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pl/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ru/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tr/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsc.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserver.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typesMap.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typingsInstaller.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/watchGuard.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
- /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
|
-
#
|
|
1
|
+
# ArkAnalyzer: Static Program Analysis Framework for the ArkTS Language
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[简体中文](./README.md)
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Development environment setup
|
|
6
6
|
|
|
7
|
-
|
|
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
|
-
|
|
18
|
+
## Command-line interface (CLI)
|
|
10
19
|
|
|
11
|
-
|
|
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
|
-
|
|
22
|
+
```shell
|
|
23
|
+
npm run build
|
|
24
|
+
```
|
|
14
25
|
|
|
15
|
-
|
|
26
|
+
Show help:
|
|
16
27
|
|
|
17
|
-
|
|
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
|
-
###
|
|
36
|
+
### `cg`: call graph and reachability
|
|
21
37
|
|
|
22
|
-
|
|
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
|
-
|
|
26
|
-
The Static Analysis Framework for ArkTS-based OpenHarmony Apps.
|
|
51
|
+
Examples:
|
|
27
52
|
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
69
|
+
The command prints one line of JSON summary to **stdout** (fields such as `input`, `format`, `outputDir`, `fileCount`).
|
|
36
70
|
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
86
|
+
## Contributing
|
|
63
87
|
|
|
64
|
-
-
|
|
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
|
-
|
|
92
|
+
Set the `args` array in `.vscode/launch.json` to the file path you want to debug, then start debugging.
|
|
86
93
|
|
|
87
|
-
|
|
94
|
+
## Adding test cases
|
|
88
95
|
|
|
89
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
31
|
-
面向ArkTS的OpenHarmony应用程序分析框架。
|
|
15
|
+
## ArkAnalyzer 命令行(CLI)
|
|
32
16
|
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
33
|
+
### `cg`:调用图构建与可达性分析
|
|
42
34
|
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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#中文)
|
package/config/arkanalyzer.json
CHANGED
|
@@ -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
|
+

|
|
29
|
+
|
|
30
|
+
配置llvm的bin目录到环境变量
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
下载Visual Studio 2022安装包进行安装,打开Visual Studio install选择C++的桌面开发进行安装环境
|
|
35
|
+
|
|
36
|
+

|
|
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
|
+

|
|
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
|
+

|
|
56
|
+
|
|
57
|
+
根据LLVM版本下载对应的llvm-mingw包并解压
|
|
58
|
+
|
|
59
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
174
|
+
|
|
175
|
+
2、对需要分析的项目生成编译数据库,推荐的三种方式:
|
|
176
|
+
|
|
177
|
+
* 用DevEco Studio打开项目,点击file下的Sync and Refresh Project对项目自动生成编译数据库
|
|
178
|
+
|
|
179
|
+

|
|
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
|
+

|
|
193
|
+
|
|
194
|
+
4、设置c++头文件到环境变量,当没有编译数据库时作为头文件搜索路径
|
|
195
|
+
|
|
196
|
+
* windows平台设置DevEco studio目录下的c++头文件
|
|
197
|
+

|
|
198
|
+
|
|
199
|
+
* linux平台设置commomd-line-tools目录下的c++头文件
|
|
200
|
+

|
|
201
|
+
|
|
202
|
+
* mac平台设置DevEco studio和MacOSX.sdk目录下的c++头文件
|
|
203
|
+

|
|
204
|
+
|
|
205
|
+
5、执行接口,SceneConfig作为参数传给buildSceneFromFiles方法生成Scene结构的ArkIR,路径:arkanalyzer\src\Scene.ts
|
|
206
|
+
|
|
207
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|