From 289ad6f41cb82f46bd06c12ac35a40aad8772f8e Mon Sep 17 00:00:00 2001 From: Luckas Date: Thu, 16 Nov 2023 21:29:57 +0300 Subject: [PATCH 1/2] update: add folder filter to willRename --- src/lsp-server.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/lsp-server.ts b/src/lsp-server.ts index 5b8cd394..ae8398c6 100644 --- a/src/lsp-server.ts +++ b/src/lsp-server.ts @@ -269,10 +269,19 @@ 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" }, + }, + ], }, }, }, From 7f043e896088e470edc69d837cfb701de1526fd3 Mon Sep 17 00:00:00 2001 From: Rafal Chlodnicki Date: Fri, 17 Nov 2023 00:42:48 +0100 Subject: [PATCH 2/2] add tests --- src/lsp-server.spec.ts | 23 ++++++++++++++++++++++- src/lsp-server.ts | 13 ++++++++----- test-data/module3.ts | 3 +++ test-data/rename1/var.ts | 1 + 4 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 test-data/module3.ts create mode 100644 test-data/rename1/var.ts 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 ae8398c6..7b43094d 100644 --- a/src/lsp-server.ts +++ b/src/lsp-server.ts @@ -271,15 +271,18 @@ export class LspServer { willRename: { filters: [ { - scheme: "file", + scheme: 'file', pattern: { - glob: "**/*.{ts,js,jsx,tsx,mjs,mts,cjs,cts}", - matches: "file", + glob: '**/*.{ts,js,jsx,tsx,mjs,mts,cjs,cts}', + matches: 'file', }, }, { - scheme: "file", - pattern: { glob: "**", matches: "folder" }, + 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;