:::info
ℹ️ 此版本分析和研究是基于:https://github.com/microsoft/vscode/releases/tag/1.61.0
🙏🏻 这个 Doc 是自己快速阅读和分析后编写的,不能够保证绝对的准确,仅供参考。
:::
VSCode 源代码仓库:https://github.com/microsoft/vscode
核心架构理解
这里网络上有大量文章讲解,先将一些核心概念图梳理在这里:
结合运行时 VSCode Process 参考:
:::warning 💁🏻 这里不赘述细节,很多文章都介绍了这两张图。需要将这套多进程的架构记住,后续在源代码分析的时候才不会出现很多黑人问号。 :::
- 跨平台问题:Linux / MacOSX / Windows 跨平台问题(大部分被 Electron 封装,但是依旧有不少代码在里面)
- 跨系统平台问题:Browser 中运行模式以及 Native Desktop 上运行,两者的差异封装需要关注,所以才会衍生出:
common
所有平台共享electron-main
纯粹 Node.js Process 纯 Node.js Processbrowser
纯粹浏览器(WebExtension)运行的文件- 二选一的 UIRenderProcess 设计
electron-browser
Electron Desktop 浏览器平台上运行electron-sandbox
Electron Desktop 沙箱运行(提供浏览器 API + 和主进程通信的 API)
整体项目组织
:::success 💎 看目录结构的设计和项目的组织设计,可以看出 VSCode Team 对复杂项目管理所设计的规则,让 VSCode 作为开源项目的复杂性得到有效的控制,这种策略的 TradeOff 的确是一种编程的智慧。 :::
基础启动时序分析
绘制核心的对象关系 绘制启动 Sequence Map
理清楚 VSCode 是如何从一个 Entry,点燃全身的?
插件和扩展系统设计
VSCode 的插件系统的设计,关注多个插件的扩展系统是如何运行起来的。
VSCode 开放 API 设计
- 如何保障开放设计的一致性?
- API 如何实现管控?
- SDK 的设计思路如何?
健壮的结构远比精巧的设计来得重要。换句话说,结构是第一位的,功能是第二位的。 保持项目的简单性。设计达到完美的时候,不是无法再增加东西了,而是无法再减少东西了。
IPC 进程通信实现分析
:::info 🚧 WIP 进程间的通信和 Protocol 的设计机制需要再细节分析,后续有空再看看其设计思路。 :::
- 进程之间的通信机制是如何设计的?
- 扩展之间的通信机制在底层是如何实现的?(ExtentionHost <=> RenderProcess)
其它
感想
VSCode 确实是一个浩大的工程,也是一个开源的宝藏,Respect 这种开源的智慧 😎
参考
前人栽树后人乘凉。
- Core Extension API Reference 核心对外开放的 API
- VSCode Site 官方站
- VSCode 源码分析 中国版本的代码 Diggest
- 🍬 VSCode Wiki on Github VSCode 开发者宝典 😁
- Visual Studio Code and the Third Wave of Source Code Editing VSCode 博客对自己的颂歌
- How to contribute of VSCode on Github 业界开源典范
- The Visual Studio Code Roadmap 2021 看看 NextStep of VSCode
- Extension API Design Guideline 👈 这个宝典值得关注,需要后续在 SDK & API 设计上开花结果
- VSCode SourceCode Orgnization on Github Wiki 👈 官方文档 😀,这个非常关键建议多次阅读 💠
- 从 VSCode 看大型 IDE 架构