Skip to content

Commit b37665a

Browse files
authored
Merge pull request #508 from jneira/log-download-hls
Add traces for download hls
2 parents 2fa7a9e + a95a34c commit b37665a

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

Diff for: src/hlsBinaries.ts

+29-18
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)