22//! - the number of entries in each directory must be less than `ENTRY_LIMIT`
33//! - there are no stray `.stderr` files
44
5- use std:: collections:: { BTreeSet , HashMap } ;
5+ use std:: collections:: BTreeSet ;
66use std:: ffi:: OsStr ;
77use std:: fs;
88use std:: io:: Write ;
99use std:: path:: { Path , PathBuf } ;
1010
11- use ignore:: Walk ;
12-
1311// FIXME: GitHub's UI truncates file lists that exceed 1000 entries, so these
1412// should all be 1000 or lower. Limits significantly smaller than 1000 are also
1513// desirable, because large numbers of files are unwieldy in general. See issue
1614// #73494.
17- const ENTRY_LIMIT : u32 = 901 ;
18- // FIXME: The following limits should be reduced eventually.
1915
20- const ISSUES_ENTRY_LIMIT : u32 = 1616 ;
16+ // FIXME: The following limits should be reduced eventually.
2117
2218const EXPECTED_TEST_FILE_EXTENSIONS : & [ & str ] = & [
2319 "rs" , // test source files
@@ -54,50 +50,13 @@ const EXTENSION_EXCEPTION_PATHS: &[&str] = &[
5450 "tests/ui/std/windows-bat-args3.bat" , // tests escaping arguments through batch files
5551] ;
5652
57- fn check_entries ( tests_path : & Path , bad : & mut bool ) {
58- let mut directories: HashMap < PathBuf , u32 > = HashMap :: new ( ) ;
59-
60- for entry in Walk :: new ( tests_path. join ( "ui" ) ) . flatten ( ) {
61- let parent = entry. path ( ) . parent ( ) . unwrap ( ) . to_path_buf ( ) ;
62- * directories. entry ( parent) . or_default ( ) += 1 ;
63- }
64-
65- let ( mut max, mut max_issues) = ( 0 , 0 ) ;
66- for ( dir_path, count) in directories {
67- let is_issues_dir = tests_path. join ( "ui/issues" ) == dir_path;
68- let ( limit, maxcnt) = if is_issues_dir {
69- ( ISSUES_ENTRY_LIMIT , & mut max_issues)
70- } else {
71- ( ENTRY_LIMIT , & mut max)
72- } ;
73- * maxcnt = ( * maxcnt) . max ( count) ;
74- if count > limit {
75- tidy_error ! (
76- bad,
77- "following path contains more than {} entries, \
78- you should move the test to some relevant subdirectory (current: {}): {}",
79- limit,
80- count,
81- dir_path. display( )
82- ) ;
83- }
84- }
85- if ISSUES_ENTRY_LIMIT > max_issues {
86- tidy_error ! (
87- bad,
88- "`ISSUES_ENTRY_LIMIT` is too high (is {ISSUES_ENTRY_LIMIT}, should be {max_issues})"
89- ) ;
90- }
91- }
92-
9353pub fn check ( root_path : & Path , bless : bool , bad : & mut bool ) {
9454 let issues_txt_header = r#"============================================================
9555 ⚠️⚠️⚠️NOTHING SHOULD EVER BE ADDED TO THIS LIST⚠️⚠️⚠️
9656============================================================
9757"# ;
9858
9959 let path = & root_path. join ( "tests" ) ;
100- check_entries ( path, bad) ;
10160
10261 // the list of files in ui tests that are allowed to start with `issue-XXXX`
10362 // BTreeSet because we would like a stable ordering so --bless works
@@ -124,7 +83,11 @@ pub fn check(root_path: &Path, bless: bool, bad: &mut bool) {
12483 ) ;
12584 }
12685
127- let mut remaining_issue_names: BTreeSet < & str > = allowed_issue_names. clone ( ) ;
86+ let mut remaining_issue_names: BTreeSet < & str > = allowed_issue_names
87+ . clone ( )
88+ . into_iter ( )
89+ . filter ( |name| !name. starts_with ( "ui/issues/" ) )
90+ . collect ( ) ;
12891
12992 let ( ui, ui_fulldeps) = ( path. join ( "ui" ) , path. join ( "ui-fulldeps" ) ) ;
13093 let paths = [ ui. as_path ( ) , ui_fulldeps. as_path ( ) ] ;
@@ -179,7 +142,9 @@ pub fn check(root_path: &Path, bless: bool, bad: &mut bool) {
179142 . unwrap ( )
180143 . replace ( std:: path:: MAIN_SEPARATOR_STR , "/" ) ;
181144
182- if !remaining_issue_names. remove ( stripped_path. as_str ( ) ) {
145+ if !remaining_issue_names. remove ( stripped_path. as_str ( ) )
146+ && !stripped_path. starts_with ( "ui/issues/" )
147+ {
183148 tidy_error ! (
184149 bad,
185150 "file `tests/{stripped_path}` must begin with a descriptive name, consider `{{reason}}-issue-{issue_n}.rs`" ,
0 commit comments