Also handle cases where attributes are unclosed
(cherry picked from commit 2383985342
)
This commit is contained in:
parent
e09de50ce0
commit
32ee5bc6a3
3 changed files with 60 additions and 18 deletions
|
@ -51,8 +51,17 @@ impl DocTestBuilder {
|
||||||
!lang_str.compile_fail && !lang_str.test_harness && !lang_str.standalone_crate
|
!lang_str.compile_fail && !lang_str.test_harness && !lang_str.standalone_crate
|
||||||
});
|
});
|
||||||
|
|
||||||
let SourceInfo { crate_attrs, maybe_crate_attrs, crates, everything_else } =
|
let Some(SourceInfo { crate_attrs, maybe_crate_attrs, crates, everything_else }) =
|
||||||
partition_source(source, edition);
|
partition_source(source, edition)
|
||||||
|
else {
|
||||||
|
return Self::invalid(
|
||||||
|
String::new(),
|
||||||
|
String::new(),
|
||||||
|
String::new(),
|
||||||
|
source.to_string(),
|
||||||
|
test_id,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
// Uses librustc_ast to parse the doctest and find if there's a main fn and the extern
|
// Uses librustc_ast to parse the doctest and find if there's a main fn and the extern
|
||||||
// crate already is included.
|
// crate already is included.
|
||||||
|
@ -77,18 +86,7 @@ impl DocTestBuilder {
|
||||||
else {
|
else {
|
||||||
// If the parser panicked due to a fatal error, pass the test code through unchanged.
|
// If the parser panicked due to a fatal error, pass the test code through unchanged.
|
||||||
// The error will be reported during compilation.
|
// The error will be reported during compilation.
|
||||||
return Self {
|
return Self::invalid(crate_attrs, maybe_crate_attrs, crates, everything_else, test_id);
|
||||||
supports_color: false,
|
|
||||||
has_main_fn: false,
|
|
||||||
crate_attrs,
|
|
||||||
maybe_crate_attrs,
|
|
||||||
crates,
|
|
||||||
everything_else,
|
|
||||||
already_has_extern_crate: false,
|
|
||||||
test_id,
|
|
||||||
failed_ast: true,
|
|
||||||
can_be_merged: false,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
// If the AST returned an error, we don't want this doctest to be merged with the
|
// If the AST returned an error, we don't want this doctest to be merged with the
|
||||||
// others. Same if it contains `#[feature]` or `#[no_std]`.
|
// others. Same if it contains `#[feature]` or `#[no_std]`.
|
||||||
|
@ -113,6 +111,27 @@ impl DocTestBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn invalid(
|
||||||
|
crate_attrs: String,
|
||||||
|
maybe_crate_attrs: String,
|
||||||
|
crates: String,
|
||||||
|
everything_else: String,
|
||||||
|
test_id: Option<String>,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
supports_color: false,
|
||||||
|
has_main_fn: false,
|
||||||
|
crate_attrs,
|
||||||
|
maybe_crate_attrs,
|
||||||
|
crates,
|
||||||
|
everything_else,
|
||||||
|
already_has_extern_crate: false,
|
||||||
|
test_id,
|
||||||
|
failed_ast: true,
|
||||||
|
can_be_merged: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Transforms a test into code that can be compiled into a Rust binary, and returns the number of
|
/// Transforms a test into code that can be compiled into a Rust binary, and returns the number of
|
||||||
/// lines before the test code begins.
|
/// lines before the test code begins.
|
||||||
pub(crate) fn generate_unique_doctest(
|
pub(crate) fn generate_unique_doctest(
|
||||||
|
@ -533,7 +552,7 @@ struct SourceInfo {
|
||||||
everything_else: String,
|
everything_else: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn partition_source(s: &str, edition: Edition) -> SourceInfo {
|
fn partition_source(s: &str, edition: Edition) -> Option<SourceInfo> {
|
||||||
#[derive(Copy, Clone, PartialEq)]
|
#[derive(Copy, Clone, PartialEq)]
|
||||||
enum PartitionState {
|
enum PartitionState {
|
||||||
Attrs,
|
Attrs,
|
||||||
|
@ -608,11 +627,16 @@ fn partition_source(s: &str, edition: Edition) -> SourceInfo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !mod_attr_pending.is_empty() {
|
||||||
|
debug!("invalid doctest code: {s:?}");
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
source_info.everything_else = source_info.everything_else.trim().to_string();
|
source_info.everything_else = source_info.everything_else.trim().to_string();
|
||||||
|
|
||||||
debug!("crate_attrs:\n{}{}", source_info.crate_attrs, source_info.maybe_crate_attrs);
|
debug!("crate_attrs:\n{}{}", source_info.crate_attrs, source_info.maybe_crate_attrs);
|
||||||
debug!("crates:\n{}", source_info.crates);
|
debug!("crates:\n{}", source_info.crates);
|
||||||
debug!("after:\n{}", source_info.everything_else);
|
debug!("after:\n{}", source_info.everything_else);
|
||||||
|
|
||||||
source_info
|
Some(source_info)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,4 +20,8 @@
|
||||||
foo,
|
foo,
|
||||||
)]
|
)]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```rust
|
||||||
|
#![
|
||||||
|
```
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
|
|
||||||
running 2 tests
|
running 3 tests
|
||||||
test $DIR/comment-in-attr-134221.rs - (line 11) ... FAILED
|
test $DIR/comment-in-attr-134221.rs - (line 11) ... FAILED
|
||||||
test $DIR/comment-in-attr-134221.rs - (line 17) ... FAILED
|
test $DIR/comment-in-attr-134221.rs - (line 17) ... FAILED
|
||||||
|
test $DIR/comment-in-attr-134221.rs - (line 23) ... FAILED
|
||||||
|
|
||||||
failures:
|
failures:
|
||||||
|
|
||||||
|
@ -26,11 +27,24 @@ LL | foo,
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0635`.
|
For more information about this error, try `rustc --explain E0635`.
|
||||||
|
Couldn't compile the test.
|
||||||
|
---- $DIR/comment-in-attr-134221.rs - (line 23) stdout ----
|
||||||
|
error: this file contains an unclosed delimiter
|
||||||
|
--> $DIR/comment-in-attr-134221.rs:$LINE:$COL
|
||||||
|
|
|
||||||
|
LL | #![
|
||||||
|
| -^
|
||||||
|
| |
|
||||||
|
| unclosed delimiter
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
Couldn't compile the test.
|
Couldn't compile the test.
|
||||||
|
|
||||||
failures:
|
failures:
|
||||||
$DIR/comment-in-attr-134221.rs - (line 11)
|
$DIR/comment-in-attr-134221.rs - (line 11)
|
||||||
$DIR/comment-in-attr-134221.rs - (line 17)
|
$DIR/comment-in-attr-134221.rs - (line 17)
|
||||||
|
$DIR/comment-in-attr-134221.rs - (line 23)
|
||||||
|
|
||||||
test result: FAILED. 0 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME
|
test result: FAILED. 0 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue