From 961907de474837905c3b1a0323e6349287b19627 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Fri, 22 Dec 2017 10:12:53 -0500 Subject: Add haskell-ide-engine --- .../haskell-modules/configuration-common.nix | 6 + pkgs/development/haskell-modules/default.nix | 2 +- pkgs/development/haskell-modules/hie-packages.nix | 459 +++++++++++++++++++++ .../haskell-modules/initial-packages.nix | 2 + .../haskell-modules/patches/hie-testsuite.patch | 40 ++ 5 files changed, 508 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/haskell-modules/hie-packages.nix create mode 100644 pkgs/development/haskell-modules/initial-packages.nix create mode 100644 pkgs/development/haskell-modules/patches/hie-testsuite.patch diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix index 45f7c97af9d9..b208d2781be7 100644 --- a/pkgs/development/haskell-modules/configuration-common.nix +++ b/pkgs/development/haskell-modules/configuration-common.nix @@ -1012,4 +1012,10 @@ self: super: { { patches = (drv.patches or []) ++ [ patch ]; editedCabalFile = null; }); + + # https://github.com/haskell/cabal/issues/4969 + haddock-library_1_4_4 = dontHaddock super.haddock-library_1_4_4; + + haddock-api = super.haddock-api.override + { haddock-library = self.haddock-library_1_4_4; }; } diff --git a/pkgs/development/haskell-modules/default.nix b/pkgs/development/haskell-modules/default.nix index 1658ce793936..4db418a7775b 100644 --- a/pkgs/development/haskell-modules/default.nix +++ b/pkgs/development/haskell-modules/default.nix @@ -2,7 +2,7 @@ , compilerConfig ? (self: super: {}) , packageSetConfig ? (self: super: {}) , overrides ? (self: super: {}) -, initialPackages ? import ./hackage-packages.nix +, initialPackages ? import ./initial-packages.nix , configurationCommon ? import ./configuration-common.nix , configurationNix ? import ./configuration-nix.nix }: diff --git a/pkgs/development/haskell-modules/hie-packages.nix b/pkgs/development/haskell-modules/hie-packages.nix new file mode 100644 index 000000000000..41b28023348d --- /dev/null +++ b/pkgs/development/haskell-modules/hie-packages.nix @@ -0,0 +1,459 @@ +{ pkgs, stdenv, callPackage }: self: +let src = pkgs.fetchFromGitHub + { owner = "haskell"; + repo = "haskell-ide-engine"; + rev = "3ec8e93e9ca751cf282556998851ffa65f32e06b"; + sha256 = "1wzqzvsa39c1cngmmjryqrq4vqdg6d4wp5wdf17vp96ljvz1cczw"; + }; + cabal-helper-src = pkgs.fetchgit + { url = "https://gitlab.com/dxld/cabal-helper.git"; + rev = "4bfc6b916fcc696a5d82e7cd35713d6eabcb0533"; + sha256 = "1a8231as0wdvi0q73ha9lc0qrx23kmcwf910qaicvmdar5p2b15m"; + }; + ghc-dump-tree-src = pkgs.fetchgit + { url = "https://gitlab.com/alanz/ghc-dump-tree.git"; + rev = "50f8b28fda675cca4df53909667c740120060c49"; + sha256 = "0v3r81apdqp91sv7avy7f0s3im9icrakkggw8q5b7h0h4js6irqj"; + }; + ghc-mod-src = pkgs.fetchFromGitHub + { owner = "wz1000"; + repo = "ghc-mod"; + rev = "03c91ea53b6389e7a1fcf4e471171aa3d6c8de41"; + sha256 = "11iic93klsh5izp8v4mhl7vnnlib821cfhdymlpg4drx7zbm9il6"; + }; + HaRe-src = pkgs.fetchgit + { url = "https://gitlab.com/alanz/HaRe.git"; + rev = "e325975450ce89d790ed3f92de3ef675967d9538"; + sha256 = "0z7r3l4j5a1brz7zb2rgd985m58rs0ki2p59y1l9i46fcy8r9y4g"; + }; + cabal-helper = self.cabal-helper_hie; + haddock-library = self.haddock-library_1_4_4; + ghc-dump-tree = self.ghc-dump-tree_hie; + ghc-mod = self.ghc-mod_hie; + HaRe = self.HaRe_hie; +in + { ### Overrides required by hie + cabal-helper_hie = callPackage + ({ mkDerivation, base, bytestring, Cabal, cabal-install, containers + , directory, exceptions, filepath, ghc-prim, mtl, process + , semigroupoids, template-haskell, temporary, transformers + , unix, unix-compat, utf8-string + }: + mkDerivation { + pname = "cabal-helper"; + version = "0.8.0.0"; + src = cabal-helper-src; + isLibrary = true; + isExecutable = true; + jailbreak = true; + setupHaskellDepends = [ base Cabal directory filepath ]; + libraryHaskellDepends = [ + base Cabal directory filepath ghc-prim mtl process semigroupoids + transformers unix unix-compat + ]; + executableHaskellDepends = [ + base bytestring Cabal containers directory exceptions filepath + ghc-prim mtl process template-haskell temporary transformers unix + unix-compat utf8-string + ]; + testHaskellDepends = [ + base bytestring Cabal directory exceptions filepath ghc-prim mtl + process template-haskell temporary transformers unix unix-compat + utf8-string + ]; + testToolDepends = [ cabal-install ]; + postInstall = + '' + libexec="$out/libexec/$(basename $out/lib/ghc*/*ghc*)/$name" + mkdir -p "$libexec" + ln -sv $out/bin/cabal-helper-wrapper "$libexec" + ''; + doCheck = false; + description = "Simple interface to some of Cabal's configuration state, mainly used by ghc-mod"; + license = stdenv.lib.licenses.agpl3; + }) {}; + ghc-dump-tree_hie = callPackage + ({ mkDerivation, aeson, base, bytestring, ghc, optparse-applicative + , pretty, pretty-show, process, unordered-containers + , vector + }: + mkDerivation { + pname = "ghc-dump-tree"; + version = "0.2.0.1"; + src = ghc-dump-tree-src; + isLibrary = true; + isExecutable = true; + libraryHaskellDepends = [ + aeson base bytestring ghc pretty pretty-show process + unordered-containers vector + ]; + executableHaskellDepends = [ + aeson base bytestring ghc optparse-applicative pretty pretty-show + process unordered-containers vector + ]; + homepage = "https://github.com/edsko/ghc-dump-tree"; + description = "Dump GHC's parsed, renamed, and type checked ASTs"; + license = stdenv.lib.licenses.bsd3; + }) {}; + ghc-mod-core = callPackage + ({ mkDerivation, base, binary, bytestring, Cabal, cabal-helper + , containers, deepseq, directory, djinn-ghc, extra, fclabels + , filepath, fingertree, ghc, ghc-boot, ghc-paths, ghc-syb-utils + , haskell-src-exts, hlint, monad-control, monad-journal, mtl + , old-time, optparse-applicative, pipes, process, safe, semigroups + , split, syb, template-haskell, temporary, text, time + , transformers, transformers-base + }: + mkDerivation { + pname = "ghc-mod-core"; + version = "5.9.0.0"; + src = "${ghc-mod-src}/core"; + setupHaskellDepends = [ + base Cabal containers directory filepath process template-haskell + transformers + ]; + libraryHaskellDepends = [ + base binary bytestring cabal-helper containers deepseq directory + djinn-ghc extra fclabels filepath fingertree ghc ghc-boot ghc-paths + ghc-syb-utils haskell-src-exts hlint monad-control monad-journal + mtl old-time optparse-applicative pipes process safe semigroups + split syb template-haskell temporary text time transformers + transformers-base + ]; + homepage = "https://github.com/DanielG/ghc-mod"; + description = "Happy Haskell Hacking"; + license = stdenv.lib.licenses.agpl3; + }) { inherit cabal-helper; }; + ghc-mod_hie = callPackage + ({ mkDerivation, base, binary, bytestring, Cabal, cabal-doctest + , cabal-helper, containers, criterion, deepseq, directory + , djinn-ghc, doctest, extra, fclabels, filepath, ghc, ghc-boot + , ghc-mod-core, ghc-paths, ghc-syb-utils, haskell-src-exts, hlint + , hspec, monad-control, monad-journal, mtl, old-time + , optparse-applicative, pipes, process, safe, semigroups, shelltest + , split, syb, template-haskell, temporary, text, time + , transformers, transformers-base + }: + mkDerivation { + pname = "ghc-mod"; + version = "5.9.0.0"; + src = ghc-mod-src; + isLibrary = true; + isExecutable = true; + enableSeparateDataOutput = true; + setupHaskellDepends = [ + base Cabal cabal-doctest containers directory filepath process + template-haskell transformers + ]; + libraryHaskellDepends = [ + base binary bytestring cabal-helper containers deepseq directory + djinn-ghc extra fclabels filepath ghc ghc-boot ghc-mod-core + ghc-paths ghc-syb-utils haskell-src-exts hlint monad-control + monad-journal mtl old-time optparse-applicative pipes process safe + semigroups split syb template-haskell temporary text time + transformers transformers-base + ]; + executableHaskellDepends = [ + base binary deepseq directory fclabels filepath ghc ghc-mod-core + monad-control mtl old-time optparse-applicative process semigroups + split time + ]; + testHaskellDepends = [ + base cabal-helper containers directory doctest fclabels filepath + ghc ghc-boot ghc-mod-core hspec monad-journal mtl process split + temporary transformers + ]; + testToolDepends = [ shelltest ]; + # Doesn't work with our doctest + doCheck = false; + benchmarkHaskellDepends = [ + base criterion directory filepath ghc-mod-core temporary + ]; + homepage = "https://github.com/DanielG/ghc-mod"; + description = "Happy Haskell Hacking"; + license = stdenv.lib.licenses.agpl3; + }) { shelltest = null; inherit cabal-helper; }; + HaRe_hie = callPackage + ({ mkDerivation, attoparsec, base, base-prelude, Cabal, cabal-helper + , case-insensitive, containers, conversion + , conversion-case-insensitive, conversion-text, Diff, directory + , filepath, foldl, ghc, ghc-exactprint, ghc-mod-core, ghc-syb-utils + , gitrev, hslogger, hspec, HUnit, monad-control, mtl + , optparse-applicative, optparse-simple, parsec, stdenv + , Strafunski-StrategyLib, syb, syz, turtle + }: + mkDerivation { + pname = "HaRe"; + version = "0.8.4.1"; + src = HaRe-src; + isLibrary = true; + isExecutable = true; + enableSeparateDataOutput = true; + libraryHaskellDepends = [ + base cabal-helper containers directory filepath ghc ghc-exactprint + ghc-mod-core ghc-syb-utils hslogger monad-control mtl + Strafunski-StrategyLib syb syz + ]; + executableHaskellDepends = [ + base Cabal ghc-mod-core gitrev mtl optparse-applicative + optparse-simple + ]; + testHaskellDepends = [ + attoparsec base base-prelude cabal-helper case-insensitive + containers conversion conversion-case-insensitive conversion-text + Diff directory filepath foldl ghc ghc-exactprint ghc-mod-core + ghc-syb-utils hslogger hspec HUnit monad-control mtl parsec + Strafunski-StrategyLib syb syz turtle + ]; + # Test directory doesn't exist + doCheck = false; + homepage = "https://github.com/RefactoringTools/HaRe/wiki"; + description = "the Haskell Refactorer"; + license = stdenv.lib.licenses.bsd3; + }) { inherit cabal-helper; }; + ### hie packages + haskell-ide-engine = callPackage + ({ mkDerivation, aeson, async, base, bytestring, Cabal, cabal-install + , containers, data-default, Diff, directory, either, ekg, filepath, ghc + , ghc-mod-core, gitrev, haskell-lsp, hie-apply-refact, hie-base + , hie-brittany, hie-build-plugin, hie-eg-plugin-async + , hie-example-plugin2, hie-ghc-mod, hie-ghc-tree, hie-haddock + , hie-hare, hie-hoogle, hie-plugin-api, hoogle, hslogger, hspec + , lens, mtl, optparse-simple, QuickCheck, quickcheck-instances + , sorted-list, stm, text, time, transformers + , unordered-containers, vector, vinyl, yaml, yi-rope + }: + mkDerivation { + pname = "haskell-ide-engine"; + version = "0.1.0.0"; + inherit src; + isLibrary = true; + isExecutable = true; + libraryHaskellDepends = [ + aeson async base bytestring Cabal containers data-default directory + either filepath ghc ghc-mod-core gitrev haskell-lsp + hie-apply-refact hie-base hie-brittany hie-ghc-mod hie-haddock + hie-hare hie-hoogle hie-plugin-api hslogger lens mtl + optparse-simple sorted-list stm text transformers + unordered-containers vector yi-rope + ]; + executableHaskellDepends = [ + base Cabal containers directory ekg ghc-mod-core gitrev haskell-lsp + hie-apply-refact hie-build-plugin hie-eg-plugin-async + hie-example-plugin2 hie-ghc-mod hie-ghc-tree hie-hare hie-hoogle + hie-plugin-api hslogger optparse-simple stm text time transformers + unordered-containers vinyl + ]; + testHaskellDepends = [ + aeson base containers Diff directory filepath ghc-mod-core + haskell-lsp hie-apply-refact hie-base hie-eg-plugin-async + hie-example-plugin2 hie-ghc-mod hie-ghc-tree hie-hare hie-hoogle + hie-plugin-api hoogle hslogger hspec QuickCheck + quickcheck-instances stm text transformers unordered-containers + vector vinyl yaml + ]; + preCheck = "export HOME=$NIX_BUILD_TOP/home; mkdir $HOME"; + # https://github.com/haskell/haskell-ide-engine/issues/425 + # The disabled tests do work in a local nix-shell with cabal available. + patches = [ ./patches/hie-testsuite.patch ]; + homepage = "http://github.com/githubuser/haskell-ide-engine#readme"; + description = "Provide a common engine to power any Haskell IDE"; + license = stdenv.lib.licenses.bsd3; + }) {}; + hie-apply-refact = callPackage + ({ mkDerivation, aeson, apply-refact, base, either, extra, ghc-mod + , ghc-mod-core, haskell-src-exts, hie-base, hie-plugin-api, hlint + , text, transformers + }: + mkDerivation { + pname = "hie-apply-refact"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-apply-refact"; + libraryHaskellDepends = [ + aeson apply-refact base either extra ghc-mod ghc-mod-core + haskell-src-exts hie-base hie-plugin-api hlint text transformers + ]; + description = "Haskell IDE Apply Refact plugin"; + license = stdenv.lib.licenses.bsd3; + }) { inherit ghc-mod; }; + hie-base = callPackage + ({ mkDerivation, aeson, base, haskell-lsp, text }: + mkDerivation { + pname = "hie-base"; + version = "0.1.0.0"; + inherit src; + preUnpack = "sourceRoot=source/hie-base"; + libraryHaskellDepends = [ aeson base haskell-lsp text ]; + description = "Haskell IDE API base types"; + license = stdenv.lib.licenses.bsd3; + }) {}; + hie-brittany = callPackage + ({ mkDerivation, aeson, base, brittany, ghc-mod, ghc-mod-core + , haskell-lsp, hie-plugin-api, lens, text + }: + mkDerivation { + pname = "hie-brittany"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-brittany"; + libraryHaskellDepends = [ + aeson base brittany ghc-mod ghc-mod-core haskell-lsp hie-plugin-api + lens text + ]; + description = "Haskell IDE Hoogle plugin"; + license = stdenv.lib.licenses.bsd3; + }) { inherit ghc-mod; }; + hie-build-plugin = callPackage + ({ mkDerivation, aeson, base, bytestring, Cabal, cabal-helper + , containers, directory, filepath, haskell-lsp, hie-plugin-api + , process, stm, text, transformers, yaml + }: + mkDerivation { + pname = "hie-build-plugin"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-build-plugin"; + libraryHaskellDepends = [ + aeson base bytestring Cabal cabal-helper containers directory + filepath haskell-lsp hie-plugin-api process stm text transformers + yaml + ]; + description = "Haskell IDE build plugin"; + license = stdenv.lib.licenses.bsd3; + }) { inherit cabal-helper; }; + hie-eg-plugin-async = callPackage + ({ mkDerivation, base, ghc-mod-core, hie-plugin-api, stm + , text + }: + mkDerivation { + pname = "hie-eg-plugin-async"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-eg-plugin-async"; + libraryHaskellDepends = [ + base ghc-mod-core hie-plugin-api stm text + ]; + description = "Haskell IDE example plugin, using async processes"; + license = stdenv.lib.licenses.bsd3; + }) {}; + hie-example-plugin2 = callPackage + ({ mkDerivation, base, hie-plugin-api, text }: + mkDerivation { + pname = "hie-example-plugin2"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-example-plugin2"; + libraryHaskellDepends = [ base hie-plugin-api text ]; + description = "Haskell IDE example plugin"; + license = stdenv.lib.licenses.bsd3; + }) {}; + hie-ghc-mod = callPackage + ({ mkDerivation, aeson, base, containers, ghc, ghc-mod, ghc-mod-core + , hie-base, hie-plugin-api, text, transformers + }: + mkDerivation { + pname = "hie-ghc-mod"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-ghc-mod"; + libraryHaskellDepends = [ + aeson base containers ghc ghc-mod ghc-mod-core hie-base + hie-plugin-api text transformers + ]; + description = "Haskell IDE ghc-mod plugin"; + license = stdenv.lib.licenses.bsd3; + }) { inherit ghc-mod; }; + hie-ghc-tree = callPackage + ({ mkDerivation, aeson, base, ghc-dump-tree, ghc-mod, ghc-mod-core + , hie-base, hie-plugin-api, text + }: + mkDerivation { + pname = "hie-ghc-tree"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-ghc-tree"; + libraryHaskellDepends = [ + aeson base ghc-dump-tree ghc-mod ghc-mod-core hie-base + hie-plugin-api text + ]; + description = "Haskell IDE GHC Tree plugin"; + license = stdenv.lib.licenses.bsd3; + }) { inherit ghc-dump-tree ghc-mod; }; + hie-haddock = callPackage + ({ mkDerivation, aeson, base, containers, directory, either + , filepath, ghc, ghc-exactprint, ghc-mod, ghc-mod-core, haddock-api + , haddock-library, HaRe, haskell-lsp, hie-base, hie-ghc-mod + , hie-hare, hie-plugin-api, lens, monad-control, mtl, text + , transformers + }: + mkDerivation { + pname = "hie-haddock"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-haddock"; + libraryHaskellDepends = [ + aeson base containers directory either filepath ghc ghc-exactprint + ghc-mod ghc-mod-core haddock-api haddock-library HaRe haskell-lsp + hie-base hie-ghc-mod hie-hare hie-plugin-api lens monad-control mtl + text transformers + ]; + description = "Haskell IDE Haddock plugin"; + license = stdenv.lib.licenses.bsd3; + }) { inherit haddock-library HaRe ghc-mod; }; + hie-hare = callPackage + ({ mkDerivation, aeson, base, containers, Diff, either, ghc + , ghc-exactprint, ghc-mod, ghc-mod-core, HaRe, haskell-lsp + , hie-base, hie-ghc-mod, hie-plugin-api, lens, monad-control, mtl + , text, transformers + }: + mkDerivation { + pname = "hie-hare"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-hare"; + libraryHaskellDepends = [ + aeson base containers Diff either ghc ghc-exactprint ghc-mod + ghc-mod-core HaRe haskell-lsp hie-base hie-ghc-mod hie-plugin-api + lens monad-control mtl text transformers + ]; + description = "Haskell IDE HaRe plugin"; + license = stdenv.lib.licenses.bsd3; + }) { inherit ghc-mod HaRe; }; + hie-hoogle = callPackage + ({ mkDerivation, aeson, base, directory, filepath, ghc-mod + , ghc-mod-core, hie-plugin-api, hoogle, tagsoup, text + }: + mkDerivation { + pname = "hie-hoogle"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-hoogle"; + libraryHaskellDepends = [ + aeson base directory filepath ghc-mod ghc-mod-core hie-plugin-api + hoogle tagsoup text + ]; + description = "Haskell IDE Hoogle plugin"; + license = stdenv.lib.licenses.bsd3; + }) { inherit ghc-mod; }; + hie-plugin-api = callPackage + ({ mkDerivation, aeson, base, containers, Diff, directory, either + , filepath, fingertree, ghc, ghc-mod-core, haskell-lsp, hie-base + , hslogger, lifted-base, monad-control, mtl, stdenv, stm, syb, text + , time, transformers, unordered-containers + }: + mkDerivation { + pname = "hie-plugin-api"; + version = "0.1.0.0"; + inherit src; + postUnpack = "sourceRoot=source/hie-plugin-api"; + libraryHaskellDepends = [ + aeson base containers Diff directory either filepath fingertree ghc + ghc-mod-core haskell-lsp hie-base hslogger lifted-base + monad-control mtl stm syb text time transformers + unordered-containers + ]; + description = "Haskell IDE API for plugin communication"; + license = stdenv.lib.licenses.bsd3; + }) {}; + } diff --git a/pkgs/development/haskell-modules/initial-packages.nix b/pkgs/development/haskell-modules/initial-packages.nix new file mode 100644 index 000000000000..8e8712d90967 --- /dev/null +++ b/pkgs/development/haskell-modules/initial-packages.nix @@ -0,0 +1,2 @@ +args@{ pkgs, stdenv, callPackage }: self: + (import ./hie-packages.nix args self) // (import ./hackage-packages.nix args self) diff --git a/pkgs/development/haskell-modules/patches/hie-testsuite.patch b/pkgs/development/haskell-modules/patches/hie-testsuite.patch new file mode 100644 index 000000000000..86cac15c2464 --- /dev/null +++ b/pkgs/development/haskell-modules/patches/hie-testsuite.patch @@ -0,0 +1,40 @@ +diff --git a/test/HaRePluginSpec.hs b/test/HaRePluginSpec.hs +index 039c094..d0d1fa4 100644 +--- a/test/HaRePluginSpec.hs ++++ b/test/HaRePluginSpec.hs +@@ -326,35 +326,6 @@ hareSpec = do + $ List [TextEdit (Range (Position 4 0) (Position 8 12)) + "parseStr = char '\"' *> (many1 (noneOf \"\\\"\")) <* char '\"'"]) + Nothing) +- it "finds definition across components" $ do +- let u = filePathToUri "./app/Main.hs" +- let lreq = setTypecheckedModule u +- let req = findDef u (toPos (7,8)) +- r <- dispatchRequestPGoto $ lreq >> req +- r `shouldBe` IdeResponseOk [Location (filePathToUri $ cwd "test/testdata/gototest/src/Lib.hs") +- (Range (toPos (6,1)) (toPos (6,9)))] +- let req2 = findDef u (toPos (7,20)) +- r2 <- dispatchRequestPGoto $ lreq >> req2 +- r2 `shouldBe` IdeResponseOk [Location (filePathToUri $ cwd "test/testdata/gototest/src/Lib2.hs") +- (Range (toPos (5,1)) (toPos (5,2)))] +- it "finds definition in the same component" $ do +- let u = filePathToUri "./src/Lib2.hs" +- let lreq = setTypecheckedModule u +- let req = findDef u (toPos (6,5)) +- r <- dispatchRequestPGoto $ lreq >> req +- r `shouldBe` IdeResponseOk [Location (filePathToUri $ cwd "test/testdata/gototest/src/Lib.hs") +- (Range (toPos (6,1)) (toPos (6,9)))] +- it "finds local definitions" $ do +- let u = filePathToUri "./src/Lib2.hs" +- let lreq = setTypecheckedModule u +- let req = findDef u (toPos (7,11)) +- r <- dispatchRequestPGoto $ lreq >> req +- r `shouldBe` IdeResponseOk [Location (filePathToUri $ cwd "test/testdata/gototest/src/Lib2.hs") +- (Range (toPos (10,9)) (toPos (10,10)))] +- let req2 = findDef u (toPos (10,13)) +- r2 <- dispatchRequestPGoto $ lreq >> req2 +- r2 `shouldBe` IdeResponseOk [Location (filePathToUri $ cwd "test/testdata/gototest/src/Lib2.hs") +- (Range (toPos (9,9)) (toPos (9,10)))] + + + -- --------------------------------- -- cgit 1.4.1