From fda9cb70fd758c016b3dfba569c027d563147d32 Mon Sep 17 00:00:00 2001 From: Guyutongxue Date: Sun, 4 Sep 2022 10:43:42 +0800 Subject: [PATCH] update --- CHANGELOG.md | 4 ++ docs/docs/cli.md | 68 ++++++++++++++++++++++++++++++++ docs/docs/index.md | 6 +-- docs/docs/options.md | 27 +++++++++++++ src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 4 +- src-tauri/src/cli/mod.rs | 1 - src-tauri/src/tasks/extension.rs | 7 ++-- src-tauri/src/tasks/mod.rs | 1 - 9 files changed, 108 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dca123..1755ccb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # 更新日志 +## v4.0.1 +*2022.9.4* +- 放宽了安装扩展的错误处理;即当安装扩展可能出现问题(进程未正常退出)时,仍然继续配置流程 + ## v4.0.0 *2022.9.3* - 尝试修复了小概率无法安装扩展(即 `extension::install...` 失败)的问题 diff --git a/docs/docs/cli.md b/docs/docs/cli.md index 2bd6de5..b113e4f 100644 --- a/docs/docs/cli.md +++ b/docs/docs/cli.md @@ -1,2 +1,70 @@ # 命令行界面 +本软件除了图形界面(Graphical User Interface, GUI)外,还提供了命令行界面(Command Line Interface, CLI)。当图形界面不适用,或者需要批量配置时,CLI 模式便能派上用场。 + +## 如何使用 CLI + +当程序未接收到任何命令行参数时,将默认使用 GUI。如果你在启动程序时,传递了额外的命令行参数,则程序会改为使用 CLI(启用 `--gui` 开关除外)。 + +因此,你可以使用 `--cli` 参数来启动本程序,这样便会使用 CLI。 + +```sh +./vscch --cli +``` + +> `--cli` 参数没有任何作用,单纯是为了破坏“未接收到任何命令行参数”的状态。 + +此外,如果 Windows 系统下没有安装 WebView 2 运行时,程序也将退化到 CLI。 + +## 交互模式与非交互模式 + +CLI 具体细分为两种模式:_交互模式_(Interactive mode)与 _非交互模式_(Non-interactive mode)。 + +它们的具体区别是,如果软件需要用户提供更多的信息,_交互模式_ 下会以提示符(Prompt)的形式询问并获得用户输入;而 _非交互模式_ 下则会得到运行时错误并终止程序。总之,_交互模式_ 更适合用户直接运行,而 _非交互模式_ 适合批处理、定时计划等场景。 + +默认的模式是 _交互模式_。传入 `-y` 或 `--assume-yes` 参数来启用 _非交互模式_。 + +## 交互模式使用说明 + +> 注:以下用户输入都可以通过传递命令行参数来跳过。 + +### VS Code 选择 + +请首先输入 VS Code 可执行文件的路径。如果工具检测到了已有的 VS Code 安装,则默认值已经就绪,直接回车下一步即可。 + +### 编译器类型选择 + +按上、下键选择你想要使用的编译器类型;按回车确定。 + +### 编译器路径选择 + +如果当前类型的编译器有且只有一个安装,则这一步骤会被跳过。 + +否则,从已安装的编译器中选择你想要使用的,或者进行如下操作之一: + +- **获取新的编译器**:查看编译器安装说明,并引导你安装(若可用)。 +- **填写新的编译器路径**:输入新的编译器路径(比如通过“获取新的编译器”步骤下载并解压得到的)。 +- **重新扫描**:重新检查已安装的编译器(比如刚刚通过“获取新的编译器”步骤安装了新的编译器)。 + +### 工作文件夹 + +输入工作文件夹路径;不合法(如 MinGW-w64 下的中文路径)时工具会提示。 + +### 等待配置完成 + +工具会按照你提供的信息,并以默认设置完成配置。CLI 模式下,工具不会自动启动 VS Code;你需要手动打开工作文件夹并测试配置效果。 + +## 非交互模式使用说明 + +你需要在启动程序时使用以下参数: + +| 参数名 | | 含义 | +| ----------------- | ---- | -------------------------------------------- | +| `-y` | 必需 | 启用非交互模式 | +| `-w ` | 必需 | 指定工作文件夹路径 | +| `-v` | 建议 | 启用更多输出;越多越具体(如 `-vvv`) | +| `-s ` | 可选 | 指定编译器类型;可通过 `--help` 获得类型名称 | +| `-c ` | 可选 | 指定编译器路径;若编译器不存在或不唯一则报错 | +| `--vscode ` | 可选 | 指定 VS Code 路径;若未安装则报错 | + +更多的参数说明请参考[配置选项说明](./options)。 diff --git a/docs/docs/index.md b/docs/docs/index.md index 8759874..a34576c 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -18,9 +18,9 @@ ## 本软件会修改的全局设置/配置 本软件会酌情安装/卸载 VS Code 扩展。 -- 本软件总会安装微软开发的 [C/C++]() 扩展,以提供智能提示功能。如果你使用 GCC 或 MSVC 编译器,该扩展也将提供调试适配器功能。 -- 如果你使用基于 LLVM 的编译器,本软件会安装 [CodeLLDB]() 扩展,以提供调试适配器功能。 -- 如果你未使用兼容模式,本软件会安装 [Console Pauser]() 扩展,以提供外部弹窗运行功能。 +- 本软件总会安装微软开发的 [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) 扩展,以提供智能提示功能。如果你使用 GCC 或 MSVC 编译器,该扩展也将提供调试适配器功能。 +- 如果你使用基于 LLVM 的编译器,本软件会安装 [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb) 扩展,以提供调试适配器功能。 +- 如果你未使用兼容模式,本软件会安装 [Console Pauser](https://marketplace.visualstudio.com/items?itemName=Guyutongxue.pause-console) 扩展,以提供外部弹窗运行功能。 - 如果你勾选了“卸载多余扩展”选项,本软件会**卸载**以下扩展: - \[TODO\] diff --git a/docs/docs/options.md b/docs/docs/options.md index 94f41e3..42ad652 100644 --- a/docs/docs/options.md +++ b/docs/docs/options.md @@ -1,2 +1,29 @@ # 配置选项说明 +## GUI/CLI 通用选项 + + + +## 其它 CLI 选项 + +### 显示版本信息 `-V` `--version` + +显示版本信息并退出。 + +### 显示帮助信息 `-h` `--help` + +显示本文档的简单版本并退出。按 CLI 选项的字典序排序。 + +### 使用图形界面 `-g` `--gui` + +当启用此开关时,将启动图形界面,且所有其它选项均被忽略,以下选项除外: +- 日志相关(`-v` `-q` `-L`) +- 跳过扩展管理(`--skip-ext-manage`) + +### 跳过扩展管理 `--skip-ext-manage` + +启用此开关后,扩展管理步骤将被跳过。此选项仅用于调试、诊断软件本身,不应在正常运行时使用。 + +### 启用 CLI `--cli` + +此开关无作用。 diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 58be416..0c4814a 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -3821,7 +3821,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vscch" -version = "4.0.0" +version = "4.0.1" dependencies = [ "anyhow", "chrono", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 232a828..67f31a3 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vscch" -version = "4.0.0" # WiX bundler do not support beta version +version = "4.0.1" description = "VS Code Config Helper v4" authors = ["Guyutongxue"] license = "GPLv3" @@ -9,8 +9,6 @@ default-run = "vscch" edition = "2018" build = "src/build.rs" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [build-dependencies] tauri-build = { version = "1.0.0-rc.7", features = [] } diff --git a/src-tauri/src/cli/mod.rs b/src-tauri/src/cli/mod.rs index c1aad2c..e0be368 100644 --- a/src-tauri/src/cli/mod.rs +++ b/src-tauri/src/cli/mod.rs @@ -22,7 +22,6 @@ use crate::cli::args::Language; use crate::gui::gui; use crate::log; use crate::steps::options::Options; -use crate::steps::{vscode, workspace}; use crate::tasks; #[cfg(windows)] use crate::utils::winapi; diff --git a/src-tauri/src/tasks/extension.rs b/src-tauri/src/tasks/extension.rs index 12d4366..b390a96 100644 --- a/src-tauri/src/tasks/extension.rs +++ b/src-tauri/src/tasks/extension.rs @@ -59,6 +59,7 @@ impl ExtensionManager { }) } + #[allow(unused)] fn run(&self, args: &[&str]) -> Result { let (suc, output) = self.run_lossy(args)?; if suc { @@ -69,6 +70,7 @@ impl ExtensionManager { } /// 返回:(是否成功, stdout) + /// 因为有时这个命令的返回值不是 0,不知道为什么,总之目前先忽略它的返回值 fn run_lossy(&self, args: &[&str]) -> Result<(bool, String)> { if !self.enabled { warn!("由于启用了 --skip-ext-manage,扩展管理命令 {:?} 被跳过。请手动管理扩展以保证配置结果正确。", args); @@ -87,7 +89,6 @@ impl ExtensionManager { } fn update(&mut self) -> Result<()> { - // 有时这个命令的返回值不是 0,不知道为什么,总之先忽略它的返回值 let (_, output) = self.run_lossy(&["--list-extensions"])?; self.installed = output.lines().map(|line| line.to_string()).collect(); debug!("已安装的扩展有:{:?}", &self.installed); @@ -100,7 +101,7 @@ impl ExtensionManager { debug!("扩展 {} 已经安装,跳过。", id); return Ok(()); } - self.run(&["--install-extension", id])?; + self.run_lossy(&["--install-extension", id])?; self.installed.push(id.to_string()); debug!("扩展 {} 安装成功。", id); Ok(()) @@ -112,7 +113,7 @@ impl ExtensionManager { debug!("扩展 {} 未安装,跳过。", id); return Ok(()); } - self.run(&["--uninstall-extension", id])?; + self.run_lossy(&["--uninstall-extension", id])?; self.installed.retain(|installed| installed != id); debug!("扩展 {} 卸载成功。", id); Ok(()) diff --git a/src-tauri/src/tasks/mod.rs b/src-tauri/src/tasks/mod.rs index 0f18ba3..cf19396 100644 --- a/src-tauri/src/tasks/mod.rs +++ b/src-tauri/src/tasks/mod.rs @@ -20,7 +20,6 @@ use derivative::*; use log::{debug, info, trace, warn}; use serde::Deserialize; -use std::fs; use std::path::PathBuf; use std::{path::Path, sync::Arc};