about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-07-17 05:55:42 -0700
committerbors <bors@rust-lang.org>2013-07-17 05:55:42 -0700
commit93c270c63d158805a068b8e7ced660df1051c3ca (patch)
tree820855f90956153b9f03cbb6e83ef5d9775a9ed0 /src
parent9da42dce276b7e9c925c7bba40084ce4ba69597f (diff)
parent0fd4d5d7783ffa709bcf089f5167a1871ec278fa (diff)
auto merge of #7843 : alexcrichton/rust/better-lint-help, r=huonw
Closes #7818
Diffstat (limited to 'src')
-rw-r--r--src/librustc/middle/lint.rs9
-rw-r--r--src/librustc/rustc.rs25
2 files changed, 21 insertions, 13 deletions
diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs
index b679da714a1..d18fbada009 100644
--- a/src/librustc/middle/lint.rs
+++ b/src/librustc/middle/lint.rs
@@ -108,17 +108,22 @@ pub fn level_to_str(lv: level) -> &'static str {
     }
 }
 
-#[deriving(Eq)]
+#[deriving(Eq, Ord)]
 pub enum level {
     allow, warn, deny, forbid
 }
 
-struct LintSpec {
+#[deriving(Eq)]
+pub struct LintSpec {
     lint: lint,
     desc: &'static str,
     default: level
 }
 
+impl Ord for LintSpec {
+    fn lt(&self, other: &LintSpec) -> bool { self.default < other.default }
+}
+
 pub type LintDict = HashMap<&'static str, LintSpec>;
 
 enum AttributedNode<'self> {
diff --git a/src/librustc/rustc.rs b/src/librustc/rustc.rs
index 787d8d5685a..6f638959bc8 100644
--- a/src/librustc/rustc.rs
+++ b/src/librustc/rustc.rs
@@ -144,6 +144,7 @@ Additional help:
 }
 
 pub fn describe_warnings() {
+    use extra::sort::Sort;
     io::println(fmt!("
 Available lint options:
     -W <foo>           Warn about <foo>
@@ -153,8 +154,15 @@ Available lint options:
 "));
 
     let lint_dict = lint::get_lint_dict();
+    let mut lint_dict = lint_dict.consume_iter()
+                                 .transform(|(k, v)| (v, k))
+                                 .collect::<~[(lint::LintSpec, &'static str)]>();
+    lint_dict.qsort();
+
     let mut max_key = 0;
-    for lint_dict.each_key |k| { max_key = num::max(k.len(), max_key); }
+    for lint_dict.iter().advance |&(_, name)| {
+        max_key = num::max(name.len(), max_key);
+    }
     fn padded(max: uint, s: &str) -> ~str {
         str::from_bytes(vec::from_elem(max - s.len(), ' ' as u8)) + s
     }
@@ -163,17 +171,12 @@ Available lint options:
                      padded(max_key, "name"), "default", "meaning"));
     io::println(fmt!("    %s  %7.7s  %s\n",
                      padded(max_key, "----"), "-------", "-------"));
-    for lint_dict.iter().advance |(k, v)| {
-        let k = k.replace("_", "-");
+    for lint_dict.consume_iter().advance |(spec, name)| {
+        let name = name.replace("_", "-");
         io::println(fmt!("    %s  %7.7s  %s",
-                         padded(max_key, k),
-                         match v.default {
-                             lint::allow => ~"allow",
-                             lint::warn => ~"warn",
-                             lint::deny => ~"deny",
-                             lint::forbid => ~"forbid"
-                         },
-                         v.desc));
+                         padded(max_key, name),
+                         lint::level_to_str(spec.default),
+                         spec.desc));
     }
     io::println("");
 }