Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Commit 8bc3c29

Browse files
harpocratesalanz
authored andcommitted
Use .hie files for the Hyperlinker backend (#977)
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% 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). 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
1 parent e688b28 commit 8bc3c29

12 files changed

+1165
-1
lines changed

haddock-api/haddock-api.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ library
6060
, directory
6161
, filepath
6262
, ghc-boot
63+
, ghc-boot-th
6364
, transformers
6465

6566
hs-source-dirs: src
@@ -186,6 +187,7 @@ test-suite spec
186187
, directory
187188
, filepath
188189
, ghc-boot
190+
, ghc-boot-th
189191
, transformers
190192

191193
build-tool-depends:

hypsrc-test/ref/src/ClangCppBug.html

Lines changed: 306 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,306 @@
1+
<html xmlns="http://www.w3.org/1999/xhtml"
2+
><head
3+
><link rel="stylesheet" type="text/css" href="style.css"
4+
/><script type="text/javascript" src="highlight.js"
5+
></script
6+
></head
7+
><body
8+
><pre
9+
><span class="hs-pragma"
10+
>{-# LANGUAGE CPP #-}</span
11+
><span
12+
>
13+
</span
14+
><span id="line-2"
15+
></span
16+
><span class="hs-keyword"
17+
>module</span
18+
><span
19+
> </span
20+
><span class="hs-identifier"
21+
>ClangCppBug</span
22+
><span
23+
> </span
24+
><span class="hs-keyword"
25+
>where</span
26+
><span
27+
>
28+
</span
29+
><span id="line-3"
30+
></span
31+
><span
32+
>
33+
</span
34+
><span id="line-4"
35+
></span
36+
><span class="annot"
37+
><a href="ClangCppBug.html#foo"
38+
><span class="hs-identifier hs-type"
39+
>foo</span
40+
></a
41+
></span
42+
><span
43+
> </span
44+
><span class="hs-glyph"
45+
>::</span
46+
><span
47+
> </span
48+
><span class="annot"
49+
><span class="hs-identifier hs-type"
50+
>Int</span
51+
></span
52+
><span
53+
>
54+
</span
55+
><span id="line-5"
56+
></span
57+
><span id="foo"
58+
><span class="annot"
59+
><span class="annottext"
60+
>foo :: Int
61+
</span
62+
><a href="ClangCppBug.html#foo"
63+
><span class="hs-identifier hs-var hs-var"
64+
>foo</span
65+
></a
66+
></span
67+
></span
68+
><span
69+
> </span
70+
><span class="hs-glyph"
71+
>=</span
72+
><span
73+
> </span
74+
><span class="annot"
75+
><span class="hs-number"
76+
>1</span
77+
></span
78+
><span
79+
>
80+
</span
81+
><span id="line-6"
82+
></span
83+
><span
84+
>
85+
</span
86+
><span id="line-7"
87+
></span
88+
><span class="hs-comment"
89+
>-- Clang doesn't mind these:</span
90+
><span class="hs-cpp"
91+
>
92+
#define BAX 2
93+
</span
94+
><span class="hs-pragma"
95+
>{-# INLINE</span
96+
><span
97+
> </span
98+
><span class="annot"
99+
><a href="ClangCppBug.html#bar"
100+
><span class="hs-pragma hs-type"
101+
>bar</span
102+
></a
103+
></span
104+
><span
105+
> </span
106+
><span class="hs-pragma"
107+
>#-}</span
108+
><span
109+
>
110+
</span
111+
><span id="line-10"
112+
></span
113+
><span
114+
>
115+
</span
116+
><span id="line-11"
117+
></span
118+
><span class="annot"
119+
><a href="ClangCppBug.html#bar"
120+
><span class="hs-identifier hs-type"
121+
>bar</span
122+
></a
123+
></span
124+
><span
125+
> </span
126+
><span class="hs-glyph"
127+
>::</span
128+
><span
129+
> </span
130+
><span class="annot"
131+
><span class="hs-identifier hs-type"
132+
>Int</span
133+
></span
134+
><span
135+
>
136+
</span
137+
><span id="line-12"
138+
></span
139+
><span id="bar"
140+
><span class="annot"
141+
><span class="annottext"
142+
>bar :: Int
143+
</span
144+
><a href="ClangCppBug.html#bar"
145+
><span class="hs-identifier hs-var hs-var"
146+
>bar</span
147+
></a
148+
></span
149+
></span
150+
><span
151+
> </span
152+
><span class="hs-glyph"
153+
>=</span
154+
><span
155+
> </span
156+
><span class="annot"
157+
><span class="hs-number"
158+
>3</span
159+
></span
160+
><span
161+
>
162+
</span
163+
><span id="line-13"
164+
></span
165+
><span
166+
>
167+
</span
168+
><span id="line-14"
169+
></span
170+
><span class="hs-comment"
171+
>-- But it doesn't like this:</span
172+
><span
173+
>
174+
</span
175+
><span id="line-15"
176+
></span
177+
><span class="hs-pragma"
178+
>{-# RULES</span
179+
><span
180+
>
181+
</span
182+
><span id="line-16"
183+
></span
184+
><span class="annot"
185+
><span class="hs-pragma"
186+
>&quot;bar/qux&quot;</span
187+
></span
188+
><span
189+
> </span
190+
><span class="annot"
191+
><a href="ClangCppBug.html#bar"
192+
><span class="hs-pragma hs-type"
193+
>bar</span
194+
></a
195+
></span
196+
><span
197+
> </span
198+
><span class="hs-pragma"
199+
>=</span
200+
><span
201+
> </span
202+
><span class="annot"
203+
><a href="ClangCppBug.html#qux"
204+
><span class="hs-pragma hs-type"
205+
>qux</span
206+
></a
207+
></span
208+
><span
209+
>
210+
</span
211+
><span id="line-17"
212+
></span
213+
><span class="annot"
214+
><span class="hs-pragma"
215+
>&quot;qux/foo&quot;</span
216+
></span
217+
><span
218+
> </span
219+
><span class="annot"
220+
><a href="ClangCppBug.html#qux"
221+
><span class="hs-pragma hs-type"
222+
>qux</span
223+
></a
224+
></span
225+
><span
226+
> </span
227+
><span class="hs-pragma"
228+
>=</span
229+
><span
230+
> </span
231+
><span class="annot"
232+
><a href="ClangCppBug.html#foo"
233+
><span class="hs-pragma hs-type"
234+
>foo</span
235+
></a
236+
></span
237+
><span
238+
>
239+
</span
240+
><span id="line-18"
241+
></span
242+
><span
243+
> </span
244+
><span class="hs-pragma"
245+
>#-}</span
246+
><span
247+
>
248+
</span
249+
><span id="line-20"
250+
></span
251+
><span
252+
>
253+
</span
254+
><span id="line-21"
255+
></span
256+
><span class="annot"
257+
><a href="ClangCppBug.html#qux"
258+
><span class="hs-identifier hs-type"
259+
>qux</span
260+
></a
261+
></span
262+
><span
263+
> </span
264+
><span class="hs-glyph"
265+
>::</span
266+
><span
267+
> </span
268+
><span class="annot"
269+
><span class="hs-identifier hs-type"
270+
>Int</span
271+
></span
272+
><span
273+
>
274+
</span
275+
><span id="line-22"
276+
></span
277+
><span id="qux"
278+
><span class="annot"
279+
><span class="annottext"
280+
>qux :: Int
281+
</span
282+
><a href="ClangCppBug.html#qux"
283+
><span class="hs-identifier hs-var hs-var"
284+
>qux</span
285+
></a
286+
></span
287+
></span
288+
><span
289+
> </span
290+
><span class="hs-glyph"
291+
>=</span
292+
><span
293+
> </span
294+
><span class="annot"
295+
><span class="hs-number"
296+
>88</span
297+
></span
298+
><span
299+
>
300+
</span
301+
><span id="line-23"
302+
></span
303+
></pre
304+
></body
305+
></html
306+
>

0 commit comments

Comments
 (0)