Skip to content

Commit

Permalink
Add error checks for duplicate attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
tjkirch committed Jul 26, 2019
1 parent 8c33848 commit b8e438b
Show file tree
Hide file tree
Showing 3 changed files with 337 additions and 43 deletions.
51 changes: 51 additions & 0 deletions compatibility-tests/compile-fail/tests/ui/attribute-duplication.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
mod enum_duplication {
use snafu::Snafu;

#[derive(Debug, Snafu)]
#[snafu(visibility(pub))]
#[snafu(visibility(pub))]
enum EnumError {
#[snafu(display("an error variant"))]
#[snafu(display("should not allow duplicate display"))]
#[snafu(visibility(pub))]
#[snafu(visibility(pub))]
AVariant {
#[snafu(source(from(EnumError, Box::new)))]
#[snafu(backtrace(delegate))]
source: Box<EnumError>,
#[snafu(source(from(EnumError, Box::new)))]
#[snafu(backtrace(delegate))]
source2: Box<EnumError>,
#[snafu(source)]
#[snafu(backtrace(delegate))]
source3: String,
#[snafu(source)]
#[snafu(source)]
#[snafu(backtrace(delegate))]
source4: String,

#[snafu(backtrace)]
backtrace1: String,
#[snafu(backtrace)]
backtrace2: String,
#[snafu(backtrace)]
#[snafu(backtrace)]
#[snafu(backtrace)]
backtrace3: String,
},
}
}

mod struct_duplication {
use snafu::Snafu;

#[derive(Debug, Snafu)]
enum UsableError {}

#[derive(Debug, Snafu)]
#[snafu(source(from(UsableError, Box::new)))]
#[snafu(source(from(UsableError, Box::new)))]
struct StructError(Box<UsableError>);
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
error: Multiple 'visibility' attributes are not supported on an error enum; found a duplicate here:
--> $DIR/attribute-duplication.rs:7:10
|
7 | enum EnumError {
| ^^^^^^^^^

error: Multiple 'source' attributes are not supported on one field; found a duplicate here:
--> $DIR/attribute-duplication.rs:25:13
|
25 | source4: String,
| ^^^^^^^

error: Multiple 'backtrace' attributes are not supported on one field; found a duplicate here:
--> $DIR/attribute-duplication.rs:34:13
|
34 | backtrace3: String,
| ^^^^^^^^^^

error: Multiple 'source' attributes are not supported within an error variant; found a duplicate here:
--> $DIR/attribute-duplication.rs:21:13
|
21 | source3: String,
| ^^^^^^^

error: Multiple 'source' attributes are not supported within an error variant; found a duplicate here:
--> $DIR/attribute-duplication.rs:25:13
|
25 | source4: String,
| ^^^^^^^

error: Multiple 'backtrace' attributes are not supported within an error variant; found a duplicate here:
--> $DIR/attribute-duplication.rs:30:13
|
30 | backtrace2: String,
| ^^^^^^^^^^

error: Multiple 'backtrace' attributes are not supported within an error variant; found a duplicate here:
--> $DIR/attribute-duplication.rs:34:13
|
34 | backtrace3: String,
| ^^^^^^^^^^

error: Multiple 'backtrace(delegate)' attributes are not supported within an error variant; found a duplicate here:
--> $DIR/attribute-duplication.rs:21:13
|
21 | source3: String,
| ^^^^^^^

error: Multiple 'backtrace(delegate)' attributes are not supported within an error variant; found a duplicate here:
--> $DIR/attribute-duplication.rs:25:13
|
25 | source4: String,
| ^^^^^^^

error: Cannot have 'backtrace' and 'backtrace(delegate)' fields in the same error variant
--> $DIR/attribute-duplication.rs:28:13
|
28 | backtrace1: String,
| ^^^^^^^^^^

error: Cannot have 'backtrace' and 'backtrace(delegate)' fields in the same error variant
--> $DIR/attribute-duplication.rs:15:13
|
15 | source: Box<EnumError>,
| ^^^^^^

error: Multiple 'display' attributes are not supported on an error variant; found a duplicate here:
--> $DIR/attribute-duplication.rs:12:9
|
12 | AVariant {
| ^^^^^^^^

error: Multiple 'visibility' attributes are not supported on an error variant; found a duplicate here:
--> $DIR/attribute-duplication.rs:12:9
|
12 | AVariant {
| ^^^^^^^^

error: Multiple 'source(from)' attributes are not supported on an error struct; found a duplicate here:
--> $DIR/attribute-duplication.rs:47:25
|
47 | #[snafu(source(from(UsableError, Box::new)))]
| ^^^^^^^^^^^
Loading

0 comments on commit b8e438b

Please sign in to comment.