diff --git a/tests/codegen/fail/input-object/derive_incompatible_field_type.stderr b/tests/codegen/fail/input-object/derive_incompatible_field_type.stderr
index 46abf94a..21bf4014 100644
--- a/tests/codegen/fail/input-object/derive_incompatible_field_type.stderr
+++ b/tests/codegen/fail/input-object/derive_incompatible_field_type.stderr
@@ -1,46 +1,47 @@
 error[E0277]: the trait bound `ObjectA: IsInputType<__S>` is not satisfied
- --> fail/input-object/derive_incompatible_field_type.rs:8:10
-  |
-8 | #[derive(GraphQLInputObject)]
-  |          ^^^^^^^^^^^^^^^^^^ the trait `IsInputType<__S>` is not implemented for `ObjectA`
-  |
-  = help: the following other types implement trait `IsInputType<S>`:
-            <bool as IsInputType<__S>>
-            <i32 as IsInputType<__S>>
-            <f64 as IsInputType<__S>>
-            <Object as IsInputType<__S>>
-            <Box<T> as IsInputType<S>>
-            <uuid::Uuid as IsInputType<__S>>
-            <url::Url as IsInputType<__S>>
-            <bson::datetime::DateTime as IsInputType<__S>>
-          and $N others
-  = note: this error originates in the derive macro `GraphQLInputObject` (in Nightly builds, run with -Z macro-backtrace for more info)
+  --> fail/input-object/derive_incompatible_field_type.rs:10:12
+   |
+10 |     field: ObjectA,
+   |            ^^^^^^^ the trait `IsInputType<__S>` is not implemented for `ObjectA`
+   |
+   = help: the following other types implement trait `IsInputType<S>`:
+             <bool as IsInputType<__S>>
+             <i32 as IsInputType<__S>>
+             <f64 as IsInputType<__S>>
+             <Object as IsInputType<__S>>
+             <Box<T> as IsInputType<S>>
+             <uuid::Uuid as IsInputType<__S>>
+             <url::Url as IsInputType<__S>>
+             <bson::datetime::DateTime as IsInputType<__S>>
+           and $N others
 
 error[E0277]: the trait bound `ObjectA: FromInputValue<__S>` is not satisfied
- --> fail/input-object/derive_incompatible_field_type.rs:8:10
-  |
-8 | #[derive(GraphQLInputObject)]
-  |          ^^^^^^^^^^^^^^^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjectA`
-  |
-  = help: the following other types implement trait `FromInputValue<S>`:
-            <bool as FromInputValue<__S>>
-            <i32 as FromInputValue<__S>>
-            <f64 as FromInputValue<__S>>
-            <Object as FromInputValue<__S>>
-            <Box<T> as FromInputValue<S>>
-            <uuid::Uuid as FromInputValue<__S>>
-            <url::Url as FromInputValue<__S>>
-            <bson::datetime::DateTime as FromInputValue<__S>>
-          and $N others
+  --> fail/input-object/derive_incompatible_field_type.rs:10:12
+   |
+8  | #[derive(GraphQLInputObject)]
+   |          ------------------ required by a bound introduced by this call
+9  | struct Object {
+10 |     field: ObjectA,
+   |            ^^^^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjectA`
+   |
+   = help: the following other types implement trait `FromInputValue<S>`:
+             <bool as FromInputValue<__S>>
+             <i32 as FromInputValue<__S>>
+             <f64 as FromInputValue<__S>>
+             <Object as FromInputValue<__S>>
+             <Box<T> as FromInputValue<S>>
+             <uuid::Uuid as FromInputValue<__S>>
+             <url::Url as FromInputValue<__S>>
+             <bson::datetime::DateTime as FromInputValue<__S>>
+           and $N others
 note: required by a bound in `Registry::<'r, S>::arg`
