diff options
author | Jefry Lagrange <jefry.reyes@gmail.com> | 2017-02-19 10:54:59 +0100 |
---|---|---|
committer | Jefry Lagrange <jefry.reyes@gmail.com> | 2017-02-25 15:56:06 +0100 |
commit | ebcb15d6f2120e1a6ecbe2e15249a089d806341b (patch) | |
tree | d6d3b436e1ba06c5df6b300cdeb96939fae674d1 | |
parent | 26de7c6bc48affbc2087b32649850f0733e567f0 (diff) | |
download | servo-ebcb15d6f2120e1a6ecbe2e15249a089d806341b.tar.gz servo-ebcb15d6f2120e1a6ecbe2e15249a089d806341b.zip |
Rewrite the ban-type lint in Python
Delete old rust ban lint and move tests to python tidy
Fix ban lint regex and fix test
-rw-r--r-- | components/script_plugins/ban.rs | 53 | ||||
-rw-r--r-- | components/script_plugins/lib.rs | 2 | ||||
-rw-r--r-- | python/tidy/servo_tidy/tidy.py | 6 | ||||
-rw-r--r-- | python/tidy/servo_tidy_tests/ban-domrefcell.rs (renamed from tests/compiletest/plugin/compile-fail/ban-domrefcell.rs) | 0 | ||||
-rw-r--r-- | python/tidy/servo_tidy_tests/ban.rs (renamed from tests/compiletest/plugin/compile-fail/ban.rs) | 5 | ||||
-rw-r--r-- | python/tidy/servo_tidy_tests/test_tidy.py | 8 |
6 files changed, 18 insertions, 56 deletions
diff --git a/components/script_plugins/ban.rs b/components/script_plugins/ban.rs deleted file mode 100644 index 4a4e71c08cc..00000000000 --- a/components/script_plugins/ban.rs +++ /dev/null @@ -1,53 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -use rustc::lint::{EarlyContext, LintPass, LintArray, EarlyLintPass, LintContext}; -use syntax::ast::Ty; -use utils::match_ty_unwrap; - -declare_lint!(BANNED_TYPE, Deny, - "Ban various unsafe type combinations"); - -/// Lint for banning various unsafe types -/// -/// Banned types: -/// -/// - `Cell<JSVal>` -/// - `Cell<JS<T>>` -pub struct BanPass; - -impl LintPass for BanPass { - fn get_lints(&self) -> LintArray { - lint_array!(BANNED_TYPE) - } -} - -impl EarlyLintPass for BanPass { - fn check_ty(&mut self, cx: &EarlyContext, ty: &Ty) { - if match_ty_unwrap(ty, &["std", "cell", "Cell"]) - .and_then(|t| t.get(0)) - .and_then(|t| match_ty_unwrap(&**t, &["dom", "bindings", "js", "JS"])) - .is_some() { - cx.span_lint(BANNED_TYPE, ty.span, "Banned type Cell<JS<T>> detected. Use MutJS<JS<T>> instead") - } - if match_ty_unwrap(ty, &["std", "cell", "Cell"]) - .and_then(|t| t.get(0)) - .and_then(|t| match_ty_unwrap(&**t, &["js", "jsval", "JSVal"])) - .is_some() { - cx.span_lint(BANNED_TYPE, ty.span, "Banned type Cell<JSVal> detected. Use MutJS<JSVal> instead") - } - if match_ty_unwrap(ty, &["dom", "bindings", "cell", "DOMRefCell"]) - .and_then(|t| t.get(0)) - .and_then(|t| match_ty_unwrap(&**t, &["dom", "bindings", "js", "JS"])) - .is_some() { - cx.span_lint(BANNED_TYPE, ty.span, "Banned type DOMRefCell<JS<T>> detected. Use MutJS<JS<T>> instead") - } - if match_ty_unwrap(ty, &["dom", "bindings", "cell", "DOMRefCell"]) - .and_then(|t| t.get(0)) - .and_then(|t| match_ty_unwrap(&**t, &["js", "jsapi", "Heap"])) - .is_some() { - cx.span_lint(BANNED_TYPE, ty.span, "Banned type DOMRefCell<Heap<T>> detected. Use Heap<T> directly instead") - } - } -} diff --git a/components/script_plugins/lib.rs b/components/script_plugins/lib.rs index 3b89106f064..3c0f67fa6ab 100644 --- a/components/script_plugins/lib.rs +++ b/components/script_plugins/lib.rs @@ -25,7 +25,6 @@ extern crate syntax; use rustc_plugin::Registry; use syntax::feature_gate::AttributeType::Whitelisted; -mod ban; mod unrooted_must_root; /// Utilities for writing plugins mod utils; @@ -33,7 +32,6 @@ mod utils; #[plugin_registrar] pub fn plugin_registrar(reg: &mut Registry) { reg.register_late_lint_pass(box unrooted_must_root::UnrootedPass::new()); - reg.register_early_lint_pass(box ban::BanPass); reg.register_attribute("allow_unrooted_interior".to_string(), Whitelisted); reg.register_attribute("must_root".to_string(), Whitelisted); } diff --git a/python/tidy/servo_tidy/tidy.py b/python/tidy/servo_tidy/tidy.py index ae929d45c3c..c8b398ce8ca 100644 --- a/python/tidy/servo_tidy/tidy.py +++ b/python/tidy/servo_tidy/tidy.py @@ -549,6 +549,12 @@ def check_rust(file_name, lines): (r": &Vec<", "use &[T] instead of &Vec<T>", no_filter), # No benefit over using &str (r": &String", "use &str instead of &String", no_filter), + # There should be any use of banned types: + # Cell<JSVal>, Cell<JS<T>>, DOMRefCell<JS<T>>, DOMRefCell<HEAP<T>> + (r"(\s|:)+Cell<JSVal>", "Banned type Cell<JSVal> detected. Use MutJS<JSVal> instead", no_filter), + (r"(\s|:)+Cell<JS<.+>>", "Banned type Cell<JS<T>> detected. Use MutJS<JS<T>> instead", no_filter), + (r"DOMRefCell<JS<.+>>", "Banned type DOMRefCell<JS<T>> detected. Use MutJS<JS<T>> instead", no_filter), + (r"DOMRefCell<Heap<.+>>", "Banned type DOMRefCell<Heap<T>> detected. Use MutJS<JS<T>> instead", no_filter), # No benefit to using &Root<T> (r": &Root<", "use &T instead of &Root<T>", no_filter), (r"^&&", "operators should go at the end of the first line", no_filter), diff --git a/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs b/python/tidy/servo_tidy_tests/ban-domrefcell.rs index a5953590d69..a5953590d69 100644 --- a/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs +++ b/python/tidy/servo_tidy_tests/ban-domrefcell.rs diff --git a/tests/compiletest/plugin/compile-fail/ban.rs b/python/tidy/servo_tidy_tests/ban.rs index 3979173f1fe..f828053d289 100644 --- a/tests/compiletest/plugin/compile-fail/ban.rs +++ b/python/tidy/servo_tidy_tests/ban.rs @@ -9,10 +9,13 @@ extern crate js; use js::jsval::JSVal; use std::cell::Cell; +use std::cell::UnsafeCell; struct Foo { - bar: Cell<JSVal> + bar: Cell<JSVal>, //~^ ERROR Banned type Cell<JSVal> detected. Use MutJS<JSVal> instead + foo: UnsafeCell<JSVal> + //~^ NOT AN ERROR } fn main() {} diff --git a/python/tidy/servo_tidy_tests/test_tidy.py b/python/tidy/servo_tidy_tests/test_tidy.py index 91f1c54ab55..fcc11cb673f 100644 --- a/python/tidy/servo_tidy_tests/test_tidy.py +++ b/python/tidy/servo_tidy_tests/test_tidy.py @@ -140,6 +140,14 @@ class CheckTidiness(unittest.TestCase): self.assertTrue('feature attribute is not in alphabetical order' in feature_errors.next()[2]) self.assertNoMoreErrors(feature_errors) + ban_errors = tidy.collect_errors_for_files(iterFile('ban.rs'), [], [tidy.check_rust], print_text=False) + self.assertEqual('Banned type Cell<JSVal> detected. Use MutJS<JSVal> instead', ban_errors.next()[2]) + self.assertNoMoreErrors(ban_errors) + + ban_errors = tidy.collect_errors_for_files(iterFile('ban-domrefcell.rs'), [], [tidy.check_rust], print_text=False) + self.assertEqual('Banned type DOMRefCell<JS<T>> detected. Use MutJS<JS<T>> instead', ban_errors.next()[2]) + self.assertNoMoreErrors(ban_errors) + def test_spec_link(self): tidy.SPEC_BASE_PATH = base_path errors = tidy.collect_errors_for_files(iterFile('speclink.rs'), [], [tidy.check_spec], print_text=False) |