]> git.lizzy.rs Git - rust.git/commitdiff
Fix `unsugar_range` with `..`
authormcarton <cartonmartin+git@gmail.com>
Fri, 11 Mar 2016 19:27:33 +0000 (20:27 +0100)
committermcarton <cartonmartin+git@gmail.com>
Fri, 11 Mar 2016 19:27:33 +0000 (20:27 +0100)
src/utils/mod.rs

index c626fcb8930c5684abade39faddd0c0f36c16dee..625e8da197d573b2c93a14e44ae622a32b5d6c2e 100644 (file)
@@ -681,6 +681,7 @@ pub fn camel_case_from(s: &str) -> usize {
 }
 
 /// Represents a range akin to `ast::ExprKind::Range`.
+#[derive(Debug, Copy, Clone)]
 pub struct UnsugaredRange<'a> {
     pub start: Option<&'a Expr>,
     pub end: Option<&'a Expr>,
@@ -711,24 +712,30 @@ fn get_field<'a>(name: &str, fields: &'a [Field]) -> Option<&'a Expr> {
         Some(unwrap_unstable(expr))
     }
 
-    if let ExprStruct(ref path, ref fields, None) = unwrap_unstable(&expr).node {
-        if match_path(path, &RANGE_FROM_PATH) {
-            Some(UnsugaredRange { start: get_field("start", fields), end: None, limits: RangeLimits::HalfOpen })
-        } else if match_path(path, &RANGE_FULL_PATH) {
-            Some(UnsugaredRange { start: None, end: None, limits: RangeLimits::HalfOpen })
-        } else if match_path(path, &RANGE_INCLUSIVE_NON_EMPTY_PATH) {
-            Some(UnsugaredRange { start: get_field("start", fields), end: get_field("end", fields), limits: RangeLimits::Closed })
-        } else if match_path(path, &RANGE_PATH) {
-            Some(UnsugaredRange { start: get_field("start", fields), end: get_field("end", fields), limits: RangeLimits::HalfOpen })
-        } else if match_path(path, &RANGE_TO_INCLUSIVE_PATH) {
-            Some(UnsugaredRange { start: None, end: get_field("end", fields), limits: RangeLimits::Closed })
-        } else if match_path(path, &RANGE_TO_PATH) {
-            Some(UnsugaredRange { start: None, end: get_field("end", fields), limits: RangeLimits::HalfOpen })
-        } else {
-            None
+    match unwrap_unstable(&expr).node {
+        ExprPath(None, ref path) => {
+            if match_path(path, &RANGE_FULL_PATH) {
+                Some(UnsugaredRange { start: None, end: None, limits: RangeLimits::HalfOpen })
+            } else {
+                None
+            }
         }
-    } else {
-        None
+        ExprStruct(ref path, ref fields, None) => {
+            if match_path(path, &RANGE_FROM_PATH) {
+                Some(UnsugaredRange { start: get_field("start", fields), end: None, limits: RangeLimits::HalfOpen })
+            } else if match_path(path, &RANGE_INCLUSIVE_NON_EMPTY_PATH) {
+                Some(UnsugaredRange { start: get_field("start", fields), end: get_field("end", fields), limits: RangeLimits::Closed })
+            } else if match_path(path, &RANGE_PATH) {
+                Some(UnsugaredRange { start: get_field("start", fields), end: get_field("end", fields), limits: RangeLimits::HalfOpen })
+            } else if match_path(path, &RANGE_TO_INCLUSIVE_PATH) {
+                Some(UnsugaredRange { start: None, end: get_field("end", fields), limits: RangeLimits::Closed })
+            } else if match_path(path, &RANGE_TO_PATH) {
+                Some(UnsugaredRange { start: None, end: get_field("end", fields), limits: RangeLimits::HalfOpen })
+            } else {
+                None
+            }
+        }
+        _ => None,
     }
 }