From fb10842ece6079a47c58fd48377880d2e2fbde62 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Sat, 6 Sep 2025 10:00:45 +0200 Subject: [PATCH 1/3] link up new prepareRename command --- server/src/server.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/server/src/server.ts b/server/src/server.ts index 3dc08eb90..6f6ec4e7e 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -3,6 +3,7 @@ import * as p from "vscode-languageserver-protocol"; import * as v from "vscode-languageserver"; import * as rpc from "vscode-jsonrpc/node"; import * as path from "path"; +import semver from "semver"; import fs from "fs"; import { DidChangeWatchedFilesNotification, @@ -687,6 +688,38 @@ async function prepareRename( // https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_prepareRename let params = msg.params as p.PrepareRenameParams; let filePath = fileURLToPath(params.textDocument.uri); + + // Gate analysis prepareRename behind >= 12.0.0-beta.9 + // This needs to be adjusted to the actual version prepareRename is released in + let projectRootPath = utils.findProjectRootOfFile(filePath); + let rescriptVersion = + (projectRootPath && projectsFiles.get(projectRootPath)?.rescriptVersion) || + (await utils.findReScriptVersionForProjectRoot(projectRootPath ?? null)); + + let shouldUsePrepareRenameCommand = false; + if (rescriptVersion != null) { + shouldUsePrepareRenameCommand = + semver.valid(rescriptVersion) != null && + semver.satisfies(rescriptVersion, ">=12.0.0-beta.9", { + includePrerelease: true, + }); + } + + if (shouldUsePrepareRenameCommand) { + let analysisResult = await utils.runAnalysisAfterSanityCheck(filePath, [ + "prepareRename", + filePath, + params.position.line, + params.position.character, + ]); + + return { + jsonrpc: c.jsonrpcVersion, + id: msg.id, + result: analysisResult as p.PrepareRenameResult, + }; + } + let locations: null | p.Location[] = await utils.getReferencesForPosition( filePath, params.position, From e85bb5158ef19010df78db06fb85b0b8e5c93da7 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Fri, 12 Sep 2025 13:22:57 +0200 Subject: [PATCH 2/3] adjust --- server/src/server.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/src/server.ts b/server/src/server.ts index 6f6ec4e7e..31ca545f7 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -689,8 +689,7 @@ async function prepareRename( let params = msg.params as p.PrepareRenameParams; let filePath = fileURLToPath(params.textDocument.uri); - // Gate analysis prepareRename behind >= 12.0.0-beta.9 - // This needs to be adjusted to the actual version prepareRename is released in + // `prepareRename` was introduced in 12.0.0-beta.10 let projectRootPath = utils.findProjectRootOfFile(filePath); let rescriptVersion = (projectRootPath && projectsFiles.get(projectRootPath)?.rescriptVersion) || @@ -700,7 +699,7 @@ async function prepareRename( if (rescriptVersion != null) { shouldUsePrepareRenameCommand = semver.valid(rescriptVersion) != null && - semver.satisfies(rescriptVersion, ">=12.0.0-beta.9", { + semver.satisfies(rescriptVersion, ">=12.0.0-beta.10", { includePrerelease: true, }); } From a9052b936a6f3e730c4bef5d9ccdfeab5f31d3ab Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Fri, 12 Sep 2025 13:24:46 +0200 Subject: [PATCH 3/3] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5edf1b478..ea51bcd8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ #### :house: Internal - Find `@rescript/runtime` for Rewatch compiler-args call. https://github.com/rescript-lang/rescript-vscode/pull/1125 +- Use `prepareRename` command (when a new enough ReScript version is used) to speed up the `rename` command. https://github.com/rescript-lang/rescript-vscode/pull/1124 ## 1.64.0