diff options
author | Michael Droettboom <mdboom@gmail.com> | 2017-09-18 16:08:55 -0400 |
---|---|---|
committer | Michael Droettboom <mdboom@gmail.com> | 2017-09-21 17:17:47 -0400 |
commit | c9dafda03a4a143f4626726df7562077a7cdd64f (patch) | |
tree | dbe9ca3bbec26664ba3b93cb5c4e42493fffc024 /python/tidy/servo_tidy/tidy.py | |
parent | 5c797d194346d5be3c55da51d82bfcd1031a51f5 (diff) | |
download | servo-c9dafda03a4a143f4626726df7562077a7cdd64f.tar.gz servo-c9dafda03a4a143f4626726df7562077a7cdd64f.zip |
Make tidy aware of Rust multiline strings
As a result of tighter and more correct handling of character
literals, this now catches a few kinds of syntax involving lifetimes
that were previously missed, so those have been updated.
Diffstat (limited to 'python/tidy/servo_tidy/tidy.py')
-rw-r--r-- | python/tidy/servo_tidy/tidy.py | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/python/tidy/servo_tidy/tidy.py b/python/tidy/servo_tidy/tidy.py index c3c76edbb5f..e88f4dc1458 100644 --- a/python/tidy/servo_tidy/tidy.py +++ b/python/tidy/servo_tidy/tidy.py @@ -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) |