aboutsummaryrefslogtreecommitdiffstats
path: root/python/tidy/servo_tidy/tidy.py
diff options
context:
space:
mode:
authorMichael Droettboom <mdboom@gmail.com>2017-09-18 16:08:55 -0400
committerMichael Droettboom <mdboom@gmail.com>2017-09-21 17:17:47 -0400
commitc9dafda03a4a143f4626726df7562077a7cdd64f (patch)
treedbe9ca3bbec26664ba3b93cb5c4e42493fffc024 /python/tidy/servo_tidy/tidy.py
parent5c797d194346d5be3c55da51d82bfcd1031a51f5 (diff)
downloadservo-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.py29
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)