:::info ℹ️ 此版本分析和研究是基于:https://github.com/microsoft/vscode/releases/tag/1.61.0
🙏🏻 这个 Doc 是自己快速阅读和分析后编写的,不能够保证绝对的准确,仅供参考。 :::

VSCode 源代码仓库:https://github.com/microsoft/vscode

核心架构理解

这里网络上有大量文章讲解,先将一些核心概念图梳理在这里:

image.png

image.png

结合运行时 VSCode Process 参考:

:::warning 💁🏻 这里不赘述细节,很多文章都介绍了这两张图。需要将这套多进程的架构记住,后续在源代码分析的时候才不会出现很多黑人问号。 :::

  • 跨平台问题:Linux / MacOSX / Windows 跨平台问题(大部分被 Electron 封装,但是依旧有不少代码在里面)
  • 跨系统平台问题:Browser 中运行模式以及 Native Desktop 上运行,两者的差异封装需要关注,所以才会衍生出:
    • common 所有平台共享
    • electron-main 纯粹 Node.js Process 纯 Node.js Process
    • browser 纯粹浏览器(WebExtension)运行的文件
    • 二选一的 UIRenderProcess 设计
      • electron-browser Electron Desktop 浏览器平台上运行
      • electron-sandbox Electron Desktop 沙箱运行(提供浏览器 API + 和主进程通信的 API)

整体项目组织

VSCode 代码项目组织

:::success 💎 看目录结构的设计和项目的组织设计,可以看出 VSCode Team 对复杂项目管理所设计的规则,让 VSCode 作为开源项目的复杂性得到有效的控制,这种策略的 TradeOff 的确是一种编程的智慧。 :::

基础启动时序分析

绘制核心的对象关系 绘制启动 Sequence Map

理清楚 VSCode 是如何从一个 Entry,点燃全身的?

VSCode 启动时序分析

插件和扩展系统设计

VSCode 的插件系统的设计,关注多个插件的扩展系统是如何运行起来的。

VSCode 插件扩展源码分析

VSCode 开放 API 设计

  • 如何保障开放设计的一致性?
  • API 如何实现管控?
  • SDK 的设计思路如何?

健壮的结构远比精巧的设计来得重要。换句话说,结构是第一位的,功能是第二位的。 保持项目的简单性。设计达到完美的时候,不是无法再增加东西了,而是无法再减少东西了。

VSCode Extension API 设计分析

IPC 进程通信实现分析

:::info 🚧 WIP 进程间的通信和 Protocol 的设计机制需要再细节分析,后续有空再看看其设计思路。 :::

  • 进程之间的通信机制是如何设计的?
  • 扩展之间的通信机制在底层是如何实现的?(ExtentionHost <=> RenderProcess)

其它

VSCode 源代码分析之一些琐碎心得

感想

VSCode 确实是一个浩大的工程,也是一个开源的宝藏,Respect 这种开源的智慧 😎

参考

前人栽树后人乘凉。