From 46d1a86f159014ba57c6199b54541fe8f1598048 Mon Sep 17 00:00:00 2001 From: Javier Neira Date: Wed, 22 Sep 2021 12:20:18 +0200 Subject: [PATCH 1/9] Create ghc-deprecation.md --- docs/ghc-deprecation.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/ghc-deprecation.md diff --git a/docs/ghc-deprecation.md b/docs/ghc-deprecation.md new file mode 100644 index 0000000000..93458dd368 --- /dev/null +++ b/docs/ghc-deprecation.md @@ -0,0 +1,39 @@ +# GHC support deprecation policy + +- `haskell-language-server`(HLS) is highly tied to ghc api so much so that it needs a specific flavour for each ghc minor version to ensure it will work in a reliable way +- It supposes the codebase is riddled with code conditioned to each supported ghc versions. + - It even needs entire packages to fully support older versions of ghc. +- Our continouos integracion setup has to cover all those cases so it have to use lot of resources to test and build the executable. +- So we need to limit the ghc support to save maintainers and contributors time and reduce ci resources consumption. + - It becomes vital to make HLS development manageable. +- At same time we aim to support the right balance of ghc versions to minimize impact to final users who usually needs to keep using older ghc versions, even if they are out of the window support offered by ghc itself. +- To establish the policy and the possible exceptions we aim to take in account: + - completeness of support: the GHC flavour should include all plugins and features + - ghc versions supported by newer [stackage](https://www.stackage.org/) LTS's + - ghc versions supported by default in the most popular [linux distributions](https://repology.org/project/ghc/versions) + - the specific history of ghc releases and their realibility on the major operating systems (linux, windows, macos) +- It worths to note that users of deprecated ghc versions always will have the option of: + - Continue using the last HLS with support for their ghc version. So they will miss new bug fixes and features. + - For deprecated minor versions of a still supported major version, try to build HLS from source. + - We will not guarentee it will work but will do quite likely. + +## Deprecation policy + +- A GHC version is legacy if it is 3 or more major versions away from the newest stackage LTS ghc version +- HLS will build on all non-legacy (major) versions of GHC, + - for the latest major GHC version we will support at least 2 minor versions + - for the rest of major supported GHC versions we will support at least the latest GHC minor version in stackage LTS (so 1 minor version) +- We may extend the existing discovery mechanisms (hls-wrapper, automatic download in vscode extension) to find and download older HLS binaries when it detects a legacy GHC version +- We will warn users about the deprecated ghc version in the notes of the release *prior* to the deprecation itself. + +## Deprecation prevision + +| newest LTS ghc version | supported ghc versions | +|------------------------|-------------------------------------------------| +| 8.10.7 | 8.10.7, 8.10.6, 8.10.5(\*), 8.8.4, 8.8.3, 8.6.5 | +| 9.0.1 | 9.0.1, 8.10.7, 8.8.4, 8.6.5(\*) | +| 9.0.2 | 9.0.2, 9.0.1, 8.10.7, 8.8.4, 8.6.5(\*) | +| 9.2.0 | 9.2.0, 9.0.2, 8.10.7, 8.8.4 | + +- versions with `*` are versions which should be removed accordingly to the policy but we will keep due to the specific history of realibilty of recent ghc versions +- this prevision is not definitive and may vary depending on changes in the criteria listed above (but always honouring the policy) From 97e4416b620cd2f75a8a9975deca0f8ca79d5c9b Mon Sep 17 00:00:00 2001 From: Javier Neira Date: Wed, 22 Sep 2021 13:00:50 +0200 Subject: [PATCH 2/9] Mark 8.8.3 with * Co-authored-by: Julian Ospald --- docs/ghc-deprecation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ghc-deprecation.md b/docs/ghc-deprecation.md index 93458dd368..0dabb7ac37 100644 --- a/docs/ghc-deprecation.md +++ b/docs/ghc-deprecation.md @@ -30,7 +30,7 @@ | newest LTS ghc version | supported ghc versions | |------------------------|-------------------------------------------------| -| 8.10.7 | 8.10.7, 8.10.6, 8.10.5(\*), 8.8.4, 8.8.3, 8.6.5 | +| 8.10.7 | 8.10.7, 8.10.6, 8.10.5(\*), 8.8.4, 8.8.3(\*), 8.6.5 | | 9.0.1 | 9.0.1, 8.10.7, 8.8.4, 8.6.5(\*) | | 9.0.2 | 9.0.2, 9.0.1, 8.10.7, 8.8.4, 8.6.5(\*) | | 9.2.0 | 9.2.0, 9.0.2, 8.10.7, 8.8.4 | From 567c961cc494a81320c94a7c4a4b8d6fbc60c002 Mon Sep 17 00:00:00 2001 From: Javier Neira Date: Wed, 22 Sep 2021 13:04:18 +0200 Subject: [PATCH 3/9] Add deprecation to index And update description to match the github project one --- docs/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index debda1f172..fa81113d9c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,8 +1,7 @@ haskell-language-server ======================= -Integration point for `ghcide `_ and `haskell-ide-engine `_. One IDE to rule -them all. Read the `project's background `_. +Official haskell ide support via language server (LSP). Successor of `ghcide `_ and `haskell-ide-engine `_. Read the `project's background `_. .. toctree:: :maxdepth: 2 @@ -10,5 +9,6 @@ them all. Read the `project's background Date: Wed, 22 Sep 2021 13:24:21 +0200 Subject: [PATCH 4/9] dont use bullet list for prose --- docs/ghc-deprecation.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/ghc-deprecation.md b/docs/ghc-deprecation.md index 0dabb7ac37..fa6902e772 100644 --- a/docs/ghc-deprecation.md +++ b/docs/ghc-deprecation.md @@ -1,11 +1,9 @@ # GHC support deprecation policy - `haskell-language-server`(HLS) is highly tied to ghc api so much so that it needs a specific flavour for each ghc minor version to ensure it will work in a reliable way -- It supposes the codebase is riddled with code conditioned to each supported ghc versions. - - It even needs entire packages to fully support older versions of ghc. +- It supposes the codebase is riddled with code conditioned to each supported ghc versions. It even needs entire packages to fully support older versions of ghc. - Our continouos integracion setup has to cover all those cases so it have to use lot of resources to test and build the executable. -- So we need to limit the ghc support to save maintainers and contributors time and reduce ci resources consumption. - - It becomes vital to make HLS development manageable. +- So we need to limit the ghc support to save maintainers and contributors time and reduce ci resources consumption. It becomes vital to make HLS development manageable. - At same time we aim to support the right balance of ghc versions to minimize impact to final users who usually needs to keep using older ghc versions, even if they are out of the window support offered by ghc itself. - To establish the policy and the possible exceptions we aim to take in account: - completeness of support: the GHC flavour should include all plugins and features From 764f4142c3423069ce3ed7d3e4ea6c86dc762691 Mon Sep 17 00:00:00 2001 From: jneira Date: Wed, 22 Sep 2021 14:53:51 +0200 Subject: [PATCH 5/9] Move ghc support plan --- docs/ghc-deprecation.md | 14 +------------- docs/installation.md | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/docs/ghc-deprecation.md b/docs/ghc-deprecation.md index fa6902e772..a325945e2c 100644 --- a/docs/ghc-deprecation.md +++ b/docs/ghc-deprecation.md @@ -12,7 +12,7 @@ - the specific history of ghc releases and their realibility on the major operating systems (linux, windows, macos) - It worths to note that users of deprecated ghc versions always will have the option of: - Continue using the last HLS with support for their ghc version. So they will miss new bug fixes and features. - - For deprecated minor versions of a still supported major version, try to build HLS from source. + - For deprecated minor versions of a still supported major version, try to build HLS from source. - We will not guarentee it will work but will do quite likely. ## Deprecation policy @@ -23,15 +23,3 @@ - for the rest of major supported GHC versions we will support at least the latest GHC minor version in stackage LTS (so 1 minor version) - We may extend the existing discovery mechanisms (hls-wrapper, automatic download in vscode extension) to find and download older HLS binaries when it detects a legacy GHC version - We will warn users about the deprecated ghc version in the notes of the release *prior* to the deprecation itself. - -## Deprecation prevision - -| newest LTS ghc version | supported ghc versions | -|------------------------|-------------------------------------------------| -| 8.10.7 | 8.10.7, 8.10.6, 8.10.5(\*), 8.8.4, 8.8.3(\*), 8.6.5 | -| 9.0.1 | 9.0.1, 8.10.7, 8.8.4, 8.6.5(\*) | -| 9.0.2 | 9.0.2, 9.0.1, 8.10.7, 8.8.4, 8.6.5(\*) | -| 9.2.0 | 9.2.0, 9.0.2, 8.10.7, 8.8.4 | - -- versions with `*` are versions which should be removed accordingly to the policy but we will keep due to the specific history of realibilty of recent ghc versions -- this prevision is not definitive and may vary depending on changes in the criteria listed above (but always honouring the policy) diff --git a/docs/installation.md b/docs/installation.md index 97a18dcc8d..7505f43531 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -218,3 +218,27 @@ brew install haskell-language-server This formula contains HLS binaries compiled with GHC versions available via Homebrew; at the moment those are: 8.6.5, 8.8.4, 8.10.7. You need to provide your own GHC/Cabal/Stack as required by your project, possibly via Homebrew. + +## GHC support plan + +Taking in account the ghc deprecation policy the support for differente ghc versions is: + + +| GHC version | last supporting HLS version | deprecation status | +| ----------- | --------------------------- | ----------- | +| 9.2.0 | not supported yet | | +| 9.0.1 | [current](https://github.com/haskell/haskell-language-server/releases/latest) ([partially](https://github.com/haskell/haskell-language-server/issues/297)) || +| 8.10.7 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | | +| 8.10.6 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | with lts for ghc-9.0 | +| 8.10.5 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | deprecated, will be removed *after* 1.5.0 | +| 8.10.4 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | +| 8.10.3 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | +| 8.10.2 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | +| 8.10.1 | [0.9.0](https://github.com/haskell/haskell-language-server/releases/tag/0.9.0) | deprecated | +| 8.8.4 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | with lts for ghc-9.2 | +| 8.8.3 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | deprecated, will be removed *after* 1.5.0 | +| 8.8.2 | [1.2.0](https://github.com/haskell/haskell-language-server/releases/tag/1.2.0) | deprecated | +| 8.6.5 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | with lts for ghc-9.2 | +| 8.6.4 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | + +- this plan is not definitive and may vary depending on changes in the criteria listed above (but always honouring the deprecation policy) From 482695b6abb5496b11e7f7ac0fdae765ec992806 Mon Sep 17 00:00:00 2001 From: jneira Date: Wed, 22 Sep 2021 14:55:50 +0200 Subject: [PATCH 6/9] Rephrasing --- docs/installation.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index 7505f43531..8cb09b6b3c 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -221,7 +221,7 @@ You need to provide your own GHC/Cabal/Stack as required by your project, possib ## GHC support plan -Taking in account the ghc deprecation policy the support for differente ghc versions is: +Taking in account the ghc deprecation policy the support for different ghc versions is: | GHC version | last supporting HLS version | deprecation status | @@ -241,4 +241,5 @@ Taking in account the ghc deprecation policy the support for differente ghc vers | 8.6.5 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | with lts for ghc-9.2 | | 8.6.4 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | -- this plan is not definitive and may vary depending on changes in the criteria listed above (but always honouring the deprecation policy) +- ghc versions not in the list were never supported by HLS +- this plan is not definitive and may vary but always honouring the deprecation policy From 75489545b98531051ddeecf4e82e8702aa33b435 Mon Sep 17 00:00:00 2001 From: Michael Peyton Jones Date: Wed, 22 Sep 2021 20:13:44 +0100 Subject: [PATCH 7/9] Tweak support docs (#2232) --- docs/ghc-deprecation.md | 25 -------------- docs/index.rst | 2 +- docs/installation.md | 24 ------------- docs/supported-versions.md | 69 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 50 deletions(-) delete mode 100644 docs/ghc-deprecation.md create mode 100644 docs/supported-versions.md diff --git a/docs/ghc-deprecation.md b/docs/ghc-deprecation.md deleted file mode 100644 index a325945e2c..0000000000 --- a/docs/ghc-deprecation.md +++ /dev/null @@ -1,25 +0,0 @@ -# GHC support deprecation policy - -- `haskell-language-server`(HLS) is highly tied to ghc api so much so that it needs a specific flavour for each ghc minor version to ensure it will work in a reliable way -- It supposes the codebase is riddled with code conditioned to each supported ghc versions. It even needs entire packages to fully support older versions of ghc. -- Our continouos integracion setup has to cover all those cases so it have to use lot of resources to test and build the executable. -- So we need to limit the ghc support to save maintainers and contributors time and reduce ci resources consumption. It becomes vital to make HLS development manageable. -- At same time we aim to support the right balance of ghc versions to minimize impact to final users who usually needs to keep using older ghc versions, even if they are out of the window support offered by ghc itself. -- To establish the policy and the possible exceptions we aim to take in account: - - completeness of support: the GHC flavour should include all plugins and features - - ghc versions supported by newer [stackage](https://www.stackage.org/) LTS's - - ghc versions supported by default in the most popular [linux distributions](https://repology.org/project/ghc/versions) - - the specific history of ghc releases and their realibility on the major operating systems (linux, windows, macos) -- It worths to note that users of deprecated ghc versions always will have the option of: - - Continue using the last HLS with support for their ghc version. So they will miss new bug fixes and features. - - For deprecated minor versions of a still supported major version, try to build HLS from source. - - We will not guarentee it will work but will do quite likely. - -## Deprecation policy - -- A GHC version is legacy if it is 3 or more major versions away from the newest stackage LTS ghc version -- HLS will build on all non-legacy (major) versions of GHC, - - for the latest major GHC version we will support at least 2 minor versions - - for the rest of major supported GHC versions we will support at least the latest GHC minor version in stackage LTS (so 1 minor version) -- We may extend the existing discovery mechanisms (hls-wrapper, automatic download in vscode extension) to find and download older HLS binaries when it detects a legacy GHC version -- We will warn users about the deprecated ghc version in the notes of the release *prior* to the deprecation itself. diff --git a/docs/index.rst b/docs/index.rst index fa81113d9c..b8c2405762 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -8,7 +8,7 @@ Official haskell ide support via language server (LSP). Successor of `ghcide Date: Wed, 22 Sep 2021 22:53:59 +0200 Subject: [PATCH 8/9] Include pepe suggestions Co-Authored-By: @pepeiborra --- docs/supported-versions.md | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/supported-versions.md b/docs/supported-versions.md index a6e74ecf15..907326e2c1 100644 --- a/docs/supported-versions.md +++ b/docs/supported-versions.md @@ -3,7 +3,7 @@ ## Current GHC version support status The current support for different GHC versions is given in the following table. - + | GHC version | Last supporting HLS version | Deprecation status | | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | | 9.2.0 | not supported yet | | @@ -48,22 +48,23 @@ For the rest of the supported major GHC versions, we will support at least the l We will warn users about the upcoming deprecation of a GHC version in the notes of the release *prior* to the deprecation itself. -### Why deprecate older versions of GHC? +### Why deprecate older versions of GHC? + +`haskell-language-server`(HLS) is highly tied to the ghc api.This imposes a high maintenance cost: -`haskell-language-server` is highly tied to the GHC API, so much so that it needs to be specially built for each GHC minor version to ensure it will work reliably. -This means that the codebase is riddled with CPP to handle each supported ghc versions. It even needs entire compatibility packages to fully support older versions of GHC. -Moreover, our continuous integration setup has to cover all of those cases, which uses a lot of resources. +- The codebase is littered with conditional logic, +- We own auxiliary packages to support older versions of ghc. +- CI has to cover all the supported versions. -So we need to limit the number of versions of GHC that we support in order to save maintainers and contributors time and to reduce the consumption of CI resources. -This is vital to make HLS development manageable. +So we need to limit the ghc support to save maintainers and contributors time and reduce CI resources. -At the same time we aim to support enough GHC versions to minimize the impact on end users. -This includes making an effort to support users who need to keep using old GHC versions, even if they are out of the support window offered by GHC itself. +At same time we aim to support the right balance of ghc versions to minimize impact to final users. ### What factors do we take into account when deprecating a version? -To guide the policy (and possible exceptions) we aim to take in account: -- Completeness of support: all plugins and features should work with that GHC version -- GHC versions supported by newer [Stackage](https://www.stackage.org/) LTS's -- GHC versions supported by default in the most popular [Linux distributions](https://repology.org/project/ghc/versions) -- The specific history of GHC releases and their reliability on the major operating systems (Linux, Windows, MacOS) +To establish and apply the policy we take into account: + +- Completeness: support includes all plugins and features +- The most recent [stackage](https://www.stackage.org/) LTS snapshot +- The GHC versions used in the most popular [linux distributions](https://repology.org/project/ghc/versions) +- The reliability of different ghc versions on the major operating systems (Linux, Windows, MacOS) From d0884ad9f9fa6c3c619b9a8d371d8499b5f08b5f Mon Sep 17 00:00:00 2001 From: jneira Date: Wed, 22 Sep 2021 23:12:56 +0200 Subject: [PATCH 9/9] More precisions --- docs/supported-versions.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/supported-versions.md b/docs/supported-versions.md index 907326e2c1..700b5f0de8 100644 --- a/docs/supported-versions.md +++ b/docs/supported-versions.md @@ -9,19 +9,19 @@ The current support for different GHC versions is given in the following table. | 9.2.0 | not supported yet | | | 9.0.1 | [current](https://github.com/haskell/haskell-language-server/releases/latest) ([partial](https://github.com/haskell/haskell-language-server/issues/297)) | | | 8.10.7 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | | -| 8.10.6 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | will be deprecated after LTS for ghc-9.0 | +| 8.10.6 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | will be deprecated after LTS and HLS full support for ghc-9.0 | | 8.10.5 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | deprecated, will be removed after 1.5.0 | | 8.10.4 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | | 8.10.3 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | | 8.10.2 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | | 8.10.1 | [0.9.0](https://github.com/haskell/haskell-language-server/releases/tag/0.9.0) | deprecated | -| 8.8.4 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | will be deprecated after LTS for ghc-9.2 | +| 8.8.4 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | will be deprecated after LTS and HLS full support for ghc-9.2 | | 8.8.3 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | deprecated, will be removed after 1.5.0 | | 8.8.2 | [1.2.0](https://github.com/haskell/haskell-language-server/releases/tag/1.2.0) | deprecated | -| 8.6.5 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | will be deprecated after LTS for ghc-9.2 | +| 8.6.5 | [current](https://github.com/haskell/haskell-language-server/releases/latest) | will be deprecated after LTS and HLS full suppot for ghc-9.2 | | 8.6.4 | [1.4.0](https://github.com/haskell/haskell-language-server/releases/tag/1.4.0) | deprecated | -GHC versions not in the list have never been supported by HLS, or are not planned. +GHC versions not in the list have never been supported by HLS, or are not planned. LTS stands for [Stackage](https://www.stackage.org/) Long Term Support. The policy for when we deprecate support for versions of GHC is given below. The table reflects that, but we may decide to deviate from it for good reasons. @@ -36,7 +36,9 @@ Users of a deprecated minor version (where the major version is still supported) ### Major versions -A major GHC version is a "legacy" version if it is 3 or more major versions behind the GHC version used in the newest Stackage LTS. HLS will support all non-legacy major versions of GHC. +A major GHC version is a "legacy" version if it is 3 or more major versions behind the GHC version used in the newest Stackage LTS. + +HLS will support all non-legacy major versions of GHC. ### Minor versions