diff --git a/Cargo.lock b/Cargo.lock index a1e018113e88..e4dbcaabcfd3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2038,8 +2038,8 @@ version = "0.0.1" dependencies = [ "compiletest_helper 0.0.1", "deny_public_fields 0.0.1", - "plugins 0.0.1", "script 0.0.1", + "script_plugins 0.0.1", ] [[package]] @@ -2302,6 +2302,7 @@ dependencies = [ "regex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "script_layout_interface 0.0.1", + "script_plugins 0.0.1", "script_traits 0.0.1", "selectors 0.18.0", "serde 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2352,6 +2353,10 @@ dependencies = [ "style 0.0.1", ] +[[package]] +name = "script_plugins" +version = "0.0.1" + [[package]] name = "script_tests" version = "0.0.1" diff --git a/components/plugins/Cargo.toml b/components/plugins/Cargo.toml index 9370899a8eea..ad40e1b3797f 100644 --- a/components/plugins/Cargo.toml +++ b/components/plugins/Cargo.toml @@ -15,5 +15,4 @@ version = "0.0.112" optional = true [features] -default = [] clippy = ["clippy_lints"] diff --git a/components/plugins/lib.rs b/components/plugins/lib.rs index 03585ae3718f..d3e54a21a4df 100644 --- a/components/plugins/lib.rs +++ b/components/plugins/lib.rs @@ -2,58 +2,21 @@ * 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/. */ -//! Servo's compiler plugin/macro crate -//! -//! Attributes this crate provides: -//! -//! - `#[derive(DenyPublicFields)]` : Forces all fields in a struct/enum to be private -//! - `#[derive(JSTraceable)]` : Auto-derives an implementation of `JSTraceable` for a struct in the script crate -//! - `#[must_root]` : Prevents data of the marked type from being used on the stack. -//! See the lints module for more details -//! - `#[dom_struct]` : Implies #[derive(JSTraceable, DenyPublicFields)]`, and `#[must_root]`. -//! Use this for structs that correspond to a DOM type - - -#![feature(box_syntax, plugin, plugin_registrar, quote, rustc_private, slice_patterns)] +//! Exists only to hook into clippy. +#![cfg_attr(feature = "clippy", feature(plugin, plugin_registrar, rustc_private))] #![deny(unsafe_code)] #[cfg(feature = "clippy")] extern crate clippy_lints; -#[macro_use] -extern crate rustc; +#[cfg(feature = "clippy")] extern crate rustc_plugin; -extern crate syntax; +#[cfg(feature = "clippy")] use rustc_plugin::Registry; -use syntax::ext::base::*; -use syntax::feature_gate::AttributeType::Whitelisted; -use syntax::symbol::Symbol; - -// Public for documentation to show up -/// Handles the auto-deriving for `#[derive(JSTraceable)]` -pub mod jstraceable; -pub mod lints; -/// Utilities for writing plugins -mod utils; +#[cfg(feature = "clippy")] #[plugin_registrar] pub fn plugin_registrar(reg: &mut Registry) { - reg.register_syntax_extension( - Symbol::intern("dom_struct"), - MultiModifier(box jstraceable::expand_dom_struct)); - - reg.register_late_lint_pass(box lints::unrooted_must_root::UnrootedPass::new()); - reg.register_early_lint_pass(box lints::ban::BanPass); - reg.register_attribute("allow_unrooted_interior".to_string(), Whitelisted); - reg.register_attribute("must_root".to_string(), Whitelisted); - register_clippy(reg); -} - -#[cfg(feature = "clippy")] -fn register_clippy(reg: &mut Registry) { ::clippy_lints::register_plugins(reg); } -#[cfg(not(feature = "clippy"))] -fn register_clippy(_reg: &mut Registry) { -} diff --git a/components/plugins/lints/mod.rs b/components/plugins/lints/mod.rs deleted file mode 100644 index 0f94e4999e0b..000000000000 --- a/components/plugins/lints/mod.rs +++ /dev/null @@ -1,6 +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/. */ - -pub mod ban; -pub mod unrooted_must_root; diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 9eb4af38f4d8..5f6c7437cf81 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -71,6 +71,7 @@ ref_slice = "1.0" regex = "0.2" rustc-serialize = "0.3" script_layout_interface = {path = "../script_layout_interface"} +script_plugins = {path = "../script_plugins"} script_traits = {path = "../script_traits"} selectors = { path = "../selectors" } serde = "0.8" diff --git a/components/script/lib.rs b/components/script/lib.rs index c7a1598c8890..92be1272d6f0 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -23,6 +23,7 @@ #![doc = "The script crate contains all matters DOM."] #![plugin(plugins)] +#![plugin(script_plugins)] extern crate angle; extern crate app_units; diff --git a/components/script_plugins/Cargo.toml b/components/script_plugins/Cargo.toml new file mode 100644 index 000000000000..6b200e3ef0f4 --- /dev/null +++ b/components/script_plugins/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "script_plugins" +version = "0.0.1" +authors = ["The Servo Project Developers"] +license = "MPL-2.0" +publish = false + +[lib] +path = "lib.rs" +plugin = true diff --git a/components/plugins/lints/ban.rs b/components/script_plugins/ban.rs similarity index 100% rename from components/plugins/lints/ban.rs rename to components/script_plugins/ban.rs diff --git a/components/plugins/jstraceable.rs b/components/script_plugins/jstraceable.rs similarity index 100% rename from components/plugins/jstraceable.rs rename to components/script_plugins/jstraceable.rs diff --git a/components/script_plugins/lib.rs b/components/script_plugins/lib.rs new file mode 100644 index 000000000000..79aa5a4752de --- /dev/null +++ b/components/script_plugins/lib.rs @@ -0,0 +1,48 @@ +/* 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/. */ + +//! Servo's compiler plugin/macro crate +//! +//! Attributes this crate provides: +//! +//! - `#[derive(DenyPublicFields)]` : Forces all fields in a struct/enum to be private +//! - `#[derive(JSTraceable)]` : Auto-derives an implementation of `JSTraceable` for a struct in the script crate +//! - `#[must_root]` : Prevents data of the marked type from being used on the stack. +//! See the lints module for more details +//! - `#[dom_struct]` : Implies #[derive(JSTraceable, DenyPublicFields)]`, and `#[must_root]`. +//! Use this for structs that correspond to a DOM type + + +#![deny(unsafe_code)] +#![feature(box_syntax, plugin, plugin_registrar, quote, rustc_private, slice_patterns)] + +#[macro_use] +extern crate rustc; +extern crate rustc_plugin; +extern crate syntax; + +use rustc_plugin::Registry; +use syntax::ext::base::*; +use syntax::feature_gate::AttributeType::Whitelisted; +use syntax::symbol::Symbol; + +mod ban; +// Public for documentation to show up +/// Handles the auto-deriving for `#[derive(JSTraceable)]` +pub mod jstraceable; +mod unrooted_must_root; +/// Utilities for writing plugins +mod utils; + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_syntax_extension( + Symbol::intern("dom_struct"), + MultiModifier(box jstraceable::expand_dom_struct)); + + 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/components/plugins/lints/unrooted_must_root.rs b/components/script_plugins/unrooted_must_root.rs similarity index 100% rename from components/plugins/lints/unrooted_must_root.rs rename to components/script_plugins/unrooted_must_root.rs diff --git a/components/plugins/utils.rs b/components/script_plugins/utils.rs similarity index 100% rename from components/plugins/utils.rs rename to components/script_plugins/utils.rs diff --git a/tests/compiletest/plugin/Cargo.toml b/tests/compiletest/plugin/Cargo.toml index 86d715a81869..cf5ba72cc44e 100644 --- a/tests/compiletest/plugin/Cargo.toml +++ b/tests/compiletest/plugin/Cargo.toml @@ -12,5 +12,5 @@ doctest = false [dependencies] compiletest_helper = {path = "../helper"} deny_public_fields = {path = "../../../components/deny_public_fields"} -plugins = {path = "../../../components/plugins"} script = {path = "../../../components/script"} +script_plugins = {path = "../../../components/script_plugins"} diff --git a/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs b/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs index e68c3b9bc9bd..a5953590d694 100644 --- a/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs +++ b/tests/compiletest/plugin/compile-fail/ban-domrefcell.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #![feature(plugin)] -#![plugin(plugins)] +#![plugin(script_plugins)] extern crate script; diff --git a/tests/compiletest/plugin/compile-fail/ban.rs b/tests/compiletest/plugin/compile-fail/ban.rs index ebcedffce31f..3979173f1fee 100644 --- a/tests/compiletest/plugin/compile-fail/ban.rs +++ b/tests/compiletest/plugin/compile-fail/ban.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #![feature(plugin)] -#![plugin(plugins)] +#![plugin(script_plugins)] extern crate js; diff --git a/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs b/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs index 08d684d4e4a0..14ef7bbaa0df 100644 --- a/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs +++ b/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs @@ -2,9 +2,6 @@ * 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::test::TrustedPromise; diff --git a/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs b/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs index f9b6d29dbee7..5fd1960d0745 100644 --- a/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs +++ b/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs @@ -2,9 +2,9 @@ * 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)] #![allow(dead_code)] +#![feature(plugin)] +#![plugin(script_plugins)] #[must_root] struct Foo {