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:
Martin Robinson 2023-03-21 18:52:46 +01:00
parent 259ccff491
commit ec9cbeefd8
8 changed files with 26 additions and 40 deletions

View file

@ -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

View file

@ -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.");
}

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash
#
# Tests tidy for shell scripts.

View file

@ -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)

View file

@ -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",
]