@@ -85,11 +85,9 @@ class NoBinariesError extends Error {
8585 const supportedReleasesLink =
8686 '[See the list of supported versions here](https://github.com/haskell/vscode-haskell#supported-ghc-versions)' ;
8787 if ( ghcVersion ) {
88- super ( `haskell-language-server ${ hlsVersion } or earlier for GHC ${ ghcVersion } is not available on ${ os . type ( ) } .
89- ${ supportedReleasesLink } ` ) ;
88+ super ( `haskell-language-server ${ hlsVersion } or earlier for GHC ${ ghcVersion } is not available on ${ os . type ( ) } . ${ supportedReleasesLink } ` ) ;
9089 } else {
91- super ( `haskell-language-server ${ hlsVersion } is not available on ${ os . type ( ) } .
92- ${ supportedReleasesLink } ` ) ;
90+ super ( `haskell-language-server ${ hlsVersion } is not available on ${ os . type ( ) } . ${ supportedReleasesLink } ` ) ;
9391 }
9492 }
9593}
@@ -246,11 +244,13 @@ async function getReleaseMetadata(
246244
247245 async function readCachedReleaseData ( ) : Promise < IRelease [ ] | null > {
248246 try {
247+ logger . info ( `Reading cached release data at ${ offlineCache } ` ) ;
249248 const cachedInfo = await promisify ( fs . readFile ) ( offlineCache , { encoding : 'utf-8' } ) ;
250249 return validate . parseAndValidate ( cachedInfo , cachedReleaseValidator ) ;
251250 } catch ( err : any ) {
252251 // If file doesn't exist, return null, otherwise consider it a failure
253252 if ( err . code === 'ENOENT' ) {
253+ logger . warn ( `No cached release data found at ${ offlineCache } ` ) ;
254254 return null ;
255255 }
256256 throw err ;
@@ -260,6 +260,8 @@ async function getReleaseMetadata(
260260 const updateBehaviour = workspace . getConfiguration ( 'haskell' ) . get ( 'updateBehavior' ) as UpdateBehaviour ;
261261
262262 if ( updateBehaviour === 'never-check' ) {
263+ logger . warn ( "As 'haskell.updateBehaviour' config option is set to 'never-check' " +
264+ 'we try to use the possibly obsolete cached release data' ) ;
263265 return readCachedReleaseData ( ) ;
264266 }
265267
@@ -298,11 +300,13 @@ async function getReleaseMetadata(
298300 const cachedInfoParsed = await readCachedReleaseData ( ) ;
299301
300302 window . showWarningMessage (
301- `Couldn't get the latest haskell-language-server releases from GitHub, used local cache instead:\n${ githubError . message } `
303+ "Couldn't get the latest haskell-language-server releases from GitHub, used local cache instead: " +
304+ githubError . message
302305 ) ;
303306 return cachedInfoParsed ;
304307 } catch ( fileError ) {
305- throw new Error ( `Couldn't get the latest haskell-language-server releases from GitHub:\n${ githubError . message } ` ) ;
308+ throw new Error ( "Couldn't get the latest haskell-language-server releases from GitHub: " +
309+ githubError . message ) ;
306310 }
307311 }
308312}
@@ -341,16 +345,16 @@ export async function downloadHaskellLanguageServer(
341345
342346 logger . info ( 'Fetching the latest release from GitHub or from cache' ) ;
343347 const releases = await getReleaseMetadata ( context , storagePath , logger ) ;
348+ const updateBehaviour = workspace . getConfiguration ( 'haskell' ) . get ( 'updateBehavior' ) as UpdateBehaviour ;
344349 if ( ! releases ) {
345350 let message = "Couldn't find any pre-built haskell-language-server binaries" ;
346- const updateBehaviour = workspace . getConfiguration ( 'haskell' ) . get ( 'updateBehavior' ) as UpdateBehaviour ;
347351 if ( updateBehaviour === 'never-check' ) {
348352 message += ' (and checking for newer versions is disabled)' ;
349353 }
350354 window . showErrorMessage ( message ) ;
351355 return null ;
352356 }
353- logger . info ( `The latest release is ${ releases [ 0 ] . tag_name } ` ) ;
357+ logger . info ( `The latest known release is ${ releases [ 0 ] . tag_name } ` ) ;
354358 logger . info ( 'Figure out the ghc version to use or advertise an installation link for missing components' ) ;
355359 const dir : string = folder ?. uri ?. fsPath ?? path . dirname ( resource . fsPath ) ;
356360 let ghcVersion : string ;
@@ -370,7 +374,7 @@ export async function downloadHaskellLanguageServer(
370374 window . showInformationMessage ( error . message ) ;
371375 } else if ( error instanceof Error ) {
372376 // We couldn't figure out the right ghc version to download
373- window . showErrorMessage ( `Couldn't figure out what GHC version the project is using:\n ${ error . message } ` ) ;
377+ window . showErrorMessage ( `Couldn't figure out what GHC version the project is using: ${ error . message } ` ) ;
374378 }
375379 return null ;
376380 }
@@ -382,31 +386,38 @@ export async function downloadHaskellLanguageServer(
382386 const release = releases ?. find ( r => r . assets . find ( ( x ) => x . name . startsWith ( assetName ) ) ) ;
383387 const asset = release ?. assets . find ( ( x ) => x . name . startsWith ( assetName ) ) ;
384388 if ( ! asset ) {
385- logger . error (
386- `No binary ${ assetName } found in the release assets`
387- ) ;
388- window . showInformationMessage ( new NoBinariesError ( releases [ 0 ] . tag_name , ghcVersion ) . message ) ;
389+ let msg = new NoBinariesError ( releases [ 0 ] . tag_name , ghcVersion ) . message ;
390+ if ( updateBehaviour === 'never-check' ) {
391+ msg += ". Consider set 'haskell.updateBehaviour' to 'up-to-date' to check if another release includes the missing binary" ;
392+ }
393+ logger . error ( msg ) ;
394+ window . showErrorMessage ( msg ) ;
389395 return null ;
390396 }
391397
392398 const serverName = `haskell-language-server-${ release ?. tag_name } -${ process . platform } -${ ghcVersion } ${ exeExt } ` ;
393399 const binaryDest = path . join ( storagePath , serverName ) ;
394400
401+ logger . info ( `Looking for an existing ${ binaryDest } or download it from release assets` ) ;
395402 const title = `Downloading haskell-language-server ${ release ?. tag_name } for GHC ${ ghcVersion } ` ;
396- logger . info ( title ) ;
403+
397404 const downloaded = await downloadFile ( title , asset . browser_download_url , binaryDest ) ;
398405 if ( ghcVersion . startsWith ( '9.' ) ) {
399406 const warning =
400407 'Currently, HLS supports GHC 9 only partially. ' +
401- 'See [issue #297](https://github.com/haskell/haskell-language-server/issues/297) for more detail .' ;
408+ 'See [issue #297](https://github.com/haskell/haskell-language-server/issues/297) for more details .' ;
402409 logger . warn ( warning ) ;
403- window . showWarningMessage ( warning ) ;
410+ if ( downloaded ) {
411+ window . showWarningMessage ( warning ) ;
412+ }
404413 }
405414 if ( release ?. tag_name !== releases [ 0 ] . tag_name ) {
406- const warning = `haskell-language-server ${ releases [ 0 ] . tag_name } for GHC ${ ghcVersion } is not available on ${ os . type ( ) } . Falling back to haskell-language-server ${ release ?. tag_name } ` ;
415+ const warning =
416+ `haskell-language-server ${ releases [ 0 ] . tag_name } for GHC ${ ghcVersion } is not available on ${ os . type ( ) } . ` +
417+ `Falling back to haskell-language-server ${ release ?. tag_name } ` ;
407418 logger . warn ( warning ) ;
408419 if ( downloaded ) {
409- window . showInformationMessage ( warning ) ;
420+ window . showWarningMessage ( warning ) ;
410421 }
411422 }
412423 return binaryDest ;
0 commit comments