diff --git a/server/src/constants.ts b/server/src/constants.ts index ef699d558..f2be08d65 100644 --- a/server/src/constants.ts +++ b/server/src/constants.ts @@ -9,6 +9,12 @@ export let bscExePartialPath = path.join( process.platform, "bsc.exe" ); +export let bscExeReScriptPartialPath = path.join( + "node_modules", + "rescript", + process.platform, + "bsc.exe" +); // can't use the native bsb since we might need the watcher -w flag, which is only in the js wrapper // export let bsbPartialPath = path.join('node_modules', 'bs-platform', process.platform, 'bsb.exe'); diff --git a/server/src/server.ts b/server/src/server.ts index d7b0093ed..526ff2631 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -428,7 +428,7 @@ function onMessage(msg: m.Message) { if (bscExeDir === null) { let params: p.ShowMessageParams = { type: p.MessageType.Error, - message: `Cannot find a nearby ${c.bscExePartialPath}. It's needed for formatting.`, + message: `Cannot find a nearby bsc.exe in bs-platform or rescript. It's needed for formatting.`, }; let response: m.NotificationMessage = { jsonrpc: c.jsonrpcVersion, @@ -438,7 +438,9 @@ function onMessage(msg: m.Message) { send(fakeSuccessResponse); send(response); } else { - let resolvedBscExePath = path.join(bscExeDir, c.bscExePartialPath); + let bscExePath1 = path.join(bscExeDir, c.bscExeReScriptPartialPath); + let bscExePath2 = path.join(bscExeDir, c.bscExePartialPath); + let resolvedBscExePath = fs.existsSync(bscExePath1) ? bscExePath1 : bscExePath2; // code will always be defined here, even though technically it can be undefined let code = getOpenedFileContent(params.textDocument.uri); let formattedResult = utils.formatUsingValidBscExePath( diff --git a/server/src/utils.ts b/server/src/utils.ts index c57117711..7c8a95834 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -47,8 +47,9 @@ export let findBscExeDirOfFile = ( source: p.DocumentUri ): null | p.DocumentUri => { let dir = path.dirname(source); - let bscPath = path.join(dir, c.bscExePartialPath); - if (fs.existsSync(bscPath)) { + let bscExePath1 = path.join(dir, c.bscExeReScriptPartialPath); + let bscExePath2 = path.join(dir, c.bscExePartialPath); + if (fs.existsSync(bscExePath1) || fs.existsSync(bscExePath2)) { return dir; } else { if (dir === source) {