编辑器的自制( 二 )


  • 模型 。程序所操作数据的底层描述,如文本属性、缓冲区等等;并与系统进行交互 。
  • 视图 。面向用户展示数据的方法,如对于窗口增量显示更新逻辑等 。
  • 控制器 。负责实现用户与视图的交互(如按键、鼠标事件等),并对模型进行更新(采用 Lisp 作为支撑)
至于插件部分则是由 Lisp 脚本来实现,至于是插件好还是脚本好就是另外一个问题了 。
GitHub :https://github.com/phodal/stadal
 
IDE:IDEA 的插件化
编辑器的自制

文章插图
因为偶然地原因,我分析了一段时间的 Intellij IDEA 社区版 + Android Studio 的源码之后,我有了一些新的感受 —— 这个系统架构有点复杂,哈哈 。当然,也发现了一些相似的模式 。
 
隔离层:独立二进制对于工具的制造者来说,开发者并不希望工具被捆绑在某一个开发工具上 。因此,对于开发者而言,优先做的是提供一个可独立运行的程序,而后再封装一个针对于该工具的实现 。
于是乎,这个运行的程序,它可能是:
  • C/C++ 编写的二进制应用 。通过 daemon 的方式来运行,并能通过解析输出来进行错误处理 。
  • Gradle 开发的插件 。并借助于 Gradle Tooling API 来实现插件的调用 。
  • JAVA 编写的应用 。通过直接集成的方式进行 。
  • ……
这样一来,我们就在 IDE 中集成了这样的能力,并引入到我们的系统中使用 。
 
语言扩展IDEA 本身的插件体系已经设计得很完善了,如我们可以快速添加一门语言,只需要:
  • 注册文件类型
  • 实现 Lexer(词法分析)
  • 实施 Parser(语法分析) 和 PSI(程序结构接口)
  • 语法高亮显示和错误高亮显示
  • 代码补全
  • 查找用法
  • 重构:重命名、安全删除
  • 代码格式化程序
  • ……
这样一来,我们就能快速地具备一个语言 IDE 应该有的能力 。比如 IDEA 的 Rust 插件就是这样一个不错的示例 。
编辑器的自制

文章插图
 
总结一个好的编辑器/IDE 应该能:
  • 滋长的特性:通过插件化支撑
  • 可维护性:具备良好的可读性
  • 进程分离
  • 速度
讨论哪个编辑器/IDE 是一件没意义的事 。
只有自己挖的坑才是好的 。
我行我上 。

【编辑器的自制】


推荐阅读