Skip to content

Commit

Permalink
librustc: Implement a lint mode for default methods
Browse files Browse the repository at this point in the history
  • Loading branch information
pcwalton committed Dec 15, 2012
1 parent bdb2d65 commit 53b181d
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
30 changes: 29 additions & 1 deletion src/librustc/middle/lint.rs
Expand Up @@ -65,6 +65,7 @@ enum lint {
non_camel_case_types,
structural_records,
type_limits,
default_methods,

managed_heap_memory,
owned_heap_memory,
Expand Down Expand Up @@ -200,7 +201,12 @@ fn get_lint_dict() -> lint_dict {
(~"type_limits",
@{lint: type_limits,
desc: ~"comparisons made useless by limits of the types involved",
default: warn})
default: warn}),

(~"default_methods",
@{lint: default_methods,
desc: ~"allow default methods",
default: forbid}),

/* FIXME(#3266)--make liveness warnings lintable
(~"unused_variable",
Expand Down Expand Up @@ -414,6 +420,7 @@ fn check_item(i: @ast::item, cx: ty::ctxt) {
check_item_structural_records(cx, i);
check_item_deprecated_modes(cx, i);
check_item_type_limits(cx, i);
check_item_default_methods(cx, i);
}

// Take a visitor, and modify it so that it will not proceed past subitems.
Expand Down Expand Up @@ -563,6 +570,27 @@ fn check_item_type_limits(cx: ty::ctxt, it: @ast::item) {
visit::visit_item(it, (), visit);
}

fn check_item_default_methods(cx: ty::ctxt, item: @ast::item) {
match item.node {
ast::item_trait(_, _, methods) => {
for methods.each |method| {
match *method {
ast::required(*) => {}
ast::provided(*) => {
cx.sess.span_lint(
default_methods,
item.id,
item.id,
item.span,
~"default methods are experimental");
}
}
}
}
_ => {}
}
}

fn check_item_structural_records(cx: ty::ctxt, it: @ast::item) {
let visit = item_stopping_visitor(visit::mk_simple_visitor(@{
visit_expr: fn@(e: @ast::expr) {
Expand Down
8 changes: 8 additions & 0 deletions src/test/compile-fail/lint-default-methods.rs
@@ -0,0 +1,8 @@
#[forbid(default_methods)];

trait Foo {
fn bar() { io::println("hi"); } //~ ERROR default methods are experimental
}

fn main() {}

0 comments on commit 53b181d

Please sign in to comment.