Implemented do ra_check command for enabling/disabling rust-analyzer check.

This commit is contained in:
Well 2021-11-17 01:12:16 -03:00
parent a7cfd2b827
commit 20debfd7d9
6 changed files with 57 additions and 12 deletions

10
.vscode/tasks.json vendored
View File

@ -62,6 +62,16 @@
"problemMatcher": [ "problemMatcher": [
"$rustc" "$rustc"
] ]
},
{
"label": "do ra_check",
"type": "shell",
"command": "cargo do ra_check",
"presentation": {
"reveal": "never",
"clear": true
},
"problemMatcher": []
} }
], ],
"inputs": [ "inputs": [

View File

@ -8,8 +8,4 @@
the event can be coalesced? the event can be coalesced?
* Timer and resize updates are causing problems. * Timer and resize updates are causing problems.
* Slow frame upload (2ms for 2mb)? * Slow frame upload (2ms for 2mb)?
* Crash respawn deadlocking. * Crash respawn deadlocking.
# DO
* Implement `rust_analyzer_check` cancellation.

View File

@ -18,9 +18,8 @@ fn main() {
// the offset of the first '[' character in the comment block. // the offset of the first '[' character in the comment block.
let mut details_arg_offset = 0; let mut details_arg_offset = 0;
for line in rs.lines() { for line in rs.lines() {
if line.starts_with("// do ") { if let Some(task_line) = line.strip_prefix("// do ") {
expect_details = true; expect_details = true;
let task_line = &line["// do ".len()..];
let (names, options) = parse_task_line(task_line); let (names, options) = parse_task_line(task_line);
let mut names = names.into_iter(); let mut names = names.into_iter();

View File

@ -7,6 +7,7 @@ fn main() {
let (task, args) = args(); let (task, args) = args();
match task { match task {
"ra_check" => ra_check(args),
"rust_analyzer_check" => rust_analyzer_check(args), "rust_analyzer_check" => rust_analyzer_check(args),
"fmt" | "f" => fmt(args), "fmt" | "f" => fmt(args),
"test" | "t" => test(args), "test" | "t" => test(args),
@ -181,7 +182,6 @@ fn test(mut args: Vec<&str>) {
if all_patterns.iter().any(|a| build_tests.contains(a)) { if all_patterns.iter().any(|a| build_tests.contains(a)) {
// all build tests. // all build tests.
cmd_env("cargo", &build_tests_args, &args, &[("TRYBUILD", overwrite)]); cmd_env("cargo", &build_tests_args, &args, &[("TRYBUILD", overwrite)]);
return;
} else { } else {
// specific test files. // specific test files.
let mut args = build_tests_args; let mut args = build_tests_args;
@ -546,8 +546,43 @@ fn rust_analyzer_run(args: Vec<&str>) {
} }
fn rust_analyzer_check(mut args: Vec<&str>) { fn rust_analyzer_check(mut args: Vec<&str>) {
args.push("--message-format=json"); if !settings_path().join(".rust_analyzer_disabled").exists() {
check(args); args.push("--message-format=json");
check(args);
}
}
// do ra_check [--on,--off]
// Enables or disables rust-analyzer check.
// USAGE:
// ra_check --on
// Enables rust-analyzer check.
// ra_check --off
// Disables rust-analyzer check.
// ra_check
// Toggles rust-analyzer check.
fn ra_check(mut args: Vec<&str>) {
let path = settings_path().join(".rust_analyzer_disabled");
let enable = if take_flag(&mut args, &["--on"]) {
true
} else if take_flag(&mut args, &["--off"]) {
false
} else {
path.exists()
};
if enable {
if let Err(e) = std::fs::remove_file(path) {
if e.kind() != std::io::ErrorKind::NotFound {
panic!("{:?}", e)
}
}
println("rust-analyzer check is enabled");
} else {
let _ = std::fs::File::create(path).unwrap();
println("rust-analyzer check is disabled");
}
} }
// do help, --help [task] // do help, --help [task]

View File

@ -11,7 +11,7 @@ pub fn version_in_sync() {
let check_file = |path| { let check_file = |path| {
let file = read_to_string(path).unwrap(); let file = read_to_string(path).unwrap();
let caps = rgx.captures(&file).unwrap_or_else(|| panic!("expected usage help in `{}`", path)); let caps = rgx.captures(&file).unwrap_or_else(|| panic!("expected usage help in `{}`", path));
if caps.get(1).map(|c| c.as_str()).unwrap_or_default() != &version { if caps.get(1).map(|c| c.as_str()).unwrap_or_default() != version {
error(format_args!( error(format_args!(
"usage example is outdated in `{}`\n expected `zero-ui = \"{}\"'`\n found `{}`", "usage example is outdated in `{}`\n expected `zero-ui = \"{}\"'`\n found `{}`",
path, path,

View File

@ -1,6 +1,7 @@
use std::env; use std::env;
use std::format_args as f; use std::format_args as f;
use std::io::Write; use std::io::Write;
use std::path::PathBuf;
use std::process::{self, Command, Stdio}; use std::process::{self, Command, Stdio};
// Command line to run `do` // Command line to run `do`
@ -30,7 +31,7 @@ fn cmd_impl(cmd: &str, default_args: &[&str], user_args: &[&str], envs: &[(&str,
let mut cmd = Command::new(cmd); let mut cmd = Command::new(cmd);
cmd.args(&args[..]); cmd.args(&args[..]);
cmd.envs(envs.iter().filter(|t| !t.0.is_empty() && !t.1.is_empty()).map(|&t| t)); cmd.envs(envs.iter().filter(|t| !t.0.is_empty() && !t.1.is_empty()).copied());
for (remove, _) in envs.iter().filter(|t| !t.0.is_empty() && t.1.is_empty()) { for (remove, _) in envs.iter().filter(|t| !t.0.is_empty() && t.1.is_empty()) {
cmd.env_remove(remove); cmd.env_remove(remove);
@ -372,3 +373,7 @@ fn color(color: &str) -> &str {
} }
} }
static mut ANSI_ENABLED: bool = false; static mut ANSI_ENABLED: bool = false;
pub fn settings_path() -> PathBuf {
std::env::current_exe().unwrap().parent().unwrap().to_owned()
}