aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-11-01 01:13:35 -0500
committerGitHub <noreply@github.com>2016-11-01 01:13:35 -0500
commit291f393723d22a582bb9a49ef7294ec14eca2127 (patch)
tree6bff5ca222554e11f70f48674f561593202e219f
parentc69c6cf58bb31de36af98d4b84dfdec2724d5b5b (diff)
parent32ba45ab6fe350c70aaad0ed29b66995571186c7 (diff)
downloadservo-291f393723d22a582bb9a49ef7294ec14eca2127.tar.gz
servo-291f393723d22a582bb9a49ef7294ec14eca2127.zip
Auto merge of #13986 - iamrohit7:tidy-feature-attrs, r=Wafflespeanut
Make test-tidy check for alphabetical ordering of #![feature(...)] statements <!-- Please describe your changes on the following line: --> <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [x] These changes fix #13954 (github issue number if applicable). <!-- Either: --> - [X] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13986) <!-- Reviewable:end -->
-rw-r--r--components/net/lib.rs2
-rw-r--r--components/plugins/lib.rs3
-rw-r--r--python/tidy/servo_tidy/tidy.py25
-rw-r--r--python/tidy/servo_tidy_tests/lib.rs14
-rw-r--r--python/tidy/servo_tidy_tests/test_tidy.py8
-rw-r--r--tests/unit/style/lib.rs2
6 files changed, 51 insertions, 3 deletions
diff --git a/components/net/lib.rs b/components/net/lib.rs
index 822c2105c6e..4ca85975344 100644
--- a/components/net/lib.rs
+++ b/components/net/lib.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(box_syntax)]
#![feature(custom_attribute)]
#![feature(custom_derive)]
-#![feature(box_syntax)]
#![feature(fnbox)]
#![feature(mpsc_select)]
#![feature(plugin)]
diff --git a/components/plugins/lib.rs b/components/plugins/lib.rs
index 30009d63aeb..e62243e8024 100644
--- a/components/plugins/lib.rs
+++ b/components/plugins/lib.rs
@@ -13,7 +13,8 @@
//! - `#[dom_struct]` : Implies `#[privatize]`,`#[derive(JSTraceable)]`, and `#[must_root]`.
//! Use this for structs that correspond to a DOM type
-#![feature(plugin_registrar, quote, plugin, box_syntax, rustc_private, slice_patterns)]
+
+#![feature(box_syntax, plugin, plugin_registrar, quote, rustc_private, slice_patterns)]
#![deny(unsafe_code)]
diff --git a/python/tidy/servo_tidy/tidy.py b/python/tidy/servo_tidy/tidy.py
index b0e420988d7..98eb8fa2d94 100644
--- a/python/tidy/servo_tidy/tidy.py
+++ b/python/tidy/servo_tidy/tidy.py
@@ -385,11 +385,14 @@ def check_rust(file_name, lines):
import_block = False
whitespace = False
+ is_lib_rs_file = file_name.endswith("lib.rs")
+
prev_use = None
prev_open_brace = False
current_indent = 0
prev_crate = {}
prev_mod = {}
+ prev_feature_name = ""
decl_message = "{} is not in alphabetical order"
decl_expected = "\n\t\033[93mexpected: {}\033[0m"
@@ -517,6 +520,28 @@ def check_rust(file_name, lines):
+ decl_found.format(crate_name))
prev_crate[indent] = crate_name
+ # check alphabetical order of feature attributes in lib.rs files
+ if is_lib_rs_file:
+ match = re.search(r"#!\[feature\((.*)\)\]", line)
+
+ if match:
+ features = map(lambda w: w.strip(), match.group(1).split(','))
+ sorted_features = sorted(features)
+ if sorted_features != features:
+ yield(idx + 1, decl_message.format("feature attribute")
+ + decl_expected.format(tuple(sorted_features))
+ + decl_found.format(tuple(features)))
+
+ if prev_feature_name > sorted_features[0]:
+ yield(idx + 1, decl_message.format("feature attribute")
+ + decl_expected.format(prev_feature_name + " after " + sorted_features[0])
+ + decl_found.format(prev_feature_name + " before " + sorted_features[0]))
+
+ prev_feature_name = sorted_features[0]
+ else:
+ # not a feature attribute line, so empty previous name
+ prev_feature_name = ""
+
# imports must be in the same line, alphabetically sorted, and merged
# into a single import block
if line.startswith("use "):
diff --git a/python/tidy/servo_tidy_tests/lib.rs b/python/tidy/servo_tidy_tests/lib.rs
new file mode 100644
index 00000000000..4ca395d8e6d
--- /dev/null
+++ b/python/tidy/servo_tidy_tests/lib.rs
@@ -0,0 +1,14 @@
+/* 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(def)]
+#![feature(abc)]
+
+#![feature(abc, def, ghi)]
+#![feature(aaa)]
+
+#![feature(def, ghi, abc)]
+
+#![feature(ghi)]
+#![feature(abd, hef)]
diff --git a/python/tidy/servo_tidy_tests/test_tidy.py b/python/tidy/servo_tidy_tests/test_tidy.py
index 7bec2c61718..d997bb00f82 100644
--- a/python/tidy/servo_tidy_tests/test_tidy.py
+++ b/python/tidy/servo_tidy_tests/test_tidy.py
@@ -127,6 +127,14 @@ class CheckTidiness(unittest.TestCase):
self.assertEqual('extra space after test_fun', errors.next()[2])
self.assertNoMoreErrors(errors)
+ feature_errors = tidy.collect_errors_for_files(iterFile('lib.rs'), [], [tidy.check_rust], print_text=False)
+
+ self.assertTrue('feature attribute is not in alphabetical order' in feature_errors.next()[2])
+ self.assertTrue('feature attribute is not in alphabetical order' in feature_errors.next()[2])
+ self.assertTrue('feature attribute is not in alphabetical order' in feature_errors.next()[2])
+ self.assertTrue('feature attribute is not in alphabetical order' in feature_errors.next()[2])
+ self.assertNoMoreErrors(feature_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)
diff --git a/tests/unit/style/lib.rs b/tests/unit/style/lib.rs
index 164ccadef10..240cac4eb79 100644
--- a/tests/unit/style/lib.rs
+++ b/tests/unit/style/lib.rs
@@ -3,8 +3,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#![cfg(test)]
-#![feature(plugin)]
#![feature(core_intrinsics)]
+#![feature(plugin)]
extern crate app_units;
extern crate cssparser;