From e83be4e2e55496ebeb310f311e4e0c6c54f8a462 Mon Sep 17 00:00:00 2001 From: fendor Date: Thu, 3 Sep 2026 13:00:07 +0200 Subject: [PATCH 1/4] Prepare release 2.8.3 --- package.json | 87 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 6a2a06d4..0741ef38 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "haskell", "displayName": "Haskell", "description": "Haskell language support powered by the Haskell Language Server", - "version": "2.8.2", + "version": "2.8.3", "license": "MIT", "publisher": "haskell", "engines": { @@ -231,10 +231,55 @@ "multipleComponents" ], "default": "multipleComponents", - "description": "Preferred approach for loading package components. Setting this to 'multiple components' allows the build tool (such as `cabal` or `stack`) to [load multiple components at once](https://github.com/haskell/cabal/pull/8726), which is a significant improvement.", + "description": "Preferred approach for loading package components. Setting this to 'multipleComponents' allows the build tool (such as `cabal` or `stack`) to [load multiple components at once](https://github.com/haskell/cabal/pull/8726), which is a significant improvement.", "enumDescriptions": [ "Prefer a multiple component session, if the build tool supports it. At the moment, only `cabal` supports multiple components session loading. If the `cabal` version does not support loading multiple components at once, we gracefully fall back to \"singleComponent\" mode.", "You can force single component session loading if you encountered any issues." + ], + "deprecationMessage": "Prefer `haskell.componentsLoading` in HLS 2.15.0.0 or newer. This option will keep working with HLS 2.15.0.0." + }, + "haskell.componentsLoading": { + "scope": "resource", + "type": "string", + "enum": [ + "single", + "multi: needed-only", + "multi: whole-project" + ], + "default": "multi: needed-only", + "description": "Preferred approach for loading package components. Setting this to 'multi: needed-only' allows the build tool (such as `cabal` or `stack`) to load multiple components at once, which is a significant improvement.", + "enumDescriptions": [ + "Load only the component required to load the file you open in the editor. Might fail if you open components that require a currently unloaded component.", + "Load components on demand that are required to load the files open in your editor.", + "Load the whole project at once. Experimental and might contain more bugs" + ] + }, + "haskell.linkDocTo": { + "scope": "resource", + "type": "string", + "enum": [ + "LinkToHackage", + "LinkToLocal" + ], + "default": "LinkToHackage", + "description": "Where should `Documentation` links in hover messages point to", + "enumDescriptions": [ + "Link to Hackage", + "Link to local haddock" + ] + }, + "haskell.linkSourceTo": { + "scope": "resource", + "type": "string", + "enum": [ + "LinkToHackage", + "LinkToLocal" + ], + "default": "LinkToHackage", + "description": "Where should `Source` links in hover messages point to", + "enumDescriptions": [ + "Link to Hackage", + "Link to local haddock" ] }, "haskell.supportCabalFiles": { @@ -319,6 +364,12 @@ "scope": "resource", "type": "boolean" }, + "haskell.plugin.caseSplit.globalOn": { + "default": true, + "description": "Enables caseSplit plugin", + "scope": "resource", + "type": "boolean" + }, "haskell.plugin.changeTypeSignature.globalOn": { "default": true, "description": "Enables changeTypeSignature plugin", @@ -379,6 +430,12 @@ "scope": "resource", "type": "boolean" }, + "haskell.plugin.export.globalOn": { + "default": true, + "description": "Enables export plugin", + "scope": "resource", + "type": "boolean" + }, "haskell.plugin.fourmolu.config.external": { "default": false, "markdownDescription": "Call out to an external \"fourmolu\" executable, rather than using the bundled library.", @@ -509,9 +566,15 @@ "scope": "resource", "type": "boolean" }, - "haskell.plugin.moduleName.globalOn": { + "haskell.plugin.notes.completionOn": { + "default": true, + "description": "Enables notes completions", + "scope": "resource", + "type": "boolean" + }, + "haskell.plugin.notes.hoverOn": { "default": true, - "description": "Enables moduleName plugin", + "description": "Enables notes hover", "scope": "resource", "type": "boolean" }, @@ -551,21 +614,21 @@ "scope": "resource", "type": "boolean" }, - "haskell.plugin.rename.config.crossModule": { - "default": false, - "markdownDescription": "Enable experimental cross-module renaming", + "haskell.plugin.rename.codeLensOn": { + "default": true, + "description": "Enables rename code lenses", "scope": "resource", "type": "boolean" }, - "haskell.plugin.rename.globalOn": { + "haskell.plugin.rename.config.crossModule": { "default": true, - "description": "Enables rename plugin", + "markdownDescription": "Enable experimental cross-module renaming", "scope": "resource", "type": "boolean" }, - "haskell.plugin.retrie.globalOn": { + "haskell.plugin.rename.renameOn": { "default": true, - "description": "Enables retrie plugin", + "description": "Enables rename rename", "scope": "resource", "type": "boolean" }, @@ -1298,7 +1361,7 @@ "type": "string" }, "haskell.plugin.semanticTokens.globalOn": { - "default": false, + "default": true, "description": "Enables semanticTokens plugin", "scope": "resource", "type": "boolean" From d62b2f3972f23d030f63d865feded00fe8957a9b Mon Sep 17 00:00:00 2001 From: fendor Date: Fri, 4 Sep 2026 11:07:54 +0200 Subject: [PATCH 2/4] Parse metadata url as URI --- package.json | 2 +- src/config.ts | 4 ++-- src/ghcup.ts | 24 +++++++++++++++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 0741ef38..234bb33a 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "scope": "resource", "type": "string", "default": "", - "description": "An optional URL to override where ghcup checks for tool download info (usually at: https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.0.7.yaml)" + "description": "An optional URL to override where ghcup checks for tool download info (usually at: https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.1.0.yaml). Allows multiple channels passed as a JSON array, for example '[ \"GHCupURL\", \"prereleases\", \"cross\" ]'." }, "haskell.releasesDownloadStoragePath": { "scope": "resource", diff --git a/src/config.ts b/src/config.ts index 4e652784..57c08f4c 100644 --- a/src/config.ts +++ b/src/config.ts @@ -3,7 +3,7 @@ import { expandHomeDir, IEnvVars } from './utils'; import * as path from 'path'; import { Logger } from 'vscode-languageclient'; import { ExtensionLogger } from './logger'; -import { GHCupConfig } from './ghcup'; +import { GHCupConfig, parseMetadataUri } from './ghcup'; export type LogLevel = 'off' | 'messages' | 'verbose'; export type ClientLogLevel = 'off' | 'error' | 'info' | 'debug'; @@ -47,7 +47,7 @@ export function initConfig(workspaceConfig: WorkspaceConfiguration, uri: Uri, fo serverArgs: serverArgs, serverEnvironment: workspaceConfig.serverEnvironment, ghcupConfig: { - metadataUrl: workspaceConfig.metadataURL as string, + metadataUrl: workspaceConfig.metadataURL ? parseMetadataUri(workspaceConfig.metadataURL as string) : undefined, upgradeGHCup: workspaceConfig.get('upgradeGHCup') as boolean, executablePath: workspaceConfig.get('ghcupExecutablePath'), }, diff --git a/src/ghcup.ts b/src/ghcup.ts index 85660600..1f186ec8 100644 --- a/src/ghcup.ts +++ b/src/ghcup.ts @@ -1,7 +1,7 @@ import * as path from 'path'; import * as os from 'os'; import * as process from 'process'; -import { WorkspaceFolder } from 'vscode'; +import { Uri, WorkspaceFolder } from 'vscode'; import { Logger } from 'vscode-languageclient'; import { MissingToolError } from './errors'; import { resolvePathPlaceHolders, executableExists, callAsync, ProcessCallback, IEnvVars } from './utils'; @@ -19,8 +19,26 @@ export function initDefaultGHCup(config: GHCupConfig, logger: Logger, folder?: W }); } +export type MetadataUri = Uri | string[]; + +export function parseMetadataUri(m: string): MetadataUri { + try { + const value = JSON.parse(m); + if (Array.isArray(value) && value.every((item) => typeof item === 'string')) return value; + else return Uri.parse(m, true); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (SyntaxError) { + return Uri.parse(m, true); + } +} + +function showMetadataUri(m: MetadataUri): string { + if (m instanceof Uri) return m.toString(); + else return JSON.stringify(m); +} + export type GHCupConfig = { - metadataUrl?: string; + metadataUrl?: MetadataUri; upgradeGHCup: boolean; executablePath?: string; }; @@ -56,7 +74,7 @@ export class GHCup { const metadataUrl = this.config.metadataUrl; // ; return await callAsync( this.location, - ['--no-verbose'].concat(metadataUrl ? ['-s', metadataUrl] : []).concat(args), + ['--no-verbose'].concat(metadataUrl ? ['-s', showMetadataUri(metadataUrl)] : []).concat(args), this.logger, undefined, title, From 3d8b8c1446404a66c8f245f57a3e0578203f6135 Mon Sep 17 00:00:00 2001 From: fendor Date: Fri, 4 Sep 2026 11:34:34 +0200 Subject: [PATCH 3/4] Add ChangeLog for 2.8.3 --- Changelog.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Changelog.md b/Changelog.md index 8fcb4592..5742b23d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,10 @@ # Changelog for vscode-haskell +## 2.8.3 + +- Prepare release 2.8.3 ([#1396](https://github.com/haskell/vscode-haskell/pull/1396)) by @fendor + - Added new configuration options for HLS 2.15.0.0 + ## 2.8.2 - Add language-haskell extension pack From ac3c02542aacbcc670b131d88c75166708f395b8 Mon Sep 17 00:00:00 2001 From: fendor Date: Fri, 4 Sep 2026 14:58:11 +0200 Subject: [PATCH 4/4] Update @vscode/test-electron dep to fix macos bug --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0743a7b8..ebc19989 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "haskell", - "version": "2.8.1", + "version": "2.8.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "haskell", - "version": "2.8.1", + "version": "2.8.3", "license": "MIT", "dependencies": { "ts-pattern": "^5.9.0", @@ -22,7 +22,7 @@ "@typescript-eslint/eslint-plugin": "^8.56.0", "@typescript-eslint/parser": "^8.56.1", "@vscode/test-cli": "^0.0.12", - "@vscode/test-electron": "^2.5.2", + "@vscode/test-electron": "^3.1.0", "corepack": "^0.35.0", "eslint": "^10.4.0", "eslint-webpack-plugin": "^6.0.0", @@ -825,9 +825,9 @@ } }, "node_modules/@vscode/test-electron": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", - "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-3.1.0.tgz", + "integrity": "sha512-CRqv5u+YYoseuNVJ6Tyo4k0sF0mx4qnKMihRB0PjsUF8Dc0WKtCXo6CNL6nWWm5esfFQsQA/pejMj4ZbpJVLTw==", "dev": true, "license": "MIT", "dependencies": { @@ -838,7 +838,7 @@ "semver": "^7.6.2" }, "engines": { - "node": ">=16" + "node": ">=22" } }, "node_modules/@webassemblyjs/ast": { diff --git a/package.json b/package.json index 234bb33a..20bcbb01 100644 --- a/package.json +++ b/package.json @@ -1436,7 +1436,7 @@ "@typescript-eslint/eslint-plugin": "^8.56.0", "@typescript-eslint/parser": "^8.56.1", "@vscode/test-cli": "^0.0.12", - "@vscode/test-electron": "^2.5.2", + "@vscode/test-electron": "^3.1.0", "corepack": "^0.35.0", "eslint": "^10.4.0", "eslint-webpack-plugin": "^6.0.0",