mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2026-03-12 20:00:31 +00:00
44 lines
1.3 KiB
Rust
44 lines
1.3 KiB
Rust
use std::path::{Path, PathBuf};
|
|
|
|
use xshell::{Shell, cmd};
|
|
|
|
pub(crate) fn list_rust_files(dir: &Path) -> Vec<PathBuf> {
|
|
let mut res = list_files(dir);
|
|
res.retain(|it| {
|
|
it.file_name().unwrap_or_default().to_str().unwrap_or_default().ends_with(".rs")
|
|
});
|
|
res
|
|
}
|
|
|
|
pub(crate) fn list_files(dir: &Path) -> Vec<PathBuf> {
|
|
let mut res = Vec::new();
|
|
let mut work = vec![dir.to_path_buf()];
|
|
while let Some(dir) = work.pop() {
|
|
for entry in dir.read_dir().unwrap() {
|
|
let entry = entry.unwrap();
|
|
let file_type = entry.file_type().unwrap();
|
|
let path = entry.path();
|
|
let is_hidden =
|
|
path.file_name().unwrap_or_default().to_str().unwrap_or_default().starts_with('.');
|
|
if !is_hidden {
|
|
if file_type.is_dir() {
|
|
work.push(path);
|
|
} else if file_type.is_file() {
|
|
res.push(path);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
res
|
|
}
|
|
|
|
pub(crate) fn detect_target(sh: &Shell) -> String {
|
|
match std::env::var("RA_TARGET") {
|
|
Ok(target) => target,
|
|
_ => match cmd!(sh, "rustc --print=host-tuple").read() {
|
|
Ok(target) => target,
|
|
Err(e) => panic!("Failed to detect target: {e}\nPlease set RA_TARGET explicitly"),
|
|
},
|
|
}
|
|
}
|