- --> $WORKSPACE/juniper/src/executor/mod.rs
-  |
-  |     pub fn arg<T>(&mut self, name: &str, info: &T::TypeInfo) -> Argument<'r, S>
-  |            --- required by a bound in this associated function
-  |     where
-  |         T: GraphQLType<S> + FromInputValue<S>,
-  |                             ^^^^^^^^^^^^^^^^^ required by this bound in `Registry::<'r, S>::arg`
-  = note: this error originates in the derive macro `GraphQLInputObject` (in Nightly builds, run with -Z macro-backtrace for more info)
+  --> $WORKSPACE/juniper/src/executor/mod.rs
+   |
+   |     pub fn arg<T>(&mut self, name: &str, info: &T::TypeInfo) -> Argument<'r, S>
+   |            --- required by a bound in this associated function
+   |     where
+   |         T: GraphQLType<S> + FromInputValue<S>,
+   |                             ^^^^^^^^^^^^^^^^^ required by this bound in `Registry::<'r, S>::arg`
 
 error[E0277]: the trait bound `ObjectA: FromInputValue<__S>` is not satisfied
  --> fail/input-object/derive_incompatible_field_type.rs:8:10
diff --git a/tests/codegen/fail/interface/trait/argument_non_input_type.stderr b/tests/codegen/fail/interface/trait/argument_non_input_type.stderr
index b620480b..a6af9595 100644
--- a/tests/codegen/fail/interface/trait/argument_non_input_type.stderr
+++ b/tests/codegen/fail/interface/trait/argument_non_input_type.stderr
@@ -1,42 +1,44 @@
 error[E0277]: the trait bound `ObjA: IsInputType<__S>` is not satisfied
- --> fail/interface/trait/argument_non_input_type.rs:8:1
-  |
-8 | #[graphql_interface]
-  | ^^^^^^^^^^^^^^^^^^^^ the trait `IsInputType<__S>` is not implemented for `ObjA`
-  |
-  = help: the following other types implement trait `IsInputType<S>`:
-            <bool as IsInputType<__S>>
-            <i32 as IsInputType<__S>>
-            <f64 as IsInputType<__S>>
-            <Box<T> as IsInputType<S>>
-            <uuid::Uuid as IsInputType<__S>>
-            <url::Url as IsInputType<__S>>
-            <bson::datetime::DateTime as IsInputType<__S>>
-            <juniper::schema::model::DirectiveLocation as IsInputType<__S>>
-          and $N others
+  --> fail/interface/trait/argument_non_input_type.rs:10:23
+   |
+10 |     fn id(&self, obj: ObjA) -> &str;
+   |                       ^^^^ the trait `IsInputType<__S>` is not implemented for `ObjA`
+   |
+   = help: the following other types implement trait `IsInputType<S>`:
+             <bool as IsInputType<__S>>
+             <i32 as IsInputType<__S>>
+             <f64 as IsInputType<__S>>
+             <Box<T> as IsInputType<S>>
+             <uuid::Uuid as IsInputType<__S>>
+             <url::Url as IsInputType<__S>>
+             <bson::datetime::DateTime as IsInputType<__S>>
+             <juniper::schema::model::DirectiveLocation as IsInputType<__S>>
+           and $N others
 
 error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
