github/semantic

GitHub: github/semantic

semantic 是一个用于多语言源代码解析、分析和差异比较的 Haskell 库与命令行工具。

Stars: 9041 | Forks: 458

**注意**:_GitHub 不再支持或更新此仓库。如果您希望自己继续开发此代码,我们建议您 fork 它。_ # Semantic `semantic` 是一个用于解析、分析和比较源代码的 Haskell 库和命令行工具。 赶时间?请查看我们关于 [`semantic` 命令行工具示例用法](docs/examples.md) 的文档。 | 目录 | | :------------- | | [用法](#usage) | | [语言支持](#language-support) | | [开发](#development) | | [技术与架构](#technology-and-architecture) | | [许可协议](#licensing) | ## 用法 运行 `semantic --help` 获取完整的最新选项列表。 #### 解析 ``` Usage: semantic parse [--sexpression | (--json-symbols|--symbols) | --proto-symbols | --show | --quiet] [FILES...] Generate parse trees for path(s) Available options: --sexpression Output s-expression parse trees (default) --json-symbols,--symbols Output JSON symbol list --proto-symbols Output protobufs symbol list --show Output using the Show instance (debug only, format subject to change without notice) --quiet Don't produce output, but show timing stats -h,--help Show this help text ``` ## 语言支持 | 语言 | 解析 | AST 符号† | Stack graphs | | :------------- | :---: | :---: | :---: | | Ruby | ✅ | ✅ | | | JavaScript | ✅ | ✅ | | | TypeScript | ✅ | ✅ | 🚧 | | Python | ✅ | ✅ | 🚧 | | Go | ✅ | ✅ | | | PHP | ✅ | ✅ | | | Java | 🚧 | ✅ | | | JSON | ✅ | ⬜️ | ⬜️ | | JSX | ✅ | ✅ | | | TSX | ✅ | ✅ | | | CodeQL | ✅ | ✅ | | | Haskell | 🚧 | 🚧 | | † 用于 github.com 上的[代码导航](https://help.github.com/en/github/managing-files-in-a-repository/navigating-code-on-github)。 * ✅ — 支持 * 🔶 — 部分支持 * 🚧 — 开发中 * ⬜ - 不适用 ️ ## 开发 `semantic` 至少需要 GHC 8.10.1 和 Cabal 3.0。我们强烈推荐使用 [`ghcup`][ghcup] 来沙盒化管理 GHC 版本,因为通过您操作系统的包管理器安装的 GHC 包可能未安装静态链接的 GHC boot libraries。`semantic` 目前仅在 Unix 系统上构建;其他操作系统的用户可能需要使用 [Docker 镜像](https://github.com/github/semantic/packages/11609)。 我们使用 `cabal` 的 [Nix 风格本地构建][nix] 进行开发。要快速开始: ``` git clone git@github.com:github/semantic.git cd semantic script/bootstrap cabal v2-build all cabal v2-run semantic:test cabal v2-run semantic:semantic -- --help ``` 您也可以使用 [Bazel](https://bazel.build) 构建系统进行开发。要了解更多关于 Bazel 的信息以及它为何能为您带来更好的开发体验,请查阅[构建文档](docs/build.md)。 ``` git clone git@github.com:github/semantic.git cd semantic script/bootstrap-bazel bazel build //... ``` `stack` 作为构建工具并未得到官方支持;虽然有[非官方的 `stack.yaml` 支持](https://github.com/jkachmar/semantic-stack-yaml),但我们无法保证其稳定性。 ## 技术与架构 在架构上,`semantic`: 1. 根据 [tree-sitter](https://github.com/tree-sitter/tree-sitter) 语法定义生成特定于语言的 Haskell 语法类型。 2. 从文件系统读取 blobs 或通过 protocol buffer 请求接收。 3. 返回 blobs 或执行分析。 4. 以多种受支持格式之一渲染输出。 在其整个生命周期中,`semantic` 利用了许多有趣的算法和技术,包括: - 论文 [*An O(ND) Difference Algorithm and Its Variations*][SES] 中描述的 Myers 算法 (SES)。 - 论文 [*RWS-Diff: Flexible and Efficient Change Detection in Hierarchical Data*][RWS] 中描述的 RWS。 - Open unions 和 [data types à la carte](https://www.cambridge.org/core/journals/journal-of-functional-programming/article/data-types-a-la-carte/14416CB20C4637164EA9F77097909409)。 - [Abstracting Definitional Interpreters][adi] 的一个实现,并扩展以支持 à la carte 表示的语法项。 ## 贡献 欢迎贡献!请参阅我们的[贡献 指南](CONTRIBUTING.md) 以及我们的[行为准则](CODE_OF_CONDUCT.md) 了解 如何参与我们社区的详细信息。 ## 许可协议 Semantic 采用 [MIT 许可协议](semantic/LICENSE)。
标签:Haskell, SOC Prime, 云安全监控, 代码分析, 代码解析, 凭证管理, 开发工具, 静态分析