aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYoav Alon <yoava333@gmail.com>2016-03-09 23:48:32 +0200
committerYoav Alon <yoava333@gmail.com>2016-03-09 23:48:32 +0200
commit444eddb4a14bca067ba1f61f6a098aa38f099f67 (patch)
treef1a58d0766036ba3f1e766ed5f6de296b6015b92
parent25c6c29a27d2a176a967ee49d97a29ad1d3a140e (diff)
downloadservo-444eddb4a14bca067ba1f61f6a098aa38f099f67.tar.gz
servo-444eddb4a14bca067ba1f61f6a098aa38f099f67.zip
Added compiler lint ban on DOMRefCell
-rw-r--r--components/plugins/lints/ban.rs6
-rw-r--r--components/servo/Cargo.lock1
-rw-r--r--tests/compiletest/plugin/Cargo.toml3
-rw-r--r--tests/compiletest/plugin/compile-fail/ban-domrefcell.rs19
4 files changed, 29 insertions, 0 deletions
diff --git a/components/plugins/lints/ban.rs b/components/plugins/lints/ban.rs
index 02037a5d76a..0e1ebc94721 100644
--- a/components/plugins/lints/ban.rs
+++ b/components/plugins/lints/ban.rs
@@ -37,5 +37,11 @@ impl EarlyLintPass for BanPass {
.is_some() {
cx.span_lint(BANNED_TYPE, ty.span, "Banned type Cell<JSVal> detected. Use MutHeap<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 MutHeap<JS<T>> instead")
+ }
}
}
diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock
index e620303eb64..c7c11583a17 100644
--- a/components/servo/Cargo.lock
+++ b/components/servo/Cargo.lock
@@ -1472,6 +1472,7 @@ version = "0.0.1"
dependencies = [
"compiletest_helper 0.0.1",
"plugins 0.0.1",
+ "script 0.0.1",
]
[[package]]
diff --git a/tests/compiletest/plugin/Cargo.toml b/tests/compiletest/plugin/Cargo.toml
index 6ba2a22f198..363882b5429 100644
--- a/tests/compiletest/plugin/Cargo.toml
+++ b/tests/compiletest/plugin/Cargo.toml
@@ -13,3 +13,6 @@ path = "../helper"
[dependencies.plugins]
path = "../../../components/plugins"
+
+[dependencies.script]
+path = "../../../components/script"
diff --git a/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs b/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs
new file mode 100644
index 00000000000..4e65ad410a6
--- /dev/null
+++ b/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs
@@ -0,0 +1,19 @@
+/* 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/. */
+
+#![feature(plugin)]
+#![plugin(plugins)]
+
+extern crate script;
+
+use script::dom::bindings::cell::DOMRefCell;
+use script::dom::bindings::js::JS;
+use script::dom::node::Node;
+
+struct Foo {
+ bar: DOMRefCell<JS<Node>>
+ //~^ ERROR Banned type DOMRefCell<JS<T>> detected. Use MutHeap<JS<T>> instead,
+}
+
+fn main() {}