@@ -20,21 +20,28 @@ interface IAsset {
20
20
name : string ;
21
21
}
22
22
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
+ */
23
30
async function getProjectGhcVersion ( context : ExtensionContext , dir : string , release : IRelease ) : Promise < string | null > {
24
31
const callWrapper = ( wrapper : string ) => {
25
32
// Need to set the encoding to 'utf8' in order to get back a string
26
33
const out = child_process . spawnSync ( wrapper , [ '--project-ghc-version' ] , { encoding : 'utf8' , cwd : dir } ) ;
27
34
return ! out . error ? out . stdout . trim ( ) : null ;
28
35
} ;
29
36
30
- const localWrapper = [ 'haskell-language-server-wrapper' , 'haskell-ide-engine-wrapper' ] . find ( executableExists ) ;
37
+ const localWrapper = [ 'haskell-language-server-wrapper' ] . find ( executableExists ) ;
31
38
if ( localWrapper ) {
32
39
return callWrapper ( localWrapper ) ;
33
40
}
34
41
35
42
// Otherwise search to see if we previously downloaded the wrapper
36
43
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 } ` ;
38
45
const downloadedWrapper = path . join ( context . globalStoragePath , wrapperName ) ;
39
46
40
47
if ( executableExists ( downloadedWrapper ) ) {
@@ -50,7 +57,7 @@ async function getProjectGhcVersion(context: ExtensionContext, dir: string, rele
50
57
return null ;
51
58
}
52
59
53
- const assetName = `haskell-language-server-wrapper-${ githubOS } .gz` ;
60
+ const assetName = `haskell-language-server-wrapper-${ githubOS } ${ exeExtension } .gz` ;
54
61
const wrapperAsset = release . assets . find ( ( x ) => x . name === assetName ) ;
55
62
56
63
if ( ! wrapperAsset ) {
@@ -127,7 +134,7 @@ export async function downloadServer(
127
134
return null ;
128
135
}
129
136
130
- const assetName = `haskell-language-server-${ githubOS } -${ ghcVersion } .gz` ;
137
+ const assetName = `haskell-language-server-${ githubOS } -${ ghcVersion } ${ exeExtension } .gz` ;
131
138
const asset = release ?. assets . find ( ( x ) => x . name === assetName ) ;
132
139
if ( ! asset ) {
133
140
window . showErrorMessage (
@@ -137,7 +144,7 @@ export async function downloadServer(
137
144
}
138
145
const binaryURL = url . parse ( asset . browser_download_url ) ;
139
146
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 } ` ;
141
148
const binaryDest = path . join ( context . globalStoragePath , serverName ) ;
142
149
143
150
if ( fs . existsSync ( binaryDest ) ) {
0 commit comments