mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Merge forbidden panic check into test-tidy
This cleans up the GitHub actions yaml a bit and ensures that developers are running this check locally before submitting changes. In addition, it allows adding tests for this check. Finally, this change fixes the tidy tests by upgrading voluptuous for Python 3.10 as well as by reverting an inadvertent change for NixOS compatibility on one of the dummy testing files.
This commit is contained in:
parent
259ccff491
commit
ec9cbeefd8
8 changed files with 26 additions and 40 deletions
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
|
@ -175,8 +175,6 @@ jobs:
|
|||
run: python3 ./mach build --release
|
||||
- name: Lockfile check
|
||||
run: ./etc/ci/lockfile_changed.sh
|
||||
- name: Forbidden panic check
|
||||
run: ./etc/ci/check_no_panic.sh
|
||||
- name: Package binary
|
||||
run: tar -czf target.tar.gz target/release/servo resources
|
||||
- name: Archive binary
|
||||
|
|
2
.github/workflows/wpt-nightly.yml
vendored
2
.github/workflows/wpt-nightly.yml
vendored
|
@ -27,8 +27,6 @@ jobs:
|
|||
run: python3 ./mach build --release
|
||||
- name: Lockfile check
|
||||
run: ./etc/ci/lockfile_changed.sh
|
||||
- name: Forbidden panic check
|
||||
run: ./etc/ci/check_no_panic.sh
|
||||
- name: Package binary
|
||||
run: tar -czf target.tar.gz target/release/servo resources
|
||||
- name: Archive binary
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
# Make sure listed paths do not use unwrap() or panic!()
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
# cd into repo root to make sure paths work in any case
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
|
||||
# Each path can be either a single file or a directory
|
||||
PATHS=(
|
||||
"components/compositing/compositor.rs"
|
||||
"components/constellation/"
|
||||
"ports/winit/headed_window.rs"
|
||||
"ports/winit/headless_window.rs"
|
||||
"ports/winit/embedder.rs"
|
||||
)
|
||||
|
||||
# Make sure the paths exist
|
||||
ls -1 "${PATHS[@]}"
|
||||
|
||||
# Make sure the files do not contain "unwrap" or "panic!"
|
||||
! grep \
|
||||
--dereference-recursive \
|
||||
--line-number \
|
||||
--with-filename \
|
||||
"unwrap(\|panic!(" \
|
||||
"${PATHS[@]}"
|
|
@ -536,6 +536,18 @@ def check_rust(file_name, lines):
|
|||
|
||||
is_lib_rs_file = file_name.endswith("lib.rs")
|
||||
|
||||
PANIC_NOT_ALLOWED_PATHS = [
|
||||
os.path.join("*", "components", "compositing", "compositor.rs"),
|
||||
os.path.join("*", "components", "constellation", "*"),
|
||||
os.path.join("*", "ports", "winit", "headed_window.rs"),
|
||||
os.path.join("*", "ports", "winit", "headless_window.rs"),
|
||||
os.path.join("*", "ports", "winit", "embedder.rs"),
|
||||
os.path.join("*", "rust_tidy.rs"), # This is for the tests.
|
||||
]
|
||||
is_panic_not_allowed_rs_file = any([
|
||||
glob.fnmatch.fnmatch(file_name, path) for path in PANIC_NOT_ALLOWED_PATHS])
|
||||
print(file_name)
|
||||
|
||||
prev_open_brace = False
|
||||
multi_line_string = False
|
||||
prev_crate = {}
|
||||
|
@ -547,6 +559,7 @@ def check_rust(file_name, lines):
|
|||
decl_message = "{} is not in alphabetical order"
|
||||
decl_expected = "\n\t\033[93mexpected: {}\033[0m"
|
||||
decl_found = "\n\t\033[91mfound: {}\033[0m"
|
||||
panic_message = "unwrap() or panic!() found in code which should not panic."
|
||||
|
||||
for idx, original_line in enumerate(map(lambda line: line.decode("utf-8"), lines)):
|
||||
# simplify the analysis
|
||||
|
@ -677,6 +690,11 @@ def check_rust(file_name, lines):
|
|||
# not a feature attribute line, so empty previous name
|
||||
prev_feature_name = ""
|
||||
|
||||
if is_panic_not_allowed_rs_file:
|
||||
match = re.search(r"unwrap\(|panic!\(", line)
|
||||
if match:
|
||||
yield (idx + 1, panic_message)
|
||||
|
||||
# modules must be in the same line and alphabetically sorted
|
||||
if line.startswith("mod ") or line.startswith("pub mod "):
|
||||
# strip /(pub )?mod/ from the left and ";" from the right
|
||||
|
|
|
@ -78,4 +78,8 @@ impl test {
|
|||
} else {
|
||||
let xif = 42 in { xif } // Should not trigger
|
||||
}
|
||||
|
||||
let option = Some(3);
|
||||
println!("{}", option.unwrap());
|
||||
panic!("What a way to end.");
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env bash
|
||||
#!/bin/bash
|
||||
#
|
||||
# Tests tidy for shell scripts.
|
||||
|
||||
|
|
|
@ -115,6 +115,8 @@ class CheckTidiness(unittest.TestCase):
|
|||
self.assertEqual('use &T instead of &DomRoot<T>', next(errors)[2])
|
||||
self.assertEqual('encountered function signature with -> ()', next(errors)[2])
|
||||
self.assertEqual('operators should go at the end of the first line', next(errors)[2])
|
||||
self.assertEqual('unwrap() or panic!() found in code which should not panic.', next(errors)[2])
|
||||
self.assertEqual('unwrap() or panic!() found in code which should not panic.', next(errors)[2])
|
||||
self.assertNoMoreErrors(errors)
|
||||
|
||||
feature_errors = tidy.collect_errors_for_files(iterFile('lib.rs'), [], [tidy.check_rust], print_text=False)
|
||||
|
|
|
@ -17,7 +17,7 @@ install_requires = [
|
|||
"flake8==3.8.3",
|
||||
"toml==0.9.2",
|
||||
"colorama==0.3.7",
|
||||
"voluptuous==0.11.5",
|
||||
"voluptuous==0.12.1",
|
||||
"PyYAML==5.4",
|
||||
]
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue