haskell-language-server/haskell-language-server.cabal

633 lines
16 KiB
Plaintext
Raw Normal View History

HLS benchmarks (#3117) * extract ghcide:experiments-types * extract haskell-language-server:plugins and let go of examples The main goal here is to move the Plugins module into an internal library so that it can be reused from the benchmark suite. In order to make that easier, and since they hardly serve a purpose in a repository with 25 plugins, I delete the Example and Example2 plugin descriptors and their dependencies. * HLS benchmark suite Port the ghcide benchmark suite to HLS and benchmark plugin "configurations" independently. This includes the following changes to the ghcide benchmark suite and HLS: - Support for "configurations" which are defined as sets of plugin ids. The benchmark will be run with only these plugins enabled and all others disabled - Support for configurable concurrency. This relies on RTS -ol and -po flags to place the RTS traces in the target location rather than in the cwd This change requires two commits, the next one places ghcide/bench/hist/Main.hs into its final location to help 'git' recognize the change as a file move * ghcide/bench/hist/Main.hs -> bench/Main.hs * CI - fix artifact names for uniqueness * disable shorten HLS step * Do not store eventlogs to avoid out of disk space * render durations up to milliseconds * shorten titles Goal is to display the formatted CSV (via column) one row per line * exclude formatting plugin configurations * Extract ghcide-bench to a standalone package * ghcide-bench: fix stderr capturing * Fix mem stats We parse maxResidency and allocatedBytes from the RTS -S output, but runSessionWithHandles kills the server without waiting for it to exit and these stats don't get logged. The solution is to use runSessionWithHandles', but unfortunately it is internal and not exposed. I have raised a PR to expose it and in the meantime we need a source repo package. * feedbacks * delete Example plugins
2022-08-25 17:08:57 +03:00
cabal-version: 3.0
category: Development
name: haskell-language-server
version: 1.8.0.0
synopsis: LSP server for GHC
description:
Please see the README on GitHub at <https://github.com/haskell/haskell-language-server#readme>
homepage: https://github.com/haskell/haskell-language-server#readme
bug-reports: https://github.com/haskell/haskell-language-server/issues
author: The Haskell IDE Team
maintainer: alan.zimm@gmail.com
copyright: The Haskell IDE Team
license: Apache-2.0
license-file: LICENSE
build-type: Simple
tested-with: GHC == 8.10.7 || == 9.0.2 || == 9.2.3 || == 9.2.4
2020-01-25 17:33:53 +03:00
extra-source-files:
README.md
ChangeLog.md
test/testdata/**/*.project
test/testdata/**/*.cabal
test/testdata/**/*.yaml
test/testdata/**/*.hs
bindist/wrapper.in
2020-01-25 17:33:53 +03:00
flag pedantic
description: Enable -Werror
default: False
manual: True
2020-01-25 17:33:53 +03:00
source-repository head
type: git
location: https://github.com/haskell/haskell-language-server
2020-01-25 17:33:53 +03:00
2020-09-08 09:05:59 +03:00
common common-deps
build-depends:
, base >=4.12 && <5
2020-09-08 09:05:59 +03:00
, directory
, extra
, filepath
, text
Improve logging (#2558) * convert to contravariant logging style part 1, uses additional hardcoded log file to see it side by side with original logging * convert Session to contravariant logging style * convert Plugin/HLS and FireStore to contravariant logging style * convert Rules (and most of the universe) to contravariant logging style * fix tests, allow old style logging and contravariant logging to write to same log file * fix import inside wrong CPP * add CPP for LogTactic constructor * remove redundant import * fix ghcide tests * remove unused import * fix plugin tests * LSP_TEST_STDERR should apply to contra logger as well * fix tactic plugin test * use CPP for Log datatype plugin constructors, remove unused imports * add a few Pretty instances, add prettyprinter to haskell-language-sever and hls-plugin-api dependencies * add Pretty Log instances for Session, FileStore, Notifications * add remaining Pretty Log instances * add logToPriorities * fix slight interleaving issue with hslogger and logger both logging, have default logger be mutex stderr or file handle, use stderr if failing to open log file * forgot to add .cabal files with hslogger dep * dont use UnliftIO file IO helpers because they are too new * remove log helper comments, use Doc instead of Text as final console/file logger input, renaming, export Log constructors * remove accidentally added useless file, removed prettyprinter dep from hls-plugin-api because stack ghc8.6.5 doesnt have it? * use deprecated prettyprint modules import for the sake of circleci ghc-8.6.5 * use dummy stderr logger for plugin cli commands, use priorityToHsLoggerPriority function instead of manual mapping * remove old plugin detritus that somehow got committed * fix prettyprinter imports for 8.6.5 * try enforcing prettyprinter bounds? * enforcing bound makes no sense * maybe changing stack yamls does trick * filter out warnings when their diags are empty to more closely match original * add ability to select wanted logging columns, match prev ghcide exe logging behaviour * dont log anything when diags are empty in some defineEarlyCutoff versions * use non-deprecated prettyprinter imports * fix ghcide test module * change logWith to accept priority at call site, remove all logToPriority functions, add cmapWithPrio that contramaps through WithPriority * remove useless hiding import list, add comments to default recorder makers * make cradleToOptsAndLibDir take concrete cradle to remove existential type var in Log constructor * Types.Logger now re-exports prettyprinter, remove unused dependencies on prettyprinter and hslogger * existential type var to remove boilerplate in Plugins.hs, remove a few Show instances * add SourceLoc logging column, inline logToDoc functions, add comment explaining hslogger setup existence * qualify a name to match original source * fix -WError
2022-02-21 00:50:28 +03:00
, prettyprinter
2020-09-08 09:05:59 +03:00
-- Default warnings in HLS
common warnings
ghc-options: -Wall -Wredundant-constraints -Wno-name-shadowing -Wno-unticked-promoted-constructors
-- Allow compiling in pedantic mode
common pedantic
if flag(pedantic)
ghc-options: -Werror
-- Plugin flags are designed for 'cabal install haskell-language-server':
-- - Bulk flags should be default:False
-- - Individual flags should be default:True
Add support for ghc 9.0.2 (#2567) * Extract out ci build setup * Add required shell property * Add support for ghc-9.0.2 * Test ghc 9.0.2 * Add unix boot package * Use primitive-unlifted < 1.0 * Use primitive-unlifted < 1.0 for stack * Ude 9.0.1 for hackage We cant use 9.0.2 until all deps do not need allow-newer * Use a unified cabal-ghc90.project And bump up index state to get lastest hie-bios * Use last snapshot with ghc-9.0.2 support * Use new cabal-ghc90.project in build * Add stm-containers * Add specific tweaks for ghc-9.0.2 * Use the las ghc-boot-9.0 * Fix test adding allow-newer Co-Authored-By: @michaelpj * Use unix-compat from hackage * Use unix-compat from hackage * Make consistent lastest stack.yamls * Clean up cabal.project * more cleanups * Update tweaks in hackage ci * Correct comment * Correct fourmolu condition * Correct fourmolu condition in tests * Removing the all target from caching It builds all project packages even if we they are not buildables (and are not included in hls due to flags) Its goal was build all tests and benchmarks but --enable-tests ans --enable-benchmarks should work Last one does not: https://github.com/haskell/cabal/issues/6259 * exclude Brittany 0.14.0.1 * Update snapshot to get new lsp * document flag * Document and build ghcide benchmark * Doc and use ghc-9.0.2 in hackage * Add ghc-9.2.1 to tested-with * Use 9.0.2 in gitlab * Use last *molus * Use same versions as cabal build * Use cabal freeze versions * Add dep for ghcide tests * one by one * Unnecessary change * Remove unnecessary flag * Corrections * Move blocks Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2022-01-17 04:18:04 +03:00
-- The intent of this flag is being able to keep the ghc condition for hackage
-- but skip it via flags in cabal.project as plugins for new ghcs usually
-- are buildable using cabal.project tweaks
flag ignore-plugins-ghc-bounds
description: Force the inclusion of plugins even if they are not buildable by default with a specific ghc version
default: False
manual: True
2020-12-09 20:49:05 +03:00
flag class
description: Enable class plugin
default: True
manual: True
2020-12-09 20:49:05 +03:00
flag callHierarchy
description: Enable call hierarchy plugin
default: True
manual: True
flag haddockComments
description: Enable haddockComments plugin
default: True
manual: True
flag eval
description: Enable eval plugin
default: True
manual: True
flag importLens
description: Enable importLens plugin
default: True
manual: True
flag refineImports
description: Enable refineImports plugin
default: True
manual: True
flag rename
description: Enable rename plugin
default: True
manual: True
flag retrie
description: Enable retrie plugin
default: True
manual: True
flag tactic
description: Enable tactic plugin
default: True
manual: True
flag hlint
description: Enable hlint plugin
default: True
manual: True
2022-07-28 02:11:31 +03:00
flag stan
description: Enable stan plugin
default: True
manual: True
flag moduleName
description: Enable moduleName plugin
default: True
manual: True
flag pragmas
description: Enable pragmas plugin
default: True
manual: True
Splice Plugin: expands TH splices and QuasiQuotes (#759) * Implements splice location detection * Corrects detection logic * Changed to use (bogus) message for code action * Splice location * Extract `Ide.TreeTransform` as an independent package * It once worked, but stops... * Now it works for inplace expansion for expressions * generalises tree transformation to general AST element * Done for Types and Patterns! * Disabled "commented" style of expansion * kills redundant imports * Updates cabal.project * Nix fix * Nix fix, fix * Throws away loading hacks entirely * Type adjusted for inverse dependency * Resolves merge conflicts * WIP: Support hover and goto definition for top-level splices I can't work out how to properly integrate this information into the .hie file machinery. Perhaps it would be better to upstream this. * Modifies splice information to store both spliced expression and expanded ones as well * Avoid name collision * formatting erros * Safer error handling * Rewrote using updated ghcide `TypeCheck` results * Use `liftRnf rwhnf` to force spine of lists * Stop using `defaultRunMeta` directly to avoid override of preexisting hooks * Error report * Add splice information into HIE generation. * Resolves interace conflict * Add test * Changes to use ParsedModule to detect Splice CodeLens * formatted * Implements golden test * mzero for HsDecl * Decl Splice * Workaround for Decl expansion and support type-errored macro expansion. * Only setting up dflags correcly would suffice * Removes lines accidentally added * Regression tests for Declaration splice and kind-error ones * Workaround for GHC 8.8 * Revert "Workaround for GHC 8.8" This reverts commit 056f76971f6149f645d2cc9d108978c244ed868d. * Unsupport pattern splices GHC 8.8 * Corrects line position in GoToHover * Increases wait time * Includes only related changes only * Optimises `something'` * Adds hie.yaml * circie ci: Modifies stack-8.10.3.yaml * Forgot to update dflags in auto-expansion with default strategy * Forgot to add golden file * A dummy commit to run CI * Workaround for GHC 8.8 pattern splices Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2021-01-05 18:34:06 +03:00
flag splice
description: Enable splice plugin
default: True
manual: True
Splice Plugin: expands TH splices and QuasiQuotes (#759) * Implements splice location detection * Corrects detection logic * Changed to use (bogus) message for code action * Splice location * Extract `Ide.TreeTransform` as an independent package * It once worked, but stops... * Now it works for inplace expansion for expressions * generalises tree transformation to general AST element * Done for Types and Patterns! * Disabled "commented" style of expansion * kills redundant imports * Updates cabal.project * Nix fix * Nix fix, fix * Throws away loading hacks entirely * Type adjusted for inverse dependency * Resolves merge conflicts * WIP: Support hover and goto definition for top-level splices I can't work out how to properly integrate this information into the .hie file machinery. Perhaps it would be better to upstream this. * Modifies splice information to store both spliced expression and expanded ones as well * Avoid name collision * formatting erros * Safer error handling * Rewrote using updated ghcide `TypeCheck` results * Use `liftRnf rwhnf` to force spine of lists * Stop using `defaultRunMeta` directly to avoid override of preexisting hooks * Error report * Add splice information into HIE generation. * Resolves interace conflict * Add test * Changes to use ParsedModule to detect Splice CodeLens * formatted * Implements golden test * mzero for HsDecl * Decl Splice * Workaround for Decl expansion and support type-errored macro expansion. * Only setting up dflags correcly would suffice * Removes lines accidentally added * Regression tests for Declaration splice and kind-error ones * Workaround for GHC 8.8 * Revert "Workaround for GHC 8.8" This reverts commit 056f76971f6149f645d2cc9d108978c244ed868d. * Unsupport pattern splices GHC 8.8 * Corrects line position in GoToHover * Increases wait time * Includes only related changes only * Optimises `something'` * Adds hie.yaml * circie ci: Modifies stack-8.10.3.yaml * Forgot to update dflags in auto-expansion with default strategy * Forgot to add golden file * A dummy commit to run CI * Workaround for GHC 8.8 pattern splices Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2021-01-05 18:34:06 +03:00
HLS Plugin to provide Alternate Literal Formats. (#2350) * Initialize and Setup Plugin Source. * Provide Traversal Module to Haskell AST that collects Literals. * Change Literals module to return type. Update our parsing module to return the data type we will use in our plugin. The datatype: Literal Constructors: Overloaded - Contains an overloaded literal with a SrcSpan NonOverloaded - Contains non-overloaded literals with a SrcSpan NoLocation - currently unused. This data type is bound to change. This module is designed to capture ALL numeric literals for use in the plugin. When parsing Haskell source tree, certain cases result in getting a plain `Expr`. This means it is not annotated with a SrcSpan. As a result, we pass along a SrcSpan through most functions to keep track of the most recent SrcSpan encountered. This isn't a fool proof plan and may be removed in the future. * Implement Logic for actual CodeActions. The traversal of Haskell source has been turned into a rule. This rule generates hidden diagnostics which allow a user to run a code action over (most) literals. There is some "dead code" in the sense that some literals (prims to be exact) are not allowed to be changed, despite existing in code. The other "dead code" exists in the FormatType type. Certain extensions exist that alter how numbers are shown or act, we make note of those extensions but call them "NoFormat", which essentially means it's a NOOP. Most of the conversion is done via the Numeric module. There are plenty of "show" functions that provide the translation of numbers into the various formats. The only custom format is a slightly "dumb" NumDecimal-extension-function that generates three separate options, instead of using a numeric defined function. * Clarify source code comments. Reformat file structure. * Set up Test Scaffolding. * Miscellaneous clean-up. * Use Regex to Match Source Text. * Remove unneccessary diagnostics from Rule. * Update all stack versions to include new Plugin. * Clean up Conversion.hs and AlternateNumberFormat. Clean up function names and add supporting haddock documentation for exported functions. * Update cabal file bounds and add Github workflow test * Add plugin package to all cabal.project * Add plugin to test suite * Push SYB changes. Test.hs is merely for testing and will be removed prior to Merge. * Use Generics.SYB for parsing Literals from GHC Source. Updated Literals.hs to use custom SYB traversal of the AST. * Update hls-alternate-number-format-plugin.cabal * WIP: run tests * Test additions and GHC compatability changes. * Removed dead code. PrimLiterals were defined originally, however GHC source doesn't provide the source text. This is one of the needs of the plugin so we don't provide duplicate suggestions. Swapped `Maybe Text` to `Text`. Similar to above we now ignore all literals that have no source text attached. Swapped `Maybe SrcSpan` to `RealSrcSpan`. Again, similar to the previous points we now ignore literals that don't get a sourceSpan attached. Similarly, we drop any `UselessSpan`'s as those are also not very helpful. * Use Set to remove duplicates from CollectLiterals Result. Certain AST representations are traversed multiple times with the switch to SYB. Using Set allows to easily remove duplicate Literals from our result. Added a test suite to monitor for regressions. * Delete Test.hs Inadvertently commit this file. * Add README and bump version to 1.0.0.0. * Update HLS cabal file for version change. * Additional Tests. * Update Test file to use Path library function. * Miscellaneous Code Fixes. - Remove unneeded imports/functions. - Export only specified functions from each module (and add Haddock Comment if necessary) - Minor text changes for accuracy * Add README to Extra Source Files. * Update Extra Source Files to include Test Haskell Source files. * Update Features.md and Minor Bug Fix :) * Add new plugins to hackage workflow * Fix Bug caused by Minor Bug Fix. Co-authored-by: jneira <atreyu.bbb@gmail.com> Co-authored-by: Fendor <power.walross@gmail.com>
2021-12-01 17:12:06 +03:00
flag alternateNumberFormat
description: Enable Alternate Number Format plugin
default: True
HLS Plugin to provide Alternate Literal Formats. (#2350) * Initialize and Setup Plugin Source. * Provide Traversal Module to Haskell AST that collects Literals. * Change Literals module to return type. Update our parsing module to return the data type we will use in our plugin. The datatype: Literal Constructors: Overloaded - Contains an overloaded literal with a SrcSpan NonOverloaded - Contains non-overloaded literals with a SrcSpan NoLocation - currently unused. This data type is bound to change. This module is designed to capture ALL numeric literals for use in the plugin. When parsing Haskell source tree, certain cases result in getting a plain `Expr`. This means it is not annotated with a SrcSpan. As a result, we pass along a SrcSpan through most functions to keep track of the most recent SrcSpan encountered. This isn't a fool proof plan and may be removed in the future. * Implement Logic for actual CodeActions. The traversal of Haskell source has been turned into a rule. This rule generates hidden diagnostics which allow a user to run a code action over (most) literals. There is some "dead code" in the sense that some literals (prims to be exact) are not allowed to be changed, despite existing in code. The other "dead code" exists in the FormatType type. Certain extensions exist that alter how numbers are shown or act, we make note of those extensions but call them "NoFormat", which essentially means it's a NOOP. Most of the conversion is done via the Numeric module. There are plenty of "show" functions that provide the translation of numbers into the various formats. The only custom format is a slightly "dumb" NumDecimal-extension-function that generates three separate options, instead of using a numeric defined function. * Clarify source code comments. Reformat file structure. * Set up Test Scaffolding. * Miscellaneous clean-up. * Use Regex to Match Source Text. * Remove unneccessary diagnostics from Rule. * Update all stack versions to include new Plugin. * Clean up Conversion.hs and AlternateNumberFormat. Clean up function names and add supporting haddock documentation for exported functions. * Update cabal file bounds and add Github workflow test * Add plugin package to all cabal.project * Add plugin to test suite * Push SYB changes. Test.hs is merely for testing and will be removed prior to Merge. * Use Generics.SYB for parsing Literals from GHC Source. Updated Literals.hs to use custom SYB traversal of the AST. * Update hls-alternate-number-format-plugin.cabal * WIP: run tests * Test additions and GHC compatability changes. * Removed dead code. PrimLiterals were defined originally, however GHC source doesn't provide the source text. This is one of the needs of the plugin so we don't provide duplicate suggestions. Swapped `Maybe Text` to `Text`. Similar to above we now ignore all literals that have no source text attached. Swapped `Maybe SrcSpan` to `RealSrcSpan`. Again, similar to the previous points we now ignore literals that don't get a sourceSpan attached. Similarly, we drop any `UselessSpan`'s as those are also not very helpful. * Use Set to remove duplicates from CollectLiterals Result. Certain AST representations are traversed multiple times with the switch to SYB. Using Set allows to easily remove duplicate Literals from our result. Added a test suite to monitor for regressions. * Delete Test.hs Inadvertently commit this file. * Add README and bump version to 1.0.0.0. * Update HLS cabal file for version change. * Additional Tests. * Update Test file to use Path library function. * Miscellaneous Code Fixes. - Remove unneeded imports/functions. - Export only specified functions from each module (and add Haddock Comment if necessary) - Minor text changes for accuracy * Add README to Extra Source Files. * Update Extra Source Files to include Test Haskell Source files. * Update Features.md and Minor Bug Fix :) * Add new plugins to hackage workflow * Fix Bug caused by Minor Bug Fix. Co-authored-by: jneira <atreyu.bbb@gmail.com> Co-authored-by: Fendor <power.walross@gmail.com>
2021-12-01 17:12:06 +03:00
manual: True
flag qualifyImportedNames
description: Enable qualifyImportedNames plugin
default: True
manual: True
flag codeRange
description: Enable Code Range plugin
default: True
manual: True
Change Type Signature Plugin (#2660) * First go * Match against specific error message. * Basic Change Type Signature implementation. This implementation only matches a single GHC Error message: ``` • Couldn't match type ‘Int’ with ‘Data.HashSet.Internal.HashSet Int’ Expected type: Int -> Int Actual type: Data.HashSet.Internal.HashSet Int -> Int • In the expression: head . toList In an equation for ‘test’: test = head . toList ``` Specifically on `Expected type: ...`, `Actual type:...` and `In an equation ...`. There are plenty of error messages that match this format but aren't actually valid. * GHC 9.2.0 compat change * Lift expectedError message into a separate binding * Move ChangeTypeAction into it's own plugin * Add New Error Message parsing. - Add new regex for matching extra errors message types - Revamp original regex to match more. - Add basic test suite. - Begin adding `tidyActualType` semantics to provide slightly prettier TyVars * Added Error Message Validation to ignore bad Messages. - Add Pretty Printing for Types - Added a few test scenarios * Miscellaneous Cleanup. * Update Tide Type Signature logic. - Be able to tidy signatures with operators in it - Use T.words instead of regex matching to split tyVars * Remove locA (defaults to id in 8.10) to satisfy 9.0+ * Touch up 9.2.1 * Clean up review notes * Update stack.yamls * Fix copy-paste error * Fix Local Signature resolution * Improve logging (#2558) * convert to contravariant logging style part 1, uses additional hardcoded log file to see it side by side with original logging * convert Session to contravariant logging style * convert Plugin/HLS and FireStore to contravariant logging style * convert Rules (and most of the universe) to contravariant logging style * fix tests, allow old style logging and contravariant logging to write to same log file * fix import inside wrong CPP * add CPP for LogTactic constructor * remove redundant import * fix ghcide tests * remove unused import * fix plugin tests * LSP_TEST_STDERR should apply to contra logger as well * fix tactic plugin test * use CPP for Log datatype plugin constructors, remove unused imports * add a few Pretty instances, add prettyprinter to haskell-language-sever and hls-plugin-api dependencies * add Pretty Log instances for Session, FileStore, Notifications * add remaining Pretty Log instances * add logToPriorities * fix slight interleaving issue with hslogger and logger both logging, have default logger be mutex stderr or file handle, use stderr if failing to open log file * forgot to add .cabal files with hslogger dep * dont use UnliftIO file IO helpers because they are too new * remove log helper comments, use Doc instead of Text as final console/file logger input, renaming, export Log constructors * remove accidentally added useless file, removed prettyprinter dep from hls-plugin-api because stack ghc8.6.5 doesnt have it? * use deprecated prettyprint modules import for the sake of circleci ghc-8.6.5 * use dummy stderr logger for plugin cli commands, use priorityToHsLoggerPriority function instead of manual mapping * remove old plugin detritus that somehow got committed * fix prettyprinter imports for 8.6.5 * try enforcing prettyprinter bounds? * enforcing bound makes no sense * maybe changing stack yamls does trick * filter out warnings when their diags are empty to more closely match original * add ability to select wanted logging columns, match prev ghcide exe logging behaviour * dont log anything when diags are empty in some defineEarlyCutoff versions * use non-deprecated prettyprinter imports * fix ghcide test module * change logWith to accept priority at call site, remove all logToPriority functions, add cmapWithPrio that contramaps through WithPriority * remove useless hiding import list, add comments to default recorder makers * make cradleToOptsAndLibDir take concrete cradle to remove existential type var in Log constructor * Types.Logger now re-exports prettyprinter, remove unused dependencies on prettyprinter and hslogger * existential type var to remove boilerplate in Plugins.hs, remove a few Show instances * add SourceLoc logging column, inline logToDoc functions, add comment explaining hslogger setup existence * qualify a name to match original source * fix -WError * Delete the Telemetry log level (#2727) It's a bit non-standard, and moreover it's entirely dead. * Wall and 9.2 fix * Remove unneeded comments/code Co-authored-by: J. S <shenjonathan0@gmail.com> Co-authored-by: Michael Peyton Jones <me@michaelpj.com> Co-authored-by: Pepe Iborra <pepeiborra@me.com>
2022-03-04 02:08:42 +03:00
flag changeTypeSignature
description: Enable changeTypeSignature plugin
default: True
manual: True
flag gadt
description: Enable gadt plugin
default: True
manual: True
flag explicitFixity
description: Enable explicitFixity plugin
default: True
manual: True
-- formatters
flag floskell
description: Enable floskell plugin
default: True
manual: True
flag fourmolu
description: Enable fourmolu plugin
default: True
manual: True
flag ormolu
description: Enable ormolu plugin
default: True
manual: True
flag stylishHaskell
description: Enable stylishHaskell plugin
default: True
manual: True
flag brittany
description: Enable brittany plugin
default: True
manual: True
flag refactor
description: Enable refactor plugin
default: True
manual: True
flag dynamic
description: Build with the dyn rts
default: True
manual: True
2020-12-09 20:49:05 +03:00
common class
if flag(class)
build-depends: hls-class-plugin ^>= 1.1
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_class
2020-12-09 20:49:05 +03:00
common callHierarchy
if flag(callHierarchy)
build-depends: hls-call-hierarchy-plugin ^>= 1.1
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_callHierarchy
common haddockComments
if flag(haddockComments) && (impl(ghc < 9.2.1) || flag(ignore-plugins-ghc-bounds))
build-depends: hls-haddock-comments-plugin ^>= 1.1
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_haddockComments
common eval
2022-06-27 09:28:43 +03:00
if flag(eval) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
build-depends: hls-eval-plugin ^>= 1.3
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_eval
common importLens
if flag(importLens)
2022-04-18 10:16:11 +03:00
build-depends: hls-explicit-imports-plugin ^>= 1.1
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_importLens
common refineImports
if flag(refineImports)
2022-04-18 10:16:11 +03:00
build-depends: hls-refine-imports-plugin ^>=1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_refineImports
common rename
2022-06-27 09:28:43 +03:00
if flag(rename) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
2022-04-18 10:16:11 +03:00
build-depends: hls-rename-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_rename
common retrie
if flag(retrie) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
2022-04-18 10:16:11 +03:00
build-depends: hls-retrie-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_retrie
common tactic
if flag(tactic) && (impl(ghc < 9.2.1) || flag(ignore-plugins-ghc-bounds))
build-depends: hls-tactics-plugin ^>= 1.7
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_tactic
common hlint
2022-06-27 09:28:43 +03:00
if flag(hlint) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
build-depends: hls-hlint-plugin ^>= 1.1
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_hlint
2022-07-28 02:11:31 +03:00
common stan
if flag(stan) && (impl(ghc >= 8.10) && impl(ghc < 9.0))
2022-07-28 02:11:31 +03:00
build-depends: hls-stan-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_stan
2022-07-28 02:11:31 +03:00
common moduleName
if flag(moduleName)
build-depends: hls-module-name-plugin ^>= 1.1
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_moduleName
common pragmas
if flag(pragmas)
2022-04-18 10:16:11 +03:00
build-depends: hls-pragmas-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_pragmas
Splice Plugin: expands TH splices and QuasiQuotes (#759) * Implements splice location detection * Corrects detection logic * Changed to use (bogus) message for code action * Splice location * Extract `Ide.TreeTransform` as an independent package * It once worked, but stops... * Now it works for inplace expansion for expressions * generalises tree transformation to general AST element * Done for Types and Patterns! * Disabled "commented" style of expansion * kills redundant imports * Updates cabal.project * Nix fix * Nix fix, fix * Throws away loading hacks entirely * Type adjusted for inverse dependency * Resolves merge conflicts * WIP: Support hover and goto definition for top-level splices I can't work out how to properly integrate this information into the .hie file machinery. Perhaps it would be better to upstream this. * Modifies splice information to store both spliced expression and expanded ones as well * Avoid name collision * formatting erros * Safer error handling * Rewrote using updated ghcide `TypeCheck` results * Use `liftRnf rwhnf` to force spine of lists * Stop using `defaultRunMeta` directly to avoid override of preexisting hooks * Error report * Add splice information into HIE generation. * Resolves interace conflict * Add test * Changes to use ParsedModule to detect Splice CodeLens * formatted * Implements golden test * mzero for HsDecl * Decl Splice * Workaround for Decl expansion and support type-errored macro expansion. * Only setting up dflags correcly would suffice * Removes lines accidentally added * Regression tests for Declaration splice and kind-error ones * Workaround for GHC 8.8 * Revert "Workaround for GHC 8.8" This reverts commit 056f76971f6149f645d2cc9d108978c244ed868d. * Unsupport pattern splices GHC 8.8 * Corrects line position in GoToHover * Increases wait time * Includes only related changes only * Optimises `something'` * Adds hie.yaml * circie ci: Modifies stack-8.10.3.yaml * Forgot to update dflags in auto-expansion with default strategy * Forgot to add golden file * A dummy commit to run CI * Workaround for GHC 8.8 pattern splices Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2021-01-05 18:34:06 +03:00
common splice
if flag(splice) && (impl(ghc < 9.2.1) || flag(ignore-plugins-ghc-bounds))
build-depends: hls-splice-plugin ^>=1.0.0.1
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_splice
Splice Plugin: expands TH splices and QuasiQuotes (#759) * Implements splice location detection * Corrects detection logic * Changed to use (bogus) message for code action * Splice location * Extract `Ide.TreeTransform` as an independent package * It once worked, but stops... * Now it works for inplace expansion for expressions * generalises tree transformation to general AST element * Done for Types and Patterns! * Disabled "commented" style of expansion * kills redundant imports * Updates cabal.project * Nix fix * Nix fix, fix * Throws away loading hacks entirely * Type adjusted for inverse dependency * Resolves merge conflicts * WIP: Support hover and goto definition for top-level splices I can't work out how to properly integrate this information into the .hie file machinery. Perhaps it would be better to upstream this. * Modifies splice information to store both spliced expression and expanded ones as well * Avoid name collision * formatting erros * Safer error handling * Rewrote using updated ghcide `TypeCheck` results * Use `liftRnf rwhnf` to force spine of lists * Stop using `defaultRunMeta` directly to avoid override of preexisting hooks * Error report * Add splice information into HIE generation. * Resolves interace conflict * Add test * Changes to use ParsedModule to detect Splice CodeLens * formatted * Implements golden test * mzero for HsDecl * Decl Splice * Workaround for Decl expansion and support type-errored macro expansion. * Only setting up dflags correcly would suffice * Removes lines accidentally added * Regression tests for Declaration splice and kind-error ones * Workaround for GHC 8.8 * Revert "Workaround for GHC 8.8" This reverts commit 056f76971f6149f645d2cc9d108978c244ed868d. * Unsupport pattern splices GHC 8.8 * Corrects line position in GoToHover * Increases wait time * Includes only related changes only * Optimises `something'` * Adds hie.yaml * circie ci: Modifies stack-8.10.3.yaml * Forgot to update dflags in auto-expansion with default strategy * Forgot to add golden file * A dummy commit to run CI * Workaround for GHC 8.8 pattern splices Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2021-01-05 18:34:06 +03:00
HLS Plugin to provide Alternate Literal Formats. (#2350) * Initialize and Setup Plugin Source. * Provide Traversal Module to Haskell AST that collects Literals. * Change Literals module to return type. Update our parsing module to return the data type we will use in our plugin. The datatype: Literal Constructors: Overloaded - Contains an overloaded literal with a SrcSpan NonOverloaded - Contains non-overloaded literals with a SrcSpan NoLocation - currently unused. This data type is bound to change. This module is designed to capture ALL numeric literals for use in the plugin. When parsing Haskell source tree, certain cases result in getting a plain `Expr`. This means it is not annotated with a SrcSpan. As a result, we pass along a SrcSpan through most functions to keep track of the most recent SrcSpan encountered. This isn't a fool proof plan and may be removed in the future. * Implement Logic for actual CodeActions. The traversal of Haskell source has been turned into a rule. This rule generates hidden diagnostics which allow a user to run a code action over (most) literals. There is some "dead code" in the sense that some literals (prims to be exact) are not allowed to be changed, despite existing in code. The other "dead code" exists in the FormatType type. Certain extensions exist that alter how numbers are shown or act, we make note of those extensions but call them "NoFormat", which essentially means it's a NOOP. Most of the conversion is done via the Numeric module. There are plenty of "show" functions that provide the translation of numbers into the various formats. The only custom format is a slightly "dumb" NumDecimal-extension-function that generates three separate options, instead of using a numeric defined function. * Clarify source code comments. Reformat file structure. * Set up Test Scaffolding. * Miscellaneous clean-up. * Use Regex to Match Source Text. * Remove unneccessary diagnostics from Rule. * Update all stack versions to include new Plugin. * Clean up Conversion.hs and AlternateNumberFormat. Clean up function names and add supporting haddock documentation for exported functions. * Update cabal file bounds and add Github workflow test * Add plugin package to all cabal.project * Add plugin to test suite * Push SYB changes. Test.hs is merely for testing and will be removed prior to Merge. * Use Generics.SYB for parsing Literals from GHC Source. Updated Literals.hs to use custom SYB traversal of the AST. * Update hls-alternate-number-format-plugin.cabal * WIP: run tests * Test additions and GHC compatability changes. * Removed dead code. PrimLiterals were defined originally, however GHC source doesn't provide the source text. This is one of the needs of the plugin so we don't provide duplicate suggestions. Swapped `Maybe Text` to `Text`. Similar to above we now ignore all literals that have no source text attached. Swapped `Maybe SrcSpan` to `RealSrcSpan`. Again, similar to the previous points we now ignore literals that don't get a sourceSpan attached. Similarly, we drop any `UselessSpan`'s as those are also not very helpful. * Use Set to remove duplicates from CollectLiterals Result. Certain AST representations are traversed multiple times with the switch to SYB. Using Set allows to easily remove duplicate Literals from our result. Added a test suite to monitor for regressions. * Delete Test.hs Inadvertently commit this file. * Add README and bump version to 1.0.0.0. * Update HLS cabal file for version change. * Additional Tests. * Update Test file to use Path library function. * Miscellaneous Code Fixes. - Remove unneeded imports/functions. - Export only specified functions from each module (and add Haddock Comment if necessary) - Minor text changes for accuracy * Add README to Extra Source Files. * Update Extra Source Files to include Test Haskell Source files. * Update Features.md and Minor Bug Fix :) * Add new plugins to hackage workflow * Fix Bug caused by Minor Bug Fix. Co-authored-by: jneira <atreyu.bbb@gmail.com> Co-authored-by: Fendor <power.walross@gmail.com>
2021-12-01 17:12:06 +03:00
common alternateNumberFormat
if flag(alternateNumberFormat)
build-depends: hls-alternate-number-format-plugin ^>= 1.2
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_alternateNumberFormat
HLS Plugin to provide Alternate Literal Formats. (#2350) * Initialize and Setup Plugin Source. * Provide Traversal Module to Haskell AST that collects Literals. * Change Literals module to return type. Update our parsing module to return the data type we will use in our plugin. The datatype: Literal Constructors: Overloaded - Contains an overloaded literal with a SrcSpan NonOverloaded - Contains non-overloaded literals with a SrcSpan NoLocation - currently unused. This data type is bound to change. This module is designed to capture ALL numeric literals for use in the plugin. When parsing Haskell source tree, certain cases result in getting a plain `Expr`. This means it is not annotated with a SrcSpan. As a result, we pass along a SrcSpan through most functions to keep track of the most recent SrcSpan encountered. This isn't a fool proof plan and may be removed in the future. * Implement Logic for actual CodeActions. The traversal of Haskell source has been turned into a rule. This rule generates hidden diagnostics which allow a user to run a code action over (most) literals. There is some "dead code" in the sense that some literals (prims to be exact) are not allowed to be changed, despite existing in code. The other "dead code" exists in the FormatType type. Certain extensions exist that alter how numbers are shown or act, we make note of those extensions but call them "NoFormat", which essentially means it's a NOOP. Most of the conversion is done via the Numeric module. There are plenty of "show" functions that provide the translation of numbers into the various formats. The only custom format is a slightly "dumb" NumDecimal-extension-function that generates three separate options, instead of using a numeric defined function. * Clarify source code comments. Reformat file structure. * Set up Test Scaffolding. * Miscellaneous clean-up. * Use Regex to Match Source Text. * Remove unneccessary diagnostics from Rule. * Update all stack versions to include new Plugin. * Clean up Conversion.hs and AlternateNumberFormat. Clean up function names and add supporting haddock documentation for exported functions. * Update cabal file bounds and add Github workflow test * Add plugin package to all cabal.project * Add plugin to test suite * Push SYB changes. Test.hs is merely for testing and will be removed prior to Merge. * Use Generics.SYB for parsing Literals from GHC Source. Updated Literals.hs to use custom SYB traversal of the AST. * Update hls-alternate-number-format-plugin.cabal * WIP: run tests * Test additions and GHC compatability changes. * Removed dead code. PrimLiterals were defined originally, however GHC source doesn't provide the source text. This is one of the needs of the plugin so we don't provide duplicate suggestions. Swapped `Maybe Text` to `Text`. Similar to above we now ignore all literals that have no source text attached. Swapped `Maybe SrcSpan` to `RealSrcSpan`. Again, similar to the previous points we now ignore literals that don't get a sourceSpan attached. Similarly, we drop any `UselessSpan`'s as those are also not very helpful. * Use Set to remove duplicates from CollectLiterals Result. Certain AST representations are traversed multiple times with the switch to SYB. Using Set allows to easily remove duplicate Literals from our result. Added a test suite to monitor for regressions. * Delete Test.hs Inadvertently commit this file. * Add README and bump version to 1.0.0.0. * Update HLS cabal file for version change. * Additional Tests. * Update Test file to use Path library function. * Miscellaneous Code Fixes. - Remove unneeded imports/functions. - Export only specified functions from each module (and add Haddock Comment if necessary) - Minor text changes for accuracy * Add README to Extra Source Files. * Update Extra Source Files to include Test Haskell Source files. * Update Features.md and Minor Bug Fix :) * Add new plugins to hackage workflow * Fix Bug caused by Minor Bug Fix. Co-authored-by: jneira <atreyu.bbb@gmail.com> Co-authored-by: Fendor <power.walross@gmail.com>
2021-12-01 17:12:06 +03:00
common qualifyImportedNames
if flag(qualifyImportedNames)
2022-04-18 10:16:11 +03:00
build-depends: hls-qualify-imported-names-plugin ^>=1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_qualifyImportedNames
common codeRange
if flag(codeRange)
build-depends: hls-code-range-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_codeRange
Change Type Signature Plugin (#2660) * First go * Match against specific error message. * Basic Change Type Signature implementation. This implementation only matches a single GHC Error message: ``` • Couldn't match type ‘Int’ with ‘Data.HashSet.Internal.HashSet Int’ Expected type: Int -> Int Actual type: Data.HashSet.Internal.HashSet Int -> Int • In the expression: head . toList In an equation for ‘test’: test = head . toList ``` Specifically on `Expected type: ...`, `Actual type:...` and `In an equation ...`. There are plenty of error messages that match this format but aren't actually valid. * GHC 9.2.0 compat change * Lift expectedError message into a separate binding * Move ChangeTypeAction into it's own plugin * Add New Error Message parsing. - Add new regex for matching extra errors message types - Revamp original regex to match more. - Add basic test suite. - Begin adding `tidyActualType` semantics to provide slightly prettier TyVars * Added Error Message Validation to ignore bad Messages. - Add Pretty Printing for Types - Added a few test scenarios * Miscellaneous Cleanup. * Update Tide Type Signature logic. - Be able to tidy signatures with operators in it - Use T.words instead of regex matching to split tyVars * Remove locA (defaults to id in 8.10) to satisfy 9.0+ * Touch up 9.2.1 * Clean up review notes * Update stack.yamls * Fix copy-paste error * Fix Local Signature resolution * Improve logging (#2558) * convert to contravariant logging style part 1, uses additional hardcoded log file to see it side by side with original logging * convert Session to contravariant logging style * convert Plugin/HLS and FireStore to contravariant logging style * convert Rules (and most of the universe) to contravariant logging style * fix tests, allow old style logging and contravariant logging to write to same log file * fix import inside wrong CPP * add CPP for LogTactic constructor * remove redundant import * fix ghcide tests * remove unused import * fix plugin tests * LSP_TEST_STDERR should apply to contra logger as well * fix tactic plugin test * use CPP for Log datatype plugin constructors, remove unused imports * add a few Pretty instances, add prettyprinter to haskell-language-sever and hls-plugin-api dependencies * add Pretty Log instances for Session, FileStore, Notifications * add remaining Pretty Log instances * add logToPriorities * fix slight interleaving issue with hslogger and logger both logging, have default logger be mutex stderr or file handle, use stderr if failing to open log file * forgot to add .cabal files with hslogger dep * dont use UnliftIO file IO helpers because they are too new * remove log helper comments, use Doc instead of Text as final console/file logger input, renaming, export Log constructors * remove accidentally added useless file, removed prettyprinter dep from hls-plugin-api because stack ghc8.6.5 doesnt have it? * use deprecated prettyprint modules import for the sake of circleci ghc-8.6.5 * use dummy stderr logger for plugin cli commands, use priorityToHsLoggerPriority function instead of manual mapping * remove old plugin detritus that somehow got committed * fix prettyprinter imports for 8.6.5 * try enforcing prettyprinter bounds? * enforcing bound makes no sense * maybe changing stack yamls does trick * filter out warnings when their diags are empty to more closely match original * add ability to select wanted logging columns, match prev ghcide exe logging behaviour * dont log anything when diags are empty in some defineEarlyCutoff versions * use non-deprecated prettyprinter imports * fix ghcide test module * change logWith to accept priority at call site, remove all logToPriority functions, add cmapWithPrio that contramaps through WithPriority * remove useless hiding import list, add comments to default recorder makers * make cradleToOptsAndLibDir take concrete cradle to remove existential type var in Log constructor * Types.Logger now re-exports prettyprinter, remove unused dependencies on prettyprinter and hslogger * existential type var to remove boilerplate in Plugins.hs, remove a few Show instances * add SourceLoc logging column, inline logToDoc functions, add comment explaining hslogger setup existence * qualify a name to match original source * fix -WError * Delete the Telemetry log level (#2727) It's a bit non-standard, and moreover it's entirely dead. * Wall and 9.2 fix * Remove unneeded comments/code Co-authored-by: J. S <shenjonathan0@gmail.com> Co-authored-by: Michael Peyton Jones <me@michaelpj.com> Co-authored-by: Pepe Iborra <pepeiborra@me.com>
2022-03-04 02:08:42 +03:00
common changeTypeSignature
if flag(changeTypeSignature)
2022-04-18 10:16:11 +03:00
build-depends: hls-change-type-signature-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_changeTypeSignature
Change Type Signature Plugin (#2660) * First go * Match against specific error message. * Basic Change Type Signature implementation. This implementation only matches a single GHC Error message: ``` • Couldn't match type ‘Int’ with ‘Data.HashSet.Internal.HashSet Int’ Expected type: Int -> Int Actual type: Data.HashSet.Internal.HashSet Int -> Int • In the expression: head . toList In an equation for ‘test’: test = head . toList ``` Specifically on `Expected type: ...`, `Actual type:...` and `In an equation ...`. There are plenty of error messages that match this format but aren't actually valid. * GHC 9.2.0 compat change * Lift expectedError message into a separate binding * Move ChangeTypeAction into it's own plugin * Add New Error Message parsing. - Add new regex for matching extra errors message types - Revamp original regex to match more. - Add basic test suite. - Begin adding `tidyActualType` semantics to provide slightly prettier TyVars * Added Error Message Validation to ignore bad Messages. - Add Pretty Printing for Types - Added a few test scenarios * Miscellaneous Cleanup. * Update Tide Type Signature logic. - Be able to tidy signatures with operators in it - Use T.words instead of regex matching to split tyVars * Remove locA (defaults to id in 8.10) to satisfy 9.0+ * Touch up 9.2.1 * Clean up review notes * Update stack.yamls * Fix copy-paste error * Fix Local Signature resolution * Improve logging (#2558) * convert to contravariant logging style part 1, uses additional hardcoded log file to see it side by side with original logging * convert Session to contravariant logging style * convert Plugin/HLS and FireStore to contravariant logging style * convert Rules (and most of the universe) to contravariant logging style * fix tests, allow old style logging and contravariant logging to write to same log file * fix import inside wrong CPP * add CPP for LogTactic constructor * remove redundant import * fix ghcide tests * remove unused import * fix plugin tests * LSP_TEST_STDERR should apply to contra logger as well * fix tactic plugin test * use CPP for Log datatype plugin constructors, remove unused imports * add a few Pretty instances, add prettyprinter to haskell-language-sever and hls-plugin-api dependencies * add Pretty Log instances for Session, FileStore, Notifications * add remaining Pretty Log instances * add logToPriorities * fix slight interleaving issue with hslogger and logger both logging, have default logger be mutex stderr or file handle, use stderr if failing to open log file * forgot to add .cabal files with hslogger dep * dont use UnliftIO file IO helpers because they are too new * remove log helper comments, use Doc instead of Text as final console/file logger input, renaming, export Log constructors * remove accidentally added useless file, removed prettyprinter dep from hls-plugin-api because stack ghc8.6.5 doesnt have it? * use deprecated prettyprint modules import for the sake of circleci ghc-8.6.5 * use dummy stderr logger for plugin cli commands, use priorityToHsLoggerPriority function instead of manual mapping * remove old plugin detritus that somehow got committed * fix prettyprinter imports for 8.6.5 * try enforcing prettyprinter bounds? * enforcing bound makes no sense * maybe changing stack yamls does trick * filter out warnings when their diags are empty to more closely match original * add ability to select wanted logging columns, match prev ghcide exe logging behaviour * dont log anything when diags are empty in some defineEarlyCutoff versions * use non-deprecated prettyprinter imports * fix ghcide test module * change logWith to accept priority at call site, remove all logToPriority functions, add cmapWithPrio that contramaps through WithPriority * remove useless hiding import list, add comments to default recorder makers * make cradleToOptsAndLibDir take concrete cradle to remove existential type var in Log constructor * Types.Logger now re-exports prettyprinter, remove unused dependencies on prettyprinter and hslogger * existential type var to remove boilerplate in Plugins.hs, remove a few Show instances * add SourceLoc logging column, inline logToDoc functions, add comment explaining hslogger setup existence * qualify a name to match original source * fix -WError * Delete the Telemetry log level (#2727) It's a bit non-standard, and moreover it's entirely dead. * Wall and 9.2 fix * Remove unneeded comments/code Co-authored-by: J. S <shenjonathan0@gmail.com> Co-authored-by: Michael Peyton Jones <me@michaelpj.com> Co-authored-by: Pepe Iborra <pepeiborra@me.com>
2022-03-04 02:08:42 +03:00
common gadt
2022-06-27 09:28:43 +03:00
if flag(gadt) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
build-depends: hls-gadt-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_gadt
common explicitFixity
if flag(explicitFixity)
build-depends: hls-explicit-fixity-plugin ^>= 1.0
cpp-options: -DexplicitFixity
-- formatters
common floskell
2022-06-27 09:28:43 +03:00
if flag(floskell) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
2022-04-18 10:16:11 +03:00
build-depends: hls-floskell-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_floskell
common fourmolu
2022-06-27 09:28:43 +03:00
if flag(fourmolu) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
build-depends: hls-fourmolu-plugin ^>= 1.1
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_fourmolu
common ormolu
2022-06-27 09:28:43 +03:00
if flag(ormolu) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
2022-04-18 10:16:11 +03:00
build-depends: hls-ormolu-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_ormolu
common stylishHaskell
2022-06-27 09:28:43 +03:00
if flag(stylishHaskell) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
2022-04-18 10:16:11 +03:00
build-depends: hls-stylish-haskell-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_stylishHaskell
common brittany
Prepare 1.6.0 release (#2642) * Add list of merged prs * Remove branch trigger * Update release instructions * Include 9.2.1 in the current release * Bump up hls version * remove duplicate mention * Remove references to branch name * Fix cabal.project gen * Correct fail-fast condition * Bump up minor version * Bump up major version * Bump up major version * Allow brittany only for 9.0.1 * brittany not supported in hackage and 9.0.2 * Not short hls for hackage * Bump up versions everywhere * Update hackage index * Add ghcide in rename plugin * Apply linter and add selection demo * Add header linkable * Add first version of release description * Add last prs * Mention wingman * Grammar corrections Co-authored-by: Jan Hrcek <2716069+jhrcek@users.noreply.github.com> * Correct mention Co-authored-by: Pepe Iborra <pepeiborra@me.com> * Warn about th in docs * Remove reference to install doc * Rephrasing Co-authored-by: J. S. <document_done@hotmail.com> * Better style Co-authored-by: Junyoung "Clare" Jang <jjc9310@gmail.com> * Use could to stress it likely will not work * REmove reliable from the warning * Reorder comments * Rephrasing Co-authored-by: Michael Peyton Jones <me@michaelpj.com> * Update docs/supported-versions.md Co-authored-by: Michael Peyton Jones <me@michaelpj.com> * Use last version of internal deps * Restore original wording * One more pr * One more pr Co-authored-by: Jan Hrcek <2716069+jhrcek@users.noreply.github.com> Co-authored-by: Pepe Iborra <pepeiborra@me.com> Co-authored-by: J. S. <document_done@hotmail.com> Co-authored-by: Junyoung "Clare" Jang <jjc9310@gmail.com> Co-authored-by: Michael Peyton Jones <me@michaelpj.com>
2022-01-28 12:06:56 +03:00
if flag(brittany) && (impl(ghc < 9.0.2) || flag(ignore-plugins-ghc-bounds))
2022-04-18 10:16:11 +03:00
build-depends: hls-brittany-plugin ^>= 1.0
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_brittany
common refactor
2022-06-27 09:28:43 +03:00
if flag(refactor) && (impl(ghc < 9.4.1) || flag(ignore-plugins-ghc-bounds))
build-depends: hls-refactor-plugin ^>= 1.0
cpp-options: -Dhls_refactor
library
import: common-deps
-- configuration
, warnings
, pedantic
-- plugins
, callHierarchy
, changeTypeSignature
, class
, haddockComments
, eval
, importLens
, refineImports
, rename
, retrie
, tactic
, hlint
, stan
, moduleName
, pragmas
, splice
, alternateNumberFormat
, qualifyImportedNames
, codeRange
, gadt
, explicitFixity
, floskell
, fourmolu
, ormolu
, stylishHaskell
, brittany
, refactor
exposed-modules:
Ide.Arguments
Ide.Main
Ide.Version
HlsPlugins
other-modules: Paths_haskell_language_server
autogen-modules: Paths_haskell_language_server
hs-source-dirs: src
build-depends:
, async
, base16-bytestring
, bytestring
, containers
, cryptohash-sha1
, data-default
, ghc
, ghcide ^>=1.8
, githash >=0.1.6.1
, lsp
, hie-bios
, hiedb
, hls-plugin-api ^>=1.5
, optparse-applicative
, optparse-simple
, process
, hls-graph
, safe-exceptions
, sqlite-simple
, unordered-containers
, aeson-pretty
HLS benchmarks (#3117) * extract ghcide:experiments-types * extract haskell-language-server:plugins and let go of examples The main goal here is to move the Plugins module into an internal library so that it can be reused from the benchmark suite. In order to make that easier, and since they hardly serve a purpose in a repository with 25 plugins, I delete the Example and Example2 plugin descriptors and their dependencies. * HLS benchmark suite Port the ghcide benchmark suite to HLS and benchmark plugin "configurations" independently. This includes the following changes to the ghcide benchmark suite and HLS: - Support for "configurations" which are defined as sets of plugin ids. The benchmark will be run with only these plugins enabled and all others disabled - Support for configurable concurrency. This relies on RTS -ol and -po flags to place the RTS traces in the target location rather than in the cwd This change requires two commits, the next one places ghcide/bench/hist/Main.hs into its final location to help 'git' recognize the change as a file move * ghcide/bench/hist/Main.hs -> bench/Main.hs * CI - fix artifact names for uniqueness * disable shorten HLS step * Do not store eventlogs to avoid out of disk space * render durations up to milliseconds * shorten titles Goal is to display the formatted CSV (via column) one row per line * exclude formatting plugin configurations * Extract ghcide-bench to a standalone package * ghcide-bench: fix stderr capturing * Fix mem stats We parse maxResidency and allocatedBytes from the RTS -S output, but runSessionWithHandles kills the server without waiting for it to exit and these stats don't get logged. The solution is to use runSessionWithHandles', but unfortunately it is internal and not exposed. I have raised a PR to expose it and in the meantime we need a source repo package. * feedbacks * delete Example plugins
2022-08-25 17:08:57 +03:00
default-language: Haskell2010
default-extensions: DataKinds, TypeOperators
HLS benchmarks (#3117) * extract ghcide:experiments-types * extract haskell-language-server:plugins and let go of examples The main goal here is to move the Plugins module into an internal library so that it can be reused from the benchmark suite. In order to make that easier, and since they hardly serve a purpose in a repository with 25 plugins, I delete the Example and Example2 plugin descriptors and their dependencies. * HLS benchmark suite Port the ghcide benchmark suite to HLS and benchmark plugin "configurations" independently. This includes the following changes to the ghcide benchmark suite and HLS: - Support for "configurations" which are defined as sets of plugin ids. The benchmark will be run with only these plugins enabled and all others disabled - Support for configurable concurrency. This relies on RTS -ol and -po flags to place the RTS traces in the target location rather than in the cwd This change requires two commits, the next one places ghcide/bench/hist/Main.hs into its final location to help 'git' recognize the change as a file move * ghcide/bench/hist/Main.hs -> bench/Main.hs * CI - fix artifact names for uniqueness * disable shorten HLS step * Do not store eventlogs to avoid out of disk space * render durations up to milliseconds * shorten titles Goal is to display the formatted CSV (via column) one row per line * exclude formatting plugin configurations * Extract ghcide-bench to a standalone package * ghcide-bench: fix stderr capturing * Fix mem stats We parse maxResidency and allocatedBytes from the RTS -S output, but runSessionWithHandles kills the server without waiting for it to exit and these stats don't get logged. The solution is to use runSessionWithHandles', but unfortunately it is internal and not exposed. I have raised a PR to expose it and in the meantime we need a source repo package. * feedbacks * delete Example plugins
2022-08-25 17:08:57 +03:00
executable haskell-language-server
import: common-deps
-- configuration
, warnings
, pedantic
main-is: Main.hs
hs-source-dirs: exe
ghc-options:
-threaded
-- allow user RTS overrides
-rtsopts
-- disable idle GC
-- increase nursery size
-- Enable collection of heap statistics
"-with-rtsopts=-I0 -A128M -T"
-Wno-unticked-promoted-constructors
if flag(pedantic)
ghc-options: -Werror
if !os(windows) && flag(dynamic)
-- We want to link against the dyn rts just like official GHC binaries do;
-- the linked rts determines how external libs are loaded dynamically by TH.
-- The standard way of doing this is via the --enable-dynamic-executables Cabal option
-- Unfortunately it doesnt' work, see https://github.com/haskell/haskell-language-server/issues/2659
-- One can use --ghc-options=-dynamic but this gets applied to the dependencies as well,
-- which results in massive rebuilds and incompatibilities with profiling.
-- So instead we set the -dynamic flag diretly here.
ghc-options: -dynamic
2020-01-25 17:33:53 +03:00
build-depends:
, aeson
, async
, base16-bytestring
, binary
, bytestring
, containers
, cryptohash-sha1
, deepseq
, ghc
, ghc-boot-th
2020-11-10 12:29:49 +03:00
, ghcide
, hashable
2020-09-08 09:05:59 +03:00
, haskell-language-server
, lsp
, hie-bios
, hiedb
, lens
, regex-tdfa
, optparse-applicative
, hls-plugin-api
, lens
, mtl
, regex-tdfa
2020-06-13 20:16:03 +03:00
, safe-exceptions
, hls-graph
, sqlite-simple
, stm
, temporary
, transformers
2020-02-14 02:19:29 +03:00
, unordered-containers
2020-01-25 17:33:53 +03:00
default-language: Haskell2010
default-extensions: DataKinds, TypeOperators
2020-01-25 17:33:53 +03:00
executable haskell-language-server-wrapper
import: common-deps
, warnings
, pedantic
main-is: Wrapper.hs
hs-source-dirs: exe
other-modules: Paths_haskell_language_server
autogen-modules: Paths_haskell_language_server
ghc-options:
-threaded
-- allow user RTS overrides
-rtsopts
-- disable idle GC
-- increase nursery size
"-with-rtsopts=-I0 -A128M"
build-depends:
, data-default
, ghc
, ghc-paths
2020-12-09 15:42:04 +03:00
, ghcide
, gitrev
2020-09-08 09:05:59 +03:00
, haskell-language-server
, hslogger
, hie-bios
, hls-plugin-api
, lsp
, lsp-types
, mtl
, optparse-applicative
, optparse-simple
, process
, transformers
, unliftio-core
if !os(windows)
build-depends:
unix
, containers
default-language: Haskell2010
2020-05-27 00:15:30 +03:00
test-suite func-test
import: common-deps
, warnings
, pedantic
2022-08-31 19:07:09 +03:00
, refactor
type: exitcode-stdio-1.0
default-language: Haskell2010
build-tool-depends:
haskell-language-server:haskell-language-server -any,
ghcide:ghcide-test-preprocessor -any
build-depends:
, bytestring
, data-default
, hspec-expectations
, lens
, lens-aeson
Splice Plugin: expands TH splices and QuasiQuotes (#759) * Implements splice location detection * Corrects detection logic * Changed to use (bogus) message for code action * Splice location * Extract `Ide.TreeTransform` as an independent package * It once worked, but stops... * Now it works for inplace expansion for expressions * generalises tree transformation to general AST element * Done for Types and Patterns! * Disabled "commented" style of expansion * kills redundant imports * Updates cabal.project * Nix fix * Nix fix, fix * Throws away loading hacks entirely * Type adjusted for inverse dependency * Resolves merge conflicts * WIP: Support hover and goto definition for top-level splices I can't work out how to properly integrate this information into the .hie file machinery. Perhaps it would be better to upstream this. * Modifies splice information to store both spliced expression and expanded ones as well * Avoid name collision * formatting erros * Safer error handling * Rewrote using updated ghcide `TypeCheck` results * Use `liftRnf rwhnf` to force spine of lists * Stop using `defaultRunMeta` directly to avoid override of preexisting hooks * Error report * Add splice information into HIE generation. * Resolves interace conflict * Add test * Changes to use ParsedModule to detect Splice CodeLens * formatted * Implements golden test * mzero for HsDecl * Decl Splice * Workaround for Decl expansion and support type-errored macro expansion. * Only setting up dflags correcly would suffice * Removes lines accidentally added * Regression tests for Declaration splice and kind-error ones * Workaround for GHC 8.8 * Revert "Workaround for GHC 8.8" This reverts commit 056f76971f6149f645d2cc9d108978c244ed868d. * Unsupport pattern splices GHC 8.8 * Corrects line position in GoToHover * Increases wait time * Includes only related changes only * Optimises `something'` * Adds hie.yaml * circie ci: Modifies stack-8.10.3.yaml * Forgot to update dflags in auto-expansion with default strategy * Forgot to add golden file * A dummy commit to run CI * Workaround for GHC 8.8 pattern splices Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2021-01-05 18:34:06 +03:00
, ghcide
, ghcide-test-utils
, hls-test-utils ^>=1.4
, lsp-types
, aeson
, hls-plugin-api
, lsp-test
, containers
, unordered-containers
hs-source-dirs: test/functional test/utils
Implement 'Attempt to fill hole' code action (#431) * [WIP] Start work on 'auto' * Get current binding * Fix currentBindingName for class methods * Proper impl of getDefiningBindings * Forgot to checkin bindsites * [WIP] Update version of refinery * Bind all tyvars if possible * WIP: Instantiate polymorphic functions * Split out fresh type variables when instantiating * Make everything compile * Separate out tactics * oneWayUnifyRule * [WIP] Add 'TacticState' * [WIP] Tweak 'unify' and 'unifyOneWayRule' * [WIP] Start work on skolem tracking * [WIP] Fix 'checkSkolemUnification' * Update judgement type * Add a Context to TacticM * Don't destruct already destructed * Remove the internal lib * Cleanup warnings * Move debug machinery into *.Debug * Rip types out of machinery * Cleanup warnings * Continue splitting Machinery * Rip out GHC and Naming * Get it all compiling * Stop re-exporting from Machinery * Split out codegen/rules * Remove gross/unused tactics * Make newSubgoal derive from an existing judgement * remove newJudgement * Disallow current function from auto * Cleanup auto * Stop using the Judgement ctor * Track pattern value * Better showAstData * Get module-scoped funcs * Split all data constructors * assumption -> assume * Don't destruct if there are zero datacons * Lambda case destruct tactics * Fix the tests * Rip out debug stuff since it fails CI * Tests for lambda case actions * Golden testing machinery * Attempt to fill hole * [WIP] Use 'refinery-0.2.0.0' * [WIP] Update refinery in all stack.yaml files * Bump version in cabal file * Bump cabal index state * Sort goals by heuristic * Naming for unit types * Heuristic for auto * Penalize holes more * Naming for unit types * Give the name "unit" to units * Fallback names for symbols and punctuation * Get "good" name for symbolic names * Update plugins/tactics/src/Ide/Plugin/Tactic/CodeGen.hs Co-authored-by: wz1000 <zubin@cmi.ac.in> * Make the TacticState strict * Make the judgement strict * Simplify when we use position mapping * Move bindsites to ghcide Co-authored-by: Sandy Maguire <sandy@sandymaguire.me> Co-authored-by: wz1000 <zubin@cmi.ac.in>
2020-10-03 09:53:59 +03:00
main-is: Main.hs
other-modules:
Command
Completion
Config
Deferred
Definition
Diagnostic
Format
FunctionalBadProject
FunctionalCodeAction
HieBios
Highlight
Progress
Reference
Symbol
TypeDefinition
Test.Hls.Command
Ghc 9.0.1 support for ghcide (#1649) * hie-compat: Add basic support for ghc-9.0.1 A tiny step towards #297 * hie-compat: Remove dependency on ghc-api-compat * hie-compat: Add more backwards compatability * Import a bunch of upstream ghc9 fixes * cabal.project: allow-newer: *:* The lazy solution to making things compile * Add more upstream fixes * Bump patch of ghc-check * ghcide: Add basic support for GHC-9.0.1 I tried to limit the use of CPP to the Compat module as much as possible by re-exporting the new functions under the old names, but there is still plenty of pragmas all over the code. I'm using ghc-api-compat so the imports doesn't need to be changed as much. * ghcide: Fix backwards compatability with ghc-8.8.4 * ghc9-ghcide: Fix some more issues that caused runtime errors * Restore initDynLinker for older versions of ghc It was probably important for something * Fix ghc-8.6.5 compatability * Fix completion test failures for ghc9 With this example: f asdfgh = asd it would suggest to complete `asd` into `asd_arNC`, which seems to be a name it generated because of deferred-out-of-scope-variables * Ghc-check now supports ghc-9.0.1 * Retrie now supports ghc-9.0.1 But it's not on hackage yet. * Restore retrie orphans * tests: Ghc9 shows [Char] as String by default This seems like an improvement, so just update the test-suite * tests: Ghc9 shows TH-errors after the dollar sign Instead of including it like older versions did $(foo) ~~~~ some TH error/warning * Fix two more test failures - GHC9 uses a more lenient haddock parser - TH2.17 has polymorphic Q monad with a type class * ghc9: Fix "Remove redundant imports" code action In ghc9, only the specific unused function is highlighted, instead of the whole line. * ghcide-tests: Show errors where they are caused instead of deep inside some generic helper function * Only use nub on SrcSpan for ghc>=9 * Remove more CPP pragmas * Remove a bit more CPP This could almost be handled by ghc-api-compat, but if it was imported from TyCoPpr, it doesn't work with ghc < 8.10 * Update stack files to support new versions * Use the version of retire on hackage The new version is now released * Don't use allow-newer: *:* * ghcide-tests: Enable test no longer broken in ghc9 * Update hiedb version for ghcide * Adjust for a minor change in test output for ghc9 * Fix benchmark test for ghc9 Cabal-3.2 is not buildable on ghc9, but 3.4 is builable on older ghc. * Mark minor issues as broken for ghc9 Ghc9 highlights both the constructor and the other fields Maybe this should just be accepted and not seen as broken? * haddock-comments-plugin: Ghc9 support * hls-eval-plugin: Partial ghc9 support * WIP: hls-eval-plugin: Partial ghc9 support * hls-explicit-imports-plugin: Add ghc9 support Now ignores any imports with Unhelpful locations, since we can't make a map of SrcLoc * hls-retrie-plugin: Add ghc9 support * hls-hlint-plugin: Add ghc9 support * Fix backwards compatability of hlint plugin * Fix stack builds (Broken by previous hlint fixes) * Disable tests when their required plugins are disabled Not all plugins are supported on ghc9 yet, but we still want to run the tests for the supported parts * ghc9: Fix module name plugin * Add a stack file and run tests for ghc9 in ci * Add missing packages to ghc-9 stack * Resolve rebase issues Maybe it's better to create merge commits instead? * Allow newer for more packages so cabal stops complaining These aren't really working, but since they are dependencies of packages in the `packages:` section the resolver won't allow us to build anything without this, even if those plugins are disabled. * Replace MIN_GHC_API_VERSION with MIN_VERSION_ghc * Revert incorrect change to hlint code * Remove remaining traces of GHC_LIB flag * Add back ghc 9 to github workflow * Revert "Add back ghc 9 to github workflow" This reverts commit c465a1e51aaaabf56dc7ef8f7fa801ef0abf8fdc. * hie-compat: Add basic support for ghc-9.0.1 A tiny step towards #297 * hie-compat: Remove dependency on ghc-api-compat * hie-compat: Add more backwards compatability * Disable CI for ghc9 * Use newer version of apply-refact * Don't needlessly duplicate code from ghc * hie-compat: Reexport the original version of HieBin * Don't include broken "allow-newer"s * FIx stack build for ghc9 * Fix warning from imperfect merge commit * Don't needlessly duplicate code from ghc * hie-compat: Reexport the original version of HieBin * Add missing ghc-api-compat * Fix ghc9 build for ModuleName * Add more conditionals on flags for tests * Add a separate cabal.project file for ghc9 As far as I know, this is the only way to disable the packages who's dependencies doesn't compile in GHC9 yet. * Fix and re-enable CI for GHC9 * Remove accidental non-breaking space * Fix CI build for ghc9 Since we are changing the flags for haskell-language-server, which CI renames to hls, we need to use the shortened name in those flags as well * Run tests for ghc9 in CI * Minor CI changes * Use proper values when enriching hie * Don't try to test hls-refine-imports-plugin on ghc9 * Update comment about ghc9 crashing on initDynLinker * setSessionDynamicFlags to prevent ghc9 from crashing The only way to set the dynamic linker is with the function `setSessionDynFlags` so we call it with the result from `getSessionDynFlags` to give it a (hopefully sensible) argument. See also this commit: https://gitlab.haskell.org/ghc/ghc/commit/18757cab04c5c5c48eaceea19469d4811c5d0371 * Revert "setSessionDynamicFlags to prevent ghc9 from crashing" This reverts commit 4065ac8394065f8aa15b1b36e0d56e3ba7762e44. That change made the "ghcide.cradle.muli" tests fail. * Simplify logic in hls-hlint-plugin.cabal * Add comment on OldRealSrcSpan * Remove source overrides for non-ghc9 builds in cabal.project * Remove commented out code Co-authored-by: Pepe Iborra <pepeiborra@me.com> * Remove resolved question from comment "This code is only concerned with extracting argument names, so I don't see how multiplicity would be relevant here" https://github.com/haskell/haskell-language-server/pull/1649#discussion_r642606967 * ghc9: Update to latest version of LSP per * cabal-ghc901.project: Remove commented out code * Update the lsp commit hash for stack as well * Use a version of lsp without haskell/lsp#326 That patch was causing test failures, but the issues should be fixed for real at some point, so that patch can be incluede Co-authored-by: Pepe Iborra <pepeiborra@gmail.com> Co-authored-by: Pepe Iborra <pepeiborra@me.com>
2021-06-06 20:16:29 +03:00
Test.Hls.Flags
default-extensions: OverloadedStrings
ghc-options:
-threaded -rtsopts -with-rtsopts=-N
Distributable binaries (#165) Update ghcide to obtain the GHC lib dir at runtime, rather than at compile time with ghc-paths. This means that the binaries can be moved about since the lib dir is obtained on the fly Share the exe/main.hs logic between ghcide and hls: the session setup logic which previously took up most of exe/main.hs now resides inside the ghcide library, and is used by both ghcide and hls's executables Add a --project-ghc-version option to the wrapper which spits out the project's ghc version to stdout. This is useful for the vscode extension which can then use it to download the corresponding version of binary that the wrapper would have otherwise attempted to launch Make the wrapper check to see if the correct tool is installed beforehand. For example, if it detects a stack project but stack isn't on the path, it will report an error then and there, rather than having hls/ghcide confusingly fail later on. The vscode extension uses this new error message as well to provide a pop up message linking the user to a website to install the missing tool Remove cabal-helper from the wrapper, so that the implicit cradle logic is the same between ghcide/hls/hls-wrapper And of course, add a GitHub action workflow that runs whenever a release is created on GitHub that builds static binaries on Linux, and distributable enough binaries on macOS and windows. This is documented a bit more in docs/releases.md * WIP * WIP 2 * WIP 3 * WIP 4 * WIP 5 * WIP 6 * WIP 7 * WIP 8 * WIP 9 Use patched hie-bios to get libdir dynamically * Try building the wrapper * Try to fix build_wrapper env variable not being picked up * Try again * Give up on the env var idea * Try out static optimised builds? * Try squashing the working dir * Woops * Try squashing the builddir * Try going into the parent directory * Radical approach - don't use such a long name for the wrapper * Use dist-binary flag * Debug why floskell fails to build on windows * haskell-language-server => hls on CI I hate that I have to do this * Employ extreme path saving measures * sed time :( * Try making sed command portable * Compress artefacts * Tidy up wrapper logging * Use version checking logic in hie-bios * Add documentation on the releases process * Remove unused code * Append .exe to windows binaries * Try out building remaining supported ghc configurations * Add wrapper tests and update hie-bios * Use index timestamp that exists on hackage Fixes warning * Update hie-bios * Update hie-bios * Try building windows jobs on -j1 * Skip windows 8.8.2 * Update ghc-check to use hie-bios runtime ghc libdir * Upload binaries as an artifact too * Try flicking on enable-executable-static I don't expect this to work, puffnfresh has already tried this and had to fork ghcup * Fix artifact upload * Update to latest ghcide and reuse loadSession * Check if the tool is installed in --project-ghc-version in the wrapper * Fix wrapper tests by copying to temporary directory * Try caching * Tidy up and switch back to cabal helper implicit cradle * use split sections * Remove cabal-helper and replace it with hie-bios implicit logic The cabal-helper cradle was only used by the wrapper for detecting the project GHC version in the absence of an explicit hie.yaml file, whilst ghcide itself used the hie-bios implicit cradle logic. This brings the two in sync so the wrapper should behave more predictably now. * Undo agpl common stanza change * Add release number Co-authored-by: amesgen <amesgen@amesgen.de>
2020-07-20 22:28:52 +03:00
-- Duplicating inclusion plugin conditions until tests are moved to their own packages
if flag(eval)
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_eval
Ghc 9.0.1 support for ghcide (#1649) * hie-compat: Add basic support for ghc-9.0.1 A tiny step towards #297 * hie-compat: Remove dependency on ghc-api-compat * hie-compat: Add more backwards compatability * Import a bunch of upstream ghc9 fixes * cabal.project: allow-newer: *:* The lazy solution to making things compile * Add more upstream fixes * Bump patch of ghc-check * ghcide: Add basic support for GHC-9.0.1 I tried to limit the use of CPP to the Compat module as much as possible by re-exporting the new functions under the old names, but there is still plenty of pragmas all over the code. I'm using ghc-api-compat so the imports doesn't need to be changed as much. * ghcide: Fix backwards compatability with ghc-8.8.4 * ghc9-ghcide: Fix some more issues that caused runtime errors * Restore initDynLinker for older versions of ghc It was probably important for something * Fix ghc-8.6.5 compatability * Fix completion test failures for ghc9 With this example: f asdfgh = asd it would suggest to complete `asd` into `asd_arNC`, which seems to be a name it generated because of deferred-out-of-scope-variables * Ghc-check now supports ghc-9.0.1 * Retrie now supports ghc-9.0.1 But it's not on hackage yet. * Restore retrie orphans * tests: Ghc9 shows [Char] as String by default This seems like an improvement, so just update the test-suite * tests: Ghc9 shows TH-errors after the dollar sign Instead of including it like older versions did $(foo) ~~~~ some TH error/warning * Fix two more test failures - GHC9 uses a more lenient haddock parser - TH2.17 has polymorphic Q monad with a type class * ghc9: Fix "Remove redundant imports" code action In ghc9, only the specific unused function is highlighted, instead of the whole line. * ghcide-tests: Show errors where they are caused instead of deep inside some generic helper function * Only use nub on SrcSpan for ghc>=9 * Remove more CPP pragmas * Remove a bit more CPP This could almost be handled by ghc-api-compat, but if it was imported from TyCoPpr, it doesn't work with ghc < 8.10 * Update stack files to support new versions * Use the version of retire on hackage The new version is now released * Don't use allow-newer: *:* * ghcide-tests: Enable test no longer broken in ghc9 * Update hiedb version for ghcide * Adjust for a minor change in test output for ghc9 * Fix benchmark test for ghc9 Cabal-3.2 is not buildable on ghc9, but 3.4 is builable on older ghc. * Mark minor issues as broken for ghc9 Ghc9 highlights both the constructor and the other fields Maybe this should just be accepted and not seen as broken? * haddock-comments-plugin: Ghc9 support * hls-eval-plugin: Partial ghc9 support * WIP: hls-eval-plugin: Partial ghc9 support * hls-explicit-imports-plugin: Add ghc9 support Now ignores any imports with Unhelpful locations, since we can't make a map of SrcLoc * hls-retrie-plugin: Add ghc9 support * hls-hlint-plugin: Add ghc9 support * Fix backwards compatability of hlint plugin * Fix stack builds (Broken by previous hlint fixes) * Disable tests when their required plugins are disabled Not all plugins are supported on ghc9 yet, but we still want to run the tests for the supported parts * ghc9: Fix module name plugin * Add a stack file and run tests for ghc9 in ci * Add missing packages to ghc-9 stack * Resolve rebase issues Maybe it's better to create merge commits instead? * Allow newer for more packages so cabal stops complaining These aren't really working, but since they are dependencies of packages in the `packages:` section the resolver won't allow us to build anything without this, even if those plugins are disabled. * Replace MIN_GHC_API_VERSION with MIN_VERSION_ghc * Revert incorrect change to hlint code * Remove remaining traces of GHC_LIB flag * Add back ghc 9 to github workflow * Revert "Add back ghc 9 to github workflow" This reverts commit c465a1e51aaaabf56dc7ef8f7fa801ef0abf8fdc. * hie-compat: Add basic support for ghc-9.0.1 A tiny step towards #297 * hie-compat: Remove dependency on ghc-api-compat * hie-compat: Add more backwards compatability * Disable CI for ghc9 * Use newer version of apply-refact * Don't needlessly duplicate code from ghc * hie-compat: Reexport the original version of HieBin * Don't include broken "allow-newer"s * FIx stack build for ghc9 * Fix warning from imperfect merge commit * Don't needlessly duplicate code from ghc * hie-compat: Reexport the original version of HieBin * Add missing ghc-api-compat * Fix ghc9 build for ModuleName * Add more conditionals on flags for tests * Add a separate cabal.project file for ghc9 As far as I know, this is the only way to disable the packages who's dependencies doesn't compile in GHC9 yet. * Fix and re-enable CI for GHC9 * Remove accidental non-breaking space * Fix CI build for ghc9 Since we are changing the flags for haskell-language-server, which CI renames to hls, we need to use the shortened name in those flags as well * Run tests for ghc9 in CI * Minor CI changes * Use proper values when enriching hie * Don't try to test hls-refine-imports-plugin on ghc9 * Update comment about ghc9 crashing on initDynLinker * setSessionDynamicFlags to prevent ghc9 from crashing The only way to set the dynamic linker is with the function `setSessionDynFlags` so we call it with the result from `getSessionDynFlags` to give it a (hopefully sensible) argument. See also this commit: https://gitlab.haskell.org/ghc/ghc/commit/18757cab04c5c5c48eaceea19469d4811c5d0371 * Revert "setSessionDynamicFlags to prevent ghc9 from crashing" This reverts commit 4065ac8394065f8aa15b1b36e0d56e3ba7762e44. That change made the "ghcide.cradle.muli" tests fail. * Simplify logic in hls-hlint-plugin.cabal * Add comment on OldRealSrcSpan * Remove source overrides for non-ghc9 builds in cabal.project * Remove commented out code Co-authored-by: Pepe Iborra <pepeiborra@me.com> * Remove resolved question from comment "This code is only concerned with extracting argument names, so I don't see how multiplicity would be relevant here" https://github.com/haskell/haskell-language-server/pull/1649#discussion_r642606967 * ghc9: Update to latest version of LSP per * cabal-ghc901.project: Remove commented out code * Update the lsp commit hash for stack as well * Use a version of lsp without haskell/lsp#326 That patch was causing test failures, but the issues should be fixed for real at some point, so that patch can be incluede Co-authored-by: Pepe Iborra <pepeiborra@gmail.com> Co-authored-by: Pepe Iborra <pepeiborra@me.com>
2021-06-06 20:16:29 +03:00
-- formatters
if flag(floskell) && (impl(ghc < 9.2.1) || flag(ignore-plugins-ghc-bounds))
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_floskell
Add support for ghc 9.0.2 (#2567) * Extract out ci build setup * Add required shell property * Add support for ghc-9.0.2 * Test ghc 9.0.2 * Add unix boot package * Use primitive-unlifted < 1.0 * Use primitive-unlifted < 1.0 for stack * Ude 9.0.1 for hackage We cant use 9.0.2 until all deps do not need allow-newer * Use a unified cabal-ghc90.project And bump up index state to get lastest hie-bios * Use last snapshot with ghc-9.0.2 support * Use new cabal-ghc90.project in build * Add stm-containers * Add specific tweaks for ghc-9.0.2 * Use the las ghc-boot-9.0 * Fix test adding allow-newer Co-Authored-By: @michaelpj * Use unix-compat from hackage * Use unix-compat from hackage * Make consistent lastest stack.yamls * Clean up cabal.project * more cleanups * Update tweaks in hackage ci * Correct comment * Correct fourmolu condition * Correct fourmolu condition in tests * Removing the all target from caching It builds all project packages even if we they are not buildables (and are not included in hls due to flags) Its goal was build all tests and benchmarks but --enable-tests ans --enable-benchmarks should work Last one does not: https://github.com/haskell/cabal/issues/6259 * exclude Brittany 0.14.0.1 * Update snapshot to get new lsp * document flag * Document and build ghcide benchmark * Doc and use ghc-9.0.2 in hackage * Add ghc-9.2.1 to tested-with * Use 9.0.2 in gitlab * Use last *molus * Use same versions as cabal build * Use cabal freeze versions * Add dep for ghcide tests * one by one * Unnecessary change * Remove unnecessary flag * Corrections * Move blocks Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2022-01-17 04:18:04 +03:00
if flag(fourmolu)
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_fourmolu
if flag(ormolu)
2022-07-29 13:28:31 +03:00
cpp-options: -Dhls_ormolu
Ghc 9.0.1 support for ghcide (#1649) * hie-compat: Add basic support for ghc-9.0.1 A tiny step towards #297 * hie-compat: Remove dependency on ghc-api-compat * hie-compat: Add more backwards compatability * Import a bunch of upstream ghc9 fixes * cabal.project: allow-newer: *:* The lazy solution to making things compile * Add more upstream fixes * Bump patch of ghc-check * ghcide: Add basic support for GHC-9.0.1 I tried to limit the use of CPP to the Compat module as much as possible by re-exporting the new functions under the old names, but there is still plenty of pragmas all over the code. I'm using ghc-api-compat so the imports doesn't need to be changed as much. * ghcide: Fix backwards compatability with ghc-8.8.4 * ghc9-ghcide: Fix some more issues that caused runtime errors * Restore initDynLinker for older versions of ghc It was probably important for something * Fix ghc-8.6.5 compatability * Fix completion test failures for ghc9 With this example: f asdfgh = asd it would suggest to complete `asd` into `asd_arNC`, which seems to be a name it generated because of deferred-out-of-scope-variables * Ghc-check now supports ghc-9.0.1 * Retrie now supports ghc-9.0.1 But it's not on hackage yet. * Restore retrie orphans * tests: Ghc9 shows [Char] as String by default This seems like an improvement, so just update the test-suite * tests: Ghc9 shows TH-errors after the dollar sign Instead of including it like older versions did $(foo) ~~~~ some TH error/warning * Fix two more test failures - GHC9 uses a more lenient haddock parser - TH2.17 has polymorphic Q monad with a type class * ghc9: Fix "Remove redundant imports" code action In ghc9, only the specific unused function is highlighted, instead of the whole line. * ghcide-tests: Show errors where they are caused instead of deep inside some generic helper function * Only use nub on SrcSpan for ghc>=9 * Remove more CPP pragmas * Remove a bit more CPP This could almost be handled by ghc-api-compat, but if it was imported from TyCoPpr, it doesn't work with ghc < 8.10 * Update stack files to support new versions * Use the version of retire on hackage The new version is now released * Don't use allow-newer: *:* * ghcide-tests: Enable test no longer broken in ghc9 * Update hiedb version for ghcide * Adjust for a minor change in test output for ghc9 * Fix benchmark test for ghc9 Cabal-3.2 is not buildable on ghc9, but 3.4 is builable on older ghc. * Mark minor issues as broken for ghc9 Ghc9 highlights both the constructor and the other fields Maybe this should just be accepted and not seen as broken? * haddock-comments-plugin: Ghc9 support * hls-eval-plugin: Partial ghc9 support * WIP: hls-eval-plugin: Partial ghc9 support * hls-explicit-imports-plugin: Add ghc9 support Now ignores any imports with Unhelpful locations, since we can't make a map of SrcLoc * hls-retrie-plugin: Add ghc9 support * hls-hlint-plugin: Add ghc9 support * Fix backwards compatability of hlint plugin * Fix stack builds (Broken by previous hlint fixes) * Disable tests when their required plugins are disabled Not all plugins are supported on ghc9 yet, but we still want to run the tests for the supported parts * ghc9: Fix module name plugin * Add a stack file and run tests for ghc9 in ci * Add missing packages to ghc-9 stack * Resolve rebase issues Maybe it's better to create merge commits instead? * Allow newer for more packages so cabal stops complaining These aren't really working, but since they are dependencies of packages in the `packages:` section the resolver won't allow us to build anything without this, even if those plugins are disabled. * Replace MIN_GHC_API_VERSION with MIN_VERSION_ghc * Revert incorrect change to hlint code * Remove remaining traces of GHC_LIB flag * Add back ghc 9 to github workflow * Revert "Add back ghc 9 to github workflow" This reverts commit c465a1e51aaaabf56dc7ef8f7fa801ef0abf8fdc. * hie-compat: Add basic support for ghc-9.0.1 A tiny step towards #297 * hie-compat: Remove dependency on ghc-api-compat * hie-compat: Add more backwards compatability * Disable CI for ghc9 * Use newer version of apply-refact * Don't needlessly duplicate code from ghc * hie-compat: Reexport the original version of HieBin * Don't include broken "allow-newer"s * FIx stack build for ghc9 * Fix warning from imperfect merge commit * Don't needlessly duplicate code from ghc * hie-compat: Reexport the original version of HieBin * Add missing ghc-api-compat * Fix ghc9 build for ModuleName * Add more conditionals on flags for tests * Add a separate cabal.project file for ghc9 As far as I know, this is the only way to disable the packages who's dependencies doesn't compile in GHC9 yet. * Fix and re-enable CI for GHC9 * Remove accidental non-breaking space * Fix CI build for ghc9 Since we are changing the flags for haskell-language-server, which CI renames to hls, we need to use the shortened name in those flags as well * Run tests for ghc9 in CI * Minor CI changes * Use proper values when enriching hie * Don't try to test hls-refine-imports-plugin on ghc9 * Update comment about ghc9 crashing on initDynLinker * setSessionDynamicFlags to prevent ghc9 from crashing The only way to set the dynamic linker is with the function `setSessionDynFlags` so we call it with the result from `getSessionDynFlags` to give it a (hopefully sensible) argument. See also this commit: https://gitlab.haskell.org/ghc/ghc/commit/18757cab04c5c5c48eaceea19469d4811c5d0371 * Revert "setSessionDynamicFlags to prevent ghc9 from crashing" This reverts commit 4065ac8394065f8aa15b1b36e0d56e3ba7762e44. That change made the "ghcide.cradle.muli" tests fail. * Simplify logic in hls-hlint-plugin.cabal * Add comment on OldRealSrcSpan * Remove source overrides for non-ghc9 builds in cabal.project * Remove commented out code Co-authored-by: Pepe Iborra <pepeiborra@me.com> * Remove resolved question from comment "This code is only concerned with extracting argument names, so I don't see how multiplicity would be relevant here" https://github.com/haskell/haskell-language-server/pull/1649#discussion_r642606967 * ghc9: Update to latest version of LSP per * cabal-ghc901.project: Remove commented out code * Update the lsp commit hash for stack as well * Use a version of lsp without haskell/lsp#326 That patch was causing test failures, but the issues should be fixed for real at some point, so that patch can be incluede Co-authored-by: Pepe Iborra <pepeiborra@gmail.com> Co-authored-by: Pepe Iborra <pepeiborra@me.com>
2021-06-06 20:16:29 +03:00
Distributable binaries (#165) Update ghcide to obtain the GHC lib dir at runtime, rather than at compile time with ghc-paths. This means that the binaries can be moved about since the lib dir is obtained on the fly Share the exe/main.hs logic between ghcide and hls: the session setup logic which previously took up most of exe/main.hs now resides inside the ghcide library, and is used by both ghcide and hls's executables Add a --project-ghc-version option to the wrapper which spits out the project's ghc version to stdout. This is useful for the vscode extension which can then use it to download the corresponding version of binary that the wrapper would have otherwise attempted to launch Make the wrapper check to see if the correct tool is installed beforehand. For example, if it detects a stack project but stack isn't on the path, it will report an error then and there, rather than having hls/ghcide confusingly fail later on. The vscode extension uses this new error message as well to provide a pop up message linking the user to a website to install the missing tool Remove cabal-helper from the wrapper, so that the implicit cradle logic is the same between ghcide/hls/hls-wrapper And of course, add a GitHub action workflow that runs whenever a release is created on GitHub that builds static binaries on Linux, and distributable enough binaries on macOS and windows. This is documented a bit more in docs/releases.md * WIP * WIP 2 * WIP 3 * WIP 4 * WIP 5 * WIP 6 * WIP 7 * WIP 8 * WIP 9 Use patched hie-bios to get libdir dynamically * Try building the wrapper * Try to fix build_wrapper env variable not being picked up * Try again * Give up on the env var idea * Try out static optimised builds? * Try squashing the working dir * Woops * Try squashing the builddir * Try going into the parent directory * Radical approach - don't use such a long name for the wrapper * Use dist-binary flag * Debug why floskell fails to build on windows * haskell-language-server => hls on CI I hate that I have to do this * Employ extreme path saving measures * sed time :( * Try making sed command portable * Compress artefacts * Tidy up wrapper logging * Use version checking logic in hie-bios * Add documentation on the releases process * Remove unused code * Append .exe to windows binaries * Try out building remaining supported ghc configurations * Add wrapper tests and update hie-bios * Use index timestamp that exists on hackage Fixes warning * Update hie-bios * Update hie-bios * Try building windows jobs on -j1 * Skip windows 8.8.2 * Update ghc-check to use hie-bios runtime ghc libdir * Upload binaries as an artifact too * Try flicking on enable-executable-static I don't expect this to work, puffnfresh has already tried this and had to fork ghcup * Fix artifact upload * Update to latest ghcide and reuse loadSession * Check if the tool is installed in --project-ghc-version in the wrapper * Fix wrapper tests by copying to temporary directory * Try caching * Tidy up and switch back to cabal helper implicit cradle * use split sections * Remove cabal-helper and replace it with hie-bios implicit logic The cabal-helper cradle was only used by the wrapper for detecting the project GHC version in the absence of an explicit hie.yaml file, whilst ghcide itself used the hie-bios implicit cradle logic. This brings the two in sync so the wrapper should behave more predictably now. * Undo agpl common stanza change * Add release number Co-authored-by: amesgen <amesgen@amesgen.de>
2020-07-20 22:28:52 +03:00
test-suite wrapper-test
import: common-deps
, warnings
, pedantic
type: exitcode-stdio-1.0
build-tool-depends:
haskell-language-server:haskell-language-server-wrapper -any,
haskell-language-server:haskell-language-server -any
default-language: Haskell2010
build-depends:
process
, hls-test-utils
hs-source-dirs: test/wrapper
main-is: Main.hs
HLS benchmarks (#3117) * extract ghcide:experiments-types * extract haskell-language-server:plugins and let go of examples The main goal here is to move the Plugins module into an internal library so that it can be reused from the benchmark suite. In order to make that easier, and since they hardly serve a purpose in a repository with 25 plugins, I delete the Example and Example2 plugin descriptors and their dependencies. * HLS benchmark suite Port the ghcide benchmark suite to HLS and benchmark plugin "configurations" independently. This includes the following changes to the ghcide benchmark suite and HLS: - Support for "configurations" which are defined as sets of plugin ids. The benchmark will be run with only these plugins enabled and all others disabled - Support for configurable concurrency. This relies on RTS -ol and -po flags to place the RTS traces in the target location rather than in the cwd This change requires two commits, the next one places ghcide/bench/hist/Main.hs into its final location to help 'git' recognize the change as a file move * ghcide/bench/hist/Main.hs -> bench/Main.hs * CI - fix artifact names for uniqueness * disable shorten HLS step * Do not store eventlogs to avoid out of disk space * render durations up to milliseconds * shorten titles Goal is to display the formatted CSV (via column) one row per line * exclude formatting plugin configurations * Extract ghcide-bench to a standalone package * ghcide-bench: fix stderr capturing * Fix mem stats We parse maxResidency and allocatedBytes from the RTS -S output, but runSessionWithHandles kills the server without waiting for it to exit and these stats don't get logged. The solution is to use runSessionWithHandles', but unfortunately it is internal and not exposed. I have raised a PR to expose it and in the meantime we need a source repo package. * feedbacks * delete Example plugins
2022-08-25 17:08:57 +03:00
benchmark benchmark
type: exitcode-stdio-1.0
default-language: Haskell2010
ghc-options: -Wall -Wno-name-shadowing -threaded
main-is: Main.hs
hs-source-dirs: bench
build-tool-depends:
ghcide-bench:ghcide-bench,
hp2pretty:hp2pretty,
implicit-hie:gen-hie
default-extensions:
BangPatterns
DeriveFunctor
DeriveGeneric
FlexibleContexts
GeneralizedNewtypeDeriving
LambdaCase
NamedFieldPuns
RecordWildCards
ScopedTypeVariables
StandaloneDeriving
TupleSections
TypeApplications
ViewPatterns
build-depends:
aeson,
base == 4.*,
containers,
data-default,
directory,
extra,
filepath,
ghcide-bench,
haskell-language-server,
HLS benchmarks (#3117) * extract ghcide:experiments-types * extract haskell-language-server:plugins and let go of examples The main goal here is to move the Plugins module into an internal library so that it can be reused from the benchmark suite. In order to make that easier, and since they hardly serve a purpose in a repository with 25 plugins, I delete the Example and Example2 plugin descriptors and their dependencies. * HLS benchmark suite Port the ghcide benchmark suite to HLS and benchmark plugin "configurations" independently. This includes the following changes to the ghcide benchmark suite and HLS: - Support for "configurations" which are defined as sets of plugin ids. The benchmark will be run with only these plugins enabled and all others disabled - Support for configurable concurrency. This relies on RTS -ol and -po flags to place the RTS traces in the target location rather than in the cwd This change requires two commits, the next one places ghcide/bench/hist/Main.hs into its final location to help 'git' recognize the change as a file move * ghcide/bench/hist/Main.hs -> bench/Main.hs * CI - fix artifact names for uniqueness * disable shorten HLS step * Do not store eventlogs to avoid out of disk space * render durations up to milliseconds * shorten titles Goal is to display the formatted CSV (via column) one row per line * exclude formatting plugin configurations * Extract ghcide-bench to a standalone package * ghcide-bench: fix stderr capturing * Fix mem stats We parse maxResidency and allocatedBytes from the RTS -S output, but runSessionWithHandles kills the server without waiting for it to exit and these stats don't get logged. The solution is to use runSessionWithHandles', but unfortunately it is internal and not exposed. I have raised a PR to expose it and in the meantime we need a source repo package. * feedbacks * delete Example plugins
2022-08-25 17:08:57 +03:00
hls-plugin-api,
lens,
lens-aeson,
optparse-applicative,
shake,
shake-bench == 0.1.*,
text,
yaml