From 6ae350213485f7c917113f3916e58c51cef97a76 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Tue, 21 Jun 2016 18:08:13 -0400 Subject: Move errors from libsyntax to its own crate --- src/libsyntax/parse/attr.rs | 3 +- src/libsyntax/parse/lexer/comments.rs | 3 +- src/libsyntax/parse/lexer/mod.rs | 47 +++++++++++++++--------------- src/libsyntax/parse/lexer/unicode_chars.rs | 2 +- src/libsyntax/parse/mod.rs | 11 +++---- src/libsyntax/parse/obsolete.rs | 2 +- src/libsyntax/parse/parser.rs | 25 ++++++++-------- 7 files changed, 49 insertions(+), 44 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs index db643eb0df0..f6e94b7caea 100644 --- a/src/libsyntax/parse/attr.rs +++ b/src/libsyntax/parse/attr.rs @@ -10,7 +10,8 @@ use attr; use ast; -use codemap::{spanned, Spanned, mk_sp, Span}; +use syntax_pos::{mk_sp, Span}; +use codemap::{spanned, Spanned}; use parse::common::SeqSep; use parse::PResult; use parse::token; diff --git a/src/libsyntax/parse/lexer/comments.rs b/src/libsyntax/parse/lexer/comments.rs index 06d255d5c0f..5eb5605ea71 100644 --- a/src/libsyntax/parse/lexer/comments.rs +++ b/src/libsyntax/parse/lexer/comments.rs @@ -11,7 +11,8 @@ pub use self::CommentStyle::*; use ast; -use codemap::{BytePos, CharPos, CodeMap, Pos}; +use codemap::CodeMap; +use syntax_pos::{BytePos, CharPos, Pos}; use errors; use parse::lexer::is_block_doc_comment; use parse::lexer::{StringReader, TokenAndSpan}; diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs index d78a81dec83..f3d8738e95b 100644 --- a/src/libsyntax/parse/lexer/mod.rs +++ b/src/libsyntax/parse/lexer/mod.rs @@ -9,8 +9,8 @@ // except according to those terms. use ast; -use codemap::{BytePos, CharPos, CodeMap, Pos, Span}; -use codemap; +use syntax_pos::{self, BytePos, CharPos, Pos, Span}; +use codemap::CodeMap; use errors::{FatalError, Handler, DiagnosticBuilder}; use ext::tt::transcribe::tt_next_token; use parse::token::{self, keywords, str_to_ident}; @@ -84,7 +84,7 @@ pub struct StringReader<'a> { pub col: CharPos, /// The last character to be read pub curr: Option, - pub filemap: Rc, + pub filemap: Rc, // cached: pub peek_tok: token::Token, pub peek_span: Span, @@ -162,7 +162,7 @@ impl<'a> Reader for TtReader<'a> { impl<'a> StringReader<'a> { /// For comments.rs, which hackily pokes into pos and curr pub fn new_raw<'b>(span_diagnostic: &'b Handler, - filemap: Rc) + filemap: Rc) -> StringReader<'b> { if filemap.src.is_none() { span_diagnostic.bug(&format!("Cannot lex filemap \ @@ -181,7 +181,7 @@ impl<'a> StringReader<'a> { filemap: filemap, // dummy values; not read peek_tok: token::Eof, - peek_span: codemap::DUMMY_SP, + peek_span: syntax_pos::DUMMY_SP, source_text: source_text, fatal_errs: Vec::new(), }; @@ -190,7 +190,7 @@ impl<'a> StringReader<'a> { } pub fn new<'b>(span_diagnostic: &'b Handler, - filemap: Rc) + filemap: Rc) -> StringReader<'b> { let mut sr = StringReader::new_raw(span_diagnostic, filemap); if let Err(_) = sr.advance_token() { @@ -217,12 +217,12 @@ impl<'a> StringReader<'a> { /// Report a fatal error spanning [`from_pos`, `to_pos`). fn fatal_span_(&self, from_pos: BytePos, to_pos: BytePos, m: &str) -> FatalError { - self.fatal_span(codemap::mk_sp(from_pos, to_pos), m) + self.fatal_span(syntax_pos::mk_sp(from_pos, to_pos), m) } /// Report a lexical error spanning [`from_pos`, `to_pos`). fn err_span_(&self, from_pos: BytePos, to_pos: BytePos, m: &str) { - self.err_span(codemap::mk_sp(from_pos, to_pos), m) + self.err_span(syntax_pos::mk_sp(from_pos, to_pos), m) } /// Report a lexical error spanning [`from_pos`, `to_pos`), appending an @@ -246,7 +246,7 @@ impl<'a> StringReader<'a> { for c in c.escape_default() { m.push(c) } - self.span_diagnostic.struct_span_fatal(codemap::mk_sp(from_pos, to_pos), &m[..]) + self.span_diagnostic.struct_span_fatal(syntax_pos::mk_sp(from_pos, to_pos), &m[..]) } /// Report a lexical error spanning [`from_pos`, `to_pos`), appending an @@ -270,7 +270,7 @@ impl<'a> StringReader<'a> { for c in c.escape_default() { m.push(c) } - self.span_diagnostic.struct_span_err(codemap::mk_sp(from_pos, to_pos), &m[..]) + self.span_diagnostic.struct_span_err(syntax_pos::mk_sp(from_pos, to_pos), &m[..]) } /// Report a lexical error spanning [`from_pos`, `to_pos`), appending the @@ -294,11 +294,11 @@ impl<'a> StringReader<'a> { None => { if self.is_eof() { self.peek_tok = token::Eof; - self.peek_span = codemap::mk_sp(self.filemap.end_pos, self.filemap.end_pos); + self.peek_span = syntax_pos::mk_sp(self.filemap.end_pos, self.filemap.end_pos); } else { let start_bytepos = self.last_pos; self.peek_tok = self.next_token_inner()?; - self.peek_span = codemap::mk_sp(start_bytepos, self.last_pos); + self.peek_span = syntax_pos::mk_sp(start_bytepos, self.last_pos); }; } } @@ -473,7 +473,7 @@ impl<'a> StringReader<'a> { match self.curr { Some(c) => { if c.is_whitespace() { - self.span_diagnostic.span_err(codemap::mk_sp(self.last_pos, self.last_pos), + self.span_diagnostic.span_err(syntax_pos::mk_sp(self.last_pos, self.last_pos), "called consume_any_line_comment, but there \ was whitespace"); } @@ -524,13 +524,13 @@ impl<'a> StringReader<'a> { Some(TokenAndSpan { tok: tok, - sp: codemap::mk_sp(start_bpos, self.last_pos), + sp: syntax_pos::mk_sp(start_bpos, self.last_pos), }) }) } else { Some(TokenAndSpan { tok: token::Comment, - sp: codemap::mk_sp(start_bpos, self.last_pos), + sp: syntax_pos::mk_sp(start_bpos, self.last_pos), }) }; } @@ -563,7 +563,7 @@ impl<'a> StringReader<'a> { } return Some(TokenAndSpan { tok: token::Shebang(self.name_from(start)), - sp: codemap::mk_sp(start, self.last_pos), + sp: syntax_pos::mk_sp(start, self.last_pos), }); } } @@ -591,7 +591,7 @@ impl<'a> StringReader<'a> { } let c = Some(TokenAndSpan { tok: token::Whitespace, - sp: codemap::mk_sp(start_bpos, self.last_pos), + sp: syntax_pos::mk_sp(start_bpos, self.last_pos), }); debug!("scanning whitespace: {:?}", c); c @@ -653,7 +653,7 @@ impl<'a> StringReader<'a> { Some(TokenAndSpan { tok: tok, - sp: codemap::mk_sp(start_bpos, self.last_pos), + sp: syntax_pos::mk_sp(start_bpos, self.last_pos), }) }) } @@ -850,7 +850,7 @@ impl<'a> StringReader<'a> { let valid = if self.curr_is('{') { self.scan_unicode_escape(delim) && !ascii_only } else { - let span = codemap::mk_sp(start, self.last_pos); + let span = syntax_pos::mk_sp(start, self.last_pos); self.span_diagnostic .struct_span_err(span, "incorrect unicode escape sequence") .span_help(span, @@ -888,13 +888,13 @@ impl<'a> StringReader<'a> { }, c); if e == '\r' { - err.span_help(codemap::mk_sp(escaped_pos, last_pos), + err.span_help(syntax_pos::mk_sp(escaped_pos, last_pos), "this is an isolated carriage return; consider \ checking your editor and version control \ settings"); } if (e == '{' || e == '}') && !ascii_only { - err.span_help(codemap::mk_sp(escaped_pos, last_pos), + err.span_help(syntax_pos::mk_sp(escaped_pos, last_pos), "if used in a formatting string, curly braces \ are escaped with `{{` and `}}`"); } @@ -1677,7 +1677,8 @@ fn ident_continue(c: Option) -> bool { mod tests { use super::*; - use codemap::{BytePos, CodeMap, Span, NO_EXPANSION}; + use codemap::{BytePos, Span, NO_EXPANSION}; + use codemap::CodeMap; use errors; use parse::token; use parse::token::str_to_ident; @@ -1889,7 +1890,7 @@ mod tests { let mut lexer = setup(&cm, &sh, "// test\r\n/// test\r\n".to_string()); let comment = lexer.next_token(); assert_eq!(comment.tok, token::Comment); - assert_eq!(comment.sp, ::codemap::mk_sp(BytePos(0), BytePos(7))); + assert_eq!(comment.sp, ::syntax_pos::mk_sp(BytePos(0), BytePos(7))); assert_eq!(lexer.next_token().tok, token::Whitespace); assert_eq!(lexer.next_token().tok, token::DocComment(token::intern("/// test"))); diff --git a/src/libsyntax/parse/lexer/unicode_chars.rs b/src/libsyntax/parse/lexer/unicode_chars.rs index d337c78bee8..dab97d1d5a6 100644 --- a/src/libsyntax/parse/lexer/unicode_chars.rs +++ b/src/libsyntax/parse/lexer/unicode_chars.rs @@ -11,7 +11,7 @@ // Characters and their corresponding confusables were collected from // http://www.unicode.org/Public/security/revision-06/confusables.txt -use codemap::mk_sp as make_span; +use syntax_pos::mk_sp as make_span; use errors::DiagnosticBuilder; use super::StringReader; diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 2e4d46bc983..60cc2f659ed 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -11,7 +11,8 @@ //! The main parser interface use ast; -use codemap::{self, Span, CodeMap, FileMap}; +use codemap::CodeMap; +use syntax_pos::{self, Span, FileMap}; use errors::{Handler, ColorConfig, DiagnosticBuilder}; use parse::parser::Parser; use parse::token::InternedString; @@ -211,8 +212,8 @@ pub fn filemap_to_parser<'a>(sess: &'a ParseSess, let end_pos = filemap.end_pos; let mut parser = tts_to_parser(sess, filemap_to_tts(sess, filemap), cfg); - if parser.token == token::Eof && parser.span == codemap::DUMMY_SP { - parser.span = codemap::mk_sp(end_pos, end_pos); + if parser.token == token::Eof && parser.span == syntax_pos::DUMMY_SP { + parser.span = syntax_pos::mk_sp(end_pos, end_pos); } parser @@ -661,7 +662,7 @@ pub fn integer_lit(s: &str, mod tests { use super::*; use std::rc::Rc; - use codemap::{Span, BytePos, Pos, Spanned, NO_EXPANSION}; + use syntax_pos::{Span, BytePos, Pos, Spanned, NO_EXPANSION}; use ast::{self, TokenTree, PatKind}; use abi::Abi; use attr::{first_attr_value_str_by_name, AttrMetaMethods}; @@ -673,7 +674,7 @@ mod tests { use util::parser_testing::{string_to_tts, string_to_parser}; use util::parser_testing::{string_to_expr, string_to_item, string_to_stmt}; - // produce a codemap::span + // produce a syntax_pos::span fn sp(a: u32, b: u32) -> Span { Span {lo: BytePos(a), hi: BytePos(b), expn_id: NO_EXPANSION} } diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 75f1ac49c9a..a1d7ddcdf4b 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -13,7 +13,7 @@ //! //! Obsolete syntax that becomes too hard to parse can be removed. -use codemap::Span; +use syntax_pos::Span; use parse::parser; /// The specific types of unsupported syntax diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 341b076e7cf..5c29c6108e9 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -40,7 +40,8 @@ use ast::{Visibility, WhereClause}; use attr::{ThinAttributes, ThinAttributesExt, AttributesExt}; use ast::{BinOpKind, UnOp}; use ast; -use codemap::{self, Span, BytePos, Spanned, spanned, mk_sp, CodeMap}; +use codemap::{self, CodeMap, Spanned, spanned}; +use syntax_pos::{self, Span, BytePos, mk_sp}; use errors::{self, DiagnosticBuilder}; use ext::tt::macro_parser; use parse; @@ -344,7 +345,7 @@ impl<'a> Parser<'a> { { let tok0 = rdr.real_token(); let span = tok0.sp; - let filename = if span != codemap::DUMMY_SP { + let filename = if span != syntax_pos::DUMMY_SP { Some(sess.codemap().span_to_filename(span)) } else { None }; let placeholder = TokenAndSpan { @@ -3500,7 +3501,7 @@ impl<'a> Parser<'a> { } /// Parse the fields of a struct-like pattern - fn parse_pat_fields(&mut self) -> PResult<'a, (Vec> , bool)> { + fn parse_pat_fields(&mut self) -> PResult<'a, (Vec>, bool)> { let mut fields = Vec::new(); let mut etc = false; let mut first = true; @@ -3570,9 +3571,9 @@ impl<'a> Parser<'a> { }; fields.push(codemap::Spanned { span: mk_sp(lo, hi), - node: ast::FieldPat { ident: fieldname, - pat: subpat, - is_shorthand: is_shorthand }}); + node: ast::FieldPat { ident: fieldname, + pat: subpat, + is_shorthand: is_shorthand }}); } return Ok((fields, etc)); } @@ -3663,7 +3664,7 @@ impl<'a> Parser<'a> { SeqSep::none(), |p| p.parse_token_tree())?; let mac = Mac_ { path: path, tts: tts, ctxt: EMPTY_CTXT }; pat = PatKind::Mac(codemap::Spanned {node: mac, - span: mk_sp(lo, self.last_span.hi)}); + span: mk_sp(lo, self.last_span.hi)}); } else { // Parse ident @ pat // This can give false positives and parse nullary enums, @@ -4915,8 +4916,8 @@ impl<'a> Parser<'a> { |p| p.parse_token_tree())?; let m_ = Mac_ { path: pth, tts: tts, ctxt: EMPTY_CTXT }; let m: ast::Mac = codemap::Spanned { node: m_, - span: mk_sp(lo, - self.last_span.hi) }; + span: mk_sp(lo, + self.last_span.hi) }; if delim != token::Brace { self.expect(&token::Semi)? } @@ -5255,7 +5256,7 @@ impl<'a> Parser<'a> { return Err(self.fatal(&format!("expected item, found `{}`", token_str))); } - let hi = if self.span == codemap::DUMMY_SP { + let hi = if self.span == syntax_pos::DUMMY_SP { inner_lo } else { self.last_span.hi @@ -6001,8 +6002,8 @@ impl<'a> Parser<'a> { // single-variant-enum... : let m = Mac_ { path: pth, tts: tts, ctxt: EMPTY_CTXT }; let m: ast::Mac = codemap::Spanned { node: m, - span: mk_sp(mac_lo, - self.last_span.hi) }; + span: mk_sp(mac_lo, + self.last_span.hi) }; if delim != token::Brace { if !self.eat(&token::Semi) { -- cgit 1.4.1-3-g733a5 From 2829fbc63814d02359e3d93d16f7ea7ef748162e Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Tue, 21 Jun 2016 19:57:03 -0400 Subject: Address comments and fix travis warning --- src/librustc_errors/Cargo.toml | 1 - src/librustdoc/clean/mod.rs | 3 +-- src/librustdoc/doctree.rs | 1 - src/libsyntax/parse/parser.rs | 4 ++-- src/libsyntax_pos/Cargo.toml | 1 - 5 files changed, 3 insertions(+), 7 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/librustc_errors/Cargo.toml b/src/librustc_errors/Cargo.toml index 8efbc393f2f..128c270eb35 100644 --- a/src/librustc_errors/Cargo.toml +++ b/src/librustc_errors/Cargo.toml @@ -7,7 +7,6 @@ version = "0.0.0" name = "rustc_errors" path = "lib.rs" crate-type = ["dylib"] -test = false [dependencies] log = { path = "../liblog" } diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index e26547abd0e..65902205312 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -24,12 +24,11 @@ pub use self::SelfTy::*; pub use self::FunctionRetTy::*; pub use self::Visibility::*; -use syntax; use syntax::abi::Abi; use syntax::ast; use syntax::attr; use syntax::attr::{AttributeMethods, AttrMetaMethods}; -use syntax::codemap::{self, Spanned}; +use syntax::codemap::Spanned; use syntax::parse::token::{self, InternedString, keywords}; use syntax::ptr::P; use syntax_pos::{self, DUMMY_SP, Pos}; diff --git a/src/librustdoc/doctree.rs b/src/librustdoc/doctree.rs index acc9f86d648..04d176c36c8 100644 --- a/src/librustdoc/doctree.rs +++ b/src/librustdoc/doctree.rs @@ -13,7 +13,6 @@ pub use self::StructType::*; pub use self::TypeBound::*; -use syntax; use syntax::abi; use syntax::ast; use syntax::ast::{Name, NodeId}; diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 5c29c6108e9..a8597c99a56 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -6002,8 +6002,8 @@ impl<'a> Parser<'a> { // single-variant-enum... : let m = Mac_ { path: pth, tts: tts, ctxt: EMPTY_CTXT }; let m: ast::Mac = codemap::Spanned { node: m, - span: mk_sp(mac_lo, - self.last_span.hi) }; + span: mk_sp(mac_lo, + self.last_span.hi) }; if delim != token::Brace { if !self.eat(&token::Semi) { diff --git a/src/libsyntax_pos/Cargo.toml b/src/libsyntax_pos/Cargo.toml index 06adb5dc765..760aaa8a957 100644 --- a/src/libsyntax_pos/Cargo.toml +++ b/src/libsyntax_pos/Cargo.toml @@ -7,7 +7,6 @@ version = "0.0.0" name = "syntax_pos" path = "lib.rs" crate-type = ["dylib"] -test = false [dependencies] serialize = { path = "../libserialize" } -- cgit 1.4.1-3-g733a5 From 51deb4fedbdab4b9b5a7610985c0be54e89cae73 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Wed, 22 Jun 2016 12:50:19 -0400 Subject: Address more travis errors --- src/libsyntax/codemap.rs | 1 + src/libsyntax/ext/expand.rs | 2 +- src/libsyntax/parse/lexer/mod.rs | 2 +- src/libsyntax/parse/mod.rs | 3 ++- src/libsyntax/print/pprust.rs | 3 ++- src/test/compile-fail/bad-format-args.rs | 6 +++--- src/test/run-make/execution-engine/test.rs | 4 +++- src/test/run-make/issue-19371/foo.rs | 3 ++- 8 files changed, 15 insertions(+), 9 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 0dc67ef6d37..2188dc36ec8 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -827,6 +827,7 @@ impl CodeMapper for CodeMap { #[cfg(test)] mod tests { use super::*; + use syntax_pos::*; #[test] fn t1 () { diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index fabe9a1bc02..aa5fe4fe2fa 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -1229,7 +1229,7 @@ mod tests { use super::{PatIdentFinder, IdentRenamer, PatIdentRenamer, ExpansionConfig}; use ast; use ast::Name; - use codemap; + use syntax_pos; use ext::base::{ExtCtxt, DummyMacroLoader}; use ext::mtwt; use fold::Folder; diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs index f3d8738e95b..d9d4bb504a7 100644 --- a/src/libsyntax/parse/lexer/mod.rs +++ b/src/libsyntax/parse/lexer/mod.rs @@ -1677,7 +1677,7 @@ fn ident_continue(c: Option) -> bool { mod tests { use super::*; - use codemap::{BytePos, Span, NO_EXPANSION}; + use syntax_pos::{BytePos, Span, NO_EXPANSION}; use codemap::CodeMap; use errors; use parse::token; diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 60cc2f659ed..0796f298be1 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -662,7 +662,8 @@ pub fn integer_lit(s: &str, mod tests { use super::*; use std::rc::Rc; - use syntax_pos::{Span, BytePos, Pos, Spanned, NO_EXPANSION}; + use syntax_pos::{Span, BytePos, Pos, NO_EXPANSION}; + use codemap::Spanned; use ast::{self, TokenTree, PatKind}; use abi::Abi; use attr::{first_attr_value_str_by_name, AttrMetaMethods}; diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 40150ebf9d7..d254d3a71cf 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -3105,6 +3105,7 @@ mod tests { use ast; use codemap; use parse::token; + use syntax_pos; #[test] fn test_fun_to_string() { @@ -3126,7 +3127,7 @@ mod tests { fn test_variant_to_string() { let ident = token::str_to_ident("principal_skinner"); - let var = syntax_pos::respan(syntax_pos::DUMMY_SP, ast::Variant_ { + let var = codemap::respan(syntax_pos::DUMMY_SP, ast::Variant_ { name: ident, attrs: Vec::new(), // making this up as I go.... ? diff --git a/src/test/compile-fail/bad-format-args.rs b/src/test/compile-fail/bad-format-args.rs index 816c696a895..5ac1a6a0373 100644 --- a/src/test/compile-fail/bad-format-args.rs +++ b/src/test/compile-fail/bad-format-args.rs @@ -9,11 +9,11 @@ // except according to those terms. // error-pattern: requires at least a format string argument -// error-pattern: bad-format-args.rs:19:5: 19:15 note: in this expansion +// error-pattern: bad-format-args.rs:19:5: 19:15: note: in this expansion // error-pattern: expected token: `,` -// error-pattern: bad-format-args.rs:20:5: 20:19 note: in this expansion -// error-pattern: bad-format-args.rs:21:5: 21:22 note: in this expansion +// error-pattern: bad-format-args.rs:20:5: 20:19: note: in this expansion +// error-pattern: bad-format-args.rs:21:5: 21:22: note: in this expansion fn main() { format!(); diff --git a/src/test/run-make/execution-engine/test.rs b/src/test/run-make/execution-engine/test.rs index 8a7959212f5..a94b2a85c77 100644 --- a/src/test/run-make/execution-engine/test.rs +++ b/src/test/run-make/execution-engine/test.rs @@ -18,6 +18,8 @@ extern crate rustc_lint; extern crate rustc_llvm as llvm; extern crate rustc_metadata; extern crate rustc_resolve; +extern crate rustc_errors; +extern crate rustc_errors as errors; #[macro_use] extern crate syntax; use std::ffi::{CStr, CString}; @@ -38,7 +40,7 @@ use rustc_metadata::creader::read_local_crates; use rustc_metadata::cstore::CStore; use libc::c_void; -use syntax::diagnostics::registry::Registry; +use rustc_errors::registry::Registry; use syntax::parse::token; fn main() { diff --git a/src/test/run-make/issue-19371/foo.rs b/src/test/run-make/issue-19371/foo.rs index 41d250eadec..aa3495ec5ee 100644 --- a/src/test/run-make/issue-19371/foo.rs +++ b/src/test/run-make/issue-19371/foo.rs @@ -14,6 +14,7 @@ extern crate rustc; extern crate rustc_driver; extern crate rustc_lint; extern crate rustc_metadata; +extern crate rustc_errors; extern crate syntax; use rustc::dep_graph::DepGraph; @@ -21,7 +22,7 @@ use rustc::session::{build_session, Session}; use rustc::session::config::{basic_options, build_configuration, Input, OutputType}; use rustc_driver::driver::{compile_input, CompileController, anon_src}; use rustc_metadata::cstore::CStore; -use syntax::diagnostics::registry::Registry; +use rustc_errors::registry::Registry; use syntax::parse::token; use std::path::PathBuf; -- cgit 1.4.1-3-g733a5 From 80f1c7875278b4dde63d5a523fe773e61d0f754e Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Thu, 23 Jun 2016 15:19:40 -0400 Subject: make old school mode a bit more configurable --- src/librustc/session/mod.rs | 5 ++++- src/librustc_errors/emitter.rs | 46 ++++++++++++++++++++++++++-------------- src/librustc_errors/lib.rs | 3 ++- src/librustc_errors/snippet.rs | 43 +++++++++++++++++++++++++++++++------ src/libsyntax/codemap.rs | 45 ++++++++++++++++++++++++--------------- src/libsyntax/parse/lexer/mod.rs | 5 ++++- 6 files changed, 104 insertions(+), 43 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index bfd7853d41e..77259cea24d 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -454,7 +454,10 @@ pub fn build_session_with_codemap(sopts: config::Options, let emitter: Box = match sopts.error_format { config::ErrorOutputType::HumanReadable(color_config) => { - Box::new(EmitterWriter::stderr(color_config, Some(registry), codemap.clone())) + Box::new(EmitterWriter::stderr(color_config, + Some(registry), + codemap.clone(), + errors::snippet::FormatMode::EnvironmentSelected)) } config::ErrorOutputType::Json => { Box::new(JsonEmitter::stderr(Some(registry), codemap.clone())) diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index d46a8f3c453..a7c68e3a87b 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -17,7 +17,7 @@ use check_old_skool; use {Level, RenderSpan, CodeSuggestion, DiagnosticBuilder, CodeMapper}; use RenderSpan::*; use Level::*; -use snippet::{RenderedLineKind, SnippetData, Style}; +use snippet::{RenderedLineKind, SnippetData, Style, FormatMode}; use std::{cmp, fmt}; use std::io::prelude::*; @@ -159,7 +159,7 @@ pub struct EmitterWriter { first: bool, // For now, allow an old-school mode while we transition - old_school: bool, + format_mode: FormatMode } impl CoreEmitter for EmitterWriter { @@ -194,35 +194,35 @@ macro_rules! println_maybe_styled { impl EmitterWriter { pub fn stderr(color_config: ColorConfig, registry: Option, - code_map: Rc) + code_map: Rc, + format_mode: FormatMode) -> EmitterWriter { - let old_school = check_old_skool(); if color_config.use_color() { let dst = Destination::from_stderr(); EmitterWriter { dst: dst, registry: registry, cm: code_map, first: true, - old_school: old_school } + format_mode: format_mode.clone() } } else { EmitterWriter { dst: Raw(Box::new(io::stderr())), registry: registry, cm: code_map, first: true, - old_school: old_school } + format_mode: format_mode.clone() } } } pub fn new(dst: Box, registry: Option, - code_map: Rc) + code_map: Rc, + format_mode: FormatMode) -> EmitterWriter { - let old_school = check_old_skool(); EmitterWriter { dst: Raw(dst), registry: registry, cm: code_map, first: true, - old_school: old_school } + format_mode: format_mode.clone() } } fn emit_message_(&mut self, @@ -233,11 +233,17 @@ impl EmitterWriter { is_header: bool, show_snippet: bool) -> io::Result<()> { + let old_school = match self.format_mode { + FormatMode::NewErrorFormat => false, + FormatMode::OriginalErrorFormat => true, + FormatMode::EnvironmentSelected => check_old_skool() + }; + if is_header { if self.first { self.first = false; } else { - if !self.old_school { + if !old_school { write!(self.dst, "\n")?; } } @@ -248,7 +254,7 @@ impl EmitterWriter { .and_then(|registry| registry.find_description(code)) .is_some() => { let code_with_explain = String::from("--explain ") + code; - if self.old_school { + if old_school { let loc = match rsp.span().primary_span() { Some(COMMAND_LINE_SP) | Some(DUMMY_SP) => "".to_string(), Some(ps) => self.cm.span_to_string(ps), @@ -261,7 +267,7 @@ impl EmitterWriter { } } _ => { - if self.old_school { + if old_school { let loc = match rsp.span().primary_span() { Some(COMMAND_LINE_SP) | Some(DUMMY_SP) => "".to_string(), Some(ps) => self.cm.span_to_string(ps), @@ -303,7 +309,7 @@ impl EmitterWriter { } } } - if self.old_school { + if old_school { match code { Some(code) if self.registry.as_ref() .and_then(|registry| registry.find_description(code)) @@ -363,14 +369,22 @@ impl EmitterWriter { lvl: Level) -> io::Result<()> { + let old_school = match self.format_mode { + FormatMode::NewErrorFormat => false, + FormatMode::OriginalErrorFormat => true, + FormatMode::EnvironmentSelected => check_old_skool() + }; + let mut snippet_data = SnippetData::new(self.cm.clone(), - msp.primary_span()); - if self.old_school { + msp.primary_span(), + self.format_mode.clone()); + if old_school { let mut output_vec = vec![]; for span_label in msp.span_labels() { let mut snippet_data = SnippetData::new(self.cm.clone(), - Some(span_label.span)); + Some(span_label.span), + self.format_mode.clone()); snippet_data.push(span_label.span, span_label.is_primary, diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index 47047769d31..18fc826f9aa 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -425,7 +425,8 @@ impl Handler { treat_err_as_bug: bool, cm: Rc) -> Handler { - let emitter = Box::new(EmitterWriter::stderr(color_config, registry, cm)); + let emitter = Box::new(EmitterWriter::stderr(color_config, registry, cm, + snippet::FormatMode::EnvironmentSelected)); Handler::with_emitter(can_emit_warnings, treat_err_as_bug, emitter) } diff --git a/src/librustc_errors/snippet.rs b/src/librustc_errors/snippet.rs index c472994599c..33f40ffc71a 100644 --- a/src/librustc_errors/snippet.rs +++ b/src/librustc_errors/snippet.rs @@ -17,10 +17,18 @@ use std::cmp; use std::rc::Rc; use std::mem; +#[derive(Clone)] +pub enum FormatMode { + NewErrorFormat, + OriginalErrorFormat, + EnvironmentSelected +} + #[derive(Clone)] pub struct SnippetData { codemap: Rc, files: Vec, + format_mode: FormatMode, } #[derive(Clone)] @@ -35,6 +43,10 @@ pub struct FileInfo { primary_span: Option, lines: Vec, + + /// The type of error format to render. We keep it here so that + /// it's easy to configure for both tests and regular usage + format_mode: FormatMode, } #[derive(Clone, Debug)] @@ -111,7 +123,8 @@ pub enum RenderedLineKind { impl SnippetData { pub fn new(codemap: Rc, - primary_span: Option) // (*) + primary_span: Option, + format_mode: FormatMode) // (*) -> Self { // (*) The primary span indicates the file that must appear // first, and which will have a line number etc in its @@ -125,7 +138,8 @@ impl SnippetData { let mut data = SnippetData { codemap: codemap.clone(), - files: vec![] + files: vec![], + format_mode: format_mode.clone() }; if let Some(primary_span) = primary_span { let lo = codemap.lookup_char_pos(primary_span.lo); @@ -134,6 +148,7 @@ impl SnippetData { file: lo.file, primary_span: Some(primary_span), lines: vec![], + format_mode: format_mode.clone(), }); } data @@ -166,6 +181,7 @@ impl SnippetData { file: file_map.clone(), lines: vec![], primary_span: None, + format_mode: self.format_mode.clone() }); self.files.last_mut().unwrap() } @@ -177,7 +193,7 @@ impl SnippetData { self.files.iter() .flat_map(|f| f.render_file_lines(&self.codemap)) .collect(); - prepend_prefixes(&mut rendered_lines); + prepend_prefixes(&mut rendered_lines, &self.format_mode); trim_lines(&mut rendered_lines); rendered_lines } @@ -454,7 +470,11 @@ impl FileInfo { } fn render_file_lines(&self, codemap: &Rc) -> Vec { - let old_school = check_old_skool(); + let old_school = match self.format_mode { + FormatMode::OriginalErrorFormat => true, + FormatMode::NewErrorFormat => false, + FormatMode::EnvironmentSelected => check_old_skool() + }; // As a first step, we elide any instance of more than one // continuous unannotated line. @@ -590,7 +610,12 @@ impl FileInfo { } fn render_line(&self, line: &Line) -> Vec { - let old_school = check_old_skool(); + let old_school = match self.format_mode { + FormatMode::OriginalErrorFormat => true, + FormatMode::NewErrorFormat => false, + FormatMode::EnvironmentSelected => check_old_skool() + }; + let source_string = self.file.get_line(line.line_index) .unwrap_or(""); let source_kind = RenderedLineKind::SourceText { @@ -775,8 +800,12 @@ impl FileInfo { } } -fn prepend_prefixes(rendered_lines: &mut [RenderedLine]) { - let old_school = check_old_skool(); +fn prepend_prefixes(rendered_lines: &mut [RenderedLine], format_mode: &FormatMode) { + let old_school = match *format_mode { + FormatMode::OriginalErrorFormat => true, + FormatMode::NewErrorFormat => false, + FormatMode::EnvironmentSelected => check_old_skool() + }; if old_school { return; } diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index f98478a000a..766f27dc0a9 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -830,7 +830,7 @@ mod tests { use syntax_pos::*; use errors::{Level, CodeSuggestion}; use errors::emitter::EmitterWriter; - use errors::snippet::{SnippetData, RenderedLine}; + use errors::snippet::{SnippetData, RenderedLine, FormatMode}; use std::sync::{Arc, Mutex}; use std::io::{self, Write}; use std::str::from_utf8; @@ -1234,7 +1234,10 @@ r"blork2.rs:2:1: 2:12 fn test_hilight_suggestion_issue_11715() { let data = Arc::new(Mutex::new(Vec::new())); let cm = Rc::new(CodeMap::new()); - let mut ew = EmitterWriter::new(Box::new(Sink(data.clone())), None, cm.clone()); + let mut ew = EmitterWriter::new(Box::new(Sink(data.clone())), + None, + cm.clone(), + FormatMode::NewErrorFormat); let content = "abcdefg koksi line3 @@ -1317,7 +1320,10 @@ r"blork2.rs:2:1: 2:12 fn test_multispan_highlight() { let data = Arc::new(Mutex::new(Vec::new())); let cm = Rc::new(CodeMap::new()); - let mut diag = EmitterWriter::new(Box::new(Sink(data.clone())), None, cm.clone()); + let mut diag = EmitterWriter::new(Box::new(Sink(data.clone())), + None, + cm.clone(), + FormatMode::NewErrorFormat); let inp = "_____aaaaaa____bbbbbb__cccccdd_"; let sp1 = " ~~~~~~ "; @@ -1370,7 +1376,10 @@ r"blork2.rs:2:1: 2:12 fn test_huge_multispan_highlight() { let data = Arc::new(Mutex::new(Vec::new())); let cm = Rc::new(CodeMap::new()); - let mut diag = EmitterWriter::new(Box::new(Sink(data.clone())), None, cm.clone()); + let mut diag = EmitterWriter::new(Box::new(Sink(data.clone())), + None, + cm.clone(), + FormatMode::NewErrorFormat); let inp = "aaaaa\n\ aaaaa\n\ @@ -1462,7 +1471,7 @@ fn foo() { let foo = cm.new_filemap_and_lines("foo.rs", None, file_text); let span_bar = cm.span_substr(&foo, file_text, "bar", 0); - let mut snippet = SnippetData::new(cm, Some(span_bar)); + let mut snippet = SnippetData::new(cm, Some(span_bar), FormatMode::NewErrorFormat); snippet.push(span_bar, true, None); let lines = snippet.render_lines(); @@ -1489,7 +1498,7 @@ fn foo() { let span_vec1 = cm.span_substr(&foo, file_text, "vec", 1); let span_semi = cm.span_substr(&foo, file_text, ";", 0); - let mut snippet = SnippetData::new(cm, None); + let mut snippet = SnippetData::new(cm, None, FormatMode::NewErrorFormat); snippet.push(span_vec0, false, Some(format!("previous borrow of `vec` occurs here"))); snippet.push(span_vec1, false, Some(format!("error occurs here"))); snippet.push(span_semi, false, Some(format!("previous borrow ends here"))); @@ -1554,7 +1563,7 @@ fn bar() { let span_bar_vec1 = cm.span_substr(&bar_map, file_text_bar, "vec", 1); let span_bar_semi = cm.span_substr(&bar_map, file_text_bar, ";", 0); - let mut snippet = SnippetData::new(cm, Some(span_foo_vec1)); + let mut snippet = SnippetData::new(cm, Some(span_foo_vec1), FormatMode::NewErrorFormat); snippet.push(span_foo_vec0, false, Some(format!("a"))); snippet.push(span_foo_vec1, true, Some(format!("b"))); snippet.push(span_foo_semi, false, Some(format!("c"))); @@ -1611,7 +1620,7 @@ fn foo() { let span_data1 = cm.span_substr(&foo, file_text, "data", 1); let span_rbrace = cm.span_substr(&foo, file_text, "}", 3); - let mut snippet = SnippetData::new(cm, None); + let mut snippet = SnippetData::new(cm, None, FormatMode::NewErrorFormat); snippet.push(span_data0, false, Some(format!("immutable borrow begins here"))); snippet.push(span_data1, false, Some(format!("mutable borrow occurs here"))); snippet.push(span_rbrace, false, Some(format!("immutable borrow ends here"))); @@ -1651,7 +1660,7 @@ fn foo() { let span2 = cm.span_substr(&foo, file_text, "ec.push", 0); let span3 = cm.span_substr(&foo, file_text, "unwrap", 0); - let mut snippet = SnippetData::new(cm, None); + let mut snippet = SnippetData::new(cm, None, FormatMode::NewErrorFormat); snippet.push(span0, false, Some(format!("A"))); snippet.push(span1, false, Some(format!("B"))); snippet.push(span2, false, Some(format!("C"))); @@ -1689,7 +1698,7 @@ fn foo() { let span_semi = cm.span_substr(&foo, file_text, ";", 0); // intentionally don't push the snippets left to right - let mut snippet = SnippetData::new(cm, None); + let mut snippet = SnippetData::new(cm, None, FormatMode::NewErrorFormat); snippet.push(span_vec1, false, Some(format!("error occurs here"))); snippet.push(span_vec0, false, Some(format!("previous borrow of `vec` occurs here"))); snippet.push(span_semi, false, Some(format!("previous borrow ends here"))); @@ -1729,7 +1738,7 @@ fn foo() { let span_vec0 = cm.span_substr(&foo, file_text, "vec", 3); let span_vec1 = cm.span_substr(&foo, file_text, "vec", 8); - let mut snippet = SnippetData::new(cm, None); + let mut snippet = SnippetData::new(cm, None, FormatMode::NewErrorFormat); snippet.push(span_vec0, false, Some(format!("`vec` moved here because it \ has type `collections::vec::Vec`"))); snippet.push(span_vec1, false, Some(format!("use of moved value: `vec`"))); @@ -1766,7 +1775,7 @@ fn foo() { let cm = Rc::new(CodeMap::new()); let foo = cm.new_filemap_and_lines("foo.rs", None, file_text); - let mut snippet = SnippetData::new(cm.clone(), None); + let mut snippet = SnippetData::new(cm.clone(), None, FormatMode::NewErrorFormat); for i in 0..4 { let span_veci = cm.span_substr(&foo, file_text, "vec", i); snippet.push(span_veci, false, None); @@ -1800,7 +1809,7 @@ impl SomeTrait for () { let cm = Rc::new(CodeMap::new()); let foo = cm.new_filemap_and_lines("foo.rs", None, file_text); - let mut snippet = SnippetData::new(cm.clone(), None); + let mut snippet = SnippetData::new(cm.clone(), None, FormatMode::NewErrorFormat); let fn_span = cm.span_substr(&foo, file_text, "fn", 0); let rbrace_span = cm.span_substr(&foo, file_text, "}", 0); snippet.push(splice(fn_span, rbrace_span), false, None); @@ -1829,7 +1838,7 @@ impl SomeTrait for () { let cm = Rc::new(CodeMap::new()); let foo = cm.new_filemap_and_lines("foo.rs", None, file_text); - let mut snippet = SnippetData::new(cm.clone(), None); + let mut snippet = SnippetData::new(cm.clone(), None, FormatMode::NewErrorFormat); let fn_span = cm.span_substr(&foo, file_text, "fn foo(x: u32)", 0); let x_span = cm.span_substr(&foo, file_text, "x", 0); snippet.push(fn_span, false, Some(format!("fn_span"))); @@ -1864,7 +1873,7 @@ impl SomeTrait for () { let cm = Rc::new(CodeMap::new()); let foo = cm.new_filemap_and_lines("foo.rs", None, file_text); - let mut snippet = SnippetData::new(cm.clone(), None); + let mut snippet = SnippetData::new(cm.clone(), None, FormatMode::NewErrorFormat); let fn_span = cm.span_substr(&foo, file_text, "fn foo(x", 0); let x_span = cm.span_substr(&foo, file_text, "x: u32)", 0); snippet.push(fn_span, false, Some(format!("fn_span"))); @@ -1902,7 +1911,7 @@ impl SomeTrait for () { let cm = Rc::new(CodeMap::new()); let foo = cm.new_filemap_and_lines("foo.rs", None, file_text); - let mut snippet = SnippetData::new(cm.clone(), None); + let mut snippet = SnippetData::new(cm.clone(), None, FormatMode::NewErrorFormat); let closure_span = { let closure_start_span = cm.span_substr(&foo, file_text, "||", 0); @@ -1954,7 +1963,9 @@ fn main() { let mut rbrace_span = cm.span_substr(&foo, file_text, "}", 1); rbrace_span.lo = rbrace_span.hi; - let mut snippet = SnippetData::new(cm.clone(), Some(rbrace_span)); + let mut snippet = SnippetData::new(cm.clone(), + Some(rbrace_span), + FormatMode::NewErrorFormat); snippet.push(rbrace_span, false, None); let lines = snippet.render_lines(); let text: String = make_string(&lines); diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs index d9d4bb504a7..809f4daa361 100644 --- a/src/libsyntax/parse/lexer/mod.rs +++ b/src/libsyntax/parse/lexer/mod.rs @@ -1687,7 +1687,10 @@ mod tests { fn mk_sh(cm: Rc) -> errors::Handler { // FIXME (#22405): Replace `Box::new` with `box` here when/if possible. - let emitter = errors::emitter::EmitterWriter::new(Box::new(io::sink()), None, cm); + let emitter = errors::emitter::EmitterWriter::new(Box::new(io::sink()), + None, + cm, + errors::snippet::FormatMode::EnvironmentSelected); errors::Handler::with_emitter(true, false, Box::new(emitter)) } -- cgit 1.4.1-3-g733a5