servo: Merge #18553 - Make tidy aware of Rust multiline strings (from mdboom:tidy-support-multiline-strings); r=wafflespeanut
<!-- Please describe your changes on the following line: --> This makes the internal tidy script properly ignore the contents of Rust multiline strings. --- <!-- 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 #18551 (github issue number if applicable). <!-- Either: --> - [X] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- 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: a8a25dac5226a12916c8fe17155d1dbb3b6cb565
This commit is contained in:
@@ -467,15 +467,6 @@ def check_rust(file_name, lines):
|
||||
prev_indent = indent
|
||||
indent = len(original_line) - len(line)
|
||||
|
||||
# Hack for components/selectors/build.rs
|
||||
if multi_line_string:
|
||||
if line.startswith('"#'):
|
||||
multi_line_string = False
|
||||
else:
|
||||
continue
|
||||
if line.endswith('r#"'):
|
||||
multi_line_string = True
|
||||
|
||||
is_attribute = re.search(r"#\[.*\]", line)
|
||||
is_comment = re.search(r"^//|^/\*|^\*", line)
|
||||
|
||||
@@ -494,6 +485,14 @@ def check_rust(file_name, lines):
|
||||
line = merged_lines + line
|
||||
merged_lines = ''
|
||||
|
||||
if multi_line_string:
|
||||
line, count = re.subn(
|
||||
r'^(\\.|[^"\\])*?"', '', line, count=1)
|
||||
if count == 1:
|
||||
multi_line_string = False
|
||||
else:
|
||||
continue
|
||||
|
||||
# Ignore attributes, comments, and imports
|
||||
# Keep track of whitespace to enable checking for a merged import block
|
||||
if import_block:
|
||||
@@ -504,9 +503,17 @@ def check_rust(file_name, lines):
|
||||
import_block = False
|
||||
|
||||
# get rid of strings and chars because cases like regex expression, keep attributes
|
||||
if not is_attribute:
|
||||
if not is_attribute and not is_comment:
|
||||
line = re.sub(r'"(\\.|[^\\"])*?"', '""', line)
|
||||
line = re.sub(r"'(\\.|[^\\'])*?'", "''", line)
|
||||
line = re.sub(
|
||||
r"'(\\.|[^\\']|(\\x[0-9a-fA-F]{2})|(\\u{[0-9a-fA-F]{1,6}}))'",
|
||||
"''", line)
|
||||
# If, after parsing all single-line strings, we still have
|
||||
# an odd number of double quotes, this line starts a
|
||||
# multiline string
|
||||
if line.count('"') % 2 == 1:
|
||||
line = re.sub(r'"(\\.|[^\\"])*?$', '""', line)
|
||||
multi_line_string = True
|
||||
|
||||
# get rid of comments
|
||||
line = re.sub('//.*?$|/\*.*?$|^\*.*?$', '//', line)
|
||||
|
||||
Reference in New Issue
Block a user