Skip to content

Commit 5ec833b

Browse files
committed
Issue 4273 - correct newline style in json emitter
1 parent 87e9602 commit 5ec833b

File tree

10 files changed

+261
-18
lines changed

10 files changed

+261
-18
lines changed

src/emitter.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::io::{self, Write};
99

1010
use thiserror::Error;
1111

12-
use crate::{config::FileName, FormatReport, FormatResult};
12+
use crate::{config::options::NewlineStyle, config::FileName, FormatReport, FormatResult};
1313

1414
pub mod checkstyle;
1515
pub mod diff;
@@ -45,6 +45,7 @@ pub trait Emitter {
4545
&mut self,
4646
output: &mut dyn Write,
4747
formatted_file: FormattedFile<'_>,
48+
newline_style: NewlineStyle,
4849
) -> Result<EmitterResult, EmitterError>;
4950

5051
fn emit_header(&self, _output: &mut dyn Write) -> Result<(), EmitterError> {
@@ -136,6 +137,7 @@ pub struct EmitterConfig {
136137
pub color: Color,
137138
pub verbosity: Verbosity,
138139
pub print_filename: bool,
140+
pub newline_style: NewlineStyle,
139141
}
140142

141143
impl Default for EmitterConfig {
@@ -145,6 +147,7 @@ impl Default for EmitterConfig {
145147
color: Color::Auto,
146148
verbosity: Verbosity::Normal,
147149
print_filename: false,
150+
newline_style: NewlineStyle::default(),
148151
}
149152
}
150153
}
@@ -162,7 +165,14 @@ where
162165

163166
emitter.emit_header(out)?;
164167
for (filename, format_result) in format_report.format_result_as_rc().borrow().iter() {
165-
has_diff |= write_file(filename, &format_result, out, &mut *emitter)?.has_diff;
168+
has_diff |= write_file(
169+
filename,
170+
&format_result,
171+
out,
172+
&mut *emitter,
173+
config.newline_style,
174+
)?
175+
.has_diff;
166176
}
167177
emitter.emit_footer(out)?;
168178

@@ -174,6 +184,7 @@ pub(crate) fn write_file<T>(
174184
formatted_result: &FormatResult,
175185
out: &mut T,
176186
emitter: &mut dyn Emitter,
187+
newline_style: NewlineStyle,
177188
) -> Result<EmitterResult, EmitterError>
178189
where
179190
T: Write,
@@ -183,8 +194,7 @@ where
183194
original_text: formatted_result.original_text(),
184195
formatted_text: formatted_result.formatted_text(),
185196
};
186-
187-
emitter.emit_formatted_file(out, formatted_file)
197+
emitter.emit_formatted_file(out, formatted_file, newline_style)
188198
}
189199

190200
fn create_emitter(emitter_config: EmitterConfig) -> Box<dyn Emitter> {

src/emitter/checkstyle.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ impl Emitter for CheckstyleEmitter {
2828
original_text,
2929
formatted_text,
3030
}: FormattedFile<'_>,
31+
_newline_style: NewlineStyle,
3132
) -> Result<EmitterResult, EmitterError> {
3233
const CONTEXT_SIZE: usize = 0;
3334
let diff = make_diff(original_text, formatted_text, CONTEXT_SIZE);
@@ -107,6 +108,7 @@ mod tests {
107108
original_text: &bin_original.join("\n"),
108109
formatted_text: &bin_formatted.join("\n"),
109110
},
111+
NewlineStyle::default(),
110112
)
111113
.unwrap();
112114
let _ = emitter
@@ -117,6 +119,7 @@ mod tests {
117119
original_text: &lib_original.join("\n"),
118120
formatted_text: &lib_formatted.join("\n"),
119121
},
122+
NewlineStyle::default(),
120123
)
121124
.unwrap();
122125
let _ = emitter.emit_footer(&mut writer);

src/emitter/diff.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ impl Emitter for DiffEmitter {
3434
original_text,
3535
formatted_text,
3636
}: FormattedFile<'_>,
37+
_newline_style: NewlineStyle,
3738
) -> Result<EmitterResult, EmitterError> {
3839
const CONTEXT_SIZE: usize = 3;
3940
let mismatch = make_diff(&original_text, formatted_text, CONTEXT_SIZE);
@@ -80,6 +81,7 @@ mod tests {
8081
original_text: "fn empty() {}\n",
8182
formatted_text: "fn empty() {}\n",
8283
},
84+
NewlineStyle::default(),
8385
)
8486
.unwrap();
8587
assert_eq!(result.has_diff, false);
@@ -108,6 +110,7 @@ mod tests {
108110
original_text: bin_original,
109111
formatted_text: bin_formatted,
110112
},
113+
NewlineStyle::default(),
111114
)
112115
.unwrap();
113116
let _ = emitter
@@ -118,6 +121,7 @@ mod tests {
118121
original_text: lib_original,
119122
formatted_text: lib_formatted,
120123
},
124+
NewlineStyle::default(),
121125
)
122126
.unwrap();
123127

@@ -139,6 +143,7 @@ mod tests {
139143
original_text: "fn empty() {}\n",
140144
formatted_text: "fn empty() {}\r\n",
141145
},
146+
NewlineStyle::default(),
142147
)
143148
.unwrap();
144149
assert_eq!(

src/emitter/files.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ impl Emitter for FilesEmitter {
2424
original_text,
2525
formatted_text,
2626
}: FormattedFile<'_>,
27+
_newline_style: NewlineStyle,
2728
) -> Result<EmitterResult, EmitterError> {
2829
// Write text directly over original file if there is a diff.
2930
let filename = match filename {

0 commit comments

Comments
 (0)