adds DocTest filename variant, refactors doctest_offset out of source_map, fixes remaining test failures

This commit is contained in:
Matthew Russo 2018-12-04 15:18:03 -05:00
parent 88130f1796
commit f0f8aa9e05
12 changed files with 52 additions and 54 deletions

View file

@ -144,9 +144,6 @@ pub struct SourceMap {
// This is used to apply the file path remapping as specified via
// --remap-path-prefix to all SourceFiles allocated within this SourceMap.
path_mapping: FilePathMapping,
/// In case we are in a doctest, replace all file names with the PathBuf,
/// and add the given offsets to the line info
doctest_offset: Option<(FileName, isize)>,
}
impl SourceMap {
@ -155,19 +152,9 @@ impl SourceMap {
files: Default::default(),
file_loader: Box::new(RealFileLoader),
path_mapping,
doctest_offset: None,
}
}
pub fn new_doctest(path_mapping: FilePathMapping,
file: FileName, line: isize) -> SourceMap {
SourceMap {
doctest_offset: Some((file, line)),
..SourceMap::new(path_mapping)
}
}
pub fn with_file_loader(file_loader: Box<dyn FileLoader + Sync + Send>,
path_mapping: FilePathMapping)
-> SourceMap {
@ -175,7 +162,6 @@ impl SourceMap {
files: Default::default(),
file_loader: file_loader,
path_mapping,
doctest_offset: None,
}
}
@ -189,11 +175,7 @@ impl SourceMap {
pub fn load_file(&self, path: &Path) -> io::Result<Lrc<SourceFile>> {
let src = self.file_loader.read_file(path)?;
let filename = if let Some((ref name, _)) = self.doctest_offset {
name.clone()
} else {
path.to_owned().into()
};
let filename = path.to_owned().into();
Ok(self.new_source_file(filename, src))
}
@ -328,15 +310,17 @@ impl SourceMap {
}
// If there is a doctest_offset, apply it to the line
pub fn doctest_offset_line(&self, mut orig: usize) -> usize {
if let Some((_, line)) = self.doctest_offset {
if line >= 0 {
orig = orig + line as usize;
} else {
orig = orig - (-line) as usize;
}
pub fn doctest_offset_line(&self, file: &FileName, orig: usize) -> usize {
return match file {
FileName::DocTest(_, offset) => {
return if *offset >= 0 {
orig + *offset as usize
} else {
orig - (-(*offset)) as usize
}
},
_ => orig
}
orig
}
/// Lookup source information about a BytePos
@ -1001,8 +985,8 @@ impl SourceMapper for SourceMap {
}
)
}
fn doctest_offset_line(&self, line: usize) -> usize {
self.doctest_offset_line(line)
fn doctest_offset_line(&self, file: &FileName, line: usize) -> usize {
self.doctest_offset_line(file, line)
}
}