aboutsummaryrefslogtreecommitdiffstats
path: root/components/plugins/lints/ban.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2015-01-04 15:21:53 +0530
committerManish Goregaokar <manishsmail@gmail.com>2015-01-04 15:22:11 +0530
commit077bd840a3e7a91cf57b87f825f63e85bf2a4eca (patch)
tree776ded86b3272e56dc0695e75871e6621f13c3d8 /components/plugins/lints/ban.rs
parentdd84ae6bfb46872dfb0f0a8dca680452dadce3f0 (diff)
downloadservo-077bd840a3e7a91cf57b87f825f63e85bf2a4eca.tar.gz
servo-077bd840a3e7a91cf57b87f825f63e85bf2a4eca.zip
Ban Cell<JS<T>> and Cell<JSVal<T>> (partial #4336)
Diffstat (limited to 'components/plugins/lints/ban.rs')
-rw-r--r--components/plugins/lints/ban.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/components/plugins/lints/ban.rs b/components/plugins/lints/ban.rs
new file mode 100644
index 00000000000..78761c274f4
--- /dev/null
+++ b/components/plugins/lints/ban.rs
@@ -0,0 +1,39 @@
+/* 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 syntax::ast;
+use rustc::lint::{Context, LintPass, LintArray};
+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)
+ }
+
+ fn check_ty(&mut self, cx: &Context, ty: &ast::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 MutHeap<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 MutHeap<JSVal> instead")
+ }
+ }
+}