aboutsummaryrefslogtreecommitdiffstats
path: root/python/tidy/servo_tidy/tidy.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/tidy/servo_tidy/tidy.py')
-rw-r--r--python/tidy/servo_tidy/tidy.py27
1 files changed, 17 insertions, 10 deletions
diff --git a/python/tidy/servo_tidy/tidy.py b/python/tidy/servo_tidy/tidy.py
index 34eea7f882a..d47aa0137a0 100644
--- a/python/tidy/servo_tidy/tidy.py
+++ b/python/tidy/servo_tidy/tidy.py
@@ -318,19 +318,23 @@ def check_shell(file_name, lines):
shebang = "#!/usr/bin/env bash"
required_options = {"set -o errexit", "set -o nounset", "set -o pipefail"}
+ did_shebang_check = False
+
if len(lines) == 0:
yield (0, 'script is an empty file')
- else:
- if lines[0].rstrip() != shebang:
- yield (1, 'script does not have shebang "{}"'.format(shebang))
+ return
+
+ if lines[0].rstrip() != shebang:
+ yield (1, 'script does not have shebang "{}"'.format(shebang))
- for idx in range(1, len(lines)):
- stripped = lines[idx].rstrip()
+ for idx in range(1, len(lines)):
+ stripped = lines[idx].rstrip()
+ # Comments or blank lines are ignored. (Trailing whitespace is caught with a separate linter.)
+ if lines[idx].startswith("#") or stripped == "":
+ continue
- # Comments or blank lines are ignored. (Trailing whitespace is caught with a separate linter.)
- if lines[idx].startswith("#") or stripped == "":
- continue
- elif stripped in required_options:
+ if not did_shebang_check:
+ if stripped in required_options:
required_options.remove(stripped)
else:
# The first non-comment, non-whitespace, non-option line is the first "real" line of the script.
@@ -338,7 +342,10 @@ def check_shell(file_name, lines):
if len(required_options) != 0:
formatted = ['"{}"'.format(opt) for opt in required_options]
yield (idx + 1, "script is missing options {}".format(", ".join(formatted)))
- break
+ did_shebang_check = True
+
+ if "`" in stripped:
+ yield (idx + 1, "script should not use backticks for command substitution")
def check_rust(file_name, lines):