@@ -25,7 +25,7 @@ use std::fmt;
25
25
use base_db:: { AnchoredPathBuf , FileId , FileRange } ;
26
26
use either:: Either ;
27
27
use hir:: { FieldSource , HirFileIdExt , InFile , ModuleSource , Semantics } ;
28
- use span:: SyntaxContextId ;
28
+ use span:: { Edition , SyntaxContextId } ;
29
29
use stdx:: { never, TupleExt } ;
30
30
use syntax:: {
31
31
ast:: { self , HasName } ,
@@ -227,7 +227,8 @@ fn rename_mod(
227
227
module : hir:: Module ,
228
228
new_name : & str ,
229
229
) -> Result < SourceChange > {
230
- if IdentifierKind :: classify ( new_name) ? != IdentifierKind :: Ident {
230
+ if IdentifierKind :: classify ( module. krate ( ) . edition ( sema. db ) , new_name) ? != IdentifierKind :: Ident
231
+ {
231
232
bail ! ( "Invalid name `{0}`: cannot rename module to {0}" , new_name) ;
232
233
}
233
234
@@ -313,7 +314,12 @@ fn rename_reference(
313
314
def : Definition ,
314
315
new_name : & str ,
315
316
) -> 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
+ ) ?;
317
323
318
324
if matches ! (
319
325
def,
@@ -605,8 +611,8 @@ pub enum IdentifierKind {
605
611
}
606
612
607
613
impl 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) {
610
616
Some ( res) => match res {
611
617
( SyntaxKind :: IDENT , _) => {
612
618
if let Some ( inner) = new_name. strip_prefix ( "r#" ) {
0 commit comments