Emit the uppercase variable lint for struct fields that have names with uppercase characters

This commit is contained in:
Palmer Cox 2014-02-16 01:03:07 -05:00
parent e3723dc4f1
commit 258dbd09ba
2 changed files with 26 additions and 1 deletions

View File

@ -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, ());

View File

@ -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 };
}