Repository navigation
Expand file tree
/
Copy pathmain.rs
More file actions
54 lines (48 loc) · 1.74 KB
/
Copy pathmain.rs
File metadata and controls
54 lines (48 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use std::io::{Read, Write, stdout};
use std::path::Path;
use std::{fs, io};
use anyhow::{Context, Result, bail};
use clap::Parser as ClapParser;
use ruff_python_formatter::cli::{Cli, Emit, format_and_debug_print};
/// Read a `String` from `stdin`.
fn read_from_stdin() -> Result<String> {
let mut buffer = String::new();
io::stdin().lock().read_to_string(&mut buffer)?;
Ok(buffer)
}
fn main() -> Result<()> {
let cli: Cli = Cli::parse();
if cli.files.is_empty() {
if !matches!(cli.emit, None | Some(Emit::Stdout)) {
bail!(
"Can only write to stdout when formatting from stdin, but you asked for {:?}",
cli.emit
);
}
let source = read_from_stdin()?;
// It seems reasonable to give this a dummy name
let formatted = format_and_debug_print(&source, &cli, Path::new("stdin.py"))?;
if cli.check {
if formatted == source {
return Ok(());
}
bail!("Content not correctly formatted")
}
stdout().lock().write_all(formatted.as_bytes())?;
} else {
for file in &cli.files {
let source = fs::read_to_string(file)
.with_context(|| format!("Could not read {}: ", file.display()))?;
let formatted = format_and_debug_print(&source, &cli, file)?;
match cli.emit {
Some(Emit::Stdout) => stdout().lock().write_all(formatted.as_bytes())?,
None | Some(Emit::Files) => {
fs::write(file, formatted.as_bytes()).with_context(|| {
format!("Could not write to {}, exiting", file.display())
})?;
}
}
}
}
Ok(())
}