- --> fail/interface/trait/argument_non_input_type.rs:8:1
-  |
-8 | #[graphql_interface]
-  | ^^^^^^^^^^^^^^^^^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjA`
-  |
-  = help: the following other types implement trait `FromInputValue<S>`:
-            <bool as FromInputValue<__S>>
-            <i32 as FromInputValue<__S>>
-            <f64 as FromInputValue<__S>>
-            <Box<T> as FromInputValue<S>>
-            <uuid::Uuid as FromInputValue<__S>>
-            <url::Url as FromInputValue<__S>>
-            <bson::datetime::DateTime as FromInputValue<__S>>
-            <juniper::schema::model::DirectiveLocation as FromInputValue<__S>>
-          and $N others
+  --> fail/interface/trait/argument_non_input_type.rs:10:23
+   |
+8  | #[graphql_interface]
+   | -------------------- required by a bound introduced by this call
+9  | trait Character {
+10 |     fn id(&self, obj: ObjA) -> &str;
+   |                       ^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjA`
+   |
+   = help: the following other types implement trait `FromInputValue<S>`:
+             <bool as FromInputValue<__S>>
+             <i32 as FromInputValue<__S>>
+             <f64 as FromInputValue<__S>>
+             <Box<T> as FromInputValue<S>>
+             <uuid::Uuid as FromInputValue<__S>>
+             <url::Url as FromInputValue<__S>>
+             <bson::datetime::DateTime as FromInputValue<__S>>
+             <juniper::schema::model::DirectiveLocation as FromInputValue<__S>>
+           and $N others
 note: required by a bound in `Registry::<'r, S>::arg`
- --> $WORKSPACE/juniper/src/executor/mod.rs
-  |
-  |     pub fn arg<T>(&mut self, name: &str, info: &T::TypeInfo) -> Argument<'r, S>
-  |            --- required by a bound in this associated function
-  |     where
-  |         T: GraphQLType<S> + FromInputValue<S>,
-  |                             ^^^^^^^^^^^^^^^^^ required by this bound in `Registry::<'r, S>::arg`
-  = note: this error originates in the attribute macro `graphql_interface` (in Nightly builds, run with -Z macro-backtrace for more info)
+  --> $WORKSPACE/juniper/src/executor/mod.rs
+   |
+   |     pub fn arg<T>(&mut self, name: &str, info: &T::TypeInfo) -> Argument<'r, S>
+   |            --- required by a bound in this associated function
+   |     where
+   |         T: GraphQLType<S> + FromInputValue<S>,
+   |                             ^^^^^^^^^^^^^^^^^ required by this bound in `Registry::<'r, S>::arg`
diff --git a/tests/codegen/fail/object/argument_non_input_type.stderr b/tests/codegen/fail/object/argument_non_input_type.stderr
index 15560aad..323928ff 100644
--- a/tests/codegen/fail/object/argument_non_input_type.stderr
+++ b/tests/codegen/fail/object/argument_non_input_type.stderr
@@ -1,8 +1,8 @@
 error[E0277]: the trait bound `ObjA: IsInputType<__S>` is not satisfied
-  --> fail/object/argument_non_input_type.rs:10:1
+  --> fail/object/argument_non_input_type.rs:12:23
    |
-10 | #[graphql_object]
-   | ^^^^^^^^^^^^^^^^^ the trait `IsInputType<__S>` is not implemented for `ObjA`
+12 |     fn id(&self, obj: ObjA) -> &str {
+   |                       ^^^^ the trait `IsInputType<__S>` is not implemented for `ObjA`
    |
    = help: the following other types implement trait `IsInputType<S>`:
              <bool as IsInputType<__S>>
@@ -16,10 +16,13 @@ error[E0277]: the trait bound `ObjA: IsInputType<__S>` is not satisfied
            and $N others
 
 error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
-  --> fail/object/argument_non_input_type.rs:10:1
+  --> fail/object/argument_non_input_type.rs:12:23
    |
 10 | #[graphql_object]
-   | ^^^^^^^^^^^^^^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjA`
+   | ----------------- required by a bound introduced by this call
+11 | impl ObjB {
+12 |     fn id(&self, obj: ObjA) -> &str {
+   |                       ^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjA`
    |
    = help: the following other types implement trait `FromInputValue<S>`:
              <bool as FromInputValue<__S>>
@@ -39,7 +42,6 @@ note: required by a bound in `Registry::<'r, S>::arg`
    |     where
    |         T: GraphQLType<S> + FromInputValue<S>,
    |                             ^^^^^^^^^^^^^^^^^ required by this bound in `Registry::<'r, S>::arg`
-   = note: this error originates in the attribute macro `graphql_object` (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
   --> fail/object/argument_non_input_type.rs:10:1
@@ -58,3 +60,20 @@ error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
              <juniper::schema::model::DirectiveLocation as FromInputValue<__S>>
            and $N others
    = note: this error originates in the attribute macro `graphql_object` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
+  --> fail/object/argument_non_input_type.rs:12:23
+   |
+12 |     fn id(&self, obj: ObjA) -> &str {
+   |                       ^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjA`
+   |
+   = help: the following other types implement trait `FromInputValue<S>`:
+             <bool as FromInputValue<__S>>
+             <i32 as FromInputValue<__S>>
+             <f64 as FromInputValue<__S>>
+             <Box<T> as FromInputValue<S>>
+             <uuid::Uuid as FromInputValue<__S>>
+             <url::Url as FromInputValue<__S>>
+             <bson::datetime::DateTime as FromInputValue<__S>>
+             <juniper::schema::model::DirectiveLocation as FromInputValue<__S>>
+           and $N others
diff --git a/tests/codegen/fail/subscription/argument_non_input_type.stderr b/tests/codegen/fail/subscription/argument_non_input_type.stderr
index 3d60b095..baded3fd 100644
--- a/tests/codegen/fail/subscription/argument_non_input_type.stderr
+++ b/tests/codegen/fail/subscription/argument_non_input_type.stderr
@@ -7,10 +7,10 @@ warning: unused variable: `obj`
    = note: `#[warn(unused_variables)]` on by default
 
 error[E0277]: the trait bound `ObjA: IsInputType<__S>` is not satisfied
-  --> fail/subscription/argument_non_input_type.rs:15:1
+  --> fail/subscription/argument_non_input_type.rs:17:29
    |
-15 | #[graphql_subscription]
-   | ^^^^^^^^^^^^^^^^^^^^^^^ the trait `IsInputType<__S>` is not implemented for `ObjA`
+17 |     async fn id(&self, obj: ObjA) -> Stream<'static, &'static str> {
+   |                             ^^^^ the trait `IsInputType<__S>` is not implemented for `ObjA`
    |
    = help: the following other types implement trait `IsInputType<S>`:
              <bool as IsInputType<__S>>
@@ -24,10 +24,13 @@ error[E0277]: the trait bound `ObjA: IsInputType<__S>` is not satisfied
            and $N others
 
 error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
-  --> fail/subscription/argument_non_input_type.rs:15:1
+  --> fail/subscription/argument_non_input_type.rs:17:29
    |
 15 | #[graphql_subscription]
-   | ^^^^^^^^^^^^^^^^^^^^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjA`
+   | ----------------------- required by a bound introduced by this call
+16 | impl ObjB {
+17 |     async fn id(&self, obj: ObjA) -> Stream<'static, &'static str> {
+   |                             ^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjA`
    |
    = help: the following other types implement trait `FromInputValue<S>`:
              <bool as FromInputValue<__S>>
@@ -47,7 +50,6 @@ note: required by a bound in `Registry::<'r, S>::arg`
    |     where
    |         T: GraphQLType<S> + FromInputValue<S>,
    |                             ^^^^^^^^^^^^^^^^^ required by this bound in `Registry::<'r, S>::arg`
-   = note: this error originates in the attribute macro `graphql_subscription` (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
   --> fail/subscription/argument_non_input_type.rs:15:1
@@ -66,3 +68,20 @@ error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
              <juniper::schema::model::DirectiveLocation as FromInputValue<__S>>
            and $N others
    = note: this error originates in the attribute macro `graphql_subscription` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0277]: the trait bound `ObjA: FromInputValue<__S>` is not satisfied
+  --> fail/subscription/argument_non_input_type.rs:17:29
+   |
+17 |     async fn id(&self, obj: ObjA) -> Stream<'static, &'static str> {
+   |                             ^^^^ the trait `FromInputValue<__S>` is not implemented for `ObjA`
+   |
+   = help: the following other types implement trait `FromInputValue<S>`:
+             <bool as FromInputValue<__S>>
+             <i32 as FromInputValue<__S>>
+             <f64 as FromInputValue<__S>>
+             <Box<T> as FromInputValue<S>>
+             <uuid::Uuid as FromInputValue<__S>>
+             <url::Url as FromInputValue<__S>>
+             <bson::datetime::DateTime as FromInputValue<__S>>
+             <juniper::schema::model::DirectiveLocation as FromInputValue<__S>>
+           and $N others
diff --git a/tests/codegen/fail/union/enum_non_object_variant.stderr b/tests/codegen/fail/union/enum_non_object_variant.stderr
index 3e75bb5a..c0356aa3 100644
--- a/tests/codegen/fail/union/enum_non_object_variant.stderr
+++ b/tests/codegen/fail/union/enum_non_object_variant.stderr
@@ -1,17 +1,16 @@
 error[E0277]: the trait bound `Test: GraphQLObject<__S>` is not satisfied
- --> fail/union/enum_non_object_variant.rs:9:10
-  |
-9 | #[derive(GraphQLUnion)]
-  |          ^^^^^^^^^^^^ the trait `GraphQLObject<__S>` is not implemented for `Test`
-  |
-  = help: the following other types implement trait `GraphQLObject<S>`:
-            <Box<T> as GraphQLObject<S>>
-            <juniper::meta::Field<'a, S> as GraphQLObject<S>>
-            <Argument<'a, S> as GraphQLObject<S>>
-            <EnumValue as GraphQLObject<__S>>
-            <SchemaType<'a, S> as GraphQLObject<S>>
-            <juniper::schema::model::TypeType<'a, S> as GraphQLObject<S>>
-            <juniper::schema::model::DirectiveType<'a, S> as GraphQLObject<S>>
-            <Arc<T> as GraphQLObject<S>>
-            <&T as GraphQLObject<S>>
-  = note: this error originates in the derive macro `GraphQLUnion` (in Nightly builds, run with -Z macro-backtrace for more info)
+  --> fail/union/enum_non_object_variant.rs:11:10
+   |
+11 |     Test(Test),
+   |          ^^^^ the trait `GraphQLObject<__S>` is not implemented for `Test`
+   |
+   = help: the following other types implement trait `GraphQLObject<S>`:
+             <Box<T> as GraphQLObject<S>>
+             <juniper::meta::Field<'a, S> as GraphQLObject<S>>
+             <Argument<'a, S> as GraphQLObject<S>>
+             <EnumValue as GraphQLObject<__S>>
+             <SchemaType<'a, S> as GraphQLObject<S>>
+             <juniper::schema::model::TypeType<'a, S> as GraphQLObject<S>>
+             <juniper::schema::model::DirectiveType<'a, S> as GraphQLObject<S>>
+             <Arc<T> as GraphQLObject<S>>
+             <&T as GraphQLObject<S>>
diff --git a/tests/codegen/fail/union/struct_non_object_variant.stderr b/tests/codegen/fail/union/struct_non_object_variant.stderr
index ebbb6a18..934344c6 100644
--- a/tests/codegen/fail/union/struct_non_object_variant.stderr
+++ b/tests/codegen/fail/union/struct_non_object_variant.stderr
@@ -1,17 +1,16 @@
 error[E0277]: the trait bound `Test: GraphQLObject<__S>` is not satisfied
- --> fail/union/struct_non_object_variant.rs:9:10
-  |
-9 | #[derive(GraphQLUnion)]
-  |          ^^^^^^^^^^^^ the trait `GraphQLObject<__S>` is not implemented for `Test`
-  |
-  = help: the following other types implement trait `GraphQLObject<S>`:
-            <Box<T> as GraphQLObject<S>>
-            <juniper::meta::Field<'a, S> as GraphQLObject<S>>
-            <Argument<'a, S> as GraphQLObject<S>>
-            <EnumValue as GraphQLObject<__S>>
-            <SchemaType<'a, S> as GraphQLObject<S>>
-            <juniper::schema::model::TypeType<'a, S> as GraphQLObject<S>>
-            <juniper::schema::model::DirectiveType<'a, S> as GraphQLObject<S>>
-            <Arc<T> as GraphQLObject<S>>
-            <&T as GraphQLObject<S>>
-  = note: this error originates in the derive macro `GraphQLUnion` (in Nightly builds, run with -Z macro-backtrace for more info)
+  --> fail/union/struct_non_object_variant.rs:10:14
+   |
+10 | #[graphql(on Test = Character::a)]
+   |              ^^^^ the trait `GraphQLObject<__S>` is not implemented for `Test`
+   |
+   = help: the following other types implement trait `GraphQLObject<S>`:
+             <Box<T> as GraphQLObject<S>>
+             <juniper::meta::Field<'a, S> as GraphQLObject<S>>
+             <Argument<'a, S> as GraphQLObject<S>>
+             <EnumValue as GraphQLObject<__S>>
+             <SchemaType<'a, S> as GraphQLObject<S>>
+             <juniper::schema::model::TypeType<'a, S> as GraphQLObject<S>>
+             <juniper::schema::model::DirectiveType<'a, S> as GraphQLObject<S>>
+             <Arc<T> as GraphQLObject<S>>
+             <&T as GraphQLObject<S>>
diff --git a/tests/codegen/fail/union/trait_non_object_variant.stderr b/tests/codegen/fail/union/trait_non_object_variant.stderr
index 6ff1aeb9..60214759 100644
--- a/tests/codegen/fail/union/trait_non_object_variant.stderr
+++ b/tests/codegen/fail/union/trait_non_object_variant.stderr
@@ -1,17 +1,16 @@
 error[E0277]: the trait bound `Test: GraphQLObject<__S>` is not satisfied
- --> fail/union/trait_non_object_variant.rs:9:1
-  |
-9 | #[graphql_union]
-  | ^^^^^^^^^^^^^^^^ the trait `GraphQLObject<__S>` is not implemented for `Test`
-  |
-  = help: the following other types implement trait `GraphQLObject<S>`:
-            <Box<T> as GraphQLObject<S>>
-            <juniper::meta::Field<'a, S> as GraphQLObject<S>>
-            <Argument<'a, S> as GraphQLObject<S>>
-            <EnumValue as GraphQLObject<__S>>
-            <SchemaType<'a, S> as GraphQLObject<S>>
-            <juniper::schema::model::TypeType<'a, S> as GraphQLObject<S>>
-            <juniper::schema::model::DirectiveType<'a, S> as GraphQLObject<S>>
-            <Arc<T> as GraphQLObject<S>>
-            <&T as GraphQLObject<S>>
-  = note: this error originates in the attribute macro `graphql_union` (in Nightly builds, run with -Z macro-backtrace for more info)
+  --> fail/union/trait_non_object_variant.rs:11:28
+   |
+11 |     fn a(&self) -> Option<&Test>;
+   |                            ^^^^ the trait `GraphQLObject<__S>` is not implemented for `Test`
+   |
+   = help: the following other types implement trait `GraphQLObject<S>`:
+             <Box<T> as GraphQLObject<S>>
+             <juniper::meta::Field<'a, S> as GraphQLObject<S>>
+             <Argument<'a, S> as GraphQLObject<S>>
+             <EnumValue as GraphQLObject<__S>>
+             <SchemaType<'a, S> as GraphQLObject<S>>
+             <juniper::schema::model::TypeType<'a, S> as GraphQLObject<S>>
+             <juniper::schema::model::DirectiveType<'a, S> as GraphQLObject<S>>
+             <Arc<T> as GraphQLObject<S>>
+             <&T as GraphQLObject<S>>