servo: Merge #13986 - Make test-tidy check for alphabetical ordering of #![feature(...)] statements (from iamrohit7:tidy-feature-attrs); r=Wafflespeanut
<!-- 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. --> Source-Repo: https://github.com/servo/servo Source-Revision: 291f393723d22a582bb9a49ef7294ec14eca2127
This commit is contained in:
@@ -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 "):
|
||||
|
||||
Reference in New Issue
Block a user