diff --git a/src/lsp-server.spec.ts b/src/lsp-server.spec.ts index f4627fd8..0bbf65a4 100644 --- a/src/lsp-server.spec.ts +++ b/src/lsp-server.spec.ts @@ -2385,12 +2385,14 @@ describe('completions without client snippet support', () => { }); describe('fileOperations', () => { - it('willRenameFiles', async () => { + it('willRenameFiles - rename file', async () => { + // TODO: This test depends on ensureConfigurationForDocument being executed first (even for a different file). const edit = await server.willRenameFiles({ files: [{ oldUri: uri('module1.ts'), newUri: uri('new_module1_name.ts') }], }); expect(edit.changes).toBeDefined(); expect(Object.keys(edit.changes!)).toHaveLength(1); + // module2 imports from renamed file expect(edit.changes![uri('module2.ts')]).toEqual([ { range: { @@ -2401,6 +2403,25 @@ describe('fileOperations', () => { }, ]); }); + + it('willRenameFiles - rename directory', async () => { + // TODO: This test depends on ensureConfigurationForDocument being executed (even for a different file). + const edit = await server.willRenameFiles({ + files: [{ oldUri: uri('rename1'), newUri: uri('rename2') }], + }); + expect(edit.changes).toBeDefined(); + expect(Object.keys(edit.changes!)).toHaveLength(1); + // module3 imports from renamed directory + expect(edit.changes![uri('module3.ts')]).toEqual([ + { + range: { + start:{ line: 0, character: 31 }, + end: { line: 0, character: 44 }, + }, + newText:'./rename2/var', + }, + ]); + }); }); describe('linked editing', () => { diff --git a/src/lsp-server.ts b/src/lsp-server.ts index 5b8cd394..7b43094d 100644 --- a/src/lsp-server.ts +++ b/src/lsp-server.ts @@ -269,10 +269,22 @@ export class LspServer { workspace: { fileOperations: { willRename: { - filters: [{ - scheme: 'file', - pattern: { glob: '**/*.{ts,js,jsx,tsx,mjs,mts,cjs,cts}', matches: 'file' }, - }], + filters: [ + { + scheme: 'file', + pattern: { + glob: '**/*.{ts,js,jsx,tsx,mjs,mts,cjs,cts}', + matches: 'file', + }, + }, + { + scheme: 'file', + pattern: { + glob: '**', + matches: 'folder', + }, + }, + ], }, }, }, diff --git a/test-data/module3.ts b/test-data/module3.ts new file mode 100644 index 00000000..605a6af5 --- /dev/null +++ b/test-data/module3.ts @@ -0,0 +1,3 @@ +import { fileInRenamed } from './rename1/var'; + +export { fileInRenamed }; diff --git a/test-data/rename1/var.ts b/test-data/rename1/var.ts new file mode 100644 index 00000000..13817aa2 --- /dev/null +++ b/test-data/rename1/var.ts @@ -0,0 +1 @@ +export const fileInRenamed = true;