开发工具CLI代码质量【免费下载链接】cangjie_tools仓颉编程语言命令行工具包括仓颉包管理工具、仓颉格式化工具、仓颉多语言桥接工具及仓颉语言服务。项目地址https://gitcode.com/Cangjie/cangjie_tools点击查看免费下载cangjie_tools是仓颉语言官方命令行工具链仓库集中提供项目管理、代码格式化、静态检查、性能分析、语言服务等配套工具既可在命令行直接使用也可集成到 DevEco Studio 中使用。本文基于仓库根目录的 README.md 展开先梳理工具链整体架构与九大工具的定位再结合各工具的源码入口、配置文件与文档补充可验证的实现细节帮助读者快速建立对仓颉工具生态的整体认识并掌握各工具的目录组织、构建依赖与第三方开源组件使用情况。一、工具链总览九个工具各管一摊仓颉工具链的整体架构如上图所示仓库内提供了以下九个工具工具简称定位主要语言仓颉项目管理工具cjpm管理仓颉项目模块系统涵盖模块初始化、依赖检查与更新提供统一编译入口支持增量编译、并行编译仓颉仓颉兼容性检查工具cjcompat比较不同版本仓颉库的.cjo文件检查 API 和 ABI 兼容性变化C仓颉格式化工具cjfmt基于仓颉语言编程规范开发的代码自动格式化工具C仓颉多语言桥接工具hleHyperlangExtension仓颉调用 ArkTS 互操作代码的模板自动生成工具仓颉仓颉语言服务工具lspcangjie language server在 DevEco Studio 上提供仓颉语言服务的服务器后端需搭配 DevEco Studio 客户端使用C仓颉静态检查工具cjlint基于仓颉编程规范的静态检查工具识别不符合规范的代码、发现潜在漏洞C仓颉覆盖率工具cjcov基于仓颉编程规范开发的代码覆盖率工具仓颉仓颉性能分析工具cjprofCangjie Profile对仓颉程序做 CPU 热点函数采样并生成统计报告或火焰图支持导出与分析堆内存C仓颉异常堆栈还原工具cjtrace-recover还原混淆过的异常堆栈信息辅助问题定位与根因分析仓颉 C从源码分布看工具链采用了明显的语言分工与编译流水线关系最紧密、需要高性能处理的部分格式化、静态检查、语言服务、性能剖析、兼容性检查以 C 实现而本身是项目/包管理器性质的cjpm、覆盖率统计cjcov与堆栈还原cjtrace-recover则直接用仓颉语言实现hyperlangExtension亦为仓颉实现其中d.ts解析借助 Node 脚本 analysis.js。二、平台支持README 明确给出工具链当前支持的运行平台Windows x86-64Linux x86-64 / AArch64Mac x86 / arm64鸿蒙OpenHarmony平台正在开发中部分子命令还有更细的平台限制。例如cjprof的 入口文件 中RecordCPU 采样与Report报告/火焰图生成两个子命令的头文件被包裹在#if defined(__linux__)条件编译中可以推断 CPU 采样与火焰图能力目前仅在 Linux 平台编译启用而Heap堆导出与分析子命令则为各平台通用。三、目录结构每个工具一套独立目录仓库顶层按一个工具一个目录组织README 给出的目录结构如下build构建脚本、doc文档、src源码为各工具标配config、include、figures、tests按工具需要存在. ├── cangjie-language-server │ ├── build # 构建脚本 │ ├── doc # 构建指南和使用指南 │ └── src # 源码 ├── cjcompat │ ├── build # 构建脚本 │ ├── doc # 开发者指南 │ ├── figures # 架构图 │ ├── include # 头文件 │ └── src # 源码 ├── cjcov │ ├── build # 构建脚本 │ ├── doc # 开发者指南 │ └── src # 源码 ├── cjfmt │ ├── build # 构建脚本 │ ├── config # 配置文件 │ ├── doc # 开发者指南 │ ├── include # 头文件 │ └── src # 源码 ├── cjhead │ ├── build # 构建脚本 │ ├── config # 配置文件 │ ├── doc # 构建指南和使用指南 │ ├── include # 头文件 │ └── src # 源码 ├── cjlint │ ├── build # 构建脚本 │ ├── config # 配置文件 │ ├── doc # 开发者指南 │ └── src # 源码 ├── cjpm │ ├── build # 构建脚本 │ ├── doc # 开发者指南 │ └── src # 源码 ├── cjprof │ ├── build # 构建脚本 │ ├── doc # 开发者指南 │ ├── figures # 架构图 │ ├── include # 头文件 │ ├── src # 源码 │ └── tests # 测试用例 ├── cjtrace-recover │ ├── build # 构建脚本 │ ├── doc # 构建指南和使用指南 │ └── src # 源码 └── hyperlangExtension ├── build # 构建脚本 ├── doc # 构建指南和使用指南 └── src # 源码除工具目录外仓库还包含third_party/第三方开源组件如demangler符号还原器配套说明见 第三方开源软件说明figures/工具链整体架构图英文/中文版LICENSE 与 OAT.xml开源协议与开源声明文件。各工具的详细用户指南位于各工具自己的doc目录如 cjprof 开发者指南、cjtrace-recover 使用指南lsp另有 用户指南 与 开发者指南。四、关键工具实现速览源码级佐证4.1 cjpm命令工厂与编译钩子cjpm的入口是 main.cj其执行流程为解析参数 → 创建命令处理器 →findCjc()定位编译器 → 校验配置lackConfigInfo()→ 执行编译脚本前置钩子 → 执行具体命令 → 执行后置钩子。命令分发集中在 CommandFactorylet handle: Handle match (cmd) { case build BuildCommand(args) case clean CleanCommand(args) case init InitCommand(args) case update UpdateCommand(args) case test TestCommand(args) case bench BenchCommand(args) case check CheckCommand(args) case run RunCommand(args) case tree TreeCommand(args) case install InstallCommand(args) case uninstall UninstallCommand(args) case bundle BundleCommand(args) case publish PublishCommand(args) case _ CpmCommand(args) }即cjpm覆盖构建、清理、模块初始化、依赖更新、测试、基准测试、检查、运行、依赖树、安装/卸载、打包、发布等子命令命令实现分别位于 src/command/ 下同名.cj文件其核心配置模型依赖、版本、构建脚本等位于 src/config/。项目级配置采用cjpm.toml仓库内 cjpm/cjpm.toml 即是实例TOML 解析实现内置于 src/toml/不依赖外部库。4.2 cjfmt格式化的可配置项cjfmt默认配置文件 cangjie-format.toml 展示了主要可调参数及其取值范围# indent width indentWidth 4 # Range of indentWidth: [0, 8] # limit length linelimitLength 120 # Range of [1, 120] # line break type lineBreakType LF # LF or CRLF # allow Multi-line Method Chain when its level equal or greater than multipleLineMethodChainLevel allowMultiLineMethodChain false multipleLineMethodChainLevel 5 # Range of multipleLineMethodChainLevel: [2, 10] # allow Multi-line Method Chain when its length greater than linelimitLength multipleLineMethodChainOverLineLength true从源码结构看格式化采用AST → Doc → 格式化源码的两段式设计src/Format/ASTToFormatSource.cpp 将 AST 转为格式描述include/Format/NodeFormatter/ 下 90 余个头文件对应各类语法节点的格式化器OptionContext 负责解析上述 TOML 选项参数最终作用于对应节点的排版决策。4.3 cjlint规则清单驱动的静态检查cjlint通过 cjlint_rule_list.json 声明启用的规则清单如G.CHK.04、G.OTH.02、G.FMT.01、G.SEC.01、P.01等config/ 目录中同时提供按规则维度拆分的规则文件如 structural_rule_G_CHK_02.json、dataflow_rule_G_CHK_03.json与 exclude_lists.json 排除列表。规则实现按分析类型划分为两个模块structural_rule_analysis结构性分析约 57 对源文件与 dataflow_rule_analysis数据流分析编译器实例封装在 CJLintCompilerInstance 中诊断输出由 DiagnosticEngine 负责。4.4 cjprofrecord / heap / report 三类能力cjprof的 main.cpp 通过命令对象组装子命令Commands/RecordCPU 采样仅 Linux 编译、Commands/Heap堆导出与分析、Commands/Report统计报告与火焰图生成仅 Linux 编译。从源码结构看采样数据解析ELF 符号、hprof 解析位于 src/Data/ 与 src/Symbol/报告生成火焰图 HTML 模板在 static/html/index.html位于 src/Reporter/。构建方式详见 cjprof 开发者指南示例命令为# 构建-t 指定 debug / release cd cangjie-tools/cjprof/build python3 build.py build -t release # 安装默认安装到 cjprof/dist可用 --prefix 指定 python3 build.py install4.5 cjtrace-recover两个选项完成堆栈还原使用指南 说明当仓颉应用开启外形混淆后异常堆栈中的函数名与路径名同样被混淆cjtrace-recover可还原这两类信息cjtrace-recover -h Usage: cjtrace-recover OPTION Use symbol mapping files to recover obfuscated exception stacktrace. The supported options are: -f file path to the obfuscated exception stacktrace file -m file,... path to the symbol mapping files -h display this help and exit -v print version of cjtrace-recover-f指定混淆堆栈文件-m指定可多个符号映射文件还原结果通过标准输出stdout打印。实现主体为 cjtrace-recover.cj并链接 C 侧的 DemangleWrapper 完成仓颉符号反解。4.6 lspJSON-RPC 传输 能力插件化语言服务入口在 launcher/main.cpp启动时读取CANGJIE_PATH、CANGJIE_HOME等环境变量定位运行环境随后基于 StdioTransportstdio 之上的 JSON-RPC 传输层与 ArkLanguageServer 提供 LSP 服务。语言能力的实现按一能力一目录组织在 capabilities/ 下现有completion、definition、hover、rename、reference、documentHighlight、documentSymbol、semanticHighlight、signatureHelp、typeHierarchy、callHierarchy、codeLens、breakpoints、diagnostic、refactor、workspaceSymbol等 20 个子模块索引与符号体系位于 index/并配套 test/featureTest/ 下按能力划分的端到端用例每个功能含.test/.base消息对。4.7 cjcompat 与 cjcov库演进检查与覆盖率统计cjcompat的 src/CheckersAndRules/ 目录按检查维度拆分了 10 个 C 检查器增删声明、类实例成员函数、继承类型变更、函数参数与返回值、泛型参数与约束、修饰符变更、成员变量、包声明等底层由 Diff、Dsl 与 CjoLoader 支撑完成.cjo文件的加载、对比与报告。cjcov则以仓颉实现src/core/ 中的 parsecov.cj 负责覆盖率数据解析、genreports.cj 与 template.cj 负责报告生成、json.cj 负责数据序列化。4.8 hle从 d.ts 到仓颉互操作模板hyperlangExtension的入口 main.cj 按操作系统选择解析路径src/tool/ 下trans_enum.cj、trans_method.cj、trans_object.cj、type_conversion.cj等模块分别处理类型、方法、枚举与对象转换tests/cases/提供.d.ts输入与tests/expected/提供期望输出的.cj结果可作为该工具行为的验证基准。五、构建依赖与构建方式README 明确说明命令行工具构建依赖于仓颉SDK构建流程需参考 SDK 集成构建指南cangjie_build仓库即构建前需要准备好对应平台的仓颉运行环境与 SDK再进入各工具的build目录执行构建脚本。以cjprof为例其他 C 工具结构类似# 1. 获取源码 git clone https://gitcode.com/Cangjie/cangjie_tools.git # 2. 编译-t 指定 debug 或 release cd cangjie-tools/cjprof/build python3 build.py build -t release # 3. 安装到指定目录默认 cjprof/dist可用 --prefix 自定义 python3 build.py installcjpm等仓颉语言实现的工具同样提供 build/build.py 构建脚本。需要注意的是cangjie-language-server的构建还会通过 CMake 自动拉取并编译第三方组件见下节其构建参数在 build/build.py 中定义。六、第三方开源软件声明cangjie_tools基于 Apache-2.0 with Runtime Library Exception 协议开源。README 声明的第三方开源组件及其使用情况如下表与 third_party/README.md 一致开源软件许可协议用途说明使用主体使用方式flatbuffersApache License V2.0仓颉语言服务对索引数据进行序列化和反序列化语言服务集成到仓颉二进制发布包中JSON for Modern CMIT License仓颉语言服务用于报文解析和封装语言服务、静态检查集成到仓颉二进制发布包中SQLitePublic Domain仓颉语言服务使用数据库存储索引数据语言服务集成到仓颉二进制发布包中third_party/README.md 进一步给出了各组件的版本来源均对齐 OpenHarmony-v6.0-Release 版本与手动获取方式flatbuffers与SQLite以源码形式经 CMake 构建JSON for Modern C为头文件库CMake 直接引用。这解释了语言服务为何能以SQLite 存索引 flatbuffers 做编译器产物序列化 JSON 处理 LSP 报文的组合完成索引体系也与 src/languageserver/index/、src/languageserver/sql/ 下的数据库与 SQL 封装代码相互印证。七、相关仓库与参与贡献工具链属于仓颉生态的一环与之配套的相关仓库包括cangjie_docs文档、cangjie_compiler编译器、cangjie_stdx标准扩展库、cangjie_build构建系统、cangjie_test测试集可通过仓颉组织的代码托管平台获取。项目欢迎任何形式的贡献包括代码、文档、issue 等。贡献者在动手前建议先通读对应工具的doc目录开发者指南与build构建脚本确保本地构建环境仓颉 SDK准备完毕并在对应工具的tests目录下了解用例组织方式后再提交修改。赞分享开发工具CLI代码质量【免费下载链接】cangjie_tools仓颉编程语言命令行工具包括仓颉包管理工具、仓颉格式化工具、仓颉多语言桥接工具及仓颉语言服务。项目地址https://gitcode.com/Cangjie/cangjie_tools点击查看免费下载相关推荐OfficeCLI3个革命性突破让AI办公自动化变得简单快速OfficeCLI3个革命性突破让AI办公自动化变得简单快速 OfficeCLI正在重新定义AI办公自动化的边界——这是世界上第一个专为AI代理设计的零依赖OCLIAI 应用MCP 服务cangjie_build 构建依赖工具指南仓颉 SDK 各组件的工具版本要求与构建落地cangjie_build 构建依赖工具指南仓颉 SDK 各组件的工具版本要求与构建落地 本文以 cangjie_build 仓库中的 doc_en/env.文档教程构建工具Frida工具链大全frida-tools命令行工具详解Frida工具链大全frida tools命令行工具详解 1. frida tools概述 frida tools是Frida工具链的核心组件提供了一系列命逆向工程应用安全网络安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?