Skip to content

Commit 8461737

Browse files
committed
Add newline at the end of each code region in an ERB file
1 parent 9d974bd commit 8461737

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

extractor/src/main.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,17 @@ fn main() -> std::io::Result<()> {
135135
let path = PathBuf::from(line).canonicalize()?;
136136
let trap_file = path_for(&trap_dir, &path, trap_compression.extension());
137137
let src_archive_file = path_for(&src_archive_dir, &path, "");
138-
let source = std::fs::read(&path)?;
138+
let mut source = std::fs::read(&path)?;
139139
let code_ranges;
140140
if path.extension().map_or(false, |x| x == "erb") {
141141
tracing::info!("scanning: {}", path.display());
142-
code_ranges = scan_erb(erb, &source);
142+
let (ranges, line_breaks) = scan_erb(erb, &source);
143+
for i in line_breaks {
144+
if i < source.len() {
145+
source[i] = b'\n';
146+
}
147+
}
148+
code_ranges = ranges;
143149
} else {
144150
code_ranges = vec![];
145151
}
@@ -159,18 +165,25 @@ fn main() -> std::io::Result<()> {
159165
})
160166
}
161167

162-
fn scan_erb(erb: Language, source: &std::vec::Vec<u8>) -> Vec<Range> {
168+
fn scan_erb(erb: Language, source: &std::vec::Vec<u8>) -> (Vec<Range>, Vec<usize>) {
163169
let mut parser = Parser::new();
164170
parser.set_language(erb).unwrap();
165171
let tree = parser.parse(&source, None).expect("Failed to parse file");
166172
let mut result = Vec::new();
173+
let mut line_breaks = vec![];
167174

168175
for n in tree.root_node().children(&mut tree.walk()) {
169176
let kind = n.kind();
170177
if kind == "directive" || kind == "output_directive" {
171178
for c in n.children(&mut tree.walk()) {
172179
if c.kind() == "code" {
173-
result.push(c.range());
180+
let mut range = c.range();
181+
if range.end_byte < source.len() {
182+
line_breaks.push(range.end_byte);
183+
range.end_byte += 1;
184+
range.end_point.column += 1;
185+
}
186+
result.push(range);
174187
}
175188
}
176189
}
@@ -185,7 +198,7 @@ fn scan_erb(erb: Language, source: &std::vec::Vec<u8>) -> Vec<Range> {
185198
end_point: root.end_position(),
186199
});
187200
}
188-
result
201+
(result, line_breaks)
189202
}
190203

191204
fn path_for(dir: &Path, path: &Path, ext: &str) -> PathBuf {

0 commit comments

Comments
 (0)