1
Fork 0

Unify non-snake-case lints and non-uppercase statics lints

This unifies the `non_snake_case_functions` and `uppercase_variables` lints
into one lint, `non_snake_case`. It also now checks for non-snake-case modules.
This also extends the non-camel-case types lint to check type parameters, and
merges the `non_uppercase_pattern_statics` lint into the
`non_uppercase_statics` lint.

Because the `uppercase_variables` lint is now part of the `non_snake_case`
lint, all non-snake-case variables that start with lowercase characters (such
as `fooBar`) will now trigger the `non_snake_case` lint.

New code should be updated to use the new `non_snake_case` lint instead of the
previous `non_snake_case_functions` and `uppercase_variables` lints. All use of
the `non_uppercase_pattern_statics` should be replaced with the
`non_uppercase_statics` lint. Any code that previously contained non-snake-case
module or variable names should be updated to use snake case names or disable
the `non_snake_case` lint. Any code with non-camel-case type parameters should
be changed to use camel case or disable the `non_camel_case_types` lint.

[breaking-change]
This commit is contained in:
P1start 2014-07-19 00:45:17 +12:00
parent bd159d3867
commit de7abd8824
51 changed files with 214 additions and 176 deletions

View file

@ -477,7 +477,7 @@ extern crate libc;
#[cfg(target_os = "win32", target_arch = "x86")] #[cfg(target_os = "win32", target_arch = "x86")]
#[link(name = "kernel32")] #[link(name = "kernel32")]
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
extern "stdcall" { extern "stdcall" {
fn SetEnvironmentVariableA(n: *const u8, v: *const u8) -> libc::c_int; fn SetEnvironmentVariableA(n: *const u8, v: *const u8) -> libc::c_int;
} }

View file

