@@ -7,14 +7,21 @@ export default (proxy: ts.LanguageService, languageService: ts.LanguageService,
7
7
proxy . getEditsForFileRename = ( oldFilePath , newFilePath , formatOptions , preferences ) => {
8
8
let edits = languageService . getEditsForFileRename ( oldFilePath , newFilePath , formatOptions , preferences )
9
9
if ( c ( 'renameImportNameOfFileRename' ) ) {
10
- const predictedNameFromPath = ( p : string ) => camelCase ( p . split ( / [ / \\ ] / g) . pop ( ) ! . replace ( / \. .+ / , '' ) )
10
+ const predictedNameFromPath = ( p : string ) => {
11
+ const input = p . split ( / [ / \\ ] / g) . pop ( ) ! . replace ( / \. .+ / , '' )
12
+ const transformed = camelCase ( input )
13
+ // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
14
+ const isFirstUppercase = input && input . startsWith ( input [ 0 ] ! . toUpperCase ( ) )
15
+ return isFirstUppercase ? transformed [ 0 ] ! . toUpperCase ( ) + transformed . slice ( 1 ) : transformed
16
+ }
11
17
const oldPredictedName = predictedNameFromPath ( oldFilePath )
12
18
const newPredictedName = predictedNameFromPath ( newFilePath )
13
19
for ( const edit of edits ) {
14
20
const possiblyAddRename = ( identifier : ts . Identifier | undefined ) => {
15
21
if ( identifier ?. text !== oldPredictedName ) return
16
22
const sourceFile = languageService . getProgram ( ) ! . getSourceFile ( edit . fileName ) !
17
- const newRenameEdits = proxy . findRenameLocations ( edit . fileName , identifier . pos , false , false , preferences ?? { } ) ?? [ ]
23
+ const newRenameEdits =
24
+ proxy . findRenameLocations ( edit . fileName , identifier . pos + identifier . getLeadingTriviaWidth ( ) , false , false , preferences ?? { } ) ?? [ ]
18
25
if ( ! newRenameEdits ) return
19
26
// maybe cancel symbol rename on collision instead?
20
27
const newInsertName = tsFull . getUniqueName ( newPredictedName , sourceFile as any )
0 commit comments