什么是好的源代码搜索引擎?
我正在处理的代码库非常庞大,grepping大约需要20分钟。我正在寻找一个良好的基于Web的源代码搜索引擎..诸如koders.com的Intranet版本。
我发现的唯一东西是Krugle Enterprise Edition,它没有公布价格……如果我们不得不问的话,我们负担不起。
我真的更喜欢一个普通的老式搜索引擎,没有很多其他花哨的东西。
来源主要是ASP.NET/Cand Javascript。
解决方案
Lxr在大型代码库上运行良好,这在linux内核中得到了证明。我认为这仅适用于C(我们未指定使用的语言)。
如果我们有那么多的源代码,则可能需要花费一些时间来设置搜索引擎以对其进行索引。我向Lucene推荐它免费,快速,很容易为任何有编程经验的人在任何内容上建立强大的索引。
http://lucene.apache.org/
也许我们应该花一些时间和/或者金钱在支持符号标记的编辑器或者IDE中。我们只需要遍历整个源代码树以对其进行标记,然后编辑器将使用索引搜索或者映射查找来找到符号定义或者引用。
支持标记的编辑器或者IDE的一些示例是Eclipse,Visual Studio,SlickEdit。一些IDE可能会调用符号浏览器或者类似的功能。
20分钟太离谱了!这些天,我正在使用超过一百万行的源代码,grepping最多需要几秒钟(我使用ack)。我们的主目录存储在文件服务器上,并通过NFS挂载,为了加快grepping速度,我们在登录文件服务器时执行了此操作。我不确定NFS需要多长时间,但是肯定更长。
出于相同的性能原因,我们还在登录文件服务器时执行源代码控制操作。
既然我们说的是"抓紧",我想我们不会对命令行解决方案感兴趣。
诸如ctags之类的工具将索引和搜索Cand JavaScript代码库(还有许多其他代码)。
关于ctags的一个非常整洁的地方是,它可以与带标签列表插件的vim结合使用以允许源代码浏览,或者可以与vim omnicomplete结合使用以实现代码完成。
在Linux上,我使用GNU ID实用程序。这些实用程序具有与grep类似的功能,但是可以从索引运行,因此它们的运行速度非常快。我们先运行mkid来创建索引,然后运行其他实用程序之一,例如" gid",这是grep的ID Tools版本,可以在整个索引中使用grep。我有一份偶尔执行mkid的Cron工作。
ID工具也可以在Windows上使用cygwin或者作为标准Windows程序运行
我推荐OpenGrok。还有其他一些引擎,下面是它们的快速回顾。
我使用cs2project已有一段时间了,它是基于Lucene.NET的开源ccode搜索引擎。不幸的是,它不再被开发。
请参阅我们的SD源代码搜索引擎。支持语言,可处理多种语言(C,C ++,C#,Java,ObjectiveC,PHP,VB.net,VB6,Ada,Fortran,COBOL等)。在整个Linux Kernal(730万行,18000多个文件)中进行搜索需要2.8秒。
由于它支持语言,因此可以忽略与搜索无关的语言元素(例如,如果仅对标识符或者表达式感兴趣,则忽略注释,格式和空格)。它可以搜索内部标识符,字符串和注释。如果我们确实想要这样做,它具有完整的正则表达式字符串搜索选项。
它已用于数千万行代码的系统,在我们所知的情况下,该系统包含超过一百万个文件。