From 328df8ebf9dc35d48c7aa829425413af3fc3a08c Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Sun, 14 Jun 2015 18:46:32 +1000 Subject: [PATCH] diagnostics: Allow long URLs in error explanations. --- src/libsyntax/diagnostics/plugin.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/libsyntax/diagnostics/plugin.rs b/src/libsyntax/diagnostics/plugin.rs index 54b09d863a33a..2f7e4a161450a 100644 --- a/src/libsyntax/diagnostics/plugin.rs +++ b/src/libsyntax/diagnostics/plugin.rs @@ -99,6 +99,7 @@ pub fn expand_register_diagnostic<'cx>(ecx: &'cx mut ExtCtxt, } _ => unreachable!() }; + // Check that the description starts and ends with a newline and doesn't // overflow the maximum line width. description.map(|raw_msg| { @@ -109,9 +110,15 @@ pub fn expand_register_diagnostic<'cx>(ecx: &'cx mut ExtCtxt, token::get_ident(*code) )); } - if msg.lines().any(|line| line.len() > MAX_DESCRIPTION_WIDTH) { + + // URLs can be unavoidably longer than the line limit, so we allow them. + // Allowed format is: `[name]: http://rust-lang.org/` + let is_url = |l: &str| l.starts_with('[') && l.contains("]:") && l.contains("http"); + + if msg.lines().any(|line| line.len() > MAX_DESCRIPTION_WIDTH && !is_url(line)) { ecx.span_err(span, &format!( - "description for error code {} contains a line longer than {} characters", + "description for error code {} contains a line longer than {} characters.\n\ + if you're inserting a long URL use the footnote style to bypass this check.", token::get_ident(*code), MAX_DESCRIPTION_WIDTH )); }