Skip to content

Commit c96c1ce

Browse files
committed
Append exe extension on windows
1 parent 0d58446 commit c96c1ce

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src/hlsBinaries.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,28 @@ interface IAsset {
2020
name: string;
2121
}
2222

23+
// On Windows the executable needs to be stored somewhere with an .exe extension
24+
const exeExtension = process.platform === 'win32' ? '.exe' : '';
25+
26+
/** Works out what the project's ghc version is, downloading haskell-language-server-wrapper
27+
* if needed. Returns null if there was an error in either downloading the wrapper or
28+
* in working out the ghc version
29+
*/
2330
async function getProjectGhcVersion(context: ExtensionContext, dir: string, release: IRelease): Promise<string | null> {
2431
const callWrapper = (wrapper: string) => {
2532
// Need to set the encoding to 'utf8' in order to get back a string
2633
const out = child_process.spawnSync(wrapper, ['--project-ghc-version'], { encoding: 'utf8', cwd: dir });
2734
return !out.error ? out.stdout.trim() : null;
2835
};
2936

30-
const localWrapper = ['haskell-language-server-wrapper', 'haskell-ide-engine-wrapper'].find(executableExists);
37+
const localWrapper = ['haskell-language-server-wrapper'].find(executableExists);
3138
if (localWrapper) {
3239
return callWrapper(localWrapper);
3340
}
3441

3542
// Otherwise search to see if we previously downloaded the wrapper
3643

37-
const wrapperName = `haskell-language-server-wrapper-${release.tag_name}-${process.platform}`;
44+
const wrapperName = `haskell-language-server-wrapper-${release.tag_name}-${process.platform}${exeExtension}`;
3845
const downloadedWrapper = path.join(context.globalStoragePath, wrapperName);
3946

4047
if (executableExists(downloadedWrapper)) {
@@ -50,7 +57,7 @@ async function getProjectGhcVersion(context: ExtensionContext, dir: string, rele
5057
return null;
5158
}
5259

53-
const assetName = `haskell-language-server-wrapper-${githubOS}.gz`;
60+
const assetName = `haskell-language-server-wrapper-${githubOS}${exeExtension}.gz`;
5461
const wrapperAsset = release.assets.find((x) => x.name === assetName);
5562

5663
if (!wrapperAsset) {
@@ -127,7 +134,7 @@ export async function downloadServer(
127134
return null;
128135
}
129136

130-
const assetName = `haskell-language-server-${githubOS}-${ghcVersion}.gz`;
137+
const assetName = `haskell-language-server-${githubOS}-${ghcVersion}${exeExtension}.gz`;
131138
const asset = release?.assets.find((x) => x.name === assetName);
132139
if (!asset) {
133140
window.showErrorMessage(
@@ -137,7 +144,7 @@ export async function downloadServer(
137144
}
138145
const binaryURL = url.parse(asset.browser_download_url);
139146

140-
const serverName = `haskell-language-server-${release.tag_name}-${process.platform}-${ghcVersion}`;
147+
const serverName = `haskell-language-server-${release.tag_name}-${process.platform}-${ghcVersion}${exeExtension}`;
141148
const binaryDest = path.join(context.globalStoragePath, serverName);
142149

143150
if (fs.existsSync(binaryDest)) {

0 commit comments

Comments
 (0)