Linux-specific).
Licensing: The library must be open source and free for commercial use.
Functionality: The library should be able to perform static analysis of C++ code and provide result sets that answer detailed questions about function calls and type usage.
Introspection: The library should provide a way to obtain the byte offset into the file where references were made, as well as the reference into the abstract syntax tree (AST) of each reference. Each AST entity should have associated file path, byte-offset, and type-info data so that recursive operations on the graph of callers or referrers can be performed.
针对Linux:代码结构必须适用于Linux环境(除非需要符合特定平台的具体要求)。
命令行标准输入输出:基于命令行标准输入输出。
C++语言意识:不仅限于C代码,而且详细了解C ++语言结构,包括类间继承关系和C ++模板。
快速:应该比从头编译整个代码库更快地扫描大型代码库。如果满足下面的增量结果检索和对小代码更改的弹性要求,则可能需要放宽要求。
提供结果计数:我应该能够询问“你将为某个请求提供多少结果(不要给我所有结果)?” ,并在不到3秒内响应,而不是为任何给定问题检索所有结果。如果等待时间过长,则会浪费开发时间。这与下一个要求相耦合。
增量结果检索:然后我应该能够询问“仅给我此请求的接下来的N个结果”,然后获得结果集的句柄,以便我可以重复提出问题,因此逐步提取结果。这意味着在看到所有结果的某个子集之前,我不必等待整个结果集。而且如果已经看到足够的结果,我可以安全地取消操作。原因是我需要回答问题:“更改某个特定函数签名的构建或开发影响是什么?”
对小代码更改的弹性:如果我更改了头文件或源文件,则无需等待重新扫描整个代码库,而只需重新扫描该头文件或源文件即可。扫描应该很快。例如,不要像cscope要求的那样对小更改重新扫描整个代码库。可以理解的是,如果更改了头文件,则扫描可能需要更长时间,因为必须重新扫描包含该头文件的其他文件。 IDE无关:是文本编辑器无关的(不要让我使用特定的文本编辑器;我已经做出了我的选择,谢谢!)
平台无关:是平台无关的(不要让我只能在Linux或Windows上使用,因为我每天都需要使用这两个平台,但我需要这个工具在两个平台上都能发挥作用,因为我有代码沙盒在两个平台上)。
非二进制:除了下载和编译库及其所有依赖项外,不应花费我任何费用。
非试用软件。
积极支持:很可能向邮件列表或相关论坛发送帮助请求会在不到2天的时间内得到回复。
网络无关:库构建的数据库应该能够直接从32位和64位系统以及Linux和Windows之间相互使用,并且不嵌入硬编码路径到文件系统,否则将使数据库“根”到特定网络。
构建环境无关:不需要对我的构建环境有深入的了解,但可能需要了解编译器提供的CPP宏定义(例如-Dmacro=value)。