From 1b26460fb3b5df5215cc1e6715661cbc7c950085 Mon Sep 17 00:00:00 2001 From: Alec Theriault Date: Thu, 31 Jan 2019 01:37:25 -0800 Subject: Use `.hie` files for the Hyperlinker backend (#977) # Summary This is a large architectural change to the Hyperlinker. * extract link (and now also type) information from `.hie` instead of doing ad-hoc SYB traversals of the `RenamedSource`. Also adds a superb type-on-hover feature (#715). * re-engineer the lexer to avoid needless string conversions. By going directly through GHC's `P` monad and taking bytestring slices, we avoid a ton of allocation and have better handling of position pragmas and CPP. In terms of performance, the Haddock side of things has gotten _much_ more efficient. Unfortunately, much of this is cancelled out by the increased GHC workload for generating `.hie` files. For the full set of boot libs (including `ghc`-the-library) * the sum of total time went down by 9-10% overall * the sum of total allocations went down by 6-7% # Motivation Haddock is moving towards working entirely over `.hi` and `.hie` files. This change means we no longer need the `RenamedSource` from `TypecheckedModule` (something which is _not_ in `.hi` files). # Details Along the way a bunch of things were fixed: * Cross package (and other) links are now more reliable (#496) * The lexer tries to recover from errors on every line (instead of at CPP boundaries) * `LINE`/`COLUMN` pragmas are taken into account * filter out zero length tokens before rendering * avoid recomputing the `ModuleName`-based `SrcMap` * remove the last use of `Documentation.Haddock.Utf8` (see #998) * restructure temporary folder logic for `.hi`/`.hie` model --- hypsrc-test/ref/src/Operators.html | 1540 +++++++++++++++++++++--------------- 1 file changed, 924 insertions(+), 616 deletions(-) (limited to 'hypsrc-test/ref/src/Operators.html') diff --git a/hypsrc-test/ref/src/Operators.html b/hypsrc-test/ref/src/Operators.html index 8ce0b9ce..403954cf 100644 --- a/hypsrc-test/ref/src/Operators.html +++ b/hypsrc-test/ref/src/Operators.html @@ -19,311 +19,414 @@ > (+++) ::(+++) :: [a] -> [a] -> [a] [a] -> [a] +a :: [a] +a +++ :: [a] -> [a] -> [a] ++++ b :: [a] +b ->= [a] + >[a] a +++[a] -> [a] -> [a] +forall a. [a] -> [a] -> [a] +++ [a] +b = a ++ b ++[a] -> [a] -> [a] +forall a. [a] -> [a] -> [a] +++ a[a] +a ($$$) ::($$$) :: [a] -> [a] -> [a] [a] -> [a] +a :: [a] +a $$$ :: [a] -> [a] -> [a] +$$$ b :: [a] +b ->= [a] + >[a] ab $$$[a] -> [a] -> [a] +forall a. [a] -> [a] -> [a] ++++ b[a] +a = b +++ a (***) :: [a] -> [a] -> [a](***) :: [a] -> [a] -> [a] (***) a*** :: [a] -> [a] -> [a] +(***) a :: [a] +a = a[a] +a (***)(***) aa :: [a] +a (_:b:b :: [a] +b)= a[a] +a +++[a] -> [a] -> [a] +forall a. [a] -> [a] -> [a] ++++ (a[a] +a ***[a] -> [a] -> [a] +forall a. [a] -> [a] -> [a] +*** b[a] +b) (*/\*) :: [[a]] -> [a] -> [a](*/\*) :: [[a]] -> [a] -> [a] a */\* ba :: [[a]] +a */\* :: [[a]] -> [a] -> [a] +*/\* b :: [a] +b = concatMap([a] -> [a]) -> [[a]] -> [a] +forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] +concatMap (***[a] -> [a] -> [a] +forall a. [a] -> [a] -> [a] +*** b[a] +b) a[[a]] +a (**/\**)(**/\**) :: [[a]] -> [[a]] -> [[a]] :: [[a]] +a :: [[a]] +a **/\** :: [[a]] -> [[a]] -> [[a]] +**/\** b :: [[a]] +b ->= [[a]]([[a]] -> [a] -> [a]) -> [[[a]]] -> [[a]] -> [[a]] +forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] +zipWith ->[[a]] -> [a] -> [a] +forall a. [[a]] -> [a] -> [a] +(*/\*) [[a]] + >[[a]] a **/\**[[a]] -> [[a]] -> [[a]] +forall a. [a] -> [a] -> [a] ++++ [[a]] +b = zipWith (*/\*) [a +++ b] (a[[a]] +a $$$[[a]] -> [[a]] -> [[a]] +forall a. [a] -> [a] -> [a] +$$$ b[[a]] +b) (#.#) :: a -> b -> (c -> (a, b))(#.#) :: a -> b -> (c -> (a, b)) a #.# ba :: a +a #.# :: a -> b -> c -> (a, b) +#.# b :: b +b = const(a, b) -> c -> (a, b) +forall a b. a -> b -> a +const $((a, b) -> c -> (a, b)) -> (a, b) -> c -> (a, b) +forall a b. (a -> b) -> a -> b +$ (aa +a, bb +b)