
通常,程序员必须处理别人不熟悉的代码。 这可能是对有趣的开源项目的研究,以及对工作的需要-在加入新项目的情况下,在分析大量遗留代码时等。 我认为你们每个人都遇到过这个问题。
在进行此类工作的过程中,我始终感到非常需要一种专门定制的工具,以帮助快速沉浸于大量陌生的代码中。 随着时间的流逝,越来越多的有趣的想法出现在不同的领域,所有这些想法都需要研究大量的其他人的代码。 去中心化网络,加密货币,编译器,操作系统-所有这些都是大型项目,需要研究大量代码。 在某个时候,我决定:您只需要使用并制作这个特殊工具。 在本文中,我提请您注意结果。
一般来说,什么可以帮助学习代码? 当然,如果有详细的代码文档,这很好,通常它不存在; 好的编码风格和注释也很好,但这通常是不够的。 还有各种代码文档生成器,例如doxygen。 通过分析代码结构和特殊的文档注释,它们以html格式的超文本格式生成文档。 这种文档的主要缺点是它不具有交互性。 在研究代码的过程中,程序员可能会有一些新的理解,并且为了将其反映在文档中,您需要编写新的文档注释并再次重新生成所有文档。
此外,此类文档与开发环境中的代码不直接相关,即 单击超链接将不会在IDE中使用此代码打开文件。 这种工具根植于远古时代,有一个很好的类比:第一个反汇编程序是命令行工具,无需用户干预即可生成代码。 然后是第一个交互式反汇编程序(“ IDA pro”),它假定用户积极参与了反汇编过程-分配变量和函数的名称,定义结构,在代码上写注释等。
在某种程度上,以高级语言分析大量外来代码与反汇编非常相似。 因此,我开始对我到底想要什么有了一个想法。 大多数IDE具有经典的“文件视图”和“类视图”面板,这些面板显示文件的结构以及其中的名称/类空间。 但是,这种结构通常与语言的语法紧密联系,并且不允许您进行自定义语义加载。 因此,我想拥有的第一件事是构建包含有意义命名的代码引用的任意树的交互功能-到相同的类和函数,或者到任意位置。 其次是希望以某种方式直接在编辑器中标记代码。 标记可以具有多种含义:从简单的“学习”,“整理出来”,“重写”到属于不同语义组的代码。 您可以在评论中标记它,但我想要更明显的内容。 例如,一段代码的背景颜色发生变化。 因此,KDPV分色器是真实世界中相当准确的类比。
经过最初的实验,我很快意识到这应该是现代开发环境的插件,而不是我自己的编辑器。 同时由两名编辑进行工作既愚蠢又不便; 重复开发环境的所有可能性的前景并没有激发喜悦,为什么要这样做呢? 因此,插件。 选择Qt Creator作为第一个IDE只是因为最流行的代码导航操作(转到定义,查找引用等)将尽快执行。 下一个环境将是Visual Studio,然后在概念本身成功的情况下-用于其他IDE的实现。
现在介绍所有的安排。 介绍了“标记注释”的概念。 这是一种编程语言的常规注释(目前,这是在多种语言中使用的单行注释“ //”,包括C,C ++,C#,Java等),后跟一系列特殊字符,后跟一个标识符和/或标记,随后可以进行正常的人工注释。 我介绍了三种标记注释
- 注释以突出显示任意区域。 唯一需要“结束”标记注释的类型。 以“ // <<”开头,以“ // >>”结尾。
- 注释以指示代码中的任意行。 用“ // $$”表示
- 注释以突出显示语法正确的代码块。 它以“ // @@”开头,并包含下面的代码块,并受大括号“ {”和“}”的限制,这些大括号用于大多数类似C的编程语言中的代码块。 已经实现了完整的括号分析-允许使用大括号嵌套,并且解析器正确跳过了行和注释中的大括号。
此外,紧跟在特殊字符之后的是一个或多个用逗号分隔的标识符。 标识符是“标签”,可以表示程序员想要的东西-标识“已研究”,“重写”,“理解”,代码的作者身份,代码与某些语义组的关系等。 您还可以指定一个唯一的标识符-该标识符放在最前面,并以冒号与其他标识符分开。 如果您愿意,可以显式指示代码段的背景颜色-在标签列表的末尾放置一个网格,然后以RGB格式显示颜色(尽管此方法不是最佳方法-稍后我们将讨论另一种更“正确”的方法)。 最后,您可以放置一个空格,然后可以编写常规的可读注释。 我试图以这样一种方式选择语法:对于快速输入而言,它应尽可能简单,不会使代码混乱,并且对于普通注释很方便。

尽管可以手动输入标记注释,但应该为此使用特殊的工具栏按钮。 将光标设置在代码的所需位置,然后按下按钮(或从菜单中选择最后一个选项之一)。

如有必要,将打开一个输入对话框,您可以在其中输入标记注释的标记和标识符,详细说明,还可以选择背景色。 这些数据不仅会输入到代码中,还会输入到显示在树面板侧面的“ CRContentTree”树中(其中包括FileView,ClassView等)。 应该注意的是,背景颜色可以是“透明的”-在这种情况下,将使用封闭块(如果有)的背景颜色,或者根本不使用背光。

目前,该树由三个主要部分(顶级节点)组成:文件,标签和注释(也许这不是最终的解决方案,因为概念尚不十分清楚,以及这种结构的便利性)。

FILES是项目的文件结构,是从项目文件或磁盘上源位置提取的。 文件节点是在初始树生成期间创建的。 双击文件节点通常会在IDE编辑器中打开文件。 您可以在FILES中指定标记注释的添加-子节点将出现在相应的文件中。 这是添加唯一标记注释标识符的位置。 系统检查树的文件节点中标识符的唯一性,并可以自动生成唯一名称。
TAGS是全球项目标签云; 标记不与源代码文件绑定,并且可以在任意项目文件中出现任意多次。
NOTES是存储以任意方式分组且不依赖于文件结构的节点的地方。 每个节点都包含一个文件路径和一个标识符。 主要目的是创建自定义逻辑组。 例如,“所有需要重写的功能”或“与密码学有关的所有功能”,或“与服务器的网络通信功能的顺序”(由于树中的节点是有序的,只需将节点一个接一个地放置,就可以显示任何顺序)。
每个树节点都有一个上下文菜单。 可以删除该节点(尽管这不会从代码中删除标记注释-只要我不确定这是否必要),就可以对其进行编辑。 您可以添加不与标记注释关联的节点:例如,可以添加链接(Link)。 双击此类节点将在关联程序中打开相关资源,例如浏览器中的超链接。
通过取消选中节点中的复选框,可以禁用每个节点。 这将导致突出显示该节点以及代码中的所有子节点。 因此,例如,通过删除三个根节点(文件,标签和注释)中的复选标记,可以关闭所有标记注释的突出显示功能,但在代码中明确指定了颜色的标记除外(通过条形)。
双击该节点可在IDE中打开相应的文件,并将光标定位在相应的代码位置。 对于可能重复出现的标记,不是打开文件,而是形成所有出现的列表,并将其加载到“ CR输出”面板中,然后双击该列表的相应行,可以打开文件并在代码中定位。
每个节点都有一个用于详细说明的字段(任意长度的多行文本)。 只需在树中选择一个节点(单击鼠标一次),然后将光标放在代码中突出显示的区域中的任何位置,然后单击工具栏上的“查找”按钮,即可将该描述加载到“ CR信息”区域中。 编辑始终可用,更改后的文本会自动保存(由于失去焦点)。 我正在考虑在此领域提供Markdown格式支持,但到目前为止,我的手还没有到此。

在代码中插入任何注释并非总是可取(也不总是很方便)。 因此,第二种可能性是“签名”,即 用作代码本身的标记。 签名是令牌的特定序列(不包括空格和换行符-即,“ foo(1,2,3)”和“ foo(1、2、3、3)是相同的)。 共有三种类型的签名:
- 块-突出显示一个块,从签名开始,包括用大括号括起来的代码序列。
- 单行-带有签名的整行都突出显示
- 符号-仅突出显示签名序列。 使用此类签名突出显示单个名称(变量,函数,类)非常方便。
使用签名块与使用标记块相同。 同样,将创建树中的节点。
如果对于标记节点,标识符和标签是分别创建的,那么对于签名节点,建议准确指出我们要如何考虑签名-作为标识符(附加到文件)还是作为全局标签。 例如,对于“名称”,使用标记模式是合乎逻辑的-相应的名称将在整个项目的代码中突出显示。

另一个有趣的功能是构建代码覆盖率。 特殊功能可扫描代码并确定根本没有标记的位置,并在“ CR输出”中形成这些位置的列表。 这没有考虑空行和注释,即 扫描仅考虑有效代码。 通过双击列表行,您可以转到代码中的该位置,并对其进行研究,然后以一种或另一种方式进行标记。
关于数据库的存储格式的一些知识。 实际上,只有标记注释存储在源代码中。 树的内容存储在扩展名为“ .cr”的特殊xml文件中。 没有数据库文件与项目的显式绑定,尽管在打开项目时,如果以前没有上传过cr文件,则尝试打开具有相同名称的cr文件。
总结一下。 总的来说,我实现了几乎所有我想要的东西。 这个概念是新奇的,不寻常的,因此需要一些时间和用户反馈来了解需要开发什么和可以放弃什么。 为了尽可能多地抓住机会,有些事情变得有些复杂,这是不可避免的。 接口本身可能尚未建立,并且将更改。 但总的来说,它似乎表现得很好。
计划中有什么。 该版本是演示版本,主要是原始版本,不打算用于商业用途。 我的梦想是-制作自己的商业产品,甚至带来少量但稳定的收入,足以从事其他有趣的项目。 另外,有些东西不适合商业用途。 考虑到可以由版本控制系统同时工作的几个人可以编辑代码这一事实,我想像如何将类似的系统改编为多用户模式。 也可以朝着生成熟悉的文档(html)的方向看,也许是与代码进行更深入集成的工具(解析而不是词法/括号,自动接收类和方法的列表并将其转换为树节点)。 当然,需要修复错误(仍然存在)并改进功能。 当然,我等着您的想法和建议:)
现在就这些了(尽管我仍然没有在文章中提到一些小功能-例如,我认为有必要添加选项卡,因为没有它们,这确实让人很难过-尽管有多个选项卡插件;一些基本的Qt命令也显示在工具栏上创建者与插件无关;等等。
下载链接:
https :
//www.dropbox.com/s/9iiw5x7elwy3tpe/CodeRainbow4.zip?dl=0系统要求:Windows,由MSVC2015 32位编译的Qt Creator> = 4.5.1(这是在download.qt.io上分发的标准程序集)
安装:解压缩存档并将插件复制到文件夹c:/Qt/Qt5.10.1/Tools/QtCreator/lib/qtcreator/plugins(如果您安装的Qt不同或其他版本,这是标准Qt放置的示例-路径将不同),并且(重新)运行Qt Creator。