suggest path for tuple struct
This commit is contained in:
parent
b2804655f5
commit
564cb87e27
3 changed files with 52 additions and 1 deletions
|
@ -1026,9 +1026,15 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
|
||||||
|
|
||||||
self.suggest_using_enum_variant(err, source, def_id, span);
|
self.suggest_using_enum_variant(err, source, def_id, span);
|
||||||
}
|
}
|
||||||
(Res::Def(DefKind::Struct, def_id), _) if ns == ValueNS => {
|
(Res::Def(DefKind::Struct, def_id), source) if ns == ValueNS => {
|
||||||
let (ctor_def, ctor_vis, fields) =
|
let (ctor_def, ctor_vis, fields) =
|
||||||
if let Some(struct_ctor) = self.r.struct_constructors.get(&def_id).cloned() {
|
if let Some(struct_ctor) = self.r.struct_constructors.get(&def_id).cloned() {
|
||||||
|
if let PathSource::Expr(Some(parent)) = source {
|
||||||
|
if let ExprKind::Field(..) | ExprKind::MethodCall(..) = parent.kind {
|
||||||
|
bad_struct_syntax_suggestion(def_id);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
struct_ctor
|
struct_ctor
|
||||||
} else {
|
} else {
|
||||||
bad_struct_syntax_suggestion(def_id);
|
bad_struct_syntax_suggestion(def_id);
|
||||||
|
|
26
src/test/ui/resolve/suggest-path-for-tuple-struct.rs
Normal file
26
src/test/ui/resolve/suggest-path-for-tuple-struct.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
mod module {
|
||||||
|
pub struct SomeTupleStruct(u8);
|
||||||
|
pub struct SomeRegularStruct {
|
||||||
|
foo: u8
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SomeTupleStruct {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl SomeRegularStruct {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self { foo: 0 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
use module::{SomeTupleStruct, SomeRegularStruct};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = SomeTupleStruct.new();
|
||||||
|
//~^ ERROR expected value, found struct `SomeTupleStruct`
|
||||||
|
let _ = SomeRegularStruct.new();
|
||||||
|
//~^ ERROR expected value, found struct `SomeRegularStruct`
|
||||||
|
}
|
19
src/test/ui/resolve/suggest-path-for-tuple-struct.stderr
Normal file
19
src/test/ui/resolve/suggest-path-for-tuple-struct.stderr
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
error[E0423]: expected value, found struct `SomeTupleStruct`
|
||||||
|
--> $DIR/suggest-path-for-tuple-struct.rs:22:13
|
||||||
|
|
|
||||||
|
LL | let _ = SomeTupleStruct.new();
|
||||||
|
| ^^^^^^^^^^^^^^^----
|
||||||
|
| |
|
||||||
|
| help: use the path separator to refer to an item: `SomeTupleStruct::new`
|
||||||
|
|
||||||
|
error[E0423]: expected value, found struct `SomeRegularStruct`
|
||||||
|
--> $DIR/suggest-path-for-tuple-struct.rs:24:13
|
||||||
|
|
|
||||||
|
LL | let _ = SomeRegularStruct.new();
|
||||||
|
| ^^^^^^^^^^^^^^^^^----
|
||||||
|
| |
|
||||||
|
| help: use the path separator to refer to an item: `SomeRegularStruct::new`
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0423`.
|
Loading…
Add table
Add a link
Reference in a new issue