@@ -147,20 +147,25 @@ async function callAsync(
147
147
) ;
148
148
}
149
149
150
- /** Searches the PATH for whatever is set in 'serverExecutablePath' .
150
+ /** Gets serverExecutablePath and fails if it's not set .
151
151
*/
152
- function findHLSinPATH ( context : ExtensionContext , logger : Logger , folder ?: WorkspaceFolder ) : string | null {
153
- // try 'serverExecutablePath' setting
152
+ function findServerExecutable ( context : ExtensionContext , logger : Logger , folder ?: WorkspaceFolder ) : string {
154
153
let exePath = workspace . getConfiguration ( 'haskell' ) . get ( 'serverExecutablePath' ) as string ;
155
- if ( exePath !== '' ) {
156
- logger . info ( `Trying to find the server executable in: ${ exePath } ` ) ;
157
- exePath = resolvePathPlaceHolders ( exePath , folder ) ;
158
- logger . log ( `Location after path variables substitution: ${ exePath } ` ) ;
159
- if ( executableExists ( exePath ) ) {
160
- return exePath ;
161
- }
154
+ logger . info ( `Trying to find the server executable in: ${ exePath } ` ) ;
155
+ exePath = resolvePathPlaceHolders ( exePath , folder ) ;
156
+ logger . log ( `Location after path variables substitution: ${ exePath } ` ) ;
157
+ if ( executableExists ( exePath ) ) {
158
+ return exePath ;
159
+ } else {
160
+ const msg = `Could not find a HLS binary at ${ exePath } ! Consider installing HLS via ghcup or change "haskell.manageHLS" in your settings.` ;
161
+ window . showErrorMessage ( msg ) ;
162
+ throw new Error ( msg ) ;
162
163
}
164
+ }
163
165
166
+ /** Searches the PATH. Fails if nothing is found.
167
+ */
168
+ function findHLSinPATH ( context : ExtensionContext , logger : Logger , folder ?: WorkspaceFolder ) : string {
164
169
// try PATH
165
170
const exes : string [ ] = [ 'haskell-language-server-wrapper' , 'haskell-language-server' ] ;
166
171
logger . info ( `Searching for server executables ${ exes . join ( ',' ) } in $PATH` ) ;
@@ -171,8 +176,9 @@ function findHLSinPATH(context: ExtensionContext, logger: Logger, folder?: Works
171
176
return exe ;
172
177
}
173
178
}
174
-
175
- return null ;
179
+ const msg = 'Could not find a HLS binary in PATH! Consider installing HLS via ghcup or change "haskell.manageHLS" in your settings.' ;
180
+ window . showErrorMessage ( msg ) ;
181
+ throw new Error ( msg ) ;
176
182
}
177
183
178
184
/**
@@ -209,13 +215,10 @@ export async function findHaskellLanguageServer(
209
215
const manageHLS = workspace . getConfiguration ( 'haskell' ) . get ( 'manageHLS' ) as boolean ;
210
216
211
217
if ( ! manageHLS ) {
212
- const wrapper = findHLSinPATH ( context , logger , folder ) ;
213
- if ( ! wrapper ) {
214
- const msg = 'Could not find a HLS binary! Consider installing HLS via ghcup or set "haskell.manageHLS" to true' ;
215
- window . showErrorMessage ( msg ) ;
216
- throw new Error ( msg ) ;
218
+ if ( workspace . getConfiguration ( 'haskell' ) . get ( 'serverExecutablePath' ) as string !== '' ) {
219
+ return findServerExecutable ( context , logger , folder ) ;
217
220
} else {
218
- return wrapper ;
221
+ return findHLSinPATH ( context , logger , folder ) ;
219
222
}
220
223
} else {
221
224
// permissively check if we have HLS installed
0 commit comments