mirror of https://github.com/astral-sh/ruff
52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
use std::io::Write;
|
|
|
|
use crate::message::json::message_to_json_value;
|
|
use crate::message::{Emitter, EmitterContext, Message};
|
|
|
|
#[derive(Default)]
|
|
pub struct JsonLinesEmitter;
|
|
|
|
impl Emitter for JsonLinesEmitter {
|
|
fn emit(
|
|
&mut self,
|
|
writer: &mut dyn Write,
|
|
messages: &[Message],
|
|
context: &EmitterContext,
|
|
) -> anyhow::Result<()> {
|
|
let mut w = writer;
|
|
for message in messages {
|
|
serde_json::to_writer(&mut w, &message_to_json_value(message, context))?;
|
|
w.write_all(b"\n")?;
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use insta::assert_snapshot;
|
|
|
|
use crate::message::json_lines::JsonLinesEmitter;
|
|
use crate::message::tests::{
|
|
capture_emitter_notebook_output, capture_emitter_output, create_messages,
|
|
create_notebook_messages,
|
|
};
|
|
|
|
#[test]
|
|
fn output() {
|
|
let mut emitter = JsonLinesEmitter;
|
|
let content = capture_emitter_output(&mut emitter, &create_messages());
|
|
|
|
assert_snapshot!(content);
|
|
}
|
|
|
|
#[test]
|
|
fn notebook_output() {
|
|
let mut emitter = JsonLinesEmitter;
|
|
let (messages, notebook_indexes) = create_notebook_messages();
|
|
let content = capture_emitter_notebook_output(&mut emitter, &messages, ¬ebook_indexes);
|
|
|
|
assert_snapshot!(content);
|
|
}
|
|
}
|