lapce源码学习-启动过程

一、记录日志

1.1、panic恐慌(异常)记录跟踪

调用堆栈,如果有源代码信息时,则记录文件路径、行、列、堆栈;否则仅记录堆栈。

window系统,调用win32接口弹出模态框窗口提醒。

1.2、链路追踪日志,输出到文件和控制台配置

文件:文件数目、文件前缀/后缀名、文件收集各目标日志最小级别(红色标注)

 

控制台:从环境变量(LAPCE_LOG)加载各目标日志最小级别(蓝色标注)

注册链路追踪:输出到文件、控制台

控制台,环境变量LAPCE_LOG设置如:

二、加载特殊字体

字体特性时,加载字体字节数组,然后写到系统字体中。

三、标准输入非终端,获取环境本机变量值

判断当前操作系统,如:window,通过powershell,输出解析

powershell输出环境变量效果:

拆分每行(\n),然后等号(=),再拆分Name、value,然后通过 std::env::set_var 设置。

四、命令行参数

4.1、wait

对应中说明:lapce源码学习-编译调试 - 攀攀 - 博客园 (cnblogs.com)

4.2、new 是否在打开新窗口

否:判断是否有已打开窗口,有则打开目录或者文件(对应行、列)

   LocalSocket通信另外进程,写入 打开目录或者文件;通过channel异步读取 打开成功返回 received 则返回 true;等待超时或者false则返回错误。

  为什么不是LocalSocket写入后,直接LocalSocket读取等待,而是用了channel实现。是因为channel读取可设置超时时间,channel没有么?

 

另外进程接收“打开目录或者文件”消息的处理代码:线程LocalSocket监听后,channel 触发信号 create_effect 打开。 

循环监听,写入要“打开目录或者文件”,回写 received。

是:启动窗口时,打开目录或者文件

五、代码高亮配置加载

5.1、语法解析,tree-sitter grammars文件更新最新版本;加载成功触发代码高亮配置加载。

  用途:是用于定义编程语言的抽象语法树(AST)的规则。这些语法文件通过解析源代码生成AST,并且可以支持多种编程语言,如Python、TypeScript等。它们主要关注于如何从源代码中提取结构信息,以便进行语法分析和进一步处理。

 代码流程:判断创建目录、调用接口反序列后根据version文件与响应中字段对比判断版本是否一致、下载压缩包、解压压缩包、删除压缩包、回写version文件版本号

5.2、查询,tree-sitter queries文件更新最新版本;加载成功触发代码高亮配置加载。

  用途:树查询是基于Tree-sitter语法树的一种模式匹配系统。它允许开发者定义特定的模式来查找和高亮显示源代码中的特定部分,例如代码块、变量名或函数调用等。

  代码流程:判断创建目录、调用接口反序列后根据version文件与响应中字段对比判断版本是否一致、下载压缩包、解压压缩包、删除压缩包、回写version文件版本号




思考总结:两者就保存目录不一样,其他流程都一致(通知配置更新、文件更新),感觉这块代码重复太多。

六、程序更新

window:删除升级残余的备份文件.bak

线程,获取更新最新版本信息



界面操作命令,触发更新:用上面最新版本号判断是否需要更新、更新进度信号(影响菜单显示)、下载文件、解压替换文件、重启程序

window:与上面备份文件.bak删除对应,用下面文件替换程序文件



重启程序,window:cmd下命令执行 杀死进程、启动进程

进度信号(影响菜单显示),true:显示正在更新+禁用菜单、false:显示重启+RestartToUpdate操作(对应上面触发更新操作)

posted @ 2024-07-28 19:10  攀攀  阅读(33)  评论(0编辑  收藏  举报