Skip to content
  • Alec Theriault's avatar
    Use `.hie` files for the Hyperlinker backend (#977) · 1b26460f
    Alec Theriault authored
    # 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
    1b26460f
To find the state of this project's repository at the time of any of these versions, check out the tags.