@ -34,7 +34,7 @@ preamble = '''// Copyright 2012-2014 The Rust Project Developers. See the COPYRI
// NOTE: The following code was generated by "src/etc/unicode.py", do not edit directly // NOTE: The following code was generated by "src/etc/unicode.py", do not edit directly
#![allow(missing_doc, non_uppercase_statics, non_snake_case_functions)] #![allow(missing_doc, non_uppercase_statics, non_snake_case)]
''' '''
# Mapping taken from Table 12 from: # Mapping taken from Table 12 from:

View file

@ -159,6 +159,7 @@ macro_rules! impl_hash_tuple(
impl<S: Writer, $($name: Hash<S>),*> Hash<S> for ($($name,)*) { impl<S: Writer, $($name: Hash<S>),*> Hash<S> for ($($name,)*) {
#[allow(uppercase_variables)] #[allow(uppercase_variables)]
#[inline] #[inline]
#[allow(non_snake_case)]
fn hash(&self, state: &mut S) { fn hash(&self, state: &mut S) {
match *self { match *self {
($(ref $name,)*) => { ($(ref $name,)*) => {

View file

@ -12,7 +12,7 @@
//! //!
//! For more details, see ::unicode::char (a.k.a. std::char) //! For more details, see ::unicode::char (a.k.a. std::char)
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
#![doc(primitive = "char")] #![doc(primitive = "char")]
use mem::transmute; use mem::transmute;

View file

@ -668,7 +668,7 @@ macro_rules! tuple (
() => (); () => ();
( $($name:ident,)+ ) => ( ( $($name:ident,)+ ) => (
impl<$($name:Show),*> Show for ($($name,)*) { impl<$($name:Show),*> Show for ($($name,)*) {
#[allow(uppercase_variables, dead_assignment)] #[allow(non_snake_case, dead_assignment)]
fn fmt(&self, f: &mut Formatter) -> Result { fn fmt(&self, f: &mut Formatter) -> Result {
try!(write!(f, "(")); try!(write!(f, "("));
let ($(ref $name,)*) = *self; let ($(ref $name,)*) = *self;

View file

@ -394,9 +394,9 @@ impl NaiveSearcher {
fn next(&mut self, haystack: &[u8], needle: &[u8]) -> Option<(uint, uint)> { fn next(&mut self, haystack: &[u8], needle: &[u8]) -> Option<(uint, uint)> {
while self.position + needle.len() <= haystack.len() { while self.position + needle.len() <= haystack.len() {
if haystack.slice(self.position, self.position + needle.len()) == needle { if haystack.slice(self.position, self.position + needle.len()) == needle {
let matchPos = self.position; let match_pos = self.position;
self.position += needle.len(); // add 1 for all matches self.position += needle.len(); // add 1 for all matches
return Some((matchPos, matchPos + needle.len())); return Some((match_pos, match_pos + needle.len()));
} else { } else {
self.position += 1; self.position += 1;
} }
@ -410,7 +410,7 @@ impl NaiveSearcher {
#[deriving(Clone)] #[deriving(Clone)]
struct TwoWaySearcher { struct TwoWaySearcher {
// constants // constants
critPos: uint, crit_pos: uint,
period: uint, period: uint,
byteset: u64, byteset: u64,
@ -423,32 +423,31 @@ struct TwoWaySearcher {
// Crochemore, M., Perrin, D., 1991, Two-way string-matching, Journal of the ACM 38(3):651-675. // Crochemore, M., Perrin, D., 1991, Two-way string-matching, Journal of the ACM 38(3):651-675.
impl TwoWaySearcher { impl TwoWaySearcher {
fn new(needle: &[u8]) -> TwoWaySearcher { fn new(needle: &[u8]) -> TwoWaySearcher {
let (critPos1, period1) = TwoWaySearcher::maximal_suffix(needle, false); let (crit_pos1, period1) = TwoWaySearcher::maximal_suffix(needle, false);
let (critPos2, period2) = TwoWaySearcher::maximal_suffix(needle, true); let (crit_pos2, period2) = TwoWaySearcher::maximal_suffix(needle, true);
let critPos; let crit_pos;
let period; let period;
if critPos1 > critPos2 { if crit_pos1 > crit_pos2 {
critPos = critPos1; crit_pos = crit_pos1;
period = period1; period = period1;
} else { } else {
critPos = critPos2; crit_pos = crit_pos2;
period = period2; period = period2;
} }
let byteset = needle.iter() let byteset = needle.iter()
.fold(0, |a, &b| (1 << ((b & 0x3f) as uint)) | a); .fold(0, |a, &b| (1 << ((b & 0x3f) as uint)) | a);
// The logic here (calculating crit_pos and period, the final if statement to see which
// The logic here (calculating critPos and period, the final if statement to see which
// period to use for the TwoWaySearcher) is essentially an implementation of the // period to use for the TwoWaySearcher) is essentially an implementation of the
// "small-period" function from the paper (p. 670) // "small-period" function from the paper (p. 670)
// //
// In the paper they check whether `needle.slice_to(critPos)` is a suffix of // In the paper they check whether `needle.slice_to(crit_pos)` is a suffix of
// `needle.slice(critPos, critPos + period)`, which is precisely what this does // `needle.slice(crit_pos, crit_pos + period)`, which is precisely what this does
if needle.slice_to(critPos) == needle.slice(period, period + critPos) { if needle.slice_to(crit_pos) == needle.slice(period, period + crit_pos) {
TwoWaySearcher { TwoWaySearcher {
critPos: critPos, crit_pos: crit_pos,
period: period, period: period,
byteset: byteset, byteset: byteset,
@ -457,8 +456,8 @@ impl TwoWaySearcher {
} }
} else { } else {
TwoWaySearcher { TwoWaySearcher {
critPos: critPos, crit_pos: crit_pos,
period: cmp::max(critPos, needle.len() - critPos) + 1, period: cmp::max(crit_pos, needle.len() - crit_pos) + 1,
byteset: byteset, byteset: byteset,
position: 0, position: 0,
@ -468,7 +467,7 @@ impl TwoWaySearcher {
} }
#[inline] #[inline]
fn next(&mut self, haystack: &[u8], needle: &[u8], longPeriod: bool) -> Option<(uint, uint)> { fn next(&mut self, haystack: &[u8], needle: &[u8], long_period: bool) -> Option<(uint, uint)> {
'search: loop { 'search: loop {
// Check that we have room to search in // Check that we have room to search in
if self.position + needle.len() > haystack.len() { if self.position + needle.len() > haystack.len() {
@ -484,11 +483,12 @@ impl TwoWaySearcher {
} }
// See if the right part of the needle matches // See if the right part of the needle matches
let start = if longPeriod { self.critPos } else { cmp::max(self.critPos, self.memory) }; let start = if long_period { self.crit_pos }
else { cmp::max(self.crit_pos, self.memory) };
for i in range(start, needle.len()) { for i in range(start, needle.len()) {
if needle[i] != haystack[self.position + i] { if needle[i] != haystack[self.position + i] {
self.position += i - self.critPos + 1; self.position += i - self.crit_pos + 1;
if !longPeriod { if !long_period {
self.memory = 0; self.memory = 0;
} }
continue 'search; continue 'search;
@ -496,11 +496,11 @@ impl TwoWaySearcher {
} }
// See if the left part of the needle matches // See if the left part of the needle matches
let start = if longPeriod { 0 } else { self.memory }; let start = if long_period { 0 } else { self.memory };
for i in range(start, self.critPos).rev() { for i in range(start, self.crit_pos).rev() {
if needle[i] != haystack[self.position + i] { if needle[i] != haystack[self.position + i] {
self.position += self.period; self.position += self.period;
if !longPeriod { if !long_period {
self.memory = needle.len() - self.period; self.memory = needle.len() - self.period;
} }
continue 'search; continue 'search;
@ -508,12 +508,12 @@ impl TwoWaySearcher {
} }
// We have found a match! // We have found a match!
let matchPos = self.position; let match_pos = self.position;
self.position += needle.len(); // add self.period for all matches self.position += needle.len(); // add self.period for all matches
if !longPeriod { if !long_period {
self.memory = 0; // set to needle.len() - self.period for all matches self.memory = 0; // set to needle.len() - self.period for all matches
} }
return Some((matchPos, matchPos + needle.len())); return Some((match_pos, match_pos + needle.len()));
} }
} }

View file

@ -74,10 +74,10 @@
*/ */
#![allow(non_camel_case_types)] #![allow(non_camel_case_types)]
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
#![allow(non_uppercase_statics)] #![allow(non_uppercase_statics)]
#![allow(missing_doc)] #![allow(missing_doc)]
#![allow(uppercase_variables)] #![allow(non_snake_case)]
#[cfg(test)] extern crate std; #[cfg(test)] extern crate std;
#[cfg(test)] extern crate test; #[cfg(test)] extern crate test;

View file

@ -21,7 +21,7 @@
//! play. The only dependencies of these modules are the normal system libraries //! play. The only dependencies of these modules are the normal system libraries
//! that you would find on the respective platform. //! that you would find on the respective platform.
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
use libc::c_int; use libc::c_int;
use libc; use libc;

View file

@ -838,7 +838,7 @@ fn free_handle(_handle: *mut ()) {
#[cfg(unix)] #[cfg(unix)]
fn translate_status(status: c_int) -> rtio::ProcessExit { fn translate_status(status: c_int) -> rtio::ProcessExit {
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
#[cfg(target_os = "android")] #[cfg(target_os = "android")]
mod imp { mod imp {

View file

@ -78,6 +78,7 @@ pub type DoubleBigDigit = u64;
pub static ZERO_BIG_DIGIT: BigDigit = 0; pub static ZERO_BIG_DIGIT: BigDigit = 0;
static ZERO_VEC: [BigDigit, ..1] = [ZERO_BIG_DIGIT]; static ZERO_VEC: [BigDigit, ..1] = [ZERO_BIG_DIGIT];
#[allow(non_snake_case)]
pub mod BigDigit { pub mod BigDigit {
use super::BigDigit; use super::BigDigit;
use super::DoubleBigDigit; use super::DoubleBigDigit;

View file

@ -1132,7 +1132,7 @@ mod tests {
#[cfg(test)] #[cfg(test)]
mod bench { mod bench {
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
use test::Bencher; use test::Bencher;
use super::reader; use super::reader;

View file

@ -7,7 +7,7 @@
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
use std::rand::{Rng, task_rng}; use std::rand::{Rng, task_rng};
use stdtest::Bencher; use stdtest::Bencher;

View file

@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![allow(non_snake_case)]
register_diagnostic!(E0001, r##" register_diagnostic!(E0001, r##"
This error suggests that the expression arm corresponding to the noted pattern This error suggests that the expression arm corresponding to the noted pattern
will never be reached as for all possible values of the expression being matched, will never be reached as for all possible values of the expression being matched,

View file

@ -737,19 +737,15 @@ impl LintPass for UnusedResult {
} }
declare_lint!(NON_CAMEL_CASE_TYPES, Warn, declare_lint!(NON_CAMEL_CASE_TYPES, Warn,
"types, variants and traits should have camel case names") "types, variants, traits and type parameters should have camel case names")
pub struct NonCamelCaseTypes; pub struct NonCamelCaseTypes;
impl LintPass for NonCamelCaseTypes { impl NonCamelCaseTypes {
fn get_lints(&self) -> LintArray { fn check_case(&self, cx: &Context, sort: &str, ident: ast::Ident, span: Span) {
lint_array!(NON_CAMEL_CASE_TYPES)
}
fn check_item(&mut self, cx: &Context, it: &ast::Item) {
fn is_camel_case(ident: ast::Ident) -> bool { fn is_camel_case(ident: ast::Ident) -> bool {
let ident = token::get_ident(ident); let ident = token::get_ident(ident);
assert!(!ident.get().is_empty()); if ident.get().is_empty() { return true; }
let ident = ident.get().trim_chars('_'); let ident = ident.get().trim_chars('_');
// start with a non-lowercase letter rather than non-uppercase // start with a non-lowercase letter rather than non-uppercase
@ -764,20 +760,26 @@ impl LintPass for NonCamelCaseTypes {
)).collect() )).collect()
} }
fn check_case(cx: &Context, sort: &str, ident: ast::Ident, span: Span) { let s = token::get_ident(ident);
let s = token::get_ident(ident);
if !is_camel_case(ident) { if !is_camel_case(ident) {
let c = to_camel_case(s.get()); let c = to_camel_case(s.get());
let m = if c.is_empty() { let m = if c.is_empty() {
format!("{} `{}` should have a camel case name such as `CamelCase`", sort, s) format!("{} `{}` should have a camel case name such as `CamelCase`", sort, s)
} else { } else {
format!("{} `{}` should have a camel case name such as `{}`", sort, s, c) format!("{} `{}` should have a camel case name such as `{}`", sort, s, c)
}; };
cx.span_lint(NON_CAMEL_CASE_TYPES, span, m.as_slice()); cx.span_lint(NON_CAMEL_CASE_TYPES, span, m.as_slice());
}
} }
}
}
impl LintPass for NonCamelCaseTypes {
fn get_lints(&self) -> LintArray {
lint_array!(NON_CAMEL_CASE_TYPES)
}
fn check_item(&mut self, cx: &Context, it: &ast::Item) {
let has_extern_repr = it.attrs.iter().map(|attr| { let has_extern_repr = it.attrs.iter().map(|attr| {
attr::find_repr_attrs(cx.tcx.sess.diagnostic(), attr).iter() attr::find_repr_attrs(cx.tcx.sess.diagnostic(), attr).iter()
.any(|r| r == &attr::ReprExtern) .any(|r| r == &attr::ReprExtern)
@ -786,21 +788,27 @@ impl LintPass for NonCamelCaseTypes {
match it.node { match it.node {
ast::ItemTy(..) | ast::ItemStruct(..) => { ast::ItemTy(..) | ast::ItemStruct(..) => {
check_case(cx, "type", it.ident, it.span) self.check_case(cx, "type", it.ident, it.span)
} }
ast::ItemTrait(..) => { ast::ItemTrait(..) => {
check_case(cx, "trait", it.ident, it.span) self.check_case(cx, "trait", it.ident, it.span)
} }
ast::ItemEnum(ref enum_definition, _) => { ast::ItemEnum(ref enum_definition, _) => {
if has_extern_repr { return } if has_extern_repr { return }
check_case(cx, "type", it.ident, it.span); self.check_case(cx, "type", it.ident, it.span);
for variant in enum_definition.variants.iter() { for variant in enum_definition.variants.iter() {
check_case(cx, "variant", variant.node.name, variant.span); self.check_case(cx, "variant", variant.node.name, variant.span);
} }
} }
_ => () _ => ()
} }
} }
fn check_generics(&mut self, cx: &Context, it: &ast::Generics) {
for gen in it.ty_params.iter() {
self.check_case(cx, "type parameter", gen.ident, gen.span);
}
}
} }
#[deriving(PartialEq)] #[deriving(PartialEq)]
@ -836,17 +844,18 @@ fn method_context(cx: &Context, m: &ast::Method) -> MethodContext {
} }
} }
declare_lint!(NON_SNAKE_CASE_FUNCTIONS, Warn, declare_lint!(NON_SNAKE_CASE, Warn,
"methods and functions should have snake case names") "methods, functions, lifetime parameters and modules should have snake case names")
pub struct NonSnakeCaseFunctions; pub struct NonSnakeCase;
impl NonSnakeCaseFunctions { impl NonSnakeCase {
fn check_snake_case(&self, cx: &Context, sort: &str, ident: ast::Ident, span: Span) { fn check_snake_case(&self, cx: &Context, sort: &str, ident: ast::Ident, span: Span) {
fn is_snake_case(ident: ast::Ident) -> bool { fn is_snake_case(ident: ast::Ident) -> bool {
let ident = token::get_ident(ident); let ident = token::get_ident(ident);
assert!(!ident.get().is_empty()); if ident.get().is_empty() { return true; }
let ident = ident.get().trim_chars('_'); let ident = ident.get().trim_left_chars('\'');
let ident = ident.trim_chars('_');
let mut allow_underscore = true; let mut allow_underscore = true;
ident.chars().all(|c| { ident.chars().all(|c| {
@ -865,7 +874,7 @@ impl NonSnakeCaseFunctions {
let mut buf = String::new(); let mut buf = String::new();
if s.is_empty() { continue; } if s.is_empty() { continue; }
for ch in s.chars() { for ch in s.chars() {
if !buf.is_empty() && ch.is_uppercase() { if !buf.is_empty() && buf.as_slice() != "'" && ch.is_uppercase() {
words.push(buf); words.push(buf);
buf = String::new(); buf = String::new();
} }
@ -879,16 +888,16 @@ impl NonSnakeCaseFunctions {
let s = token::get_ident(ident); let s = token::get_ident(ident);
if !is_snake_case(ident) { if !is_snake_case(ident) {
cx.span_lint(NON_SNAKE_CASE_FUNCTIONS, span, cx.span_lint(NON_SNAKE_CASE, span,
format!("{} `{}` should have a snake case name such as `{}`", format!("{} `{}` should have a snake case name such as `{}`",
sort, s, to_snake_case(s.get())).as_slice()); sort, s, to_snake_case(s.get())).as_slice());
} }
} }
} }
impl LintPass for NonSnakeCaseFunctions { impl LintPass for NonSnakeCase {
fn get_lints(&self) -> LintArray { fn get_lints(&self) -> LintArray {
lint_array!(NON_SNAKE_CASE_FUNCTIONS) lint_array!(NON_SNAKE_CASE)
} }
fn check_fn(&mut self, cx: &Context, fn check_fn(&mut self, cx: &Context,
@ -908,9 +917,49 @@ impl LintPass for NonSnakeCaseFunctions {
} }
} }
fn check_item(&mut self, cx: &Context, it: &ast::Item) {
match it.node {
ast::ItemMod(_) => {
self.check_snake_case(cx, "module", it.ident, it.span);
}
_ => {}
}
}
fn check_ty_method(&mut self, cx: &Context, t: &ast::TypeMethod) { fn check_ty_method(&mut self, cx: &Context, t: &ast::TypeMethod) {
self.check_snake_case(cx, "trait method", t.ident, t.span); self.check_snake_case(cx, "trait method", t.ident, t.span);
} }
fn check_lifetime_decl(&mut self, cx: &Context, t: &ast::Lifetime) {
self.check_snake_case(cx, "lifetime", t.name.ident(), t.span);
}
fn check_pat(&mut self, cx: &Context, p: &ast::Pat) {
match &p.node {
&ast::PatIdent(_, ref path1, _) => {
match cx.tcx.def_map.borrow().find(&p.id) {
Some(&def::DefLocal(_, _)) | Some(&def::DefBinding(_, _)) |
Some(&def::DefArg(_, _)) => {
self.check_snake_case(cx, "variable", path1.node, p.span);
}
_ => {}
}
}
_ => {}
}
}
fn check_struct_def(&mut self, cx: &Context, s: &ast::StructDef,
_: ast::Ident, _: &ast::Generics, _: ast::NodeId) {
for sf in s.fields.iter() {
match sf.node {
ast::StructField_ { kind: ast::NamedField(ident, _), .. } => {
self.check_snake_case(cx, "structure field", ident, sf.span);
}
_ => {}
}
}
}
} }
declare_lint!(NON_UPPERCASE_STATICS, Allow, declare_lint!(NON_UPPERCASE_STATICS, Allow,
@ -942,17 +991,6 @@ impl LintPass for NonUppercaseStatics {
_ => {} _ => {}
} }
} }
}
declare_lint!(NON_UPPERCASE_PATTERN_STATICS, Warn,
"static constants in match patterns should be all caps")
pub struct NonUppercasePatternStatics;
impl LintPass for NonUppercasePatternStatics {
fn get_lints(&self) -> LintArray {
lint_array!(NON_UPPERCASE_PATTERN_STATICS)
}
fn check_pat(&mut self, cx: &Context, p: &ast::Pat) { fn check_pat(&mut self, cx: &Context, p: &ast::Pat) {
// Lint for constants that look like binding identifiers (#7526) // Lint for constants that look like binding identifiers (#7526)
@ -960,7 +998,7 @@ impl LintPass for NonUppercasePatternStatics {
(&ast::PatIdent(_, ref path1, _), Some(&def::DefStatic(_, false))) => { (&ast::PatIdent(_, ref path1, _), Some(&def::DefStatic(_, false))) => {
let s = token::get_ident(path1.node); let s = token::get_ident(path1.node);
if s.get().chars().any(|c| c.is_lowercase()) { if s.get().chars().any(|c| c.is_lowercase()) {
cx.span_lint(NON_UPPERCASE_PATTERN_STATICS, path1.span, cx.span_lint(NON_UPPERCASE_STATICS, path1.span,
format!("static constant in pattern `{}` should have an uppercase \ format!("static constant in pattern `{}` should have an uppercase \
name such as `{}`", name such as `{}`",
s.get(), s.get().chars().map(|c| c.to_uppercase()) s.get(), s.get().chars().map(|c| c.to_uppercase())
@ -972,54 +1010,6 @@ impl LintPass for NonUppercasePatternStatics {
} }
} }
declare_lint!(UPPERCASE_VARIABLES, Warn,
"variable and structure field names should start with a lowercase character")
pub struct UppercaseVariables;
impl LintPass for UppercaseVariables {
fn get_lints(&self) -> LintArray {
lint_array!(UPPERCASE_VARIABLES)
}
fn check_pat(&mut self, cx: &Context, p: &ast::Pat) {
match &p.node {
&ast::PatIdent(_, ref path1, _) => {
match cx.tcx.def_map.borrow().find(&p.id) {
Some(&def::DefLocal(_, _)) | Some(&def::DefBinding(_, _)) |
Some(&def::DefArg(_, _)) => {
let s = token::get_ident(path1.node);
if s.get().len() > 0 && s.get().char_at(0).is_uppercase() {
cx.span_lint(UPPERCASE_VARIABLES, path1.span,
"variable names should start with \
a lowercase character");
}
}
_ => {}
}
}
_ => {}
}
}
fn check_struct_def(&mut self, cx: &Context, s: &ast::StructDef,
_: ast::Ident, _: &ast::Generics, _: ast::NodeId) {
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(UPPERCASE_VARIABLES, sf.span,
"structure field names should start with \
a lowercase character");
}
}
_ => {}
}
}
}
}
declare_lint!(UNNECESSARY_PARENS, Warn, declare_lint!(UNNECESSARY_PARENS, Warn,
"`if`, `match`, `while` and `return` do not need parentheses") "`if`, `match`, `while` and `return` do not need parentheses")

View file

@ -146,10 +146,8 @@ impl LintStore {
PathStatement, PathStatement,
UnusedResult, UnusedResult,
NonCamelCaseTypes, NonCamelCaseTypes,
NonSnakeCaseFunctions, NonSnakeCase,
NonUppercaseStatics, NonUppercaseStatics,
NonUppercasePatternStatics,
UppercaseVariables,
UnnecessaryParens, UnnecessaryParens,
UnusedUnsafe, UnusedUnsafe,
UnsafeBlock, UnsafeBlock,

View file

@ -9,7 +9,7 @@
// except according to those terms. // except according to those terms.
#![allow(dead_code)] // FFI wrappers #![allow(dead_code)] // FFI wrappers
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
use llvm; use llvm;
use llvm::{CallConv, AtomicBinOp, AtomicOrdering, AsmDialect, AttrBuilder}; use llvm::{CallConv, AtomicBinOp, AtomicOrdering, AsmDialect, AttrBuilder};

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![allow(non_uppercase_pattern_statics)] #![allow(non_uppercase_statics)]
use llvm; use llvm;
use llvm::{Integer, Pointer, Float, Double, Struct, Array}; use llvm::{Integer, Pointer, Float, Double, Struct, Array};

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![allow(non_uppercase_pattern_statics)] #![allow(non_uppercase_statics)]
use libc::c_uint; use libc::c_uint;
use std::cmp; use std::cmp;

View file

@ -11,7 +11,7 @@
// The classification code for the x86_64 ABI is taken from the clay language // The classification code for the x86_64 ABI is taken from the clay language
// https://github.com/jckarter/clay/blob/master/compiler/src/externals.cpp // https://github.com/jckarter/clay/blob/master/compiler/src/externals.cpp
#![allow(non_uppercase_pattern_statics)] #![allow(non_uppercase_statics)]
use llvm; use llvm;
use llvm::{Integer, Pointer, Float, Double}; use llvm::{Integer, Pointer, Float, Double};

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![allow(non_camel_case_types, non_snake_case_functions)] #![allow(non_camel_case_types, non_snake_case)]
//! Code that is useful in various trans modules. //! Code that is useful in various trans modules.

View file

@ -1447,7 +1447,7 @@ fn is_node_local_to_unit(cx: &CrateContext, node_id: ast::NodeId) -> bool
!cx.reachable.contains(&node_id) !cx.reachable.contains(&node_id)
} }
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
fn create_DIArray(builder: DIBuilderRef, arr: &[DIDescriptor]) -> DIArray { fn create_DIArray(builder: DIBuilderRef, arr: &[DIDescriptor]) -> DIArray {
return unsafe { return unsafe {
llvm::LLVMDIBuilderGetOrCreateArray(builder, arr.as_ptr(), arr.len() as u32) llvm::LLVMDIBuilderGetOrCreateArray(builder, arr.as_ptr(), arr.len() as u32)
@ -3107,7 +3107,7 @@ fn debug_context<'a>(cx: &'a CrateContext) -> &'a CrateDebugContext {
} }
#[inline] #[inline]
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
fn DIB(cx: &CrateContext) -> DIBuilderRef { fn DIB(cx: &CrateContext) -> DIBuilderRef {
cx.dbg_cx.get_ref().builder cx.dbg_cx.get_ref().builder
} }

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![allow(non_uppercase_pattern_statics)] #![allow(non_uppercase_statics)]
use llvm; use llvm;
use llvm::{SequentiallyConsistent, Acquire, Release, Xchg, ValueRef}; use llvm::{SequentiallyConsistent, Acquire, Release, Xchg, ValueRef};

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![allow(non_uppercase_pattern_statics)] #![allow(non_uppercase_statics)]
use llvm; use llvm;
use llvm::{TypeRef, Bool, False, True, TypeKind, ValueRef}; use llvm::{TypeRef, Bool, False, True, TypeKind, ValueRef};

View file

@ -2118,6 +2118,7 @@ pub struct TypeContents {
macro_rules! def_type_content_sets( macro_rules! def_type_content_sets(
(mod $mname:ident { $($name:ident = $bits:expr),+ }) => { (mod $mname:ident { $($name:ident = $bits:expr),+ }) => {
#[allow(non_snake_case)]
mod $mname { mod $mname {
use middle::ty::TypeContents; use middle::ty::TypeContents;
$(pub static $name: TypeContents = TypeContents { bits: $bits };)+ $(pub static $name: TypeContents = TypeContents { bits: $bits };)+

View file

@ -10,6 +10,8 @@
//! An efficient hash map for node IDs //! An efficient hash map for node IDs
#![allow(non_snake_case)]
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
use std::hash::{Hasher, Hash, Writer}; use std::hash::{Hasher, Hash, Writer};
use syntax::ast; use syntax::ast;

View file

@ -8,9 +8,9 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![allow(non_uppercase_pattern_statics)] #![allow(non_uppercase_statics)]
#![allow(non_camel_case_types)] #![allow(non_camel_case_types)]
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
#![allow(dead_code)] #![allow(dead_code)]
#![crate_name = "rustc_llvm"] #![crate_name = "rustc_llvm"]

View file

@ -162,7 +162,7 @@ mod imp {
static LOCKFILE_EXCLUSIVE_LOCK: libc::DWORD = 0x00000002; static LOCKFILE_EXCLUSIVE_LOCK: libc::DWORD = 0x00000002;
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
extern "system" { extern "system" {
fn LockFileEx(hFile: libc::HANDLE, fn LockFileEx(hFile: libc::HANDLE,
dwFlags: libc::DWORD, dwFlags: libc::DWORD,

View file

@ -11,7 +11,7 @@
//! Unwind library interface //! Unwind library interface
#![allow(non_camel_case_types)] #![allow(non_camel_case_types)]
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
#![allow(dead_code)] // these are just bindings #![allow(dead_code)] // these are just bindings
use libc; use libc;

View file

@ -629,7 +629,7 @@ mod imp {
libc::CloseHandle(block); libc::CloseHandle(block);
} }
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
extern "system" { extern "system" {
fn CreateEventA(lpSecurityAttributes: LPSECURITY_ATTRIBUTES, fn CreateEventA(lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
bManualReset: BOOL, bManualReset: BOOL,

View file

@ -198,7 +198,7 @@ mod imp {
SwitchToThread(); SwitchToThread();
} }
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
extern "system" { extern "system" {
fn CreateThread(lpThreadAttributes: LPSECURITY_ATTRIBUTES, fn CreateThread(lpThreadAttributes: LPSECURITY_ATTRIBUTES,
dwStackSize: SIZE_T, dwStackSize: SIZE_T,

View file

@ -83,7 +83,7 @@ pub unsafe fn destroy(key: Key) {
} }
#[cfg(windows)] #[cfg(windows)]
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
extern "system" { extern "system" {
fn TlsAlloc() -> DWORD; fn TlsAlloc() -> DWORD;
fn TlsFree(dwTlsIndex: DWORD) -> BOOL; fn TlsFree(dwTlsIndex: DWORD) -> BOOL;

View file

@ -2282,7 +2282,7 @@ macro_rules! tuple_impl {
> ToJson for ( $( $tyvar ),* , ) { > ToJson for ( $( $tyvar ),* , ) {
#[inline] #[inline]
#[allow(uppercase_variables)] #[allow(non_snake_case)]
fn to_json(&self) -> Json { fn to_json(&self) -> Json {
match *self { match *self {
($(ref $tyvar),*,) => List(vec![$($tyvar.to_json()),*]) ($(ref $tyvar),*,) => List(vec![$($tyvar.to_json()),*])

View file

@ -481,7 +481,7 @@ macro_rules! tuple (
() => (); () => ();
( $($name:ident,)+ ) => ( ( $($name:ident,)+ ) => (
impl<E, D:Decoder<E>,$($name:Decodable<D, E>),*> Decodable<D,E> for ($($name,)*) { impl<E, D:Decoder<E>,$($name:Decodable<D, E>),*> Decodable<D,E> for ($($name,)*) {
#[allow(uppercase_variables)] #[allow(non_snake_case)]
fn decode(d: &mut D) -> Result<($($name,)*), E> { fn decode(d: &mut D) -> Result<($($name,)*), E> {
d.read_tuple(|d, amt| { d.read_tuple(|d, amt| {
let mut i = 0; let mut i = 0;
@ -496,7 +496,7 @@ macro_rules! tuple (
} }
} }
impl<E, S:Encoder<E>,$($name:Encodable<S, E>),*> Encodable<S, E> for ($($name,)*) { impl<E, S:Encoder<E>,$($name:Encodable<S, E>),*> Encodable<S, E> for ($($name,)*) {
#[allow(uppercase_variables)] #[allow(non_snake_case)]
fn encode(&self, s: &mut S) -> Result<(), E> { fn encode(&self, s: &mut S) -> Result<(), E> {
let ($(ref $name,)*) = *self; let ($(ref $name,)*) = *self;
let mut n = 0; let mut n = 0;

View file

@ -328,7 +328,7 @@ pub mod dl {
FreeLibrary(handle as *mut libc::c_void); () FreeLibrary(handle as *mut libc::c_void); ()
} }
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
extern "system" { extern "system" {
fn SetLastError(error: libc::size_t); fn SetLastError(error: libc::size_t);
fn LoadLibraryW(name: *const libc::c_void) -> *mut libc::c_void; fn LoadLibraryW(name: *const libc::c_void) -> *mut libc::c_void;

View file

@ -29,7 +29,7 @@
#![experimental] #![experimental]
#![allow(missing_doc)] #![allow(missing_doc)]
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
use clone::Clone; use clone::Clone;
use collections::{Collection, MutableSeq}; use collections::{Collection, MutableSeq};

View file

@ -161,7 +161,7 @@ mod imp {
static CRYPT_VERIFYCONTEXT: DWORD = 0xF0000000; static CRYPT_VERIFYCONTEXT: DWORD = 0xF0000000;
static NTE_BAD_SIGNATURE: DWORD = 0x80090006; static NTE_BAD_SIGNATURE: DWORD = 0x80090006;
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
extern "system" { extern "system" {
fn CryptAcquireContextA(phProv: *mut HCRYPTPROV, fn CryptAcquireContextA(phProv: *mut HCRYPTPROV,
pszContainer: LPCSTR, pszContainer: LPCSTR,

View file

@ -543,7 +543,7 @@ mod imp {
/// iOS doesn't use all of them it but adding more /// iOS doesn't use all of them it but adding more
/// platform-specific configs pollutes the code too much /// platform-specific configs pollutes the code too much
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
#[allow(dead_code)] #[allow(dead_code)]
mod uw { mod uw {
use libc; use libc;
@ -657,7 +657,7 @@ mod imp {
/// copy of that function in my mingw install (maybe it was broken?). Instead, /// copy of that function in my mingw install (maybe it was broken?). Instead,
/// this takes the route of using StackWalk64 in order to walk the stack. /// this takes the route of using StackWalk64 in order to walk the stack.
#[cfg(windows)] #[cfg(windows)]
#[allow(dead_code, uppercase_variables)] #[allow(dead_code, non_snake_case)]
mod imp { mod imp {
use c_str::CString; use c_str::CString;
use core_collections::Collection; use core_collections::Collection;
@ -674,7 +674,7 @@ mod imp {
use str::StrSlice; use str::StrSlice;
use dynamic_lib::DynamicLibrary; use dynamic_lib::DynamicLibrary;
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
extern "system" { extern "system" {
fn GetCurrentProcess() -> libc::HANDLE; fn GetCurrentProcess() -> libc::HANDLE;
fn GetCurrentThread() -> libc::HANDLE; fn GetCurrentThread() -> libc::HANDLE;

View file

@ -157,7 +157,7 @@ impl fmt::Show for Os {
} }
} }
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
#[test] #[test]
fn lookup_Rust() { fn lookup_Rust() {
let abi = lookup("Rust"); let abi = lookup("Rust");

View file

@ -29,7 +29,7 @@ use serialize::{Encodable, Decodable, Encoder, Decoder};
// FIXME(eddyb) #10676 use Rc<T> in the future. // FIXME(eddyb) #10676 use Rc<T> in the future.
pub type P<T> = Gc<T>; pub type P<T> = Gc<T>;
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
/// Construct a P<T> from a T value. /// Construct a P<T> from a T value.
pub fn P<T: 'static>(value: T) -> P<T> { pub fn P<T: 'static>(value: T) -> P<T> {
box(GC) value box(GC) value

View file

@ -27,7 +27,7 @@ pub struct WinConsole<T> {
background: color::Color, background: color::Color,
} }
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
#[link(name = "kernel32")] #[link(name = "kernel32")]
extern "system" { extern "system" {
fn SetConsoleTextAttribute(handle: libc::HANDLE, attr: libc::WORD) -> libc::BOOL; fn SetConsoleTextAttribute(handle: libc::HANDLE, attr: libc::WORD) -> libc::BOOL;

View file

@ -10,7 +10,7 @@
// NOTE: The following code was generated by "src/etc/unicode.py", do not edit directly // NOTE: The following code was generated by "src/etc/unicode.py", do not edit directly
#![allow(missing_doc, non_uppercase_statics, non_snake_case_functions)] #![allow(missing_doc, non_uppercase_statics, non_snake_case)]
fn bsearch_range_table(c: char, r: &'static [(char,char)]) -> bool { fn bsearch_range_table(c: char, r: &'static [(char,char)]) -> bool {
use core::cmp::{Equal, Less, Greater}; use core::cmp::{Equal, Less, Greater};

View file

@ -33,7 +33,7 @@ pub fn is_alphabetic(c: char) -> bool {
/// 'XID_Start' is a Unicode Derived Property specified in /// 'XID_Start' is a Unicode Derived Property specified in
/// [UAX #31](http://unicode.org/reports/tr31/#NFKC_Modifications), /// [UAX #31](http://unicode.org/reports/tr31/#NFKC_Modifications),
/// mostly similar to ID_Start but modified for closure under NFKx. /// mostly similar to ID_Start but modified for closure under NFKx.
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
pub fn is_XID_start(c: char) -> bool { derived_property::XID_Start(c) } pub fn is_XID_start(c: char) -> bool { derived_property::XID_Start(c) }
/// Returns whether the specified `char` satisfies the 'XID_Continue' Unicode property /// Returns whether the specified `char` satisfies the 'XID_Continue' Unicode property
@ -41,7 +41,7 @@ pub fn is_XID_start(c: char) -> bool { derived_property::XID_Start(c) }
/// 'XID_Continue' is a Unicode Derived Property specified in /// 'XID_Continue' is a Unicode Derived Property specified in
/// [UAX #31](http://unicode.org/reports/tr31/#NFKC_Modifications), /// [UAX #31](http://unicode.org/reports/tr31/#NFKC_Modifications),
/// mostly similar to 'ID_Continue' but modified for closure under NFKx. /// mostly similar to 'ID_Continue' but modified for closure under NFKx.
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
pub fn is_XID_continue(c: char) -> bool { derived_property::XID_Continue(c) } pub fn is_XID_continue(c: char) -> bool { derived_property::XID_Continue(c) }
/// ///
@ -174,7 +174,7 @@ pub trait UnicodeChar {
/// 'XID_Start' is a Unicode Derived Property specified in /// 'XID_Start' is a Unicode Derived Property specified in
/// [UAX #31](http://unicode.org/reports/tr31/#NFKC_Modifications), /// [UAX #31](http://unicode.org/reports/tr31/#NFKC_Modifications),
/// mostly similar to ID_Start but modified for closure under NFKx. /// mostly similar to ID_Start but modified for closure under NFKx.
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
fn is_XID_start(&self) -> bool; fn is_XID_start(&self) -> bool;
/// Returns whether the specified `char` satisfies the 'XID_Continue' /// Returns whether the specified `char` satisfies the 'XID_Continue'
@ -183,7 +183,7 @@ pub trait UnicodeChar {
/// 'XID_Continue' is a Unicode Derived Property specified in /// 'XID_Continue' is a Unicode Derived Property specified in
/// [UAX #31](http://unicode.org/reports/tr31/#NFKC_Modifications), /// [UAX #31](http://unicode.org/reports/tr31/#NFKC_Modifications),
/// mostly similar to 'ID_Continue' but modified for closure under NFKx. /// mostly similar to 'ID_Continue' but modified for closure under NFKx.
#[allow(non_snake_case_functions)] #[allow(non_snake_case)]
fn is_XID_continue(&self) -> bool; fn is_XID_continue(&self) -> bool;

View file

@ -11,7 +11,7 @@
// no-pretty-expanded FIXME #15189 // no-pretty-expanded FIXME #15189
#![feature(phase)] #![feature(phase)]
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
#[phase(plugin)] extern crate green; #[phase(plugin)] extern crate green;
use std::from_str::FromStr; use std::from_str::FromStr;

View file

@ -10,7 +10,7 @@
// ignore-pretty very bad with line comments // ignore-pretty very bad with line comments
#![allow(non_snake_case_functions)] #![allow(non_snake_case)]
use std::io; use std::io;
use std::io::stdio::StdReader; use std::io::stdio::StdReader;

View file

@ -32,6 +32,8 @@ enum Foo5 {
trait foo6 { //~ ERROR trait `foo6` should have a camel case name such as `Foo6` trait foo6 { //~ ERROR trait `foo6` should have a camel case name such as `Foo6`
} }
fn f<ty>(_: ty) {} //~ ERROR type parameter `ty` should have a camel case name such as `Ty`
#[repr(C)] #[repr(C)]
struct foo7 { struct foo7 {
bar: int, bar: int,

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#![deny(non_snake_case_functions)] #![deny(non_snake_case)]
#![allow(dead_code)] #![allow(dead_code)]
struct Foo; struct Foo;

View file

@ -0,0 +1,18 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![deny(non_snake_case)]
#![allow(dead_code)]
fn f<'FooBar>( //~ ERROR lifetime `'FooBar` should have a snake case name such as `'foo_bar`
_: &'FooBar ()
) {}
fn main() { }

View file

@ -0,0 +1,20 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![deny(non_snake_case)]
#![allow(dead_code)]
mod FooBar { //~ ERROR module `FooBar` should have a snake case name such as `foo_bar`
pub struct S;
}
fn f(_: FooBar::S) { }
fn main() { }

View file

@ -11,21 +11,21 @@
// ignore-tidy-linelength // ignore-tidy-linelength
#![allow(dead_code)] #![allow(dead_code)]
#![deny(uppercase_variables)] #![deny(non_snake_case)]
use std::io::File; use std::io::File;
use std::io::IoError; use std::io::IoError;
struct Something { struct Something {
X: uint //~ ERROR structure field names should start with a lowercase character X: uint //~ ERROR structure field `X` should have a snake case name such as `x`
} }
fn test(Xx: uint) { //~ ERROR variable names should start with a lowercase character fn test(Xx: uint) { //~ ERROR variable `Xx` should have a snake case name such as `xx`
println!("{}", Xx); println!("{}", Xx);
} }
fn main() { fn main() {
let Test: uint = 0; //~ ERROR variable names should start with a lowercase character let Test: uint = 0; //~ ERROR variable `Test` should have a snake case name such as `test`
println!("{}", Test); println!("{}", Test);
let mut f = File::open(&Path::new("something.txt")); let mut f = File::open(&Path::new("something.txt"));
@ -33,7 +33,7 @@ fn main() {
match f.read(buff) { match f.read(buff) {
Ok(cnt) => println!("read this many bytes: {}", cnt), Ok(cnt) => println!("read this many bytes: {}", cnt),
Err(IoError{ kind: EndOfFile, .. }) => println!("Got end of file: {}", EndOfFile.to_string()), Err(IoError{ kind: EndOfFile, .. }) => println!("Got end of file: {}", EndOfFile.to_string()),
//~^ ERROR variable names should start with a lowercase character //~^ ERROR variable `EndOfFile` should have a snake case name such as `end_of_file`
} }
test(1); test(1);

View file

@ -11,8 +11,9 @@
// Issue #7526: lowercase static constants in patterns look like bindings // Issue #7526: lowercase static constants in patterns look like bindings
#![allow(dead_code)] #![allow(dead_code)]
#![deny(non_uppercase_pattern_statics)] #![deny(non_uppercase_statics)]
#[allow(non_uppercase_statics)]
pub static a : int = 97; pub static a : int = 97;
fn f() { fn f() {
@ -25,6 +26,7 @@ fn f() {
} }
mod m { mod m {
#[allow(non_uppercase_statics)]
pub static aha : int = 7; pub static aha : int = 7;
} }

View file

@ -16,7 +16,7 @@
// around this problem locally by renaming the constant in the `use` // around this problem locally by renaming the constant in the `use`
// form to an uppercase identifier that placates the lint. // form to an uppercase identifier that placates the lint.
#![deny(non_uppercase_pattern_statics)] #![deny(non_uppercase_statics)]
pub static A : int = 97; pub static A : int = 97;
@ -34,6 +34,7 @@ fn f() {
} }
mod m { mod m {
#[allow(non_uppercase_statics)]
pub static aha : int = 7; pub static aha : int = 7;
} }