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/LinkingIdentifiers.html | 572 ++++++++++++++++++++++++++++ 1 file changed, 572 insertions(+) create mode 100644 hypsrc-test/ref/src/LinkingIdentifiers.html (limited to 'hypsrc-test/ref/src/LinkingIdentifiers.html') diff --git a/hypsrc-test/ref/src/LinkingIdentifiers.html b/hypsrc-test/ref/src/LinkingIdentifiers.html new file mode 100644 index 00000000..2ef590bd --- /dev/null +++ b/hypsrc-test/ref/src/LinkingIdentifiers.html @@ -0,0 +1,572 @@ +
-- Tests that the identifers/operators are properly linked even when:
+--
+--   * backquoted, parenthesized, vanilla
+--   * qualified, not-qualified
+--
+module LinkingIdentifiers where
+
+ident :: Int -> Int -> Int
+x :: Int
+x ident :: Int -> Int -> Int
+`ident` 2 = (Int
+x Int -> Int -> Int
+`ident` 2) Int -> Int -> Int
+forall a. Num a => a -> a -> a
++ (Int
+x Int -> Int -> Int
+`LinkingIdentifiers.ident` 2)
+ident x :: Int
+x 2 = Int -> Int -> Int
+ident Int
+x 2 Int -> Int -> Int
+forall a. Num a => a -> a -> a
++ Int -> Int -> Int
+LinkingIdentifiers.ident Int
+x 2
+
+(++:++) :: Int -> Int -> Int
+x :: Int
+x ++:++ :: Int -> Int -> Int
+++:++ 2 = (Int
+x Int -> Int -> Int
+++:++ 2) Int -> Int -> Int
+forall a. Num a => a -> a -> a
++ (Int
+x Int -> Int -> Int
+LinkingIdentifiers.++:++ 2)
+(++:++) x :: Int
+x 2 = Int -> Int -> Int
+(++:++) Int
+x 2 Int -> Int -> Int
+forall a. Num a => a -> a -> a
++ Int -> Int -> Int
+(LinkingIdentifiers.++:++) Int
+x 2
+
\ No newline at end of file -- cgit v1.2.3