2020-02-18 05:11:32 -06:00
|
|
|
//! Various batch processing tasks, intended primarily for debugging.
|
2020-02-17 12:03:03 -06:00
|
|
|
|
|
|
|
mod load_cargo;
|
|
|
|
mod analysis_stats;
|
|
|
|
mod analysis_bench;
|
2020-04-13 07:44:35 -05:00
|
|
|
mod diagnostics;
|
2020-02-17 12:03:03 -06:00
|
|
|
mod progress_report;
|
|
|
|
|
|
|
|
use std::io::Read;
|
|
|
|
|
|
|
|
use anyhow::Result;
|
|
|
|
use ra_ide::{file_structure, Analysis};
|
|
|
|
use ra_prof::profile;
|
|
|
|
use ra_syntax::{AstNode, SourceFile};
|
|
|
|
|
2020-04-13 07:44:35 -05:00
|
|
|
pub use analysis_bench::{analysis_bench, BenchWhat, Position};
|
|
|
|
pub use analysis_stats::analysis_stats;
|
|
|
|
pub use diagnostics::diagnostics;
|
2020-04-24 14:57:10 -05:00
|
|
|
pub use load_cargo::load_cargo;
|
2020-04-13 07:44:35 -05:00
|
|
|
|
2020-02-17 12:03:03 -06:00
|
|
|
#[derive(Clone, Copy)]
|
|
|
|
pub enum Verbosity {
|
|
|
|
Spammy,
|
|
|
|
Verbose,
|
|
|
|
Normal,
|
|
|
|
Quiet,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Verbosity {
|
|
|
|
pub fn is_verbose(self) -> bool {
|
2020-06-27 20:02:03 -05:00
|
|
|
matches!(self, Verbosity::Verbose | Verbosity::Spammy)
|
2020-02-17 12:03:03 -06:00
|
|
|
}
|
|
|
|
pub fn is_spammy(self) -> bool {
|
2020-06-27 20:02:03 -05:00
|
|
|
matches!(self, Verbosity::Spammy)
|
2020-02-17 12:03:03 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn parse(no_dump: bool) -> Result<()> {
|
|
|
|
let _p = profile("parsing");
|
|
|
|
let file = file()?;
|
|
|
|
if !no_dump {
|
|
|
|
println!("{:#?}", file.syntax());
|
|
|
|
}
|
|
|
|
std::mem::forget(file);
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn symbols() -> Result<()> {
|
|
|
|
let file = file()?;
|
|
|
|
for s in file_structure(&file) {
|
|
|
|
println!("{:?}", s);
|
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn highlight(rainbow: bool) -> Result<()> {
|
|
|
|
let (analysis, file_id) = Analysis::from_single_file(read_stdin()?);
|
|
|
|
let html = analysis.highlight_as_html(file_id, rainbow).unwrap();
|
|
|
|
println!("{}", html);
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn file() -> Result<SourceFile> {
|
|
|
|
let text = read_stdin()?;
|
|
|
|
Ok(SourceFile::parse(&text).tree())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn read_stdin() -> Result<String> {
|
|
|
|
let mut buff = String::new();
|
|
|
|
std::io::stdin().read_to_string(&mut buff)?;
|
|
|
|
Ok(buff)
|
|
|
|
}
|