about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPalmer Cox <p@lmercox.com>2014-02-16 01:03:07 -0500
committerPalmer Cox <p@lmercox.com>2014-03-05 00:22:19 -0500
commit258dbd09ba4aa868b373df7e82721ba0c40167ba (patch)
treecfc189d1cbe1ecb157cd60357bb473cfad3035be
parente3723dc4f1f256e5a454cafb62fd892d85767750 (diff)
Emit the uppercase variable lint for struct fields that have names with uppercase characters
-rw-r--r--src/librustc/middle/lint.rs21
-rw-r--r--src/test/compile-fail/lint-uppercase-variables.rs6
2 files changed, 26 insertions, 1 deletions
diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs
index 17a02770378..f8cf376582a 100644
--- a/src/librustc/middle/lint.rs
+++ b/src/librustc/middle/lint.rs
@@ -212,7 +212,7 @@ static lint_table: &'static [(&'static str, LintSpec)] = &[
     ("uppercase_variables",
      LintSpec {
          lint: UppercaseVariables,
-         desc: "variable names should start with a lowercase character",
+         desc: "variable and structure field names should start with a lowercase character",
          default: warn
      }),
 
@@ -1201,6 +1201,23 @@ fn check_pat_uppercase_variable(cx: &Context, p: &ast::Pat) {
     }
 }
 
+fn check_struct_uppercase_variable(cx: &Context, s: &ast::StructDef) {
+    for sf in s.fields.iter() {
+        match sf.node {
+            ast::StructField_ { kind: ast::NamedField(ident, _), .. } => {
+                let s = token::get_ident(ident);
+                if s.get().char_at(0).is_uppercase() {
+                    cx.span_lint(
+                        UppercaseVariables,
+                        sf.span,
+                        "structure field names should start with a lowercase character");
+                }
+            }
+            _ => {}
+        }
+    }
+}
+
 fn check_unnecessary_parens_core(cx: &Context, value: &ast::Expr, msg: &str) {
     match value.node {
         ast::ExprParen(_) => {
@@ -1665,6 +1682,8 @@ impl<'a> Visitor<()> for Context<'a> {
                         g: &ast::Generics,
                         id: ast::NodeId,
                         _: ()) {
+        check_struct_uppercase_variable(self, s);
+
         let old_id = self.cur_struct_def_id;
         self.cur_struct_def_id = id;
         visit::walk_struct_def(self, s, i, g, id, ());
diff --git a/src/test/compile-fail/lint-uppercase-variables.rs b/src/test/compile-fail/lint-uppercase-variables.rs
index a9e9fdbbfc9..114d5d4fdf0 100644
--- a/src/test/compile-fail/lint-uppercase-variables.rs
+++ b/src/test/compile-fail/lint-uppercase-variables.rs
@@ -13,6 +13,10 @@
 use std::io::File;
 use std::io::IoError;
 
+struct Something {
+    X: uint //~ ERROR structure field names should start with a lowercase character
+}
+
 fn test(Xx: uint) { //~ ERROR variable names should start with a lowercase character
     println!("{}", Xx);
 }
@@ -30,5 +34,7 @@ fn main() {
     }
 
     test(1);
+
+    let _ = Something { X: 0 };
 }