Skip to content

Commit 472f691

Browse files
fhammerschmidtcristianoc
authored andcommitted
Call bsc.exe directly, when no binaryPath is set in settings
1 parent b6efb50 commit 472f691

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

server/src/constants.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,8 @@ let platformDir =
66
// See https://microsoft.github.io/language-server-protocol/specification Abstract Message
77
// version is fixed to 2.0
88
export let jsonrpcVersion = "2.0";
9-
export let bscNativeReScriptPartialPath = path.join(
10-
"node_modules",
11-
"rescript",
12-
platformDir,
13-
"bsc.exe"
14-
);
9+
export let platformPath = path.join("node_modules", "rescript", platformDir);
10+
export let bscNativeReScriptPartialPath = path.join(platformPath, "bsc.exe");
1511

1612
export let analysisDevPath = path.join(
1713
path.dirname(__dirname),
@@ -29,6 +25,7 @@ export let analysisProdPath = path.join(
2925
export let rescriptBinName = "rescript";
3026

3127
export let bscBinName = "bsc";
28+
export let bscExeName = "bsc.exe";
3229

3330
export let nodeModulesBinDir = path.join("node_modules", ".bin");
3431

server/src/server.ts

+22-16
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,16 @@ let codeActionsFromDiagnostics: codeActions.filesCodeActions = {};
7979
// will be properly defined later depending on the mode (stdio/node-rpc)
8080
let send: (msg: p.Message) => void = (_) => {};
8181

82-
let findBinaryDirPathFromProjectRoot = (
83-
directory: p.DocumentUri // This must be a directory and not a file!
82+
let findBinaryFromProjectDirRec = (
83+
directory: p.DocumentUri, // This must be a directory and not a file!
84+
targetDir: p.DocumentUri,
85+
binaryName: p.DocumentUri
8486
): null | p.DocumentUri => {
85-
let binaryDirPath = path.join(directory, c.nodeModulesBinDir);
86-
let binaryPath = path.join(binaryDirPath, c.rescriptBinName);
87+
let binaryDirPath = path.join(directory, targetDir);
88+
let binaryPath = path.join(binaryDirPath, binaryName);
8789

8890
if (fs.existsSync(binaryPath)) {
89-
return binaryDirPath;
91+
return binaryPath;
9092
}
9193

9294
let parentDir = path.dirname(directory);
@@ -95,19 +97,22 @@ let findBinaryDirPathFromProjectRoot = (
9597
return null;
9698
}
9799

98-
return findBinaryDirPathFromProjectRoot(parentDir);
100+
return findBinaryFromProjectDirRec(parentDir, targetDir, binaryName);
99101
};
100102

101-
let getBinaryDirPath = (projectRootPath: p.DocumentUri) =>
102-
extensionConfiguration.binaryPath == null
103-
? findBinaryDirPathFromProjectRoot(projectRootPath)
104-
: extensionConfiguration.binaryPath;
105-
106103
let findRescriptBinary = (projectRootPath: p.DocumentUri) =>
107-
utils.findRescriptBinary(getBinaryDirPath(projectRootPath));
104+
extensionConfiguration.binaryPath == null
105+
? findBinaryFromProjectDirRec(
106+
projectRootPath,
107+
c.nodeModulesBinDir,
108+
c.rescriptBinName
109+
)
110+
: utils.findRescriptBinary(extensionConfiguration.binaryPath);
108111

109112
let findBscBinary = (projectRootPath: p.DocumentUri) =>
110-
utils.findBscBinary(getBinaryDirPath(projectRootPath));
113+
extensionConfiguration.binaryPath == null
114+
? findBinaryFromProjectDirRec(projectRootPath, c.platformPath, c.bscExeName)
115+
: utils.findBscBinary(extensionConfiguration.binaryPath);
111116

112117
interface CreateInterfaceRequestParams {
113118
uri: string;
@@ -312,9 +317,10 @@ let openedFile = (fileUri: string, fileContent: string) => {
312317
method: "window/showMessage",
313318
params: {
314319
type: p.MessageType.Error,
315-
message: `Can't find ReScript binary in the directory ${getBinaryDirPath(
316-
projectRootPath
317-
)}`,
320+
message:
321+
extensionConfiguration.binaryPath == null
322+
? "Can't find ReScript binary"
323+
: `Can't find ReScript binary in the directory ${extensionConfiguration.binaryPath}`,
318324
},
319325
};
320326
send(request);

0 commit comments

Comments
 (0)