From ae386f4ea4bf9aa18a1253c002326d1bf9d91f76 Mon Sep 17 00:00:00 2001 From: Sophie Atkins Date: Tue, 16 Jul 2024 11:28:50 +0200 Subject: [PATCH 1/4] test snapshot where map doesn't exist yet --- .../src/__test__/rename/multi-file.test.ts | 67 ++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/packages/language-server/src/__test__/rename/multi-file.test.ts b/packages/language-server/src/__test__/rename/multi-file.test.ts index 76ff24e861..b6dfe6add4 100644 --- a/packages/language-server/src/__test__/rename/multi-file.test.ts +++ b/packages/language-server/src/__test__/rename/multi-file.test.ts @@ -93,7 +93,7 @@ test('rename model', async () => { `) }) -test('rename field', async () => { +test('rename field - map exists', async () => { const helper = await getMultifileHelper('user-posts') const user = helper.file('User.prisma') @@ -168,3 +168,68 @@ test('rename field', async () => { } `) }) + +test('rename field - map does not exist', async () => { + const helper = await getMultifileHelper('user-posts') + const user = helper.file('User.prisma') + + const response = handleRenameRequest(helper.schema, user.textDocument, { + textDocument: { + uri: user.uri, + }, + position: user.lineContaining('name String').characterAfter('na'), + newName: 'fullName', + }) + + expect(response).toMatchInlineSnapshot(` + { + "changes": { + "file:///user-posts/User.prisma": [ + { + "newText": "fullName", + "range": { + "end": { + "character": 8, + "line": 3, + }, + "start": { + "character": 4, + "line": 3, + }, + }, + }, + { + "newText": " @map("name")", + "range": { + "end": { + "character": 15, + "line": 3, + }, + "start": { + "character": 15, + "line": 3, + }, + }, + }, + ], + }, + } + `) + + expect(helper.applyChanges(response?.changes)).toMatchInlineSnapshot(` + { + "file:///user-posts/User.prisma": "/// This is the user of the platform + model User { + id String @id @default(uuid()) @map("_id") + fullName Strin @map("name")g + email String + posts Post[] + + address Address + + favouriteAnimal FavouriteAnimal + } + ", + } + `) +}) From 0fc25fb4145c3c72bfa633080c34b9525c643139 Mon Sep 17 00:00:00 2001 From: Sophie Atkins Date: Tue, 16 Jul 2024 11:30:24 +0200 Subject: [PATCH 2/4] fix rename --- .../src/__test__/rename/multi-file.test.ts | 6 +++--- .../language-server/src/lib/code-actions/rename.ts | 11 +---------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/packages/language-server/src/__test__/rename/multi-file.test.ts b/packages/language-server/src/__test__/rename/multi-file.test.ts index b6dfe6add4..6a432aab41 100644 --- a/packages/language-server/src/__test__/rename/multi-file.test.ts +++ b/packages/language-server/src/__test__/rename/multi-file.test.ts @@ -202,11 +202,11 @@ test('rename field - map does not exist', async () => { "newText": " @map("name")", "range": { "end": { - "character": 15, + "character": 16, "line": 3, }, "start": { - "character": 15, + "character": 16, "line": 3, }, }, @@ -221,7 +221,7 @@ test('rename field - map does not exist', async () => { "file:///user-posts/User.prisma": "/// This is the user of the platform model User { id String @id @default(uuid()) @map("_id") - fullName Strin @map("name")g + fullName String @map("name") email String posts Post[] diff --git a/packages/language-server/src/lib/code-actions/rename.ts b/packages/language-server/src/lib/code-actions/rename.ts index c823b7298b..c5388b4c56 100644 --- a/packages/language-server/src/lib/code-actions/rename.ts +++ b/packages/language-server/src/lib/code-actions/rename.ts @@ -155,7 +155,7 @@ export function printLogMessage( } function insertInlineRename(currentName: string, line: Line): EditsMap { - const character = lastNoNewlineCharacter(line.untrimmedText) + const character = line.untrimmedText.length - 1 return { [line.document.uri]: [ { @@ -175,15 +175,6 @@ function insertInlineRename(currentName: string, line: Line): EditsMap { } } -function lastNoNewlineCharacter(lineText: string) { - for (let i = lineText.length - 1; i >= 0; i--) { - if (lineText[i] !== '\n' && lineText[i] !== '\r') { - return i - } - } - return 0 -} - function insertMapBlockAttribute(oldName: string, block: Block): EditsMap { return { [block.definingDocument.uri]: [ From d7ef871c1b8bb938c66918fdbe11febf3d1dfc52 Mon Sep 17 00:00:00 2001 From: Sophie Atkins Date: Tue, 16 Jul 2024 11:37:21 +0200 Subject: [PATCH 3/4] fix single-file test snapshots --- .../src/__test__/rename/single-file.test.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/language-server/src/__test__/rename/single-file.test.ts b/packages/language-server/src/__test__/rename/single-file.test.ts index da3143d5cb..ecb3db1183 100644 --- a/packages/language-server/src/__test__/rename/single-file.test.ts +++ b/packages/language-server/src/__test__/rename/single-file.test.ts @@ -369,8 +369,8 @@ describe('Rename', () => { { newText: ' @map("Album")', range: { - start: { line: 136, character: 33 }, - end: { line: 136, character: 33 }, + start: { line: 136, character: 34 }, + end: { line: 136, character: 34 }, }, }, ], @@ -416,8 +416,8 @@ describe('Rename', () => { { newText: ' @map("authorId")', range: { - start: { line: 4, character: 16 }, - end: { line: 4, character: 16 }, + start: { line: 4, character: 17 }, + end: { line: 4, character: 17 }, }, }, { @@ -458,8 +458,8 @@ describe('Rename', () => { { newText: ' @map("title")', range: { - start: { line: 17, character: 16 }, - end: { line: 17, character: 16 }, + start: { line: 17, character: 17 }, + end: { line: 17, character: 17 }, }, }, { @@ -492,8 +492,8 @@ describe('Rename', () => { { newText: ' @map("humanId")', range: { - start: { line: 25, character: 13 }, - end: { line: 25, character: 13 }, + start: { line: 25, character: 14 }, + end: { line: 25, character: 14 }, }, }, { @@ -567,8 +567,8 @@ describe('Rename', () => { { newText: ' @map("A_VARIANT_WITH_UNDERSCORES")', range: { - start: { line: 8, character: 27 }, - end: { line: 8, character: 27 }, + start: { line: 8, character: 28 }, + end: { line: 8, character: 28 }, }, }, { From 140e9ec293dcef73ec4d576f51d5215ec8833b80 Mon Sep 17 00:00:00 2001 From: Sophie Atkins Date: Tue, 16 Jul 2024 11:43:44 +0200 Subject: [PATCH 4/4] windows --- .../language-server/src/lib/code-actions/rename.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/language-server/src/lib/code-actions/rename.ts b/packages/language-server/src/lib/code-actions/rename.ts index c5388b4c56..a473fbe478 100644 --- a/packages/language-server/src/lib/code-actions/rename.ts +++ b/packages/language-server/src/lib/code-actions/rename.ts @@ -155,7 +155,7 @@ export function printLogMessage( } function insertInlineRename(currentName: string, line: Line): EditsMap { - const character = line.untrimmedText.length - 1 + const character = lastNewLineCharacter(line.untrimmedText) return { [line.document.uri]: [ { @@ -175,6 +175,17 @@ function insertInlineRename(currentName: string, line: Line): EditsMap { } } +function lastNewLineCharacter(lineText: string) { + const i = lineText.length - 1 + if (lineText[i] === '\n' && lineText[i - 1] === '\r') { + return i - 1 + } else if (lineText[i] === '\n') { + return i + } else { + return 0 + } +} + function insertMapBlockAttribute(oldName: string, block: Block): EditsMap { return { [block.definingDocument.uri]: [