Be Sweet - 一套源代码浏览器






4.85/5 (33投票s)
2003年7月2日
8分钟阅读

191003

4937
一套源代码和项目浏览器,作为 Visual Studio 的补充。
引言
如果您曾经使用过 SniFF+、IBM 的 VisualAge 或其后继产品 Eclipse/JDT,您就会习惯一些在不得不更换 IDE 时会非常怀念的功能。例如,VisualAge 提供了出色的可视化类浏览器,而 SniFF+ 则是我见过的最先进的源代码浏览器。尽管 Visual Studio 提供了可视化类浏览器,但它完全无法使用,因为它仅在编译器运行时更新,不显示继承关系,最后但同样重要的是,它在一个树状图中显示项目中的所有类(呃……在 300 多个类中搜索一个类真是太有趣了)。或者您知道有一个类叫做 FooManager,呃……或者它叫做 FooMgr?它究竟住在哪个文件里?……而 VisualAge/Eclipse 提供了一个非常好的类浏览器,允许您使用简单的正则表达式按名称搜索类,而 VS 则完全依赖您的记忆。
虽然缺少的一些功能可以通过安装第三方插件(如 VisualAssist 或 WorkspaceWhizz)来“升级”,但没有一个插件满足我的所有需求。因此,在抱怨和嘟囔了将近一年之后,我决定开始我自己的小项目,“Be Sweet”项目。
这样就只剩下一个介绍点了……名字的由来。
嗯,当我最初开始这个项目时,它叫做“Eclipse Style Browsers”。虽然从技术上讲,这应该是正确的名字,但它太长了,不是吗?然后我考虑了 Browser-Suite,然后变成了 B-Suite,听起来就像“Be Sweet” ;) 确实,拥有它们真的很“甜”;)
概述
目前,实现了 5 种不同类型的浏览器。
- 大纲浏览器 显示所选文件的轮廓
- 层次结构浏览器 显示所选类型的层次结构
- 类型浏览器 允许使用正则表达式搜索类型,并允许您跳转到声明
- 方法浏览器 与类型浏览器相同,但用于函数和方法
- 工作区/文件浏览器 与类型浏览器相同,但用于工作区中的文件
所有浏览器都具有自动弹出功能。通过将鼠标悬停在它们上方(无需任何鼠标点击),即可将它们带到前台;当鼠标离开对话框时,它会消失到后台,而 Visual Studio 则会被带到前台。需要一些时间来适应这个功能,但一旦习惯了,它就非常方便。我有时会发现自己将鼠标悬停在 MsWord 上,却不知道为什么它不会弹出;)
重要的是要注意,您必须指定一个角落作为测量点,以确定当前(部分)覆盖浏览器的窗口。默认情况下,这是右上角,但可以在首选项中进行调整。因此,您应该将浏览器放置在屏幕的左边缘,以使自动弹出功能正常工作。
大纲浏览器
这可能是工作时使用最多的浏览器;至少对我来说是这样。它显示了活动 Visual Studio 编辑器的内容。每次切换到另一个文件或保存更改时都会更新。
![]() |
鼠标行为是上下文敏感的。单击类/结构将打开一个包含类声明(通常是头文件)的编辑器,并高亮显示声明行。如果左键单击方法或函数,将会在适当位置打开包含定义(实现)的编辑器;如果右键单击同一个方法/函数,将打开相应的声明。中间按钮会弹出一个小菜单,允许您切换到头文件、源文件或显示所选类/结构/联合的层次结构。
如果大纲浏览器通过其自动弹出功能带到前台,您可以将鼠标移回 Visual Studio(大纲浏览器将自动消失)。编辑器将自动获得焦点,因此您只需开始键入,而无需通过任何鼠标点击手动激活/聚焦任何窗口!
层次结构浏览器
此视图显示类型的层次结构。类型层次结构视图由两部分组成
- 类型层次结构树形窗格
- 成员列表窗格
可以调整视图以显示类型在其完整上下文中(即子类和超类)。如果类型有多个超类,则只显示最长的“超路径”。可以设置为仅显示超类型(请注意,层次结构树显示为倒置的),最后但同样重要的是,可以限制视图仅显示子类型。
![]() |
成员列表窗格显示类型层次结构树形窗格中当前所选类型的成员。可以调整它以仅显示“自己的”成员,或者同时显示继承的方法和字段。
标签浏览器
关于它们我还能说什么呢?嗯,当您寻找某个东西但记不起完整名称或位置时,它们非常方便,例如,那个类型是叫做 TextHandler
还是 TextManager
还是 TextMgr
?所有标签浏览器都提供增量搜索,并支持简单的正则表达式(抱歉,“?” 还不工作)。
![]() |
![]() |
类型浏览器 | 方法/函数浏览器 |
![]() |
|
工作区浏览器 |
当匹配列表获得焦点时,输入的字符将用作搜索参数(ESC/Delete 清除过滤器,Backspace 删除最后一个输入的字符)。
Visual Studio 插件
该插件是系统两个主要部分之一,实现了 BeSweet 客户端的角色。它被注册到多个 Visual Studio 事件,并在服务器上触发相应的操作,例如,当您打开一个新工作区时加载工作区,或者当源文件被修改时触发其重新解析。
![]() |
还有一个适用于 Visual Studio .Net 的插件,但它仍然非常实验性,应谨慎使用。
Visual Studio 编辑器中选定的文本将被验证,并在通过插件按钮打开浏览器时用作搜索参数。
为了方便起见,可以通过“工具”->“自定义”->“键盘”->“插件”绑定热键。所有命令都以“ESB”开头,例如 ESBShowTypeBrowser,这将把类型浏览器带到前台。
架构
当我开始这个项目时,我必须决定是完全将浏览器集成到 Visual Studio 中,还是构建一个外部应用程序。在阅读了 www.codeproject.com 和 www.codeguru.com 上关于如何将自定义应用程序集成到 VS 的几篇文章后,我决定构建一个基于以下原因的外部客户端-服务器应用程序。首先,我想将精力集中在有趣的部分,而阅读那些文章,将应用程序集成到 VS 听起来并不有趣。其次, IMO 更重要的原因是,如果外部应用程序崩溃,它也不会导致 VS 崩溃!
![]() |
如上所述,该系统设计为客户端-服务器架构,其中客户端实现为 Visual Studio 插件,并通过 COM 与服务器交互。服务器的架构是一个非常传统的 MVC 模式。上述块并非全部已实现,例如,没有 QT-渲染器。
实现
尽管没有/曾有过对多平台支持的需求,但我尽量避免了过多的平台特定依赖。STL 在可能的情况下使用,MFC 严格用于渲染器,COM 接口实现完全封装在其自己的模块中。也就是说,将其移植到另一个平台的努力应该不会太大。
安装
- 将压缩包解压到您选择的文件夹。
- 通过“工具”->“自定义”->“宏和插件”注册/加载 Visual Studio 插件。
- 自定义按键绑定。我个人使用 Alt-T 来弹出 类型浏览器,Alt-O 用于 大纲浏览器,依此类推。
- 启动 ESBServer.exe。
- 在 Visual Studio 中打开一个工作区。
如果您之前安装过旧版本的 BeSweet,可能需要重新启动计算机。如果没有任何效果,请执行以下操作:
- 从 Visual Studio 中卸载插件。
- 使用 regsvr32 取消注册 DLL。
- 重新启动您的 PC。
- 启动 ESBServer.exe。
- 打开 Visual Studio 并重新安装插件。
- 按第一个插件按钮,并确保 BeSweet 已启用(仅适用于 VC6)。
- 在 Visual Studio 中打开一个工作区。
- 右键单击 BeSweet 系统托盘图标并最大化 --> 您的工作区应在此处监听。
如何构建
无法使用 VC++ 6.0 随附的默认 STL 构建 BeSweet。原因是 VC-STL 基于一个预先存在的标准(我认为是 1998 年之前的),因此缺少一些(重要的)功能。要构建该项目,任何近期的 STL 实现都应该可以工作。我个人使用 STLPort 4.5.3,它基于原始的 SGI 实现,可以免费下载 此处。
鸣谢 & 感谢
- Darren Hiebert 感谢他的 ctags 解析器……这个项目的关键部分!
- Davide Calabro 感谢他出色的扁平风格位图按钮类
CButtonST
。 - Richard Hazlewood 感谢他出色的多选树控件
CMultiTree
。 - Andy Brown 感谢提供他简单的
CDynamicDialog
类。 - Chris Maunder 和他的
CSystemTray
类。 - 特别感谢 Ulf Niewoehner、Tsvetan Tsvetanov 和 Xiaoming Zhao 在测试 BeSweet 和提出改进建议方面的帮助。