]>
git.proxmox.com Git - rustc.git/blob - vendor/syn-1.0.107/tests/repo/mod.rs
1 #![allow(clippy::manual_assert)]
5 use self::progress
::Progress
;
7 use flate2
::read
::GzDecoder
;
11 use walkdir
::DirEntry
;
13 const REVISION
: &str = "98ad6a5519651af36e246c0335c964dd52c554ba";
16 static EXCLUDE_FILES
: &[&str] = &[
17 // TODO: impl ~const T {}
18 // https://github.com/dtolnay/syn/issues/1051
19 "src/test/ui/rfc-2632-const-trait-impl/syntax.rs",
21 // Compile-fail expr parameter in const generic position: f::<1 + 2>()
22 "src/test/ui/const-generics/early/closing-args-token.rs",
23 "src/test/ui/const-generics/early/const-expression-parameter.rs",
25 // Need at least one trait in impl Trait, no such type as impl 'static
26 "src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs",
28 // Deprecated anonymous parameter syntax in traits
29 "src/test/ui/issues/issue-13105.rs",
30 "src/test/ui/issues/issue-13775.rs",
31 "src/test/ui/issues/issue-34074.rs",
32 "src/test/ui/proc-macro/trait-fn-args-2015.rs",
33 "src/tools/rustfmt/tests/source/trait.rs",
34 "src/tools/rustfmt/tests/target/trait.rs",
36 // Various extensions to Rust syntax made up by rust-analyzer
37 "src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/0012_type_item_where_clause.rs",
38 "src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/0040_crate_keyword_vis.rs",
39 "src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/0131_existential_type.rs",
40 "src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/0179_use_tree_abs_star.rs",
41 "src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/0188_const_param_default_path.rs",
42 "src/tools/rust-analyzer/crates/parser/test_data/parser/ok/0015_use_tree.rs",
43 "src/tools/rust-analyzer/crates/parser/test_data/parser/ok/0029_range_forms.rs",
44 "src/tools/rust-analyzer/crates/parser/test_data/parser/ok/0051_parameter_attrs.rs",
45 "src/tools/rust-analyzer/crates/parser/test_data/parser/ok/0055_dot_dot_dot.rs",
46 "src/tools/rust-analyzer/crates/parser/test_data/parser/ok/0068_item_modifiers.rs",
47 "src/tools/rust-analyzer/crates/syntax/test_data/parser/validation/0031_block_inner_attrs.rs",
48 "src/tools/rust-analyzer/crates/syntax/test_data/parser/validation/0045_ambiguous_trait_object.rs",
49 "src/tools/rust-analyzer/crates/syntax/test_data/parser/validation/0046_mutable_const_item.rs",
51 // Placeholder syntax for "throw expressions"
52 "src/test/pretty/yeet-expr.rs",
53 "src/test/ui/try-trait/yeet-for-option.rs",
54 "src/test/ui/try-trait/yeet-for-result.rs",
57 "src/test/ui/issues/issue-74564-if-expr-stack-overflow.rs",
59 // Testing tools on invalid syntax
60 "src/test/run-make/translation/test.rs",
61 "src/test/ui/generics/issue-94432-garbage-ice.rs",
62 "src/tools/rustfmt/tests/coverage/target/comments.rs",
63 "src/tools/rustfmt/tests/parser/issue-4126/invalid.rs",
64 "src/tools/rustfmt/tests/parser/issue_4418.rs",
65 "src/tools/rustfmt/tests/parser/unclosed-delims/issue_4466.rs",
66 "src/tools/rustfmt/tests/source/configs/disable_all_formatting/true.rs",
67 "src/tools/rustfmt/tests/source/configs/spaces_around_ranges/false.rs",
68 "src/tools/rustfmt/tests/source/configs/spaces_around_ranges/true.rs",
69 "src/tools/rustfmt/tests/source/type.rs",
70 "src/tools/rustfmt/tests/target/configs/spaces_around_ranges/false.rs",
71 "src/tools/rustfmt/tests/target/configs/spaces_around_ranges/true.rs",
72 "src/tools/rustfmt/tests/target/type.rs",
74 // Generated file containing a top-level expression, used with `include!`
75 "compiler/rustc_codegen_gcc/src/intrinsic/archs.rs",
77 // Clippy lint lists represented as expressions
78 "src/tools/clippy/clippy_lints/src/lib.deprecated.rs",
79 "src/tools/clippy/clippy_lints/src/lib.register_all.rs",
80 "src/tools/clippy/clippy_lints/src/lib.register_cargo.rs",
81 "src/tools/clippy/clippy_lints/src/lib.register_complexity.rs",
82 "src/tools/clippy/clippy_lints/src/lib.register_correctness.rs",
83 "src/tools/clippy/clippy_lints/src/lib.register_internal.rs",
84 "src/tools/clippy/clippy_lints/src/lib.register_lints.rs",
85 "src/tools/clippy/clippy_lints/src/lib.register_nursery.rs",
86 "src/tools/clippy/clippy_lints/src/lib.register_pedantic.rs",
87 "src/tools/clippy/clippy_lints/src/lib.register_perf.rs",
88 "src/tools/clippy/clippy_lints/src/lib.register_restriction.rs",
89 "src/tools/clippy/clippy_lints/src/lib.register_style.rs",
90 "src/tools/clippy/clippy_lints/src/lib.register_suspicious.rs",
92 // Not actually test cases
93 "src/test/ui/lint/expansion-time-include.rs",
94 "src/test/ui/macros/auxiliary/macro-comma-support.rs",
95 "src/test/ui/macros/auxiliary/macro-include-items-expr.rs",
96 "src/test/ui/macros/include-single-expr-helper.rs",
97 "src/test/ui/macros/include-single-expr-helper-1.rs",
98 "src/test/ui/parser/issues/auxiliary/issue-21146-inc.rs",
102 static EXCLUDE_DIRS
: &[&str] = &[
103 // Inputs that intentionally do not parse
104 "src/tools/rust-analyzer/crates/parser/test_data/parser/err",
105 "src/tools/rust-analyzer/crates/parser/test_data/parser/inline/err",
107 // Inputs that lex but do not necessarily parse
108 "src/tools/rust-analyzer/crates/parser/test_data/lexer",
110 // Inputs that used to crash rust-analyzer, but aren't necessarily supposed to parse
111 "src/tools/rust-analyzer/crates/syntax/test_data/parser/fuzz-failures",
112 "src/tools/rust-analyzer/crates/syntax/test_data/reparse/fuzz-failures",
115 pub fn base_dir_filter(entry
: &DirEntry
) -> bool
{
116 let path
= entry
.path();
118 let mut path_string
= path
.to_string_lossy();
120 path_string
= path_string
.replace('
\\'
, "/").into();
122 let path_string
= if path_string
== "tests/rust" {
124 } else if let Some(path
) = path_string
.strip_prefix("tests/rust/") {
127 panic
!("unexpected path in Rust dist: {}", path_string
);
131 return !EXCLUDE_DIRS
.contains(&path_string
);
134 if path
.extension().map_or(true, |e
| e
!= "rs") {
138 if path_string
.starts_with("src/test/ui") || path_string
.starts_with("src/test/rustdoc-ui") {
139 let stderr_path
= path
.with_extension("stderr");
140 if stderr_path
.exists() {
141 // Expected to fail in some way
146 !EXCLUDE_FILES
.contains(&path_string
)
150 pub fn edition(path
: &Path
) -> &'
static str {
151 if path
.ends_with("dyn-2015-no-warnings-without-lints.rs") {
158 pub fn clone_rust() {
159 let needs_clone
= match fs
::read_to_string("tests/rust/COMMIT") {
161 Ok(contents
) => contents
.trim() != REVISION
,
164 download_and_unpack().unwrap();
166 let mut missing
= String
::new();
167 let test_src
= Path
::new("tests/rust");
168 for exclude
in EXCLUDE_FILES
{
169 if !test_src
.join(exclude
).is_file() {
170 missing
+= "\ntests/rust/";
174 for exclude
in EXCLUDE_DIRS
{
175 if !test_src
.join(exclude
).is_dir() {
176 missing
+= "\ntests/rust/";
181 if !missing
.is_empty() {
182 panic
!("excluded test file does not exist:{}\n", missing
);
186 fn download_and_unpack() -> Result
<()> {
188 "https://github.com/rust-lang/rust/archive/{}.tar.gz",
191 let response
= reqwest
::blocking
::get(url
)?
.error_for_status()?
;
192 let progress
= Progress
::new(response
);
193 let decoder
= GzDecoder
::new(progress
);
194 let mut archive
= Archive
::new(decoder
);
195 let prefix
= format
!("rust-{}", REVISION
);
197 let tests_rust
= Path
::new("tests/rust");
198 if tests_rust
.exists() {
199 fs
::remove_dir_all(tests_rust
)?
;
202 for entry
in archive
.entries()?
{
203 let mut entry
= entry?
;
204 let path
= entry
.path()?
;
205 if path
== Path
::new("pax_global_header") {
208 let relative
= path
.strip_prefix(&prefix
)?
;
209 let out
= tests_rust
.join(relative
);
213 fs
::write("tests/rust/COMMIT", REVISION
)?
;