- 
                Notifications
    
You must be signed in to change notification settings  - Fork 13.9k
 
          Suggest using an appropriate keyword for struct and enum
          #94996
        
          New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
  
    Suggest using an appropriate keyword for struct and enum
  
  #94996
              Conversation
| 
           r? @nagisa (rust-highfive has picked a reviewer for you, use r? to override)  | 
    
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
struct and enumstruct and enum
      There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like this shouldn't happen, the suggested replacement has 0 chance to work at all.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I fixed it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not entirely sure if we should be as trigger happy as proposed here about suggesting a different ADT type. I feel like it is much more likely that an ADT body will contain mistakes compared to user having specified a wrong kind of ADT.
Here it feels like the user was much more likely to just have forgetten to specify a type : _ for whatever reason. Though I could still see us making a suggestion as proposed here if there was at least one variant with data. That is in cases like these:
pub struct NotStruct {
    Variant,
    Variant2(u8),
}There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with nagisa's comment. I think that for a case as ambiguous as these we might be better served by pointing at all the relevant places and let the user figure what they wanted. That could be done for cases like this one by adding a label to the struct keyword saying "while parsing this struct".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The comment above is still valid. I would prefer to simplify the logic and "just" add a span_label pointing at the item type being parsed. The likelihood of false positives is too high as it is.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
start_span seems a little misnomer here, given that the span begins at the enum or struct keyword, rather than covering the entire item (i.e. including the qualifiers such as pub). Maybe something like keyword_span would work better?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Diagnostics in parser largely follow a “expected ...” style of messages. The suggested wording would likely be more consistent with the rest of the diagnostics coming from the parser.
| "the enum cannot have a struct field declaration", | |
| "expected an `enum` variant, found a field", | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we're handling structs, we should also handle unions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm, an union could also make sense here, wouldn't it? While it is comparatively much rarer, looking to define an enum like this may very well be thinking of an union in the first place.
| "consider using `struct` instead of `enum`", | |
| "consider defining a `struct` or an `union` instead of an `enum`", | 
Not entirely sure how or if span_suggestion can provide multiple alternative replacements, though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It might very well be that this suggestion is largely superfluous with the improved error message.
| 
           I'm going to pass this on to @estebank for a further review, since they have a better grasp over the overall direction of diagnostics in Rust.  | 
    
| 
           r? @estebank  | 
    
| 
           Let's make sure we have tests to avoid regressing on knock down errors (let's have a struct and enum with multiple variants and fields to see that we only emit a single error for them).  | 
    
| 
           @estebank  | 
    
| 
           Switching review labels until PR is ready again for review, thanks! @rustbot author  | 
    
c0d2c11    to
    f49601d      
    Compare
  
    | 
           ☔ The latest upstream changes (presumably #96528) made this pull request unmergeable. Please resolve the merge conflicts.  | 
    
…nion-ident, r=estebank Add a label to struct/enum/union ident name Based on rust-lang#94996 (comment) cc: ``@estebank``
…on-ident, r=estebank Add a label to struct/enum/union ident name Based on rust-lang#94996 (comment) cc: `@estebank`
closes #75770