README
🚀 Gossip话痨项目文档
Gossip话痨项目专注于构建代码仓库中文件间的关系图。它通过提取文件的导入导出信息,并结合提交历史优化关系,构建出连接定义与引用节点的符号图,为代码分析提供有力支持。
🚀 快速开始
Gossip话痨项目处于早期实验阶段,若您感兴趣参与,可按以下步骤操作:
- 编辑规则在src/rule.rs
- 测试它在src/extractor.rs
- 尝试使用您的仓库在src/graph.rs
Tree-sitter Playground 是一个很好的助手。
✨ 主要特性
- 致力于构建代码仓库中文件间的关系图,通过提取导入导出信息和结合提交历史优化关系。
- 支持多种常见编程语言,能满足不同项目的需求。
- 省略复杂的范围分析,使用提交历史优化边,降低编写规则的复杂度。
📦 安装指南
文档未提及安装步骤,暂无法提供。
💻 使用示例
文档未提供代码示例,暂无法展示。
📚 详细文档
支持的语言
目前该项目支持以下语言: | 语言 | 是否支持 | |--------------|----------| | Go | 是 | | Rust | 是 | | Python | 是 | | JavaScript | 是 | | TypeScript | 是 | | Java | 否 | | C# | 否 |
核心组件
- 规则引擎:用于定义不同语言中哪些符号需要被导入或导出。
- 提取器:负责从代码文件中提取这些符号信息。
- 图构建器:将提取的符号信息转化为有向图,节点为符号,边表示依赖关系。
工作原理
Gossip话痨通过以下步骤构建代码依赖图:
- 提取导入导出:识别每个文件中的导入和导出符号。
- 建立连接:根据规则将相关符号节点进行连接。
- 利用提交历史优化边:通过分析提交记录,调整和优化节点之间的关系。
与Stack-Graphs不同的是,Gossip话痨省略了复杂的范围分析,并转而使用提交历史来优化边。这种方法显著降低了编写规则的复杂度,因为规则只需指定每个文件应导出或导入的符号类型即可。
精度考量
静态分析存在其局限性,例如无法处理动态绑定问题。因此,Gossip话痨不可能达到LSP/LSIF那样的精确度,但在大多数实际应用场景中,这种精度已经足够使用。
| 仓库名称 | 相对于LSP边的Gossiphs覆盖范围 | |------------------------|------------------------------| | https://github.com/go-gorm/gorm | 442/499 = 88.5% | | https://github.com/gin-gonic/gin | 238/252 = 94.4% |
贡献指南
项目目前仍处于非常早期的实验阶段。如果您感兴趣,请通过问题留言您的想法。短期内,我们希望为更多语言构建更好的支持。
🔧 技术细节
- 静态分析存在局限性,无法处理动态绑定问题,所以Gossip话痨无法达到LSP/LSIF那样的精确度,但在多数实际场景中精度足够。
- 与Stack-Graphs不同,省略复杂的范围分析,使用提交历史优化边,降低编写规则的复杂度。
Scan to contact