]> git.lizzy.rs Git - rust.git/commitdiff
resolved #324: remove unnecessary braces in use statement.
authorgfreezy <gfreezy@gmail.com>
Sun, 23 Dec 2018 15:50:11 +0000 (23:50 +0800)
committergfreezy <gfreezy@gmail.com>
Sun, 23 Dec 2018 15:50:11 +0000 (23:50 +0800)
crates/ra_editor/src/lib.rs

index 36cabed25906df1cd45d95963e80fb0309153374..48676f2e8b015149c7f3eb0f2cf6b3e461f6ff84 100644 (file)
@@ -31,10 +31,17 @@ pub struct HighlightedRange {
     pub tag: &'static str,
 }
 
+#[derive(Debug, Copy, Clone)]
+pub enum Severity {
+    Error,
+    Warning
+}
+
 #[derive(Debug)]
 pub struct Diagnostic {
     pub range: TextRange,
     pub msg: String,
+    pub severity: Severity,
 }
 
 #[derive(Debug)]
@@ -97,13 +104,36 @@ fn location_to_range(location: Location) -> TextRange {
         }
     }
 
-    file.errors()
+    let mut errors: Vec<Diagnostic> = file.errors()
         .into_iter()
         .map(|err| Diagnostic {
             range: location_to_range(err.location()),
             msg: format!("Syntax Error: {}", err),
+            severity: Severity::Error,
         })
-        .collect()
+        .collect();
+
+    let warnings = check_unnecessary_braces_in_use_statement(file);
+
+    errors.extend(warnings);
+    errors
+}
+
+fn check_unnecessary_braces_in_use_statement(file: &SourceFileNode) -> Vec<Diagnostic> {
+    let mut diagnostics = Vec::new();
+    for node in file.syntax().descendants() {
+        if let Some(use_tree_list) = ast::UseTreeList::cast(node) {
+            if use_tree_list.use_trees().count() <= 1 {
+                diagnostics.push(Diagnostic {
+                    range: use_tree_list.syntax().range(),
+                    msg: format!("Unnecessary braces in use statement"),
+                    severity: Severity::Warning,
+                })
+            }
+        }
+    }
+
+    diagnostics
 }
 
 pub fn syntax_tree(file: &SourceFileNode) -> String {
@@ -204,4 +234,25 @@ fn do_check(before: &str, after: &str) {
 
         do_check("struct Foo { a: i32, }<|>", "struct Foo <|>{ a: i32, }");
     }
+
+    #[test]
+    fn test_check_unnecessary_braces_in_use_statement() {
+        let file = SourceFileNode::parse(
+            r#"
+use a;
+use {b};
+use a::{c};
+use a::{c, d::e};
+use a::{c, d::{e}};
+fn main() {}
+"#,
+        );
+        let diagnostics = check_unnecessary_braces_in_use_statement(&file);
+        assert_eq_dbg(
+            r#"[Diagnostic { range: [12; 15), msg: "Unnecessary braces in use statement", severity: Warning },
+                Diagnostic { range: [24; 27), msg: "Unnecessary braces in use statement", severity: Warning },
+                Diagnostic { range: [61; 64), msg: "Unnecessary braces in use statement", severity: Warning }]"#,
+            &diagnostics,
+        )
+    }
 }