Provide a filemap ctor with line info
This commit is contained in:
parent
007246c17f
commit
0e907fa542
3 changed files with 19 additions and 22 deletions
|
@ -642,6 +642,21 @@ impl CodeMap {
|
||||||
filemap
|
filemap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Creates a new filemap and sets its line information.
|
||||||
|
pub fn new_filemap_and_lines(&self, filename: &str, src: &str) -> Rc<FileMap> {
|
||||||
|
let fm = self.new_filemap(filename.to_string(), src.to_owned());
|
||||||
|
let mut byte_pos: u32 = 0;
|
||||||
|
for line in src.lines() {
|
||||||
|
// register the start of this line
|
||||||
|
fm.next_line(BytePos(byte_pos));
|
||||||
|
|
||||||
|
// update byte_pos to include this line and the \n at the end
|
||||||
|
byte_pos += line.len() as u32 + 1;
|
||||||
|
}
|
||||||
|
fm
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Allocates a new FileMap representing a source file from an external
|
/// Allocates a new FileMap representing a source file from an external
|
||||||
/// crate. The source code of such an "imported filemap" is not available,
|
/// crate. The source code of such an "imported filemap" is not available,
|
||||||
/// but we still know enough to generate accurate debuginfo location
|
/// but we still know enough to generate accurate debuginfo location
|
||||||
|
@ -1190,19 +1205,6 @@ mod tests {
|
||||||
Span { lo: BytePos(left_index), hi: BytePos(right_index + 1), expn_id: NO_EXPANSION }
|
Span { lo: BytePos(left_index), hi: BytePos(right_index + 1), expn_id: NO_EXPANSION }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_filemap_and_lines(cm: &CodeMap, filename: &str, input: &str) -> Rc<FileMap> {
|
|
||||||
let fm = cm.new_filemap(filename.to_string(), input.to_string());
|
|
||||||
let mut byte_pos: u32 = 0;
|
|
||||||
for line in input.lines() {
|
|
||||||
// register the start of this line
|
|
||||||
fm.next_line(BytePos(byte_pos));
|
|
||||||
|
|
||||||
// update byte_pos to include this line and the \n at the end
|
|
||||||
byte_pos += line.len() as u32 + 1;
|
|
||||||
}
|
|
||||||
fm
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Test span_to_snippet and span_to_lines for a span coverting 3
|
/// Test span_to_snippet and span_to_lines for a span coverting 3
|
||||||
/// lines in the middle of a file.
|
/// lines in the middle of a file.
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -1210,7 +1212,7 @@ mod tests {
|
||||||
let cm = CodeMap::new();
|
let cm = CodeMap::new();
|
||||||
let inputtext = "aaaaa\nbbbbBB\nCCC\nDDDDDddddd\neee\n";
|
let inputtext = "aaaaa\nbbbbBB\nCCC\nDDDDDddddd\neee\n";
|
||||||
let selection = " \n ^~\n~~~\n~~~~~ \n \n";
|
let selection = " \n ^~\n~~~\n~~~~~ \n \n";
|
||||||
new_filemap_and_lines(&cm, "blork.rs", inputtext);
|
cm.new_filemap_and_lines("blork.rs", inputtext);
|
||||||
let span = span_from_selection(inputtext, selection);
|
let span = span_from_selection(inputtext, selection);
|
||||||
|
|
||||||
// check that we are extracting the text we thought we were extracting
|
// check that we are extracting the text we thought we were extracting
|
||||||
|
|
|
@ -837,12 +837,7 @@ mod test {
|
||||||
tolv
|
tolv
|
||||||
dreizehn
|
dreizehn
|
||||||
";
|
";
|
||||||
let file = cm.new_filemap("dummy.txt".to_string(), content.to_string());
|
let file = cm.new_filemap_and_lines("dummy.txt", content);
|
||||||
for (i, b) in content.bytes().enumerate() {
|
|
||||||
if b == b'\n' {
|
|
||||||
file.next_line(BytePos(i as u32));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let start = file.lines.borrow()[7];
|
let start = file.lines.borrow()[7];
|
||||||
let end = file.lines.borrow()[11];
|
let end = file.lines.borrow()[11];
|
||||||
let sp = mk_sp(start, end);
|
let sp = mk_sp(start, end);
|
||||||
|
|
|
@ -156,7 +156,7 @@ pub fn expand_include_str(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
|
||||||
// dependency information
|
// dependency information
|
||||||
let filename = format!("{}", file.display());
|
let filename = format!("{}", file.display());
|
||||||
let interned = token::intern_and_get_ident(&src[..]);
|
let interned = token::intern_and_get_ident(&src[..]);
|
||||||
cx.codemap().new_filemap(filename, src);
|
cx.codemap().new_filemap_and_lines(&filename, &src);
|
||||||
|
|
||||||
base::MacEager::expr(cx.expr_str(sp, interned))
|
base::MacEager::expr(cx.expr_str(sp, interned))
|
||||||
}
|
}
|
||||||
|
@ -187,7 +187,7 @@ pub fn expand_include_bytes(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
|
||||||
// Add this input file to the code map to make it available as
|
// Add this input file to the code map to make it available as
|
||||||
// dependency information, but don't enter it's contents
|
// dependency information, but don't enter it's contents
|
||||||
let filename = format!("{}", file.display());
|
let filename = format!("{}", file.display());
|
||||||
cx.codemap().new_filemap(filename, "".to_string());
|
cx.codemap().new_filemap_and_lines(&filename, "");
|
||||||
|
|
||||||
base::MacEager::expr(cx.expr_lit(sp, ast::LitBinary(Rc::new(bytes))))
|
base::MacEager::expr(cx.expr_lit(sp, ast::LitBinary(Rc::new(bytes))))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue