@@ -494,81 +494,72 @@ impl<'a> DeclValidator<'a> {
494494 IdentType :: Enum ,
495495 ) ;
496496
497- // Check the field names.
498- let enum_variants_replacements = data
497+ // Check the variant names.
498+ self . validate_enum_variants ( enum_id)
499+ }
500+
501+ /// Check incorrect names for enum variants.
502+ fn validate_enum_variants ( & mut self , enum_id : EnumId ) {
503+ let data = self . db . enum_data ( enum_id) ;
504+ let mut enum_variants_replacements = data
499505 . variants
500506 . iter ( )
501507 . filter_map ( |( _, name) | {
502- Some ( Replacement {
508+ to_camel_case ( & name . to_smol_str ( ) ) . map ( |new_name| Replacement {
503509 current_name : name. clone ( ) ,
504- suggested_text : to_camel_case ( & name . to_smol_str ( ) ) ? ,
510+ suggested_text : new_name ,
505511 expected_case : CaseType :: UpperCamelCase ,
506512 } )
507513 } )
508- . collect ( ) ;
509-
510- // If there is at least one element to spawn a warning on, go to the source map and generate a warning.
511- self . create_incorrect_case_diagnostic_for_enum_variants ( enum_id, enum_variants_replacements)
512- }
514+ . peekable ( ) ;
513515
514- /// Given the information about incorrect names for enum variants,
515- /// looks up into the source code for exact locations and adds diagnostics into the sink.
516- fn create_incorrect_case_diagnostic_for_enum_variants (
517- & mut self ,
518- enum_id : EnumId ,
519- enum_variants_replacements : Vec < Replacement > ,
520- ) {
521516 // XXX: only look at sources if we do have incorrect names
522- if enum_variants_replacements. is_empty ( ) {
517+ if enum_variants_replacements. peek ( ) . is_none ( ) {
523518 return ;
524519 }
525520
526521 let enum_loc = enum_id. lookup ( self . db . upcast ( ) ) ;
527522 let enum_src = enum_loc. source ( self . db . upcast ( ) ) ;
528523
529- let enum_variants_list = match enum_src. value . variant_list ( ) {
530- Some ( variants) => variants,
531- _ => {
532- always ! (
533- enum_variants_replacements. is_empty( ) ,
534- "Replacements ({:?}) were generated for a enum variants which had no fields list: {:?}" ,
535- enum_variants_replacements,
536- enum_src
537- ) ;
538- return ;
539- }
524+ let Some ( enum_variants_list) = enum_src. value . variant_list ( ) else {
525+ always ! (
526+ enum_variants_replacements. peek( ) . is_none( ) ,
527+ "Replacements ({:?}) were generated for enum variants \
528+ which had no fields list: {:?}",
529+ enum_variants_replacements,
530+ enum_src
531+ ) ;
532+ return ;
540533 } ;
541534 let mut enum_variants_iter = enum_variants_list. variants ( ) ;
542- for variant_to_rename in enum_variants_replacements {
535+ for variant_replacement in enum_variants_replacements {
543536 // We assume that parameters in replacement are in the same order as in the
544537 // actual params list, but just some of them (ones that named correctly) are skipped.
545- let ast_ptr = loop {
546- match enum_variants_iter. next ( ) . and_then ( |v| v. name ( ) ) {
547- Some ( variant_name) => {
548- if variant_name. as_name ( ) == variant_to_rename. current_name {
549- break variant_name;
550- }
551- }
552- None => {
553- never ! (
554- "Replacement ({:?}) was generated for a enum variant which was not found: {:?}" ,
555- variant_to_rename, enum_src
556- ) ;
557- return ;
538+ let variant = loop {
539+ if let Some ( variant) = enum_variants_iter. next ( ) {
540+ let Some ( variant_name) = variant. name ( ) else {
541+ continue ;
542+ } ;
543+ if variant_name. as_name ( ) == variant_replacement. current_name {
544+ break variant;
558545 }
546+ } else {
547+ never ! (
548+ "Replacement ({:?}) was generated for an enum variant \
549+ which was not found: {:?}",
550+ variant_replacement,
551+ enum_src
552+ ) ;
553+ return ;
559554 }
560555 } ;
561556
562- let diagnostic = IncorrectCase {
563- file : enum_src. file_id ,
564- ident_type : IdentType :: Variant ,
565- ident : AstPtr :: new ( & ast_ptr) ,
566- expected_case : variant_to_rename. expected_case ,
567- ident_text : variant_to_rename. current_name . display ( self . db . upcast ( ) ) . to_string ( ) ,
568- suggested_text : variant_to_rename. suggested_text ,
569- } ;
570-
571- self . sink . push ( diagnostic) ;
557+ self . create_incorrect_case_diagnostic_for_ast_node (
558+ variant_replacement,
559+ enum_src. file_id ,
560+ & variant,
561+ IdentType :: Variant ,
562+ ) ;
572563 }
573564 }
574565
0 commit comments