@@ -25,7 +25,7 @@ use std::fmt;
2525use base_db:: { AnchoredPathBuf , FileId , FileRange } ;
2626use either:: Either ;
2727use hir:: { FieldSource , HirFileIdExt , InFile , ModuleSource , Semantics } ;
28- use span:: SyntaxContextId ;
28+ use span:: { Edition , SyntaxContextId } ;
2929use stdx:: { never, TupleExt } ;
3030use syntax:: {
3131 ast:: { self , HasName } ,
@@ -227,7 +227,8 @@ fn rename_mod(
227227 module : hir:: Module ,
228228 new_name : & str ,
229229) -> Result < SourceChange > {
230- if IdentifierKind :: classify ( new_name) ? != IdentifierKind :: Ident {
230+ if IdentifierKind :: classify ( module. krate ( ) . edition ( sema. db ) , new_name) ? != IdentifierKind :: Ident
231+ {
231232 bail ! ( "Invalid name `{0}`: cannot rename module to {0}" , new_name) ;
232233 }
233234
@@ -313,7 +314,12 @@ fn rename_reference(
313314 def : Definition ,
314315 new_name : & str ,
315316) -> Result < SourceChange > {
316- let ident_kind = IdentifierKind :: classify ( new_name) ?;
317+ let ident_kind = IdentifierKind :: classify (
318+ def. krate ( sema. db )
319+ . ok_or_else ( || RenameError ( "definition has no krate?" . into ( ) ) ) ?
320+ . edition ( sema. db ) ,
321+ new_name,
322+ ) ?;
317323
318324 if matches ! (
319325 def,
@@ -605,8 +611,8 @@ pub enum IdentifierKind {
605611}
606612
607613impl IdentifierKind {
608- pub fn classify ( new_name : & str ) -> Result < IdentifierKind > {
609- match parser:: LexedStr :: single_token ( new_name) {
614+ pub fn classify ( edition : Edition , new_name : & str ) -> Result < IdentifierKind > {
615+ match parser:: LexedStr :: single_token ( edition , new_name) {
610616 Some ( res) => match res {
611617 ( SyntaxKind :: IDENT , _) => {
612618 if let Some ( inner) = new_name. strip_prefix ( "r#" ) {
0 commit comments