Skip to content

Commit

Permalink
Auto merge of #13986 - iamrohit7:tidy-feature-attrs, r=Wafflespeanut
Browse files Browse the repository at this point in the history
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 -->
  • Loading branch information
bors-servo committed Nov 1, 2016
2 parents c69c6cf + 32ba45a commit 291f393
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 3 deletions.
2 changes: 1 addition & 1 deletion components/net/lib.rs
Expand Up @@ -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)]
Expand Down
3 changes: 2 additions & 1 deletion components/plugins/lib.rs
Expand Up @@ -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)]

Expand Down
25 changes: 25 additions & 0 deletions python/tidy/servo_tidy/tidy.py
Expand Up @@ -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"
Expand Down Expand Up @@ -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 "):
Expand Down
14 changes: 14 additions & 0 deletions 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)]
8 changes: 8 additions & 0 deletions python/tidy/servo_tidy_tests/test_tidy.py
Expand Up @@ -127,6 +127,14 @@ def test_rust(self):
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)
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/style/lib.rs
Expand Up @@ -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;
Expand Down

0 comments on commit 291f393

Please sign in to comment.