vscode cmd模式 :
plugin cmd params
zeroice一样
进程交互
插件调用
package.json命令描述:
commond 实际执行
titile 搜索出来的用户可见/描述
category 分组
命令实现:
extension.ts 插件集装箱
vscode基于cmd的模式
registerComond注册+方法声明
extension.ts 命令+方法实现
方法(begin end)
举例
viewType模式
titile标题
column展示位置
最后就是这个commond对应的view内部的webview
在webview内部draw press click 扩缩放
menregistry.appmenuItem
如何新增一个插件
vscode启动加载插件
插件通过全局注册函数注册到系统的menu 等等
插件的沙箱机制
资源隔离:namespace
资源限制:cgroup
插件和webview互相通信:
插件向 WebView 传递信息
发送:panel.webview.postMessage(message);
// 在 WebView 中监听
window.addEventListener('message', event => {
const receivedMessage = event.data;
// 在 WebView 中处理收到的消息
// 可以根据消息内容进行相应的操作
});
WebView 向插件传递信息
发送:vscode.postMessage('这是来自 WebView 的信息');
// 监听 webview 发送的消息
panel.webview.onDidReceiveMessage(message => {
// 处理接收到的消息
// 可以根据消息内容进行相应的操作
});
插件通信:
1、基于事件
事件定义
事件监听
事件发送/同步异步
2、vscode全局状态
3、临界区
vscode源码编译
yarn watch监控源代码:不需要全量构建
构建指南:
底层源码:
command的管理机制
观察者模式
exec cmd
状态机wait后
pool获取一个thread 并行run 这个cmd
vscode工作机制:
1、进程启动
2、插件加载值插件队列
3、插件初始化:插件全局注册
4、dispatchthread/wait user action
5、cmd解析
6、申请线程资源(普通资源和渲染资源/K8S GPU node和普通node)
7、执行任务
改天找找zeroice的plugin管理源代码
插件队列管理
消息轮询
多线层执行任务