Skip to content

Commit f3a51c3

Browse files
committed
Canonicalize new line character in source file
1 parent 7b923b3 commit f3a51c3

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

crates/common/src/files.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use include_dir::Dir;
66
use indexmap::indexmap;
77
use indexmap::IndexMap;
88
use smol_str::SmolStr;
9-
use std::collections::HashMap;
9+
use std::collections::BTreeMap;
1010
use std::ops::Range;
1111
use std::path::Path;
1212
use std::{fs, io};
@@ -24,7 +24,10 @@ pub struct SourceFileId(pub u128);
2424

2525
impl SourceFile {
2626
pub fn new(name: &str, content: &str) -> Self {
27-
let hash = keccak::full_as_bytes(content.as_bytes());
27+
// Canonicalize new line character for Windows.
28+
let content_canonicalized = content.replace("\r\n", "\n");
29+
let hash = keccak::full_as_bytes(content_canonicalized.as_bytes());
30+
2831
let line_starts = cs::files::line_starts(content).collect();
2932
Self {
3033
id: SourceFileId(u128::from_be_bytes(hash[..16].try_into().unwrap())),
@@ -63,21 +66,21 @@ impl FileLoader for OsFileLoader {
6366
}
6467

6568
pub struct FileStore {
66-
pub files: HashMap<SourceFileId, SourceFile>,
69+
pub files: BTreeMap<SourceFileId, SourceFile>,
6770
loader: Box<dyn FileLoader>,
6871
}
6972

7073
impl FileStore {
7174
pub fn new() -> Self {
7275
Self {
73-
files: HashMap::new(),
76+
files: BTreeMap::new(),
7477
loader: Box::new(OsFileLoader),
7578
}
7679
}
7780

7881
pub fn with_loader(loader: Box<dyn FileLoader>) -> Self {
7982
Self {
80-
files: HashMap::new(),
83+
files: BTreeMap::new(),
8184
loader,
8285
}
8386
}

0 commit comments

Comments
 (0)