diff options
| -rw-r--r-- | .ghci | 1 | ||||
| -rw-r--r-- | .gitignore | 11 | ||||
| -rw-r--r-- | ANNOUNCE | 37 | ||||
| -rw-r--r-- | CHANGES | 29 | ||||
| -rwxr-xr-x[-rw-r--r--] | Setup.lhs | 8 | ||||
| -rw-r--r-- | doc/README | 1 | ||||
| -rw-r--r-- | doc/haddock.xml | 23 | ||||
| -rw-r--r-- | driver/Main.hs | 7 | ||||
| -rw-r--r-- | examples/A.hs | 2 | ||||
| -rw-r--r-- | examples/B.hs | 2 | ||||
| -rw-r--r-- | examples/Bug10.hs | 3 | ||||
| -rw-r--r-- | examples/Bug3.hs | 6 | ||||
| -rw-r--r-- | examples/Bug4.hs | 4 | ||||
| -rw-r--r-- | examples/Bug6.hs | 23 | ||||
| -rw-r--r-- | examples/Bug8.hs | 8 | ||||
| -rw-r--r-- | examples/Bug9.hs | 6 | ||||
| -rw-r--r-- | examples/Hash.hs | 45 | ||||
| -rw-r--r-- | examples/Hidden.hs | 4 | ||||
| -rw-r--r-- | examples/Makefile | 11 | ||||
| -rw-r--r-- | examples/NoLayout.hs | 4 | ||||
| -rw-r--r-- | examples/Test.hs | 410 | ||||
| -rw-r--r-- | examples/hide-bug/A.hs | 2 | ||||
| -rw-r--r-- | examples/hide-bug/B.hs | 5 | ||||
| -rw-r--r-- | examples/hide-bug/C.hs | 6 | ||||
| -rw-r--r-- | examples/hide-bug/D.hs | 7 | ||||
| -rw-r--r-- | ghc.mk | 8 | ||||
| -rw-r--r-- | haddock.cabal | 219 | ||||
| -rw-r--r-- | haddock.spec | 2 | ||||
| -rw-r--r-- | html-test/README.markdown | 27 | ||||
| -rwxr-xr-x | html-test/accept.lhs | 49 | ||||
| -rw-r--r-- | html-test/ref/A.html (renamed from tests/html-tests/tests/A.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/AdvanceTypes.html | 97 | ||||
| -rw-r--r-- | html-test/ref/B.html (renamed from tests/html-tests/tests/B.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Bug1.html (renamed from tests/html-tests/tests/Bug1.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Bug2.html (renamed from tests/html-tests/tests/Bug2.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Bug3.html (renamed from tests/html-tests/tests/Bug3.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Bug4.html (renamed from tests/html-tests/tests/Bug4.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Bug6.html (renamed from tests/html-tests/tests/Bug6.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Bug7.html (renamed from tests/html-tests/tests/Bug7.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Bug8.html (renamed from tests/html-tests/tests/Bug8.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/BugDeprecated.html (renamed from tests/html-tests/tests/BugDeprecated.html.ref) | 20 | ||||
| -rw-r--r-- | html-test/ref/BugExportHeadings.html (renamed from tests/html-tests/tests/BugExportHeadings.html.ref) | 11 | ||||
| -rw-r--r-- | html-test/ref/Bugs.html (renamed from tests/html-tests/tests/Bugs.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/CrossPackageDocs.html (renamed from tests/html-tests/tests/CrossPackageDocs.html.ref) | 222 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedClass.html (renamed from tests/html-tests/tests/DeprecatedClass.html.ref) | 14 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedData.html (renamed from tests/html-tests/tests/DeprecatedData.html.ref) | 20 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedFunction.html | 110 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedFunction2.html (renamed from tests/html-tests/tests/DeprecatedFunction2.html.ref) | 5 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedFunction3.html (renamed from tests/html-tests/tests/DeprecatedFunction3.html.ref) | 5 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedModule.html (renamed from tests/html-tests/tests/DeprecatedModule.html.ref) | 7 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedModule2.html (renamed from tests/html-tests/tests/DeprecatedModule2.html.ref) | 5 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedNewtype.html (renamed from tests/html-tests/tests/DeprecatedNewtype.html.ref) | 14 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedReExport.html | 133 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedRecord.html (renamed from tests/html-tests/tests/DeprecatedRecord.html.ref) | 5 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedTypeFamily.html (renamed from tests/html-tests/tests/DeprecatedTypeFamily.html.ref) | 8 | ||||
| -rw-r--r-- | html-test/ref/DeprecatedTypeSynonym.html (renamed from tests/html-tests/tests/DeprecatedTypeSynonym.html.ref) | 8 | ||||
| -rw-r--r-- | html-test/ref/DeprecationMessageParseError.html | 101 | ||||
| -rw-r--r-- | html-test/ref/Examples.html (renamed from tests/html-tests/tests/Examples.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/FunArgs.html (renamed from tests/html-tests/tests/FunArgs.html.ref) | 6 | ||||
| -rw-r--r-- | html-test/ref/GADTRecords.html (renamed from tests/html-tests/tests/GADTRecords.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Hash.html (renamed from tests/html-tests/tests/Hash.html.ref) | 10 | ||||
| -rw-r--r-- | html-test/ref/HiddenInstances.html | 169 | ||||
| -rw-r--r-- | html-test/ref/HiddenInstancesB.html | 143 | ||||
| -rw-r--r-- | html-test/ref/Hyperlinks.html (renamed from tests/html-tests/tests/DeprecatedFunction.html.ref) | 21 | ||||
| -rw-r--r-- | html-test/ref/IgnoreExports.html (renamed from tests/html-tests/tests/IgnoreExports.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/ModuleWithWarning.html (renamed from tests/html-tests/tests/ModuleWithWarning.html.ref) | 7 | ||||
| -rw-r--r-- | html-test/ref/NamedDoc.html (renamed from tests/html-tests/tests/NamedDoc.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/NoLayout.html (renamed from tests/html-tests/tests/NoLayout.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/NonGreedy.html (renamed from tests/html-tests/tests/NonGreedy.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Properties.html | 92 | ||||
| -rw-r--r-- | html-test/ref/PruneWithWarning.html (renamed from tests/html-tests/tests/PruneWithWarning.html.ref) | 19 | ||||
| -rw-r--r-- | html-test/ref/QuasiExpr.html (renamed from tests/html-tests/tests/QuasiExpr.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/QuasiQuote.html (renamed from tests/html-tests/tests/QuasiQuote.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/SpuriousSuperclassConstraints.html | 128 | ||||
| -rw-r--r-- | html-test/ref/TH.html (renamed from tests/html-tests/tests/TH.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/TH2.html (renamed from tests/html-tests/tests/TH2.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Test.html (renamed from tests/html-tests/tests/Test.html.ref) | 54 | ||||
| -rw-r--r-- | html-test/ref/Ticket112.html (renamed from tests/html-tests/tests/Ticket112.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Ticket61.html (renamed from tests/html-tests/tests/Ticket61.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Ticket75.html (renamed from tests/html-tests/tests/Ticket75.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/TypeFamilies.html (renamed from tests/html-tests/tests/TypeFamilies.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/TypeOperators.html (renamed from tests/html-tests/tests/TypeOperators.html.ref) | 56 | ||||
| -rw-r--r-- | html-test/ref/Unicode.html (renamed from tests/html-tests/tests/Unicode.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/Visible.html (renamed from tests/html-tests/tests/Visible.html.ref) | 2 | ||||
| -rw-r--r-- | html-test/ref/frames.html (renamed from html/frames.html) | 0 | ||||
| -rw-r--r-- | html-test/ref/haddock-util.js (renamed from html/haddock-util.js) | 0 | ||||
| -rw-r--r-- | html-test/ref/hslogo-16.png (renamed from html/Ocean.std-theme/hslogo-16.png) | bin | 1684 -> 1684 bytes | |||
| -rw-r--r-- | html-test/ref/mini_A.html (renamed from tests/html-tests/tests/mini_A.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_AdvanceTypes.html | 33 | ||||
| -rw-r--r-- | html-test/ref/mini_B.html (renamed from tests/html-tests/tests/mini_B.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Bug1.html (renamed from tests/html-tests/tests/mini_Bug1.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Bug2.html (renamed from tests/html-tests/tests/mini_Bug2.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Bug3.html (renamed from tests/html-tests/tests/mini_Bug3.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Bug4.html (renamed from tests/html-tests/tests/mini_Bug4.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Bug6.html (renamed from tests/html-tests/tests/mini_Bug6.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Bug7.html (renamed from tests/html-tests/tests/mini_Bug7.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Bug8.html (renamed from tests/html-tests/tests/mini_Bug8.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_BugDeprecated.html (renamed from tests/html-tests/tests/mini_BugDeprecated.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_BugExportHeadings.html (renamed from tests/html-tests/tests/mini_BugExportHeadings.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Bugs.html (renamed from tests/html-tests/tests/mini_Bugs.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_CrossPackageDocs.html (renamed from tests/html-tests/tests/mini_CrossPackageDocs.html.ref) | 4 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedClass.html (renamed from tests/html-tests/tests/mini_DeprecatedClass.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedData.html (renamed from tests/html-tests/tests/mini_DeprecatedData.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedFunction.html | 37 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedFunction2.html (renamed from tests/html-tests/tests/mini_DeprecatedFunction2.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedFunction3.html (renamed from tests/html-tests/tests/mini_DeprecatedFunction3.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedModule.html (renamed from tests/html-tests/tests/mini_DeprecatedModule.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedModule2.html (renamed from tests/html-tests/tests/mini_DeprecatedModule2.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedNewtype.html (renamed from tests/html-tests/tests/mini_DeprecatedNewtype.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedReExport.html | 37 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedRecord.html (renamed from tests/html-tests/tests/mini_DeprecatedRecord.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedTypeFamily.html (renamed from tests/html-tests/tests/mini_DeprecatedTypeFamily.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecatedTypeSynonym.html (renamed from tests/html-tests/tests/mini_DeprecatedTypeSynonym.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_DeprecationMessageParseError.html | 31 | ||||
| -rw-r--r-- | html-test/ref/mini_Examples.html (renamed from tests/html-tests/tests/mini_Examples.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_FunArgs.html (renamed from tests/html-tests/tests/mini_FunArgs.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_GADTRecords.html (renamed from tests/html-tests/tests/mini_GADTRecords.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Hash.html (renamed from tests/html-tests/tests/mini_Hash.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_HiddenInstances.html | 41 | ||||
| -rw-r--r-- | html-test/ref/mini_HiddenInstancesB.html | 41 | ||||
| -rw-r--r-- | html-test/ref/mini_Hyperlinks.html (renamed from tests/html-tests/tests/mini_DeprecatedFunction.html.ref) | 4 | ||||
| -rw-r--r-- | html-test/ref/mini_IgnoreExports.html (renamed from tests/html-tests/tests/mini_IgnoreExports.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_ModuleWithWarning.html (renamed from tests/html-tests/tests/mini_ModuleWithWarning.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_NamedDoc.html (renamed from tests/html-tests/tests/mini_NamedDoc.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_NoLayout.html (renamed from tests/html-tests/tests/mini_NoLayout.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_NonGreedy.html (renamed from tests/html-tests/tests/mini_NonGreedy.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Properties.html | 31 | ||||
| -rw-r--r-- | html-test/ref/mini_PruneWithWarning.html (renamed from tests/html-tests/tests/mini_PruneWithWarning.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_QuasiExpr.html (renamed from tests/html-tests/tests/mini_QuasiExpr.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_QuasiQuote.html (renamed from tests/html-tests/tests/mini_QuasiQuote.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_SpuriousSuperclassConstraints.html | 33 | ||||
| -rw-r--r-- | html-test/ref/mini_TH.html (renamed from tests/html-tests/tests/mini_TH.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_TH2.html (renamed from tests/html-tests/tests/mini_TH2.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Test.html (renamed from tests/html-tests/tests/mini_Test.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Ticket112.html (renamed from tests/html-tests/tests/mini_Ticket112.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Ticket61.html (renamed from tests/html-tests/tests/mini_Ticket61.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Ticket75.html (renamed from tests/html-tests/tests/mini_Ticket75.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_TypeFamilies.html (renamed from tests/html-tests/tests/mini_TypeFamilies.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_TypeOperators.html (renamed from tests/html-tests/tests/mini_TypeOperators.html.ref) | 8 | ||||
| -rw-r--r-- | html-test/ref/mini_Unicode.html (renamed from tests/html-tests/tests/mini_Unicode.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/mini_Visible.html (renamed from tests/html-tests/tests/mini_Visible.html.ref) | 0 | ||||
| -rw-r--r-- | html-test/ref/minus.gif (renamed from html/Classic.theme/minus.gif) | bin | 56 -> 56 bytes | |||
| -rw-r--r-- | html-test/ref/ocean.css (renamed from html/Ocean.std-theme/ocean.css) | 0 | ||||
| -rw-r--r-- | html-test/ref/plus.gif (renamed from html/Classic.theme/plus.gif) | bin | 59 -> 59 bytes | |||
| -rw-r--r-- | html-test/ref/synopsis.png (renamed from html/Ocean.std-theme/synopsis.png) | bin | 11327 -> 11327 bytes | |||
| -rwxr-xr-x[-rw-r--r--] | html-test/run.lhs (renamed from tests/html-tests/runtests.hs) | 84 | ||||
| -rw-r--r-- | html-test/src/A.hs (renamed from tests/html-tests/tests/A.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/AdvanceTypes.hs | 9 | ||||
| -rw-r--r-- | html-test/src/B.hs (renamed from tests/html-tests/tests/B.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Bug1.hs (renamed from examples/Bug1.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Bug2.hs (renamed from examples/Bug2.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Bug3.hs (renamed from tests/html-tests/tests/Bug3.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Bug4.hs (renamed from tests/html-tests/tests/Bug4.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Bug6.hs (renamed from tests/html-tests/tests/Bug6.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Bug7.hs (renamed from examples/Bug7.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Bug8.hs (renamed from tests/html-tests/tests/Bug8.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/BugDeprecated.hs (renamed from tests/html-tests/tests/BugDeprecated.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/BugExportHeadings.hs (renamed from tests/html-tests/tests/BugExportHeadings.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Bugs.hs (renamed from tests/html-tests/tests/Bugs.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/CrossPackageDocs.hs | 4 | ||||
| -rw-r--r-- | html-test/src/DeprecatedClass.hs (renamed from tests/html-tests/tests/DeprecatedClass.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecatedData.hs (renamed from tests/html-tests/tests/DeprecatedData.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecatedFunction.hs | 10 | ||||
| -rw-r--r-- | html-test/src/DeprecatedFunction2.hs (renamed from tests/html-tests/tests/DeprecatedFunction2.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecatedFunction3.hs (renamed from tests/html-tests/tests/DeprecatedFunction3.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecatedModule.hs | 5 | ||||
| -rw-r--r-- | html-test/src/DeprecatedModule2.hs (renamed from tests/html-tests/tests/DeprecatedModule2.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecatedNewtype.hs (renamed from tests/html-tests/tests/DeprecatedNewtype.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecatedReExport.hs | 16 | ||||
| -rw-r--r-- | html-test/src/DeprecatedRecord.hs (renamed from tests/html-tests/tests/DeprecatedRecord.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecatedTypeFamily.hs (renamed from tests/html-tests/tests/DeprecatedTypeFamily.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecatedTypeSynonym.hs (renamed from tests/html-tests/tests/DeprecatedTypeSynonym.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/DeprecationMessageParseError.hs | 12 | ||||
| -rw-r--r-- | html-test/src/Examples.hs (renamed from tests/html-tests/tests/Examples.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/FunArgs.hs (renamed from tests/html-tests/tests/FunArgs.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/GADTRecords.hs (renamed from tests/html-tests/tests/GADTRecords.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Hash.hs (renamed from tests/html-tests/tests/Hash.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Hidden.hs (renamed from tests/html-tests/tests/Hidden.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/HiddenInstances.hs | 35 | ||||
| -rw-r--r-- | html-test/src/HiddenInstancesA.hs | 17 | ||||
| -rw-r--r-- | html-test/src/HiddenInstancesB.hs | 2 | ||||
| -rw-r--r-- | html-test/src/Hyperlinks.hs | 8 | ||||
| -rw-r--r-- | html-test/src/IgnoreExports.hs (renamed from tests/html-tests/tests/IgnoreExports.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/ModuleWithWarning.hs (renamed from tests/html-tests/tests/ModuleWithWarning.hs) | 2 | ||||
| -rw-r--r-- | html-test/src/NamedDoc.hs (renamed from tests/html-tests/tests/NamedDoc.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/NoLayout.hs (renamed from tests/html-tests/tests/NoLayout.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/NonGreedy.hs (renamed from tests/html-tests/tests/NonGreedy.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Properties.hs | 9 | ||||
| -rw-r--r-- | html-test/src/PruneWithWarning.hs | 15 | ||||
| -rw-r--r-- | html-test/src/QuasiExpr.hs (renamed from tests/html-tests/tests/QuasiExpr.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/QuasiQuote.hs (renamed from tests/html-tests/tests/QuasiQuote.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/SpuriousSuperclassConstraints.hs | 30 | ||||
| -rw-r--r-- | html-test/src/TH.hs (renamed from tests/html-tests/tests/TH.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/TH2.hs (renamed from tests/html-tests/tests/TH2.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Test.hs (renamed from tests/html-tests/tests/Test.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Ticket112.hs (renamed from tests/html-tests/tests/Ticket112.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Ticket61.hs (renamed from tests/html-tests/tests/Ticket61.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Ticket61_Hidden.hs (renamed from tests/html-tests/tests/Ticket61_Hidden.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Ticket75.hs (renamed from tests/html-tests/tests/Ticket75.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/TypeFamilies.hs (renamed from tests/html-tests/tests/TypeFamilies.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/TypeOperators.hs (renamed from tests/html-tests/tests/TypeOperators.hs) | 4 | ||||
| -rw-r--r-- | html-test/src/Unicode.hs.disabled (renamed from tests/html-tests/tests/Unicode.hs) | 0 | ||||
| -rw-r--r-- | html-test/src/Visible.hs (renamed from examples/Visible.hs) | 0 | ||||
| -rw-r--r-- | resources/html/Classic.theme/haskell_icon.gif (renamed from html/Classic.theme/haskell_icon.gif) | bin | 911 -> 911 bytes | |||
| -rw-r--r-- | resources/html/Classic.theme/minus.gif (renamed from html/Ocean.std-theme/minus.gif) | bin | 56 -> 56 bytes | |||
| -rw-r--r-- | resources/html/Classic.theme/plus.gif (renamed from html/Ocean.std-theme/plus.gif) | bin | 59 -> 59 bytes | |||
| -rw-r--r-- | resources/html/Classic.theme/xhaddock.css (renamed from html/Classic.theme/xhaddock.css) | 0 | ||||
| -rw-r--r-- | resources/html/Ocean.std-theme/hslogo-16.png | bin | 0 -> 1684 bytes | |||
| -rw-r--r-- | resources/html/Ocean.std-theme/minus.gif | bin | 0 -> 56 bytes | |||
| -rw-r--r-- | resources/html/Ocean.std-theme/ocean.css | 546 | ||||
| -rw-r--r-- | resources/html/Ocean.std-theme/plus.gif | bin | 0 -> 59 bytes | |||
| -rw-r--r-- | resources/html/Ocean.std-theme/synopsis.png | bin | 0 -> 11327 bytes | |||
| -rw-r--r-- | resources/html/frames.html (renamed from tests/html-tests/tests/frames.html.ref) | 0 | ||||
| -rw-r--r-- | resources/html/haddock-util.js | 344 | ||||
| -rw-r--r-- | resources/latex/haddock.sty (renamed from latex/haddock.sty) | 0 | ||||
| -rw-r--r-- | src/.ghci | 1 | ||||
| -rw-r--r-- | src/Documentation/Haddock.hs | 15 | ||||
| -rw-r--r-- | src/Haddock.hs (renamed from src/Main.hs) | 73 | ||||
| -rw-r--r-- | src/Haddock/Backends/Hoogle.hs | 3 | ||||
| -rw-r--r-- | src/Haddock/Backends/LaTeX.hs | 7 | ||||
| -rw-r--r-- | src/Haddock/Backends/Xhtml/DocMarkup.hs | 4 | ||||
| -rw-r--r-- | src/Haddock/Interface.hs | 7 | ||||
| -rw-r--r-- | src/Haddock/Interface/AttachInstances.hs | 91 | ||||
| -rw-r--r-- | src/Haddock/Interface/Create.hs | 100 | ||||
| -rw-r--r-- | src/Haddock/Interface/LexParseRn.hs | 4 | ||||
| -rw-r--r-- | src/Haddock/Interface/ParseModuleHeader.hs | 1 | ||||
| -rw-r--r-- | src/Haddock/Interface/Rename.hs | 63 | ||||
| -rw-r--r-- | src/Haddock/InterfaceFile.hs | 45 | ||||
| -rw-r--r-- | src/Haddock/Lex.x | 4 | ||||
| -rw-r--r-- | src/Haddock/Parse.y | 27 | ||||
| -rw-r--r-- | src/Haddock/Types.hs | 56 | ||||
| -rw-r--r-- | src/Haddock/Utils.hs | 7 | ||||
| -rw-r--r-- | test/Haddock/ParseSpec.hs | 81 | ||||
| -rw-r--r-- | test/Spec.hs | 9 | ||||
| -rw-r--r-- | test/nanospec/README | 6 | ||||
| -rw-r--r-- | test/nanospec/Test/Hspec.hs | 126 | ||||
| -rw-r--r-- | tests/html-tests/README | 24 | ||||
| -rw-r--r-- | tests/html-tests/accept.hs | 36 | ||||
| -rw-r--r-- | tests/html-tests/tests/Bug1.hs | 6 | ||||
| -rw-r--r-- | tests/html-tests/tests/Bug2.hs | 4 | ||||
| -rw-r--r-- | tests/html-tests/tests/Bug7.hs | 12 | ||||
| -rw-r--r-- | tests/html-tests/tests/CrossPackageDocs.hs | 3 | ||||
| -rw-r--r-- | tests/html-tests/tests/DeprecatedFunction.hs | 6 | ||||
| -rw-r--r-- | tests/html-tests/tests/DeprecatedModule.hs | 5 | ||||
| -rw-r--r-- | tests/html-tests/tests/PruneWithWarning.hs | 9 | ||||
| -rw-r--r-- | tests/html-tests/tests/Visible.hs | 3 | ||||
| -rw-r--r-- | tests/unit-tests/.ghci | 1 | ||||
| -rw-r--r-- | tests/unit-tests/parsetests.hs | 69 | ||||
| -rwxr-xr-x | tests/unit-tests/runparsetests.sh | 15 | 
249 files changed, 3418 insertions, 1469 deletions
@@ -0,0 +1 @@ +:set -isrc -idist/build -idist/build/autogen -packageghc -optP-include -optPdist/build/autogen/cabal_macros.h @@ -1,6 +1,9 @@  /dist/ +/html-test/out/ +  /doc/haddock -/tests/html-tests/output/ -/tests/html-tests/tests/doc-index.html.ref -/tests/html-tests/tests/index-frames.html.ref -/tests/html-tests/tests/index.html.ref +/doc/autom4te.cache/ +/doc/config.log +/doc/config.mk +/doc/config.status +/doc/configure @@ -1,28 +1,20 @@  -------------------------------------------- --- Haddock 2.9.3 +-- Haddock 2.13.1  -------------------------------------------- -A new version of Haddock, the Haskell documentation tool, is out! - -This is the version that comes with GHC 7.2.1 (although that executable claims -it is version 2.9.2!) - -Apologies to people who have sent in patches that haven't made it into this -release, they will go into the next one. +A new versions of Haddock has been uploaded to Hackage.  -------------------------------------------- --- Changes in version 2.9.3 +-- Changes in version 2.13.1  -------------------------------------------- -Changes in version 2.9.3 - -  * Build with GHC 7.2.1 + * Hide instances that are "internal" to a module -  * Support blank lines in results of examples + * Add support for properties in documentation -  * A type signatures for multiple names generates one signature in the output + * Fix a bug with spurious superclass constraints -  * Minor bug fixes + * Fix and extend the Haddock API  --------------------------------------------  -- Links @@ -32,7 +24,7 @@ Homepage:   http://www.haskell.org/haddock  Hackage page: - http://hackage.haskell.org/package/haddock-2.9.0 + http://hackage.haskell.org/package/haddock  Bugtracker and wiki:   http://trac.haskell.org/haddock @@ -41,7 +33,7 @@ Mailing list:   haddock@projects.haskell.org  Code repository: - http://code.haskell.org/haddock + http://darcs.haskell.org/haddock.git  --------------------------------------------  -- Contributors @@ -49,13 +41,10 @@ Code repository:  The following people contributed patches to this release: -Max Bolingbroke -Ian Lynagh -Simon Hengel -Jose Pedro Magalhaes -Simon Peyton Jones -Michal Terepeta +Kazu Yamamoto +Roman Cheplyaka  David Waern +Simon Hengel  --------------------------------------------  -- Get Involved @@ -64,7 +53,7 @@ David Waern  We would be very happy to get more contributors. To get involved, start by  grabbing the code: - http://code.haskell.org/haddock + http://darcs.haskell.org/haddock.git  Then take a look at the bug and feature tracker for things to work on: @@ -1,3 +1,30 @@ +Changes in version 2.13.2 + + * Handle HsExplicitListTy in renameer (#213) + + * Allow haddock markup in deprecation messages + + * Export more types from Documentation.Haddock + + * Include everything that is required to run the test suite with the cabal +   package (#230) + +Changes in version 2.13.1 + + * Hide instances that are "internal" to a module + + * Add support for properties in documentation + + * Fix a bug with spurious superclass constraints + + * Fix and extend the Haddock API + +Changes in version 2.12.0 + + * Labeled URLs (e.g <http://example.net/ some label>) + + * Improved memory usage (new dependency: deepseq) +  Changes in version 2.11.0   * Show deprecation messages for identifiers @@ -8,7 +35,7 @@ Changes in version 2.11.0   * Fix reporting of modules safe haskell mode - * Fix a case where we were generating invalid xhtml  + * Fix a case where we were generating invalid xhtml   * Improved --qual option (no crashes, proper error messages) diff --git a/Setup.lhs b/Setup.lhs index fe12b5be..5bde0de9 100644..100755 --- a/Setup.lhs +++ b/Setup.lhs @@ -1,5 +1,3 @@ -#! /usr/bin/runhaskell -\begin{code} -import Distribution.Simple -main = defaultMain -\end{code} +#!/usr/bin/env runhaskell +> import Distribution.Simple +> main = defaultMain @@ -8,6 +8,7 @@ process the documentation on your system, and a Makefile to actually  do the processing (so, on Windows, you'll need Cygwin or MSys in  addition to the DocBook XML tools).  To build the HTML documentation: +   $ autoconf     $ ./configure     $ make html diff --git a/doc/haddock.xml b/doc/haddock.xml index 27dd69d8..139b2830 100644 --- a/doc/haddock.xml +++ b/doc/haddock.xml @@ -21,7 +21,7 @@        <holder>Simon Marlow, David Waern</holder>      </copyright>      <abstract> -      <para>This document describes Haddock version 2.11.0, a Haskell +      <para>This document describes Haddock version 2.13.2, a Haskell        documentation tool.</para>      </abstract>    </bookinfo> @@ -1658,7 +1658,7 @@ module A where  	by zero or more result lines:</para>  <programlisting> --- | Two examples are given bellow: +-- | Two examples are given below:  --  -- >>> fib 10  -- 55 @@ -1672,6 +1672,18 @@ module A where  	generated documenation.</para>        </section> +      <section> +	<title>Properties</title> +        <para> +          Haddock provides markup for properties: +<programlisting> +-- | Addition is commutative: +-- +-- prop> a + b = b + a +</programlisting> +          This allows third-party applications to extract and verify them. +        </para> +      </section>        <section>  	<title>Hyperlinked Identifiers</title> @@ -1830,6 +1842,13 @@ module A where  	<literal><...></literal>.  If the output format supports  	it, the URL will be turned into a hyperlink when  	rendered.</para> + +        The URL can be followed by an optional label: +<programlisting> +<http://example.com label> +</programlisting> +        The label is then used as a descriptive text for the hyperlink, if the +        output format supports it.        </section>        <section> diff --git a/driver/Main.hs b/driver/Main.hs new file mode 100644 index 00000000..42b99860 --- /dev/null +++ b/driver/Main.hs @@ -0,0 +1,7 @@ +module Main where + +import           Documentation.Haddock (haddock) +import           System.Environment (getArgs) + +main :: IO () +main = getArgs >>= haddock diff --git a/examples/A.hs b/examples/A.hs deleted file mode 100644 index 4a344a24..00000000 --- a/examples/A.hs +++ /dev/null @@ -1,2 +0,0 @@ -module A where -data A = A diff --git a/examples/B.hs b/examples/B.hs deleted file mode 100644 index 3a31507e..00000000 --- a/examples/B.hs +++ /dev/null @@ -1,2 +0,0 @@ -module B ( module A ) where -import A diff --git a/examples/Bug10.hs b/examples/Bug10.hs deleted file mode 100644 index 04c5ff50..00000000 --- a/examples/Bug10.hs +++ /dev/null @@ -1,3 +0,0 @@ --- | Module: M -f :: a -> a - diff --git a/examples/Bug3.hs b/examples/Bug3.hs deleted file mode 100644 index cfda7e4c..00000000 --- a/examples/Bug3.hs +++ /dev/null @@ -1,6 +0,0 @@ -module Bug3 where - --- | /multi-line --- emphasis/ -foo :: Int - diff --git a/examples/Bug4.hs b/examples/Bug4.hs deleted file mode 100644 index bb3c4fe2..00000000 --- a/examples/Bug4.hs +++ /dev/null @@ -1,4 +0,0 @@ -module Bug4 where --- | don't use apostrophe's in the wrong place's -foo :: Int - diff --git a/examples/Bug6.hs b/examples/Bug6.hs deleted file mode 100644 index 498983df..00000000 --- a/examples/Bug6.hs +++ /dev/null @@ -1,23 +0,0 @@ --- | Exporting records. -module Bug6( A(A), B(B), b, C(C,c1,c2), D(D,d1), E(E) ) where - --- | --- This record is exported without its field -data A = A { a :: Int } - --- | --- .. with its field, but the field is named separately in the export list --- (should still be visible as a field name) -data B = B { b :: Int } - --- | --- .. with fields names as subordinate names in the export -data C = C { c1 :: Int, c2 :: Int } - --- | --- .. with only some of the fields exported (we can't handle this one - --- how do we render the declaration?) -data D = D { d1 :: Int, d2 :: Int } - --- | a newtype with a field -newtype E = E { e :: Int } diff --git a/examples/Bug8.hs b/examples/Bug8.hs deleted file mode 100644 index 6481ca3f..00000000 --- a/examples/Bug8.hs +++ /dev/null @@ -1,8 +0,0 @@ -infix --> -infix ---> - -data Typ = Type (String,[Typ]) -         | TFree (String, [String]) - -x --> y = Type("fun",[s,t]) -(--->) = flip $ foldr (-->) diff --git a/examples/Bug9.hs b/examples/Bug9.hs deleted file mode 100644 index 81e341db..00000000 --- a/examples/Bug9.hs +++ /dev/null @@ -1,6 +0,0 @@ --- Haddock 0.6 didn't parse this module, because the qualified --- identifier C.safe was incorrectly lexed as 3 tokens. - -module Check where -import qualified Foo as C -check = undefined { C.safe = 3 } diff --git a/examples/Hash.hs b/examples/Hash.hs deleted file mode 100644 index b399b129..00000000 --- a/examples/Hash.hs +++ /dev/null @@ -1,45 +0,0 @@ -{- | -  Implementation of fixed-size hash tables, with a type  -  class for constructing hash values for structured types. --} -module Hash ( -  -- * The @HashTable@ type -  HashTable, - -  -- ** Operations on @HashTable@s -  new, insert, lookup, - -  -- * The @Hash@ class -  Hash(..), - ) where - -import Array - --- | A hash table with keys of type @key@ and values of type @val@. --- The type @key@ should be an instance of 'Eq'. -data HashTable key val = HashTable Int (Array Int [(key,val)]) - --- | Builds a new hash table with a given size -new :: (Eq key, Hash key) => Int -> IO (HashTable key val) - --- | Inserts a new element into the hash table -insert :: (Eq key, Hash key) => key -> val -> IO () - --- | Looks up a key in the hash table, returns @'Just' val@ if the key --- was found, or 'Nothing' otherwise. -lookup 	:: Hash key => key -> IO (Maybe val) - --- | A class of types which can be hashed. -class Hash a where -   -- | hashes the value of type @a@ into an 'Int' -   hash :: a -> Int - -instance Hash Int where -   hash = id - -instance Hash Float where -   hash = trunc - -instance (Hash a, Hash b) => Hash (a,b) where -   hash (a,b) = hash a `xor` hash b - diff --git a/examples/Hidden.hs b/examples/Hidden.hs deleted file mode 100644 index d30925b1..00000000 --- a/examples/Hidden.hs +++ /dev/null @@ -1,4 +0,0 @@ --- #hide -module Hidden where -hidden :: Int -> Int -hidden a = a diff --git a/examples/Makefile b/examples/Makefile deleted file mode 100644 index 034358ec..00000000 --- a/examples/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -TOP = .. -include $(TOP)/mk/boilerplate.mk - -all :: index.html - -index.html : $(HS_SRCS) $(HADDOCK_INPLACE) -	$(HADDOCK_INPLACE) -h $(HS_SRCS) - -CLEAN_FILES += index.html - -include $(TOP)/mk/target.mk diff --git a/examples/NoLayout.hs b/examples/NoLayout.hs deleted file mode 100644 index 0be97ba1..00000000 --- a/examples/NoLayout.hs +++ /dev/null @@ -1,4 +0,0 @@ -module NoLayout where { -  -- | the class 'C' -  g :: Int; - } diff --git a/examples/Test.hs b/examples/Test.hs deleted file mode 100644 index 230f32d8..00000000 --- a/examples/Test.hs +++ /dev/null @@ -1,410 +0,0 @@ ------------------------------------------------------------------------------ --- | --- Module      :  Test --- Copyright   :  (c) Simon Marlow 2002 --- License     :  BSD-style ---  --- Maintainer  :  libraries@haskell.org --- Stability   :  provisional --- Portability :  portable --- --- This module illustrates & tests most of the features of Haddock. --- Testing references from the description: 'T', 'f', 'g', 'Visible.visible'. --- ------------------------------------------------------------------------------ - --- This is plain comment, ignored by Haddock. - -module Test (  - -	-- Section headings are introduced with '-- *': -	-- * Type declarations - -	-- Subsection headings are introduced with '-- **' and so on. -	-- ** Data types -	T(..), T2, T3(..), T4(..), T5(..), T6(..), -	N1(..), N2(..), N3(..), N4, N5(..), N6(..), N7(..), - -	-- ** Records -	R(..), R1(..), - -	-- | test that we can export record selectors on their own: -	p, q, u, - -	-- * Class declarations -	C(a,b), D(..), E, F(..), -	 -	-- | Test that we can export a class method on its own: -	a, - -	-- * Function types -	f, g, - -	-- * Auxiliary stuff - -	-- $aux1 - -	-- $aux2 - -	-- $aux3 - -	-- $aux4 - -	-- $aux5 - -	-- $aux6 - -	-- $aux7 - -	-- $aux8 - -	-- $aux9 - -	-- $aux10 - -	-- $aux11 - -	-- $aux12 - -	-- | This is some inline documentation in the export list -	-- -	-- > a code block using bird-tracks -	-- > each line must begin with > (which isn't significant unless it -	-- > is at the beginning of the line). - -	-- * A hidden module -	module Hidden, - -	-- * A visible module -	module Visible, - -	{-| nested-style doc comments -} - -	-- * Existential \/ Universal types -	Ex(..), - -	-- * Type signatures with argument docs -	k, l, m, o, - -	-- * A section -	-- and without an intervening comma: -	-- ** A subsection  - -{-| - > a literal line - - $ a non /literal/ line $ --} - -	f' -   ) where - -import Hidden -import Visible -import Data.Maybe - -bla = Nothing - --- | This comment applies to the /following/ declaration --- and it continues until the next non-comment line -data T a b - = A Int (Maybe Float) -- ^ This comment describes the 'A' constructor - | -- | This comment describes the 'B' constructor -   B (T a b, T Int Float) -- ^  - --- | An abstract data declaration -data T2 a b = T2 a b - --- | A data declaration with no documentation annotations on the constructors -data T3 a b = A1 a | B1 b - --- A data declaration with no documentation annotations at all -data T4 a b = A2 a | B2 b - --- A data declaration documentation on the constructors only -data T5 a b -  = A3 a -- ^ documents 'A3' -  | B3 b -- ^ documents 'B3' - --- | Testing alternative comment styles -data T6 -  -- | This is the doc for 'A4' -  = A4 -  | B4 -  | -- ^ This is the doc for 'B4' - -    -- | This is the doc for 'C4' -    C4 - --- | A newtype -newtype N1 a = N1 a - --- | A newtype with a fieldname -newtype N2 a b = N2 {n :: a b} - --- | A newtype with a fieldname, documentation on the field -newtype N3 a b = N3 {n3 :: a b -- ^ this is the 'n3' field  -		    } - --- | An abstract newtype - we show this one as data rather than newtype because --- the difference isn\'t visible to the programmer for an abstract type. -newtype N4 a b = N4 a - -newtype N5 a b = N5 {n5 :: a b -- ^ no docs on the datatype or the constructor -		    } - -newtype N6 a b = N6 {n6 :: a b -		    } -		 -- ^ docs on the constructor only - --- | docs on the newtype and the constructor -newtype N7 a b = N7 {n7 :: a b -		    } -		-- ^ The 'N7' constructor -		  - -class (D a) => C a  where -   -- |this is a description of the 'a' method -   a :: IO a -   b :: [a] -   -- ^ this is a description of the 'b' method -   c :: a -- c is hidden in the export list - --- ^ This comment applies to the /previous/ declaration (the 'C' class) - -class D a where -   d :: T a b -   e :: (a,a) --- ^ This is a class declaration with no separate docs for the methods - -instance D Int where -  d = undefined -  e = undefined - --- instance with a qualified class name -instance Test.D Float where -  d = undefined -  e = undefined - -class E a where -  ee :: a --- ^ This is a class declaration with no methods (or no methods exported) - --- This is a class declaration with no documentation at all -class F a where -  ff :: a - --- | This is the documentation for the 'R' record, which has four fields, --- 'p', 'q', 'r', and 's'. -data R =  -  -- | This is the 'C1' record constructor, with the following fields: -  C1 { p :: Int -- ^ This comment applies to the 'p' field -     , q :: forall a . a->a  -- ^ This comment applies to the 'q' field -     , -- | This comment applies to both 'r' and 's' -       r,s :: Int -     } -  | C2 { t :: T1 -> (T2 Int Int)-> (T3 Bool Bool) -> (T4 Float Float) -> T5 () (), -       u,v :: Int -     } -  -- ^ This is the 'C2' record constructor, also with some fields: - --- | Testing different record commenting styles -data R1  -  -- | This is the 'C3' record constructor -  = C3 {  -	-- | The 's1' record selector -	  s1 :: Int -	-- | The 's2' record selector -	, s2 :: Int -	, s3 :: Int  -- NOTE: In the original examples/Test.hs in Haddock, there is an extra "," here. -                     -- Since GHC doesn't allow that, I have removed it in this file.  -	-- ^ The 's3' record selector -     } - --- These section headers are only used when there is no export list to --- give the structure of the documentation: - --- * This is a section header (level 1) --- ** This is a section header (level 2) --- *** This is a section header (level 3) - -{-| -In a comment string we can refer to identifiers in scope with -single quotes like this: 'T', and we can refer to modules by -using double quotes: "Foo".  We can add emphasis /like this/. - -   * This is a bulleted list - -   - This is the next item (different kind of bullet) - -   (1) This is an ordered list -  -   2. This is the next item (different kind of bullet) - -@ -     This is a block of code, which can include other markup: 'R' -     formatting -               is -                 significant -@ - -> this is another block of code - -We can also include URLs in documentation: <http://www.haskell.org/>. --} - -f :: C a => a -> Int - --- | we can export foreign declarations too -foreign import ccall g :: Int -> IO CInt - --- | this doc string has a parse error in it: \' -h :: Int -h = 42 - - --- $aux1 This is some documentation that is attached to a name ($aux1) --- rather than a source declaration.  The documentation may be --- referred to in the export list using its name. --- --- @ code block in named doc @ - --- $aux2 This is some documentation that is attached to a name ($aux2) - --- $aux3 --- @ code block on its own in named doc @ - --- $aux4 --- --- @ code block on its own in named doc (after newline) @ - -{- $aux5 a nested, named doc comment - -   with a paragraph, - -   @ and a code block @ --} - --- some tests for various arrangements of code blocks: - -{- $aux6 ->test ->test1 - -@ test2 -  test3 -@ --} - -{- $aux7 -@ -test1 -test2 -@ --} - -{- $aux8 ->test3 ->test4 --} - -{- $aux9 -@ -test1 -test2 -@ - ->test3 ->test4 --} - -{- $aux10 ->test3 ->test4 - -@ -test1 -test2 -@ --} - --- This one is currently wrong (Haddock 0.4).  The @...@ part is --- interpreted as part of the bird-tracked code block. -{- $aux11 -aux11: - ->test3 ->test4 - -@ -test1 -test2 -@ --} - --- $aux12 --- > foo ---  --- > bar ---  - --- | A data-type using existential\/universal types -data Ex a  -  = forall b . C b => Ex1 b -  | forall b . Ex2 b -  | forall b . C a => Ex3 b -- NOTE: I have added "forall b" here make GHC accept this file  -  | Ex4 (forall a . a -> a) - --- | This is a function with documentation for each argument -k :: T () () 	  -- ^ This argument has type 'T' -  -> (T2 Int Int) -- ^ This argument has type 'T2 Int Int' -  -> (T3 Bool Bool -> T4 Float Float) -- ^ This argument has type @T3 Bool Bool -> T4 Float Float@ -  -> T5 () ()	  -- ^ This argument has a very long description that should -		  -- hopefully cause some wrapping to happen when it is finally -		  -- rendered by Haddock in the generated HTML page. -  -> IO ()	  -- ^ This is the result type - --- This function has arg docs but no docs for the function itself -l :: (Int, Int, Float) -- ^ takes a triple -  -> Int -- ^ returns an 'Int' - --- | This function has some arg docs  -m :: R -  -> N1 ()	-- ^ one of the arguments -  -> IO Int	-- ^ and the return value - --- | This function has some arg docs but not a return value doc - --- can't use the original name ('n') with GHC -newn :: R		-- ^ one of the arguments, an 'R' -     -> N1 ()		-- ^ one of the arguments -     -> IO Int -newn = undefined  - - --- | A foreign import with argument docs -foreign import ccall unsafe  - o :: Float  -- ^ The input float -   -> IO Float  -- ^ The output float - --- | We should be able to escape this: \#\#\# - --- p :: Int  --- can't use the above original definition with GHC -newp :: Int   -newp = undefined - --- | a function with a prime can be referred to as 'f''  --- but f' doesn't get link'd 'f\'' -f' :: Int - - --- Add some definitions here so that this file can be compiled with GHC - -data T1 -f = undefined -f' = undefined -type CInt = Int   -k = undefined -l = undefined -m = undefined diff --git a/examples/hide-bug/A.hs b/examples/hide-bug/A.hs deleted file mode 100644 index a9386a40..00000000 --- a/examples/hide-bug/A.hs +++ /dev/null @@ -1,2 +0,0 @@ --- #hide -module A where { data T = MkT; f :: T; f = MkT } diff --git a/examples/hide-bug/B.hs b/examples/hide-bug/B.hs deleted file mode 100644 index eeaa8290..00000000 --- a/examples/hide-bug/B.hs +++ /dev/null @@ -1,5 +0,0 @@ -module B(Test, vis) where  - -vis = id - -data Test = Test diff --git a/examples/hide-bug/C.hs b/examples/hide-bug/C.hs deleted file mode 100644 index d846035b..00000000 --- a/examples/hide-bug/C.hs +++ /dev/null @@ -1,6 +0,0 @@ -module C(C.bla) where  - -import D - -bla :: Test -bla = undefined diff --git a/examples/hide-bug/D.hs b/examples/hide-bug/D.hs deleted file mode 100644 index e8ce5744..00000000 --- a/examples/hide-bug/D.hs +++ /dev/null @@ -1,7 +0,0 @@ --- The link to the type T in the doc for this module should point to  --- B.T, not A.T.  Bug fixed in rev 1.59 of Main.hs. -module D(Test, hej) where  - -import B - -hej = vis @@ -14,11 +14,11 @@ $(INPLACE_BIN)/$(utils/haddock_dist_PROG): $(INPLACE_LIB)/html $(INPLACE_LIB)/la  $(INPLACE_LIB)/html:  	$(call removeTrees,$@) -	"$(CP)" -R utils/haddock/html $@ +	"$(CP)" -R utils/haddock/resources/html $@  $(INPLACE_LIB)/latex:  	$(call removeTrees,$@) -	"$(CP)" -R utils/haddock/latex $@ +	"$(CP)" -R utils/haddock/resources/latex $@  endif @@ -42,12 +42,12 @@ install_utils/haddock_data:  	$(foreach i,$(sort $(dir $(utils/haddock_dist_DATA_FILES))), \  	    $(call make-command,$(call INSTALL_DIR,"$(DESTDIR)$(ghclibdir)/$i")))  	$(foreach i,$(utils/haddock_dist_DATA_FILES), \ -	    $(call make-command,$(call INSTALL_DATA,$(INSTALL_OPTS),utils/haddock/$i,"$(DESTDIR)$(ghclibdir)/$(dir $i)"))) +	    $(call make-command,$(call INSTALL_DATA,$(INSTALL_OPTS),utils/haddock/resources/$i,"$(DESTDIR)$(ghclibdir)/$(dir $i)")))  .PHONY: install_utils/haddock_link  install_utils/haddock_link:  	$(call removeFiles,"$(DESTDIR)$(bindir)/haddock")  	$(LN_S) $(utils/haddock_dist_INSTALL_SHELL_WRAPPER_NAME) "$(DESTDIR)$(bindir)/haddock" -BINDIST_EXTRAS += $(addprefix utils/haddock/,$(utils/haddock_dist_DATA_FILES)) +BINDIST_EXTRAS += $(addprefix utils/haddock/resources/,$(utils/haddock_dist_DATA_FILES)) diff --git a/haddock.cabal b/haddock.cabal index ddf0ce65..c4e33ad6 100644 --- a/haddock.cabal +++ b/haddock.cabal @@ -1,5 +1,5 @@  name:                 haddock -version:              2.11.0 +version:              2.13.2  synopsis:             A documentation-generation tool for Haskell libraries  description:          Haddock is a documentation-generation tool for Haskell                        libraries @@ -26,119 +26,96 @@ extra-source-files:    doc/docbook-xml.mk    doc/fptools.css    doc/haddock.xml -  examples/A.hs -  examples/B.hs -  examples/Bug1.hs -  examples/Bug2.hs -  examples/Bug3.hs -  examples/Bug4.hs -  examples/Bug6.hs -  examples/Bug7.hs -  examples/Bug8.hs -  examples/Bug9.hs -  examples/Hash.hs -  examples/Hidden.hs -  examples/Makefile -  examples/NoLayout.hs -  examples/Test.hs -  examples/Visible.hs -  examples/hide-bug/A.hs -  examples/hide-bug/B.hs -  examples/hide-bug/C.hs -  examples/hide-bug/D.hs    haddock.spec    haskell.vim    src/haddock.sh --- The test files shouldn't have to go here, but the source files for --- the test-suite stanzas don't get picked up by `cabal sdist`. -  tests/html-tests/runtests.hs - -data-files: -  html/frames.html -  html/haddock-util.js -  html/Classic.theme/haskell_icon.gif -  html/Classic.theme/minus.gif -  html/Classic.theme/plus.gif -  html/Classic.theme/xhaddock.css -  html/Ocean.std-theme/hslogo-16.png -  html/Ocean.std-theme/minus.gif -  html/Ocean.std-theme/ocean.css -  html/Ocean.std-theme/plus.gif -  html/Ocean.std-theme/synopsis.png -  latex/haddock.sty +  html-test/src/*.hs +  html-test/ref/*.html + +data-dir:   resources +data-files: html/frames.html +            html/haddock-util.js +            html/Classic.theme/haskell_icon.gif +            html/Classic.theme/minus.gif +            html/Classic.theme/plus.gif +            html/Classic.theme/xhaddock.css +            html/Ocean.std-theme/hslogo-16.png +            html/Ocean.std-theme/minus.gif +            html/Ocean.std-theme/ocean.css +            html/Ocean.std-theme/plus.gif +            html/Ocean.std-theme/synopsis.png +            latex/haddock.sty  flag in-ghc-tree    description: Are we in a GHC tree?    default: False    manual: True -flag test +-- Using this disables -O2, and hence allows to use --disable-optimization, +-- which is about twice as fast.  This should probably be the default, but we +-- need some benchmarks first.. +flag dev    default: False    manual: True  executable haddock    default-language:     Haskell2010 -  -- In a GHC tree - in particular, in a source tarball - we don't -  -- require alex or happy +  main-is:              Main.hs +  hs-source-dirs:       driver +  if flag(dev) +    ghc-options:          -funbox-strict-fields -Wall -fwarn-tabs +  else +    ghc-options:          -funbox-strict-fields -Wall -fwarn-tabs -O2    if !flag(in-ghc-tree)      build-tools: alex >= 2.3, happy >= 1.18    build-depends: -    base >= 4.3 && < 4.8, -    filepath, -    directory, -    pretty, -    containers, -    deepseq, -    array, -    xhtml >= 3000.2 && < 3000.3, -    Cabal >= 1.10, -    ghc >= 7.4 && < 7.8 - +    base >= 4.3 && < 4.8    if flag(in-ghc-tree) +    hs-source-dirs: src      cpp-options: -DIN_GHC_TREE +    build-depends: +      filepath, +      directory, +      containers, +      deepseq, +      array, +      xhtml >= 3000.2 && < 3000.3, +      Cabal >= 1.10, +      ghc >= 7.4 && < 7.8 +    other-modules: +      Documentation.Haddock +      Haddock +      Haddock.Interface +      Haddock.Interface.Rename +      Haddock.Interface.Create +      Haddock.Interface.AttachInstances +      Haddock.Interface.LexParseRn +      Haddock.Interface.ParseModuleHeader +      Haddock.Lex +      Haddock.Parse +      Haddock.Utils +      Haddock.Backends.Xhtml +      Haddock.Backends.Xhtml.Decl +      Haddock.Backends.Xhtml.DocMarkup +      Haddock.Backends.Xhtml.Layout +      Haddock.Backends.Xhtml.Names +      Haddock.Backends.Xhtml.Themes +      Haddock.Backends.Xhtml.Types +      Haddock.Backends.Xhtml.Utils +      Haddock.Backends.LaTeX +      Haddock.Backends.HaddockDB +      Haddock.Backends.Hoogle +      Haddock.ModuleTree +      Haddock.Types +      Haddock.Doc +      Haddock.Version +      Haddock.InterfaceFile +      Haddock.Options +      Haddock.GhcUtils +      Haddock.Convert    else -    build-depends: ghc-paths +    build-depends:  haddock -  if flag(test) -    cpp-options: -DTEST -    build-depends: QuickCheck >= 2.1 && < 3 - -  main-is:              Main.hs -  hs-source-dirs:       src -  default-extensions:   CPP, DeriveDataTypeable, -                        ScopedTypeVariables, MagicHash -  ghc-options:          -funbox-strict-fields -O2 -Wall -fwarn-tabs - -  other-modules: -    Haddock.Interface -    Haddock.Interface.Rename -    Haddock.Interface.Create -    Haddock.Interface.AttachInstances -    Haddock.Interface.LexParseRn -    Haddock.Interface.ParseModuleHeader -    Haddock.Lex -    Haddock.Parse -    Haddock.Utils -    Haddock.Backends.Xhtml -    Haddock.Backends.Xhtml.Decl -    Haddock.Backends.Xhtml.DocMarkup -    Haddock.Backends.Xhtml.Layout -    Haddock.Backends.Xhtml.Names -    Haddock.Backends.Xhtml.Themes -    Haddock.Backends.Xhtml.Types -    Haddock.Backends.Xhtml.Utils -    Haddock.Backends.LaTeX -    Haddock.Backends.HaddockDB -    Haddock.Backends.Hoogle -    Haddock.ModuleTree -    Haddock.Types -    Haddock.Doc -    Haddock.Version -    Haddock.InterfaceFile         -    Haddock.Options -    Haddock.GhcUtils -    Haddock.Convert -     library    default-language:     Haskell2010    -- In a GHC tree - in particular, in a source tarball - we don't @@ -149,8 +126,8 @@ library      base >= 4.3 && < 4.8,      filepath,      directory, -    pretty,      containers, +    deepseq,      array,      xhtml >= 3000.2 && < 3000.3,      Cabal >= 1.10, @@ -161,20 +138,17 @@ library    else      build-depends: ghc-paths -  if flag(test) -    cpp-options: -DTEST -    build-depends: QuickCheck >= 2.1 && < 3 -    hs-source-dirs:       src -  default-extensions:   CPP, DeriveDataTypeable, -                        ScopedTypeVariables, MagicHash -  ghc-options:          -funbox-strict-fields -O2 -Wall -fwarn-tabs +  if flag(dev) +    ghc-options:          -funbox-strict-fields -Wall -fwarn-tabs +  else +    ghc-options:          -funbox-strict-fields -Wall -fwarn-tabs -O2    exposed-modules:      Documentation.Haddock    other-modules: -    Main +    Haddock      Haddock.Interface      Haddock.Interface.Rename      Haddock.Interface.Create @@ -204,17 +178,50 @@ library      Haddock.GhcUtils      Haddock.Convert      Paths_haddock -   +    if flag(in-ghc-tree)      buildable: False -test-suite html-tests +test-suite html-test    type:             exitcode-stdio-1.0    default-language: Haskell2010 -  main-is:          runtests.hs -  hs-source-dirs:   tests/html-tests +  main-is:          run.lhs +  hs-source-dirs:   html-test    build-depends:    base, directory, process, filepath, Cabal +test-suite spec +  type:             exitcode-stdio-1.0 +  default-language: Haskell2010 +  main-is:          Spec.hs +  hs-source-dirs: +      test +    , test/nanospec +    , src + +  other-modules: +      Test.Hspec +      Haddock.ParseSpec + +  build-depends: +      base +    , ghc +    , containers +    , deepseq +    , array + +  -- NOTE: As of this writing, Cabal does not properly handle alex/happy for +  -- test suites.  We work around this by adding dist/build to hs-source-dirs, +  -- so that the the generated lexer/parser from the library is used.  In +  -- addition we depend on 'haddock', so that the library is compiled before +  -- the test suite. +  -- +  -- The corresponding cabal ticket is here: +  -- https://github.com/haskell/cabal/issues/943 +  hs-source-dirs: +      dist/build +  build-depends: +      haddock +  source-repository head    type:     git    location: http://darcs.haskell.org/haddock.git diff --git a/haddock.spec b/haddock.spec index 8b2a5599..9d6ea8f6 100644 --- a/haddock.spec +++ b/haddock.spec @@ -17,7 +17,7 @@  # version label of your release tarball.  %define name    haddock -%define version 2.11.0 +%define version 2.13.2  %define release 1  Name:           %{name} diff --git a/html-test/README.markdown b/html-test/README.markdown new file mode 100644 index 00000000..8d57acab --- /dev/null +++ b/html-test/README.markdown @@ -0,0 +1,27 @@ +This is a testsuite for Haddock that uses the concept of "golden files". That +is, it compares output files against a set of reference files. + +To add a new test:  + + 1. Create a module in the `html-test/src` directory. + + 2. Run `cabal test`. You should now have `html-test/out/<modulename>.html`. +    The test passes since there is no reference file to compare with. + + 3. To make a reference file from the output file, run + +        html-test/accept.lhs <modulename> + +Tips and tricks: + +To "accept" all output files (copy them to reference files), run + +    runhaskell accept.lhs + +You can run all tests despite failing tests, like so + +    cabal test --test-option=all + +You can pass extra options to haddock like so + +    cabal test --test-options='all --title="All Tests"' diff --git a/html-test/accept.lhs b/html-test/accept.lhs new file mode 100755 index 00000000..f6dfc4cd --- /dev/null +++ b/html-test/accept.lhs @@ -0,0 +1,49 @@ +#!/usr/bin/env runhaskell +\begin{code} +{-# LANGUAGE CPP #-} +import System.Cmd +import System.Environment +import System.FilePath +import System.Directory +import Data.List +import Control.Applicative + +baseDir = takeDirectory __FILE__ + +main :: IO () +main = do +  contents <- filter (not . ignore) <$> getDirectoryContents (baseDir </> "out") +  args <- getArgs +  if not $ null args then +    mapM_ copy [ baseDir </> "out" </> file | file <- contents, ".html" `isSuffixOf` file, takeBaseName file `elem` args  ] +  else +    mapM_ copy [ baseDir </> "out" </> file | file <- contents] +  where +    ignore = +      foldr (liftA2 (||)) (const False) [ +        (== ".") +      , (== "..") +      , (isPrefixOf "index") +      , (isPrefixOf "doc-index") +      ] + +copy :: FilePath -> IO () +copy file = do +  let new = baseDir </> "ref" </> takeFileName file +  if ".html" `isSuffixOf` file then do +    putStrLn (file ++ " -> " ++ new) +    stripLinks <$> readFile file >>= writeFile new +  else do +    -- copy css, images, etc. +    copyFile file new + +stripLinks :: String -> String +stripLinks str = +  let prefix = "<a href=\"" in +  case stripPrefix prefix str of +    Just str' -> prefix ++ stripLinks (dropWhile (/= '"') str') +    Nothing -> +      case str of +        [] -> [] +        x : xs -> x : stripLinks xs +\end{code} diff --git a/tests/html-tests/tests/A.html.ref b/html-test/ref/A.html index 424ce52c..9a60933e 100644 --- a/tests/html-tests/tests/A.html.ref +++ b/html-test/ref/A.html @@ -176,7 +176,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_A.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/html-test/ref/AdvanceTypes.html b/html-test/ref/AdvanceTypes.html new file mode 100644 index 00000000..c18e13fc --- /dev/null +++ b/html-test/ref/AdvanceTypes.html @@ -0,0 +1,97 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >AdvanceTypes</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();setSynopsis("mini_AdvanceTypes.html");}; +//]]> +</script +    ></head +  ><body +  ><div id="package-header" +    ><ul class="links" id="page-menu" +      ><li +	><a href="" +	  >Contents</a +	  ></li +	><li +	><a href="" +	  >Index</a +	  ></li +	></ul +      ><p class="caption empty" +      > </p +      ></div +    ><div id="content" +    ><div id="module-header" +      ><table class="info" +	><tr +	  ><th +	    >Safe Haskell</th +	    ><td +	    >None</td +	    ></tr +	  ></table +	><p class="caption" +	>AdvanceTypes</p +	></div +      ><div id="interface" +      ><h1 +	>Documentation</h1 +	><div class="top" +	><p class="src" +	  ><span class="keyword" +	    >data</span +	    >  <a name="t:Pattern" class="def" +	    >Pattern</a +	    >  <span class="keyword" +	    >where</span +	    ></p +	  ><div class="subs constructors" +	  ><p class="caption" +	    >Constructors</p +	    ><table +	    ><tr +	      ><td class="src" +		><a name="v:Nil" class="def" +		  >Nil</a +		  > ::  <a href="" +		  >Pattern</a +		  > `[]`</td +		><td class="doc empty" +		> </td +		></tr +	      ><tr +	      ><td class="src" +		><a name="v:Cons" class="def" +		  >Cons</a +		  > ::  <a href="" +		  >Maybe</a +		  > h -> <a href="" +		  >Pattern</a +		  > t -> <a href="" +		  >Pattern</a +		  > (h : t)</td +		><td class="doc empty" +		> </td +		></tr +	      ></table +	    ></div +	  ></div +	></div +      ></div +    ><div id="footer" +    ><p +      >Produced by <a href="" +	>Haddock</a +	> version 2.13.2</p +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/B.html.ref b/html-test/ref/B.html index 717df90f..050e89a8 100644 --- a/tests/html-tests/tests/B.html.ref +++ b/html-test/ref/B.html @@ -168,7 +168,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_B.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Bug1.html.ref b/html-test/ref/Bug1.html index aae1aaf9..72733816 100644 --- a/tests/html-tests/tests/Bug1.html.ref +++ b/html-test/ref/Bug1.html @@ -96,7 +96,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Bug1.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Bug2.html.ref b/html-test/ref/Bug2.html index eec3271b..a6a65b1e 100644 --- a/tests/html-tests/tests/Bug2.html.ref +++ b/html-test/ref/Bug2.html @@ -58,7 +58,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Bug2.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Bug3.html.ref b/html-test/ref/Bug3.html index 1c3190b4..2c32e070 100644 --- a/tests/html-tests/tests/Bug3.html.ref +++ b/html-test/ref/Bug3.html @@ -76,7 +76,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Bug3.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Bug4.html.ref b/html-test/ref/Bug4.html index f1cf4655..ba726c27 100644 --- a/tests/html-tests/tests/Bug4.html.ref +++ b/html-test/ref/Bug4.html @@ -75,7 +75,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Bug4.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Bug6.html.ref b/html-test/ref/Bug6.html index 8704feee..17fab740 100644 --- a/tests/html-tests/tests/Bug6.html.ref +++ b/html-test/ref/Bug6.html @@ -328,7 +328,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Bug6.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Bug7.html.ref b/html-test/ref/Bug7.html index 1b986241..a86a75c2 100644 --- a/tests/html-tests/tests/Bug7.html.ref +++ b/html-test/ref/Bug7.html @@ -166,7 +166,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Bug7.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Bug8.html.ref b/html-test/ref/Bug8.html index 35ab4f19..4655db6f 100644 --- a/tests/html-tests/tests/Bug8.html.ref +++ b/html-test/ref/Bug8.html @@ -124,7 +124,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Bug8.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/BugDeprecated.html.ref b/html-test/ref/BugDeprecated.html index d2771521..879b04fc 100644 --- a/tests/html-tests/tests/BugDeprecated.html.ref +++ b/html-test/ref/BugDeprecated.html @@ -96,7 +96,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugDeprecated.html");}  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for foo</p +	      >Deprecated: for foo +</p  	      ></div  	    ></div  	  ></div @@ -110,7 +111,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugDeprecated.html");}  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for baz</p +	      >Deprecated: for baz +</p  	      ></div  	    ></div  	  ></div @@ -124,7 +126,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugDeprecated.html");}  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for bar</p +	      >Deprecated: for bar +</p  	      ></div  	    ></div  	  ></div @@ -138,7 +141,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugDeprecated.html");}  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for one</p +	      >Deprecated: for one +</p  	      ></div  	    ><p  	    >some documentation for one, two and three @@ -155,7 +159,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugDeprecated.html");}  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for three</p +	      >Deprecated: for three +</p  	      ></div  	    ><p  	    >some documentation for one, two and three @@ -172,7 +177,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugDeprecated.html");}  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for two</p +	      >Deprecated: for two +</p  	      ></div  	    ><p  	    >some documentation for one, two and three @@ -185,7 +191,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugDeprecated.html");}      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/BugExportHeadings.html.ref b/html-test/ref/BugExportHeadings.html index d78dd469..4832d7fb 100644 --- a/tests/html-tests/tests/BugExportHeadings.html.ref +++ b/html-test/ref/BugExportHeadings.html @@ -166,7 +166,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugExportHeadings.html  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for one</p +	      >Deprecated: for one +</p  	      ></div  	    ></div  	  ></div @@ -183,7 +184,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugExportHeadings.html  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for two</p +	      >Deprecated: for two +</p  	      ></div  	    ></div  	  ></div @@ -200,7 +202,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugExportHeadings.html  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: for three</p +	      >Deprecated: for three +</p  	      ></div  	    ></div  	  ></div @@ -210,7 +213,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_BugExportHeadings.html      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Bugs.html.ref b/html-test/ref/Bugs.html index 7b57f021..96fbe9e8 100644 --- a/tests/html-tests/tests/Bugs.html.ref +++ b/html-test/ref/Bugs.html @@ -74,7 +74,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Bugs.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/CrossPackageDocs.html.ref b/html-test/ref/CrossPackageDocs.html index 3f054bfc..e2925558 100644 --- a/tests/html-tests/tests/CrossPackageDocs.html.ref +++ b/html-test/ref/CrossPackageDocs.html @@ -53,28 +53,16 @@ window.onload = function () {pageLoad();setSynopsis("mini_CrossPackageDocs.html"  	  ><span class="keyword"  	    >class</span  	    >  <a href="" -	    >Monad</a -	    > m  <span class="keyword" +	    >IsString</a +	    > a  <span class="keyword"  	    >where</span  	    ><ul class="subs"  	    ><li  	      ><a href="" -		>(>>=)</a -		> ::  m a -> (a -> m b) -> m b</li -	      ><li -	      ><a href="" -		>(>>)</a -		> ::  m a -> m b -> m b</li -	      ><li -	      ><a href="" -		>return</a -		> ::  a -> m a</li -	      ><li -	      ><a href="" -		>fail</a -		> ::  <a href="" +		>fromString</a +		> :: <a href=""  		>String</a -		> -> m a</li +		> -> a</li  	      ></ul  	    ></li  	  ><li class="src short" @@ -140,201 +128,39 @@ window.onload = function () {pageLoad();setSynopsis("mini_CrossPackageDocs.html"  	><p class="src"  	  ><span class="keyword"  	    >class</span -	    >  <a name="t:Monad" class="def" -	    >Monad</a -	    > m  <span class="keyword" +	    >  <a name="t:IsString" class="def" +	    >IsString</a +	    > a  <span class="keyword"  	    >where</span  	    ></p  	  ><div class="doc"  	  ><p -	    >The <code -	      ><a href="" -		>Monad</a -		></code -	      > class defines the basic operations over a <em -	      >monad</em -	      >, -a concept from a branch of mathematics known as <em -	      >category theory</em -	      >. -From the perspective of a Haskell programmer, however, it is best to -think of a monad as an <em -	      >abstract datatype</em -	      > of actions. -Haskell's <code -	      >do</code -	      > expressions provide a convenient syntax for writing -monadic expressions. -</p -	    ><p -	    >Minimal complete definition: <code -	      ><a href="" -		>>>=</a -		></code -	      > and <code -	      ><a href="" -		>return</a -		></code -	      >. -</p -	    ><p -	    >Instances of <code -	      ><a href="" -		>Monad</a -		></code -	      > should satisfy the following laws: -</p -	    ><pre -	    > return a >>= k  ==  k a - m >>= return  ==  m - m >>= (\x -> k x >>= h)  ==  (m >>= k) >>= h -</pre -	    ><p -	    >Instances of both <code -	      ><a href="" -		>Monad</a -		></code -	      > and <code -	      ><a href="" -		>Functor</a -		></code -	      > should additionally satisfy the law: -</p -	    ><pre -	    > fmap f xs  ==  xs >>= return . f -</pre -	    ><p -	    >The instances of <code -	      ><a href="" -		>Monad</a -		></code -	      > for lists, <code -	      ><a href="" -		>Maybe</a -		></code -	      > and <code -	      ><a href="" -		>IO</a -		></code -	      > -defined in the <a href="" -	      >Prelude</a -	      > satisfy these laws. +	    >Class for string-like datastructures; used by the overloaded string +   extension (-foverloaded-strings in GHC).  </p  	    ></div  	  ><div class="subs methods"  	  ><p class="caption"  	    >Methods</p  	    ><p class="src" -	    ><a name="v:-62--62--61-" class="def" -	      >(>>=)</a -	      > ::  m a -> (a -> m b) -> m b</p -	    ><div class="doc" -	    ><p -	      >Sequentially compose two actions, passing any value produced - by the first as an argument to the second. -</p -	      ></div -	    ><p class="src" -	    ><a name="v:-62--62-" class="def" -	      >(>>)</a -	      > ::  m a -> m b -> m b</p -	    ><div class="doc" -	    ><p -	      >Sequentially compose two actions, discarding any value produced - by the first, like sequencing operators (such as the semicolon) - in imperative languages. -</p -	      ></div -	    ><p class="src" -	    ><a name="v:return" class="def" -	      >return</a -	      > ::  a -> m a</p -	    ><div class="doc" -	    ><p -	      >Inject a value into the monadic type. -</p -	      ></div -	    ><p class="src" -	    ><a name="v:fail" class="def" -	      >fail</a -	      > ::  <a href="" +	    ><a name="v:fromString" class="def" +	      >fromString</a +	      > :: <a href=""  	      >String</a -	      > -> m a</p -	    ><div class="doc" -	    ><p -	      >Fail with a message.  This operation is not part of the - mathematical definition of a monad, but is invoked on pattern-match - failure in a <code -		>do</code -		> expression. -</p -	      ></div +	      > -> a</p  	    ></div  	  ><div class="subs instances" -	  ><p id="control.i:Monad" class="caption collapser" onclick="toggleSection('i:Monad')" +	  ><p id="control.i:IsString" class="caption collapser" onclick="toggleSection('i:IsString')"  	    >Instances</p -	    ><div id="section.i:Monad" class="show" +	    ><div id="section.i:IsString" class="show"  	    ><table  	      ><tr  		><td class="src"  		  ><a href="" -		    >Monad</a -		    > []</td -		  ><td class="doc empty" -		  > </td -		  ></tr -		><tr -		><td class="src" -		  ><a href="" -		    >Monad</a -		    > <a href="" -		    >IO</a -		    ></td -		  ><td class="doc empty" -		  > </td -		  ></tr -		><tr -		><td class="src" -		  ><a href="" -		    >Monad</a -		    > Q</td -		  ><td class="doc empty" -		  > </td -		  ></tr -		><tr -		><td class="src" -		  ><a href="" -		    >Monad</a -		    > <a href="" -		    >Maybe</a -		    ></td -		  ><td class="doc empty" -		  > </td -		  ></tr -		><tr -		><td class="src" -		  ><a href="" -		    >Monad</a -		    > PprM</td -		  ><td class="doc empty" -		  > </td -		  ></tr -		><tr -		><td class="src" -		  ><a href="" -		    >Monad</a -		    > ((->) r)</td -		  ><td class="doc empty" -		  > </td -		  ></tr -		><tr -		><td class="src" -		  ><a href="" -		    >Monad</a -		    > (<a href="" -		    >Either</a -		    > e)</td +		    >IsString</a +		    > [<a href="" +		    >Char</a +		    >]</td  		  ><td class="doc empty"  		  > </td  		  ></tr @@ -358,7 +184,11 @@ defined in the <a href=""  		  ></td  		><td class="doc"  		><p -		  >Filename of the executable +		  >Filename of the executable (see <code +		    ><a href="" +		      >proc</a +		      ></code +		    > for details)  </p  		  ></td  		></tr @@ -461,7 +291,7 @@ defined in the <a href=""      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/DeprecatedClass.html.ref b/html-test/ref/DeprecatedClass.html index 2648ccf2..f73216ba 100644 --- a/tests/html-tests/tests/DeprecatedClass.html.ref +++ b/html-test/ref/DeprecatedClass.html @@ -90,7 +90,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedClass.html")  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: SomeClass</p +	      >Deprecated: SomeClass +</p  	      ></div  	    ><p  	    >some class @@ -106,7 +107,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedClass.html")  	    ><div class="doc"  	    ><div class="warning"  	      ><p -		>Deprecated: foo</p +		>Deprecated: foo +</p  		></div  	      ><p  	      >documentation for foo @@ -126,7 +128,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedClass.html")  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: SomeOtherClass</p +	      >Deprecated: SomeOtherClass +</p  	      ></div  	    ></div  	  ><div class="subs methods" @@ -139,7 +142,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedClass.html")  	    ><div class="doc"  	    ><div class="warning"  	      ><p -		>Deprecated: bar</p +		>Deprecated: bar +</p  		></div  	      ></div  	    ></div @@ -150,7 +154,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedClass.html")      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/DeprecatedData.html.ref b/html-test/ref/DeprecatedData.html index 5d98f802..d1a29021 100644 --- a/tests/html-tests/tests/DeprecatedData.html.ref +++ b/html-test/ref/DeprecatedData.html @@ -92,7 +92,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedData.html");  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: Foo</p +	      >Deprecated: Foo +</p  	      ></div  	    ><p  	    >type Foo @@ -110,7 +111,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedData.html");  		><td class="doc"  		><div class="warning"  		  ><p -		    >Deprecated: Foo</p +		    >Deprecated: Foo +</p  		    ></div  		  ><p  		  >constructor Foo @@ -125,7 +127,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedData.html");  		><td class="doc"  		><div class="warning"  		  ><p -		    >Deprecated: Bar</p +		    >Deprecated: Bar +</p  		    ></div  		  ><p  		  >constructor Bar @@ -145,7 +148,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedData.html");  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: One</p +	      >Deprecated: One +</p  	      ></div  	    ></div  	  ><div class="subs constructors" @@ -160,7 +164,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedData.html");  		><td class="doc"  		><div class="warning"  		  ><p -		    >Deprecated: One</p +		    >Deprecated: One +</p  		    ></div  		  ></td  		></tr @@ -172,7 +177,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedData.html");  		><td class="doc"  		><div class="warning"  		  ><p -		    >Deprecated: Two</p +		    >Deprecated: Two +</p  		    ></div  		  ></td  		></tr @@ -185,7 +191,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedData.html");      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/html-test/ref/DeprecatedFunction.html b/html-test/ref/DeprecatedFunction.html new file mode 100644 index 00000000..8d0e7d6b --- /dev/null +++ b/html-test/ref/DeprecatedFunction.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >DeprecatedFunction</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction.html");}; +//]]> +</script +    ></head +  ><body +  ><div id="package-header" +    ><ul class="links" id="page-menu" +      ><li +	><a href="" +	  >Contents</a +	  ></li +	><li +	><a href="" +	  >Index</a +	  ></li +	></ul +      ><p class="caption empty" +      > </p +      ></div +    ><div id="content" +    ><div id="module-header" +      ><table class="info" +	><tr +	  ><th +	    >Safe Haskell</th +	    ><td +	    >None</td +	    ></tr +	  ></table +	><p class="caption" +	>DeprecatedFunction</p +	></div +      ><div id="synopsis" +      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')" +	>Synopsis</p +	><ul id="section.syn" class="hide" onclick="toggleSection('syn')" +	><li class="src short" +	  ><a href="" +	    >foo</a +	    > :: <a href="" +	    >Int</a +	    ></li +	  ><li class="src short" +	  ><a href="" +	    >bar</a +	    > :: <a href="" +	    >Int</a +	    ></li +	  ></ul +	></div +      ><div id="interface" +      ><h1 +	>Documentation</h1 +	><div class="top" +	><p class="src" +	  ><a name="v:foo" class="def" +	    >foo</a +	    > :: <a href="" +	    >Int</a +	    ></p +	  ><div class="doc" +	  ><div class="warning" +	    ><p +	      >Deprecated: use <code +		><a href="" +		  >bar</a +		  ></code +		> instead +</p +	      ></div +	    ><p +	    >some documentation for foo +</p +	    ></div +	  ></div +	><div class="top" +	><p class="src" +	  ><a name="v:bar" class="def" +	    >bar</a +	    > :: <a href="" +	    >Int</a +	    ></p +	  ><div class="doc" +	  ><p +	    >some documentation for bar +</p +	    ></div +	  ></div +	></div +      ></div +    ><div id="footer" +    ><p +      >Produced by <a href="" +	>Haddock</a +	> version 2.13.2</p +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/DeprecatedFunction2.html.ref b/html-test/ref/DeprecatedFunction2.html index c2ad3db8..9c7fd335 100644 --- a/tests/html-tests/tests/DeprecatedFunction2.html.ref +++ b/html-test/ref/DeprecatedFunction2.html @@ -66,7 +66,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction2.ht  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: use bar instead</p +	      >Deprecated: use bar instead +</p  	      ></div  	    ></div  	  ></div @@ -76,7 +77,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction2.ht      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/DeprecatedFunction3.html.ref b/html-test/ref/DeprecatedFunction3.html index d37af345..0db7b8be 100644 --- a/tests/html-tests/tests/DeprecatedFunction3.html.ref +++ b/html-test/ref/DeprecatedFunction3.html @@ -66,7 +66,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction3.ht  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: use bar instead</p +	      >Deprecated: use bar instead +</p  	      ></div  	    ></div  	  ></div @@ -76,7 +77,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction3.ht      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/DeprecatedModule.html.ref b/html-test/ref/DeprecatedModule.html index d35bba52..7ab5dcf8 100644 --- a/tests/html-tests/tests/DeprecatedModule.html.ref +++ b/html-test/ref/DeprecatedModule.html @@ -47,7 +47,10 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedModule.html"  	><div class="doc"  	><div class="warning"  	  ><p -	    >Deprecated: Use Foo instead</p +	    >Deprecated: Use <a href="" +	      >Foo</a +	      > instead +</p  	    ></div  	  ><p  	  >Documentation for <a href="" @@ -73,7 +76,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedModule.html"      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/DeprecatedModule2.html.ref b/html-test/ref/DeprecatedModule2.html index 1c9286df..f33e5681 100644 --- a/tests/html-tests/tests/DeprecatedModule2.html.ref +++ b/html-test/ref/DeprecatedModule2.html @@ -47,7 +47,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedModule2.html  	><div class="doc"  	><div class="warning"  	  ><p -	    >Deprecated: Use Foo instead</p +	    >Deprecated: Use Foo instead +</p  	    ></div  	  ></div  	></div @@ -68,7 +69,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedModule2.html      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/DeprecatedNewtype.html.ref b/html-test/ref/DeprecatedNewtype.html index 19581984..1cd59ab0 100644 --- a/tests/html-tests/tests/DeprecatedNewtype.html.ref +++ b/html-test/ref/DeprecatedNewtype.html @@ -80,7 +80,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedNewtype.html  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: SomeNewType</p +	      >Deprecated: SomeNewType +</p  	      ></div  	    ><p  	    >some documentation @@ -100,7 +101,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedNewtype.html  		><td class="doc"  		><div class="warning"  		  ><p -		    >Deprecated: SomeNewTypeConst</p +		    >Deprecated: SomeNewTypeConst +</p  		    ></div  		  ><p  		  >constructor docu  @@ -120,7 +122,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedNewtype.html  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: SomeOtherNewType</p +	      >Deprecated: SomeOtherNewType +</p  	      ></div  	    ></div  	  ><div class="subs constructors" @@ -137,7 +140,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedNewtype.html  		><td class="doc"  		><div class="warning"  		  ><p -		    >Deprecated: SomeOtherNewTypeConst</p +		    >Deprecated: SomeOtherNewTypeConst +</p  		    ></div  		  ></td  		></tr @@ -150,7 +154,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedNewtype.html      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/html-test/ref/DeprecatedReExport.html b/html-test/ref/DeprecatedReExport.html new file mode 100644 index 00000000..b75850c3 --- /dev/null +++ b/html-test/ref/DeprecatedReExport.html @@ -0,0 +1,133 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >DeprecatedReExport</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedReExport.html");}; +//]]> +</script +    ></head +  ><body +  ><div id="package-header" +    ><ul class="links" id="page-menu" +      ><li +	><a href="" +	  >Contents</a +	  ></li +	><li +	><a href="" +	  >Index</a +	  ></li +	></ul +      ><p class="caption empty" +      > </p +      ></div +    ><div id="content" +    ><div id="module-header" +      ><table class="info" +	><tr +	  ><th +	    >Safe Haskell</th +	    ><td +	    >None</td +	    ></tr +	  ></table +	><p class="caption" +	>DeprecatedReExport</p +	></div +      ><div id="table-of-contents" +      ><p class="caption" +	>Contents</p +	><ul +	><li +	  ><a href="" +	    >Re-exported from an other module +</a +	    ></li +	  ><li +	  ><a href="" +	    >Re-exported from an other package +</a +	    ></li +	  ></ul +	></div +      ><div id="description" +      ><p class="caption" +	>Description</p +	><div class="doc" +	><p +	  >What is tested here: +</p +	  ><ul +	  ><li +	    > Deprecation messages are shown for re-exported items. +</li +	    ></ul +	  ></div +	></div +      ><div id="synopsis" +      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')" +	>Synopsis</p +	><ul id="section.syn" class="hide" onclick="toggleSection('syn')" +	><li class="src short" +	  ><a href="" +	    >foo</a +	    > :: <a href="" +	    >Int</a +	    ></li +	  ></ul +	></div +      ><div id="interface" +      ><h1 id="g:1" +	>Re-exported from an other module +</h1 +	><div class="top" +	><p class="src" +	  ><a name="v:foo" class="def" +	    >foo</a +	    > :: <a href="" +	    >Int</a +	    ></p +	  ><div class="doc" +	  ><div class="warning" +	    ><p +	      >Deprecated: use <code +		><a href="" +		  >bar</a +		  ></code +		> instead +</p +	      ></div +	    ><p +	    >some documentation for foo +</p +	    ></div +	  ></div +	><h1 id="g:2" +	>Re-exported from an other package +</h1 +	><div class="doc" +	><p +	  >Not yet working, see <a href="" +	    >http://trac.haskell.org/haddock/ticket/223</a +	    > + , isEmptyChan +</p +	  ></div +	></div +      ></div +    ><div id="footer" +    ><p +      >Produced by <a href="" +	>Haddock</a +	> version 2.13.2</p +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/DeprecatedRecord.html.ref b/html-test/ref/DeprecatedRecord.html index d6648bc2..62d07c45 100644 --- a/tests/html-tests/tests/DeprecatedRecord.html.ref +++ b/html-test/ref/DeprecatedRecord.html @@ -122,7 +122,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedRecord.html"  		      ><dd class="doc"  		      ><div class="warning"  			><p -			  >Deprecated: do not use this</p +			  >Deprecated: do not use this +</p  			  ></div  			><p  			>some value @@ -143,7 +144,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedRecord.html"      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/DeprecatedTypeFamily.html.ref b/html-test/ref/DeprecatedTypeFamily.html index a29cef00..4b73c301 100644 --- a/tests/html-tests/tests/DeprecatedTypeFamily.html.ref +++ b/html-test/ref/DeprecatedTypeFamily.html @@ -72,7 +72,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedTypeFamily.h  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: SomeTypeFamily</p +	      >Deprecated: SomeTypeFamily +</p  	      ></div  	    ><p  	    >some documentation @@ -89,7 +90,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedTypeFamily.h  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: SomeOtherTypeFamily</p +	      >Deprecated: SomeOtherTypeFamily +</p  	      ></div  	    ></div  	  ></div @@ -99,7 +101,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedTypeFamily.h      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/DeprecatedTypeSynonym.html.ref b/html-test/ref/DeprecatedTypeSynonym.html index 89d6986e..c628316e 100644 --- a/tests/html-tests/tests/DeprecatedTypeSynonym.html.ref +++ b/html-test/ref/DeprecatedTypeSynonym.html @@ -78,7 +78,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedTypeSynonym.  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: TypeSyn</p +	      >Deprecated: TypeSyn +</p  	      ></div  	    ><p  	    >some documentation @@ -97,7 +98,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedTypeSynonym.  	  ><div class="doc"  	  ><div class="warning"  	    ><p -	      >Deprecated: OtherTypeSyn</p +	      >Deprecated: OtherTypeSyn +</p  	      ></div  	    ></div  	  ></div @@ -107,7 +109,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedTypeSynonym.      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/html-test/ref/DeprecationMessageParseError.html b/html-test/ref/DeprecationMessageParseError.html new file mode 100644 index 00000000..3d8f3cdf --- /dev/null +++ b/html-test/ref/DeprecationMessageParseError.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >DeprecationMessageParseError</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();setSynopsis("mini_DeprecationMessageParseError.html");}; +//]]> +</script +    ></head +  ><body +  ><div id="package-header" +    ><ul class="links" id="page-menu" +      ><li +	><a href="" +	  >Contents</a +	  ></li +	><li +	><a href="" +	  >Index</a +	  ></li +	></ul +      ><p class="caption empty" +      > </p +      ></div +    ><div id="content" +    ><div id="module-header" +      ><table class="info" +	><tr +	  ><th +	    >Safe Haskell</th +	    ><td +	    >None</td +	    ></tr +	  ></table +	><p class="caption" +	>DeprecationMessageParseError</p +	></div +      ><div id="description" +      ><p class="caption" +	>Description</p +	><div class="doc" +	><p +	  >What is tested here: +</p +	  ><ul +	  ><li +	    > If parsing of a deprecation message fails, the message is included +   verbatim. +</li +	    ></ul +	  ></div +	></div +      ><div id="synopsis" +      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')" +	>Synopsis</p +	><ul id="section.syn" class="hide" onclick="toggleSection('syn')" +	><li class="src short" +	  ><a href="" +	    >foo</a +	    > :: <a href="" +	    >Int</a +	    ></li +	  ></ul +	></div +      ><div id="interface" +      ><h1 +	>Documentation</h1 +	><div class="top" +	><p class="src" +	  ><a name="v:foo" class="def" +	    >foo</a +	    > :: <a href="" +	    >Int</a +	    ></p +	  ><div class="doc" +	  ><div class="warning" +	    ><p +	      >Deprecated: use @bar instead</p +	      ></div +	    ><p +	    >some documentation for foo +</p +	    ></div +	  ></div +	></div +      ></div +    ><div id="footer" +    ><p +      >Produced by <a href="" +	>Haddock</a +	> version 2.13.2</p +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/Examples.html.ref b/html-test/ref/Examples.html index 822d2fae..f9575eb9 100644 --- a/tests/html-tests/tests/Examples.html.ref +++ b/html-test/ref/Examples.html @@ -172,7 +172,7 @@ bar      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/FunArgs.html.ref b/html-test/ref/FunArgs.html index f9ce5ded..5c7d6c34 100644 --- a/tests/html-tests/tests/FunArgs.html.ref +++ b/html-test/ref/FunArgs.html @@ -105,9 +105,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_FunArgs.html");};  		></tr  	      ><tr  	      ><td class="src" -		>-> <a href="" -		  >()</a -		  ></td +		>-> ()</td  		><td class="doc"  		><p  		  >Result @@ -171,7 +169,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_FunArgs.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/GADTRecords.html.ref b/html-test/ref/GADTRecords.html index 44846423..a040c954 100644 --- a/tests/html-tests/tests/GADTRecords.html.ref +++ b/html-test/ref/GADTRecords.html @@ -227,7 +227,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_GADTRecords.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Hash.html.ref b/html-test/ref/Hash.html index d254a559..d5f87840 100644 --- a/tests/html-tests/tests/Hash.html.ref +++ b/html-test/ref/Hash.html @@ -113,9 +113,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Hash.html");};  	    >Hash</a  	    > key) => key -> val -> <a href=""  	    >IO</a -	    > <a href="" -	    >()</a -	    ></li +	    > ()</li  	  ><li class="src short"  	  ><a href=""  	    >lookup</a @@ -210,9 +208,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Hash.html");};  	    >Hash</a  	    > key) => key -> val -> <a href=""  	    >IO</a -	    > <a href="" -	    >()</a -	    ></p +	    > ()</p  	  ><div class="doc"  	  ><p  	    >Inserts a new element into the hash table @@ -334,7 +330,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Hash.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/html-test/ref/HiddenInstances.html b/html-test/ref/HiddenInstances.html new file mode 100644 index 00000000..4004a650 --- /dev/null +++ b/html-test/ref/HiddenInstances.html @@ -0,0 +1,169 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >HiddenInstances</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();setSynopsis("mini_HiddenInstances.html");}; +//]]> +</script +    ></head +  ><body +  ><div id="package-header" +    ><ul class="links" id="page-menu" +      ><li +	><a href="" +	  >Contents</a +	  ></li +	><li +	><a href="" +	  >Index</a +	  ></li +	></ul +      ><p class="caption empty" +      > </p +      ></div +    ><div id="content" +    ><div id="module-header" +      ><table class="info" +	><tr +	  ><th +	    >Safe Haskell</th +	    ><td +	    >None</td +	    ></tr +	  ></table +	><p class="caption" +	>HiddenInstances</p +	></div +      ><div id="synopsis" +      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')" +	>Synopsis</p +	><ul id="section.syn" class="hide" onclick="toggleSection('syn')" +	><li class="src short" +	  ><span class="keyword" +	    >class</span +	    >  <a href="" +	    >VisibleClass</a +	    > a </li +	  ><li class="src short" +	  ><span class="keyword" +	    >data</span +	    >  <a href="" +	    >VisibleData</a +	    > </li +	  ></ul +	></div +      ><div id="interface" +      ><h1 +	>Documentation</h1 +	><div class="top" +	><p class="src" +	  ><span class="keyword" +	    >class</span +	    >  <a name="t:VisibleClass" class="def" +	    >VisibleClass</a +	    > a </p +	  ><div class="doc" +	  ><p +	    >Should be visible +</p +	    ></div +	  ><div class="subs instances" +	  ><p id="control.i:VisibleClass" class="caption collapser" onclick="toggleSection('i:VisibleClass')" +	    >Instances</p +	    ><div id="section.i:VisibleClass" class="show" +	    ><table +	      ><tr +		><td class="src" +		  ><a href="" +		    >VisibleClass</a +		    > <a href="" +		    >Int</a +		    ></td +		  ><td class="doc" +		  ><p +		    >Should be visible +</p +		    ></td +		  ></tr +		><tr +		><td class="src" +		  ><a href="" +		    >VisibleClass</a +		    > <a href="" +		    >VisibleData</a +		    ></td +		  ><td class="doc" +		  ><p +		    >Should be visible +</p +		    ></td +		  ></tr +		></table +	      ></div +	    ></div +	  ></div +	><div class="top" +	><p class="src" +	  ><span class="keyword" +	    >data</span +	    >  <a name="t:VisibleData" class="def" +	    >VisibleData</a +	    >  </p +	  ><div class="doc" +	  ><p +	    >Should be visible +</p +	    ></div +	  ><div class="subs instances" +	  ><p id="control.i:VisibleData" class="caption collapser" onclick="toggleSection('i:VisibleData')" +	    >Instances</p +	    ><div id="section.i:VisibleData" class="show" +	    ><table +	      ><tr +		><td class="src" +		  ><a href="" +		    >Num</a +		    > <a href="" +		    >VisibleData</a +		    ></td +		  ><td class="doc" +		  ><p +		    >Should be visible +</p +		    ></td +		  ></tr +		><tr +		><td class="src" +		  ><a href="" +		    >VisibleClass</a +		    > <a href="" +		    >VisibleData</a +		    ></td +		  ><td class="doc" +		  ><p +		    >Should be visible +</p +		    ></td +		  ></tr +		></table +	      ></div +	    ></div +	  ></div +	></div +      ></div +    ><div id="footer" +    ><p +      >Produced by <a href="" +	>Haddock</a +	> version 2.13.2</p +      ></div +    ></body +  ></html +> diff --git a/html-test/ref/HiddenInstancesB.html b/html-test/ref/HiddenInstancesB.html new file mode 100644 index 00000000..2a0bdf32 --- /dev/null +++ b/html-test/ref/HiddenInstancesB.html @@ -0,0 +1,143 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >HiddenInstancesB</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();setSynopsis("mini_HiddenInstancesB.html");}; +//]]> +</script +    ></head +  ><body +  ><div id="package-header" +    ><ul class="links" id="page-menu" +      ><li +	><a href="" +	  >Contents</a +	  ></li +	><li +	><a href="" +	  >Index</a +	  ></li +	></ul +      ><p class="caption empty" +      > </p +      ></div +    ><div id="content" +    ><div id="module-header" +      ><table class="info" +	><tr +	  ><th +	    >Safe Haskell</th +	    ><td +	    >None</td +	    ></tr +	  ></table +	><p class="caption" +	>HiddenInstancesB</p +	></div +      ><div id="synopsis" +      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')" +	>Synopsis</p +	><ul id="section.syn" class="hide" onclick="toggleSection('syn')" +	><li class="src short" +	  ><span class="keyword" +	    >class</span +	    >  <a href="" +	    >Foo</a +	    > a </li +	  ><li class="src short" +	  ><span class="keyword" +	    >data</span +	    >  <a href="" +	    >Bar</a +	    > </li +	  ></ul +	></div +      ><div id="interface" +      ><h1 +	>Documentation</h1 +	><div class="top" +	><p class="src" +	  ><span class="keyword" +	    >class</span +	    >  <a name="t:Foo" class="def" +	    >Foo</a +	    > a </p +	  ><div class="doc" +	  ><p +	    >Should be visible +</p +	    ></div +	  ><div class="subs instances" +	  ><p id="control.i:Foo" class="caption collapser" onclick="toggleSection('i:Foo')" +	    >Instances</p +	    ><div id="section.i:Foo" class="show" +	    ><table +	      ><tr +		><td class="src" +		  ><a href="" +		    >Foo</a +		    > <a href="" +		    >Bar</a +		    ></td +		  ><td class="doc" +		  ><p +		    >Should be visible +</p +		    ></td +		  ></tr +		></table +	      ></div +	    ></div +	  ></div +	><div class="top" +	><p class="src" +	  ><span class="keyword" +	    >data</span +	    >  <a name="t:Bar" class="def" +	    >Bar</a +	    >  </p +	  ><div class="doc" +	  ><p +	    >Should be visible +</p +	    ></div +	  ><div class="subs instances" +	  ><p id="control.i:Bar" class="caption collapser" onclick="toggleSection('i:Bar')" +	    >Instances</p +	    ><div id="section.i:Bar" class="show" +	    ><table +	      ><tr +		><td class="src" +		  ><a href="" +		    >Foo</a +		    > <a href="" +		    >Bar</a +		    ></td +		  ><td class="doc" +		  ><p +		    >Should be visible +</p +		    ></td +		  ></tr +		></table +	      ></div +	    ></div +	  ></div +	></div +      ></div +    ><div id="footer" +    ><p +      >Produced by <a href="" +	>Haddock</a +	> version 2.13.2</p +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/DeprecatedFunction.html.ref b/html-test/ref/Hyperlinks.html index d16345a6..6224c9b5 100644 --- a/tests/html-tests/tests/DeprecatedFunction.html.ref +++ b/html-test/ref/Hyperlinks.html @@ -3,13 +3,13 @@  ><head    ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"       /><title -    >DeprecatedFunction</title +    >Hyperlinks</title      ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"       /><script src="haddock-util.js" type="text/javascript"      ></script      ><script type="text/javascript"      >//<![CDATA[ -window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction.html");}; +window.onload = function () {pageLoad();setSynopsis("mini_Hyperlinks.html");};  //]]>  </script      ></head @@ -39,7 +39,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction.htm  	    ></tr  	  ></table  	><p class="caption" -	>DeprecatedFunction</p +	>Hyperlinks</p  	></div        ><div id="synopsis"        ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')" @@ -64,12 +64,15 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction.htm  	    >Int</a  	    ></p  	  ><div class="doc" -	  ><div class="warning" -	    ><p -	      >Deprecated: use bar instead</p -	      ></div +	  ><p +	    >A plain URL: <a href="" +	      >http://example.com/</a +	      > +</p  	    ><p -	    >some documentation foo +	    >A URL with a label: <a href="" +	      >some link</a +	      >  </p  	    ></div  	  ></div @@ -79,7 +82,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_DeprecatedFunction.htm      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/IgnoreExports.html.ref b/html-test/ref/IgnoreExports.html index b70cd789..15a081fd 100644 --- a/tests/html-tests/tests/IgnoreExports.html.ref +++ b/html-test/ref/IgnoreExports.html @@ -94,7 +94,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_IgnoreExports.html");}      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/ModuleWithWarning.html.ref b/html-test/ref/ModuleWithWarning.html index c36a021d..97120c60 100644 --- a/tests/html-tests/tests/ModuleWithWarning.html.ref +++ b/html-test/ref/ModuleWithWarning.html @@ -47,7 +47,10 @@ window.onload = function () {pageLoad();setSynopsis("mini_ModuleWithWarning.html  	><div class="doc"  	><div class="warning"  	  ><p -	    >Warning: This is an unstable interface.</p +	    >Warning: This is an unstable interface.  Prefer functions from <a href="" +	      >Prelude</a +	      > instead! +</p  	    ></div  	  ><p  	  >Documentation for <a href="" @@ -73,7 +76,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_ModuleWithWarning.html      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/NamedDoc.html.ref b/html-test/ref/NamedDoc.html index ab864d89..9974486b 100644 --- a/tests/html-tests/tests/NamedDoc.html.ref +++ b/html-test/ref/NamedDoc.html @@ -61,7 +61,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_NamedDoc.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/NoLayout.html.ref b/html-test/ref/NoLayout.html index ee0e4b90..e0e6d2cd 100644 --- a/tests/html-tests/tests/NoLayout.html.ref +++ b/html-test/ref/NoLayout.html @@ -79,7 +79,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_NoLayout.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/NonGreedy.html.ref b/html-test/ref/NonGreedy.html index 93032fee..4b7d60e1 100644 --- a/tests/html-tests/tests/NonGreedy.html.ref +++ b/html-test/ref/NonGreedy.html @@ -75,7 +75,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_NonGreedy.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/html-test/ref/Properties.html b/html-test/ref/Properties.html new file mode 100644 index 00000000..a12c4c78 --- /dev/null +++ b/html-test/ref/Properties.html @@ -0,0 +1,92 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >Properties</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();setSynopsis("mini_Properties.html");}; +//]]> +</script +    ></head +  ><body +  ><div id="package-header" +    ><ul class="links" id="page-menu" +      ><li +	><a href="" +	  >Contents</a +	  ></li +	><li +	><a href="" +	  >Index</a +	  ></li +	></ul +      ><p class="caption empty" +      > </p +      ></div +    ><div id="content" +    ><div id="module-header" +      ><table class="info" +	><tr +	  ><th +	    >Safe Haskell</th +	    ><td +	    >None</td +	    ></tr +	  ></table +	><p class="caption" +	>Properties</p +	></div +      ><div id="synopsis" +      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')" +	>Synopsis</p +	><ul id="section.syn" class="hide" onclick="toggleSection('syn')" +	><li class="src short" +	  ><a href="" +	    >fib</a +	    > :: <a href="" +	    >Integer</a +	    > -> <a href="" +	    >Integer</a +	    ></li +	  ></ul +	></div +      ><div id="interface" +      ><h1 +	>Documentation</h1 +	><div class="top" +	><p class="src" +	  ><a name="v:fib" class="def" +	    >fib</a +	    > :: <a href="" +	    >Integer</a +	    > -> <a href="" +	    >Integer</a +	    ></p +	  ><div class="doc" +	  ><p +	    >Fibonacci number of given <code +	      ><a href="" +		>Integer</a +		></code +	      >. +</p +	    ><pre +	    >fib n <= fib (n + 1)</pre +	    ></div +	  ></div +	></div +      ></div +    ><div id="footer" +    ><p +      >Produced by <a href="" +	>Haddock</a +	> version 2.13.2</p +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/PruneWithWarning.html.ref b/html-test/ref/PruneWithWarning.html index 7fe3edf1..b84bca9b 100644 --- a/tests/html-tests/tests/PruneWithWarning.html.ref +++ b/html-test/ref/PruneWithWarning.html @@ -41,6 +41,23 @@ window.onload = function () {pageLoad();setSynopsis("mini_PruneWithWarning.html"  	><p class="caption"  	>PruneWithWarning</p  	></div +      ><div id="description" +      ><p class="caption" +	>Description</p +	><div class="doc" +	><p +	  >What is tested here: +</p +	  ><ul +	  ><li +	    > If a binding has a deprecation message but no documentation, it is pruned +   when <code +	      >OPTIONS_HADDOCK prune</code +	      > is used. +</li +	    ></ul +	  ></div +	></div        ><div id="interface"        ></div        ></div @@ -48,7 +65,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_PruneWithWarning.html"      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/QuasiExpr.html.ref b/html-test/ref/QuasiExpr.html index 7b680d4f..b6c24d0b 100644 --- a/tests/html-tests/tests/QuasiExpr.html.ref +++ b/html-test/ref/QuasiExpr.html @@ -214,7 +214,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_QuasiExpr.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/QuasiQuote.html.ref b/html-test/ref/QuasiQuote.html index 93b0fb90..c85cbcbd 100644 --- a/tests/html-tests/tests/QuasiQuote.html.ref +++ b/html-test/ref/QuasiQuote.html @@ -58,7 +58,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_QuasiQuote.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/html-test/ref/SpuriousSuperclassConstraints.html b/html-test/ref/SpuriousSuperclassConstraints.html new file mode 100644 index 00000000..bc7184d0 --- /dev/null +++ b/html-test/ref/SpuriousSuperclassConstraints.html @@ -0,0 +1,128 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >SpuriousSuperclassConstraints</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();setSynopsis("mini_SpuriousSuperclassConstraints.html");}; +//]]> +</script +    ></head +  ><body +  ><div id="package-header" +    ><ul class="links" id="page-menu" +      ><li +	><a href="" +	  >Contents</a +	  ></li +	><li +	><a href="" +	  >Index</a +	  ></li +	></ul +      ><p class="caption empty" +      > </p +      ></div +    ><div id="content" +    ><div id="module-header" +      ><table class="info" +	><tr +	  ><th +	    >Safe Haskell</th +	    ><td +	    >None</td +	    ></tr +	  ></table +	><p class="caption" +	>SpuriousSuperclassConstraints</p +	></div +      ><div id="description" +      ><p class="caption" +	>Description</p +	><div class="doc" +	><p +	  >What is tested here: +</p +	  ><p +	  >Due to a change in GHC 7.6.1 we had a bug that superclass contraints were + included in the instances list.  Edward K. repported it here: +</p +	  ><p +	  ><a href="" +	    >http://www.haskell.org/pipermail/haskell-cafe/2012-September/103600.html</a +	    > +</p +	  ><p +	  >And here is the corresponding theard on glasgow-haskell-users: +</p +	  ><p +	  ><a href="" +	    >http://www.haskell.org/pipermail/glasgow-haskell-users/2012-September/022914.html</a +	    > +</p +	  ><p +	  >It has been fixed in: +</p +	  ><pre +	  > 6ccf78e15a525282fef61bc4f58a279aa9c21771 + Fix spurious superclass constraints bug. +</pre +	  ></div +	></div +      ><div id="interface" +      ><h1 +	>Documentation</h1 +	><div class="top" +	><p class="src" +	  ><span class="keyword" +	    >data</span +	    >  <a name="t:SomeType" class="def" +	    >SomeType</a +	    > f a </p +	  ><div class="subs instances" +	  ><p id="control.i:SomeType" class="caption collapser" onclick="toggleSection('i:SomeType')" +	    >Instances</p +	    ><div id="section.i:SomeType" class="show" +	    ><table +	      ><tr +		><td class="src" +		  ><a href="" +		    >Functor</a +		    > (<a href="" +		    >SomeType</a +		    > f)</td +		  ><td class="doc empty" +		  > </td +		  ></tr +		><tr +		><td class="src" +		  ><a href="" +		    >Applicative</a +		    > f => <a href="" +		    >Applicative</a +		    > (<a href="" +		    >SomeType</a +		    > f)</td +		  ><td class="doc empty" +		  > </td +		  ></tr +		></table +	      ></div +	    ></div +	  ></div +	></div +      ></div +    ><div id="footer" +    ><p +      >Produced by <a href="" +	>Haddock</a +	> version 2.13.2</p +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/TH.html.ref b/html-test/ref/TH.html index 804812e6..8d02c280 100644 --- a/tests/html-tests/tests/TH.html.ref +++ b/html-test/ref/TH.html @@ -56,7 +56,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_TH.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/TH2.html.ref b/html-test/ref/TH2.html index 55e18d73..7ef0ffe5 100644 --- a/tests/html-tests/tests/TH2.html.ref +++ b/html-test/ref/TH2.html @@ -56,7 +56,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_TH2.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Test.html.ref b/html-test/ref/Test.html index 83167477..55fdc6fc 100644 --- a/tests/html-tests/tests/Test.html.ref +++ b/html-test/ref/Test.html @@ -410,11 +410,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Test.html");};  		    >Float</a  		    > -> <a href=""  		    >T5</a -		    > <a href="" -		    >()</a -		    > <a href="" -		    >()</a -		    ></li +		    > () ()</li  		  ><li  		  ><a href=""  		    >u</a @@ -590,11 +586,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Test.html");};  	    >k</a  	    > :: <a href=""  	    >T</a -	    > <a href="" -	    >()</a -	    > <a href="" -	    >()</a -	    > -> <a href="" +	    > () () -> <a href=""  	    >T2</a  	    > <a href=""  	    >Int</a @@ -614,15 +606,9 @@ window.onload = function () {pageLoad();setSynopsis("mini_Test.html");};  	    >Float</a  	    >) -> <a href=""  	    >T5</a -	    > <a href="" -	    >()</a -	    > <a href="" -	    >()</a -	    > -> <a href="" +	    > () () -> <a href=""  	    >IO</a -	    > <a href="" -	    >()</a -	    ></li +	    > ()</li  	  ><li class="src short"  	  ><a href=""  	    >l</a @@ -642,9 +628,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Test.html");};  	    >R</a  	    > -> <a href=""  	    >N1</a -	    > <a href="" -	    >()</a -	    > -> <a href="" +	    > () -> <a href=""  	    >IO</a  	    > <a href=""  	    >Int</a @@ -1391,11 +1375,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Test.html");};  			>Float</a  			> -> <a href=""  			>T5</a -			> <a href="" -			>()</a -			> <a href="" -			>()</a -			></dt +			> () ()</dt  		      ><dd class="doc empty"  		      > </dd  		      ><dt class="src" @@ -1981,11 +1961,7 @@ test2  	      ><td class="src"  		>:: <a href=""  		  >T</a -		  > <a href="" -		  >()</a -		  > <a href="" -		  >()</a -		  ></td +		  > () ()</td  		><td class="doc"  		><p  		  >This argument has type <code @@ -2038,11 +2014,7 @@ test2  	      ><td class="src"  		>-> <a href=""  		  >T5</a -		  > <a href="" -		  >()</a -		  > <a href="" -		  >()</a -		  ></td +		  > () ()</td  		><td class="doc"  		><p  		  >This argument has a very long description that should @@ -2055,9 +2027,7 @@ test2  	      ><td class="src"  		>-> <a href=""  		  >IO</a -		  > <a href="" -		  >()</a -		  ></td +		  > ()</td  		><td class="doc"  		><p  		  >This is the result type @@ -2135,9 +2105,7 @@ test2  	      ><td class="src"  		>-> <a href=""  		  >N1</a -		  > <a href="" -		  >()</a -		  ></td +		  > ()</td  		><td class="doc"  		><p  		  >one of the arguments @@ -2270,7 +2238,7 @@ test2      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Ticket112.html.ref b/html-test/ref/Ticket112.html index b0002d8f..91aa3c90 100644 --- a/tests/html-tests/tests/Ticket112.html.ref +++ b/html-test/ref/Ticket112.html @@ -75,7 +75,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Ticket112.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Ticket61.html.ref b/html-test/ref/Ticket61.html index db570a15..41ec91ba 100644 --- a/tests/html-tests/tests/Ticket61.html.ref +++ b/html-test/ref/Ticket61.html @@ -73,7 +73,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Ticket61.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Ticket75.html.ref b/html-test/ref/Ticket75.html index eb77dcec..bfbbbc73 100644 --- a/tests/html-tests/tests/Ticket75.html.ref +++ b/html-test/ref/Ticket75.html @@ -109,7 +109,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Ticket75.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/TypeFamilies.html.ref b/html-test/ref/TypeFamilies.html index 0d3c4e47..88efdee5 100644 --- a/tests/html-tests/tests/TypeFamilies.html.ref +++ b/html-test/ref/TypeFamilies.html @@ -205,7 +205,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/TypeOperators.html.ref b/html-test/ref/TypeOperators.html index 022245d3..8329bab2 100644 --- a/tests/html-tests/tests/TypeOperators.html.ref +++ b/html-test/ref/TypeOperators.html @@ -94,20 +94,6 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeOperators.html");}  	    > ::  (g `<a href=""  	    >O</a  	    >` f) a</li -	  ><li class="src short" -	  ><span class="keyword" -	    >newtype</span -	    >  <a href="" -	    >Flip</a -	    > (~>) b a = <a href="" -	    >Flip</a -	    > {<ul class="subs" -	    ><li -	      ><a href="" -		>unFlip</a -		> :: a ~> b</li -	      ></ul -	    >}</li  	  ></ul  	></div        ><div id="interface" @@ -186,53 +172,13 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeOperators.html");}  	    >O</a  	    >` f) a</p  	  ></div -	><div class="top" -	><p class="src" -	  ><span class="keyword" -	    >newtype</span -	    >  <a name="t:Flip" class="def" -	    >Flip</a -	    > (~>) b a </p -	  ><div class="subs constructors" -	  ><p class="caption" -	    >Constructors</p -	    ><table -	    ><tr -	      ><td class="src" -		><a name="v:Flip" class="def" -		  >Flip</a -		  ></td -		><td class="doc empty" -		> </td -		></tr -	      ><tr -	      ><td colspan="2" -		><div class="subs fields" -		  ><p class="caption" -		    >Fields</p -		    ><dl -		    ><dt class="src" -		      ><a name="v:unFlip" class="def" -			>unFlip</a -			> :: a ~> b</dt -		      ><dd class="doc empty" -		      > </dd -		      ></dl -		    ><div class="clear" -		    ></div -		    ></div -		  ></td -		></tr -	      ></table -	    ></div -	  ></div  	></div        ></div      ><div id="footer"      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Unicode.html.ref b/html-test/ref/Unicode.html index 7c72e845..110b0a7d 100644 --- a/tests/html-tests/tests/Unicode.html.ref +++ b/html-test/ref/Unicode.html @@ -75,7 +75,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Unicode.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/tests/html-tests/tests/Visible.html.ref b/html-test/ref/Visible.html index 0c0cd4ec..adbca598 100644 --- a/tests/html-tests/tests/Visible.html.ref +++ b/html-test/ref/Visible.html @@ -60,7 +60,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Visible.html");};      ><p        >Produced by <a href=""  	>Haddock</a -	> version 2.11.0</p +	> version 2.13.2</p        ></div      ></body    ></html diff --git a/html/frames.html b/html-test/ref/frames.html index 1b4e38d4..1b4e38d4 100644 --- a/html/frames.html +++ b/html-test/ref/frames.html diff --git a/html/haddock-util.js b/html-test/ref/haddock-util.js index 9a6fccf7..9a6fccf7 100644 --- a/html/haddock-util.js +++ b/html-test/ref/haddock-util.js diff --git a/html/Ocean.std-theme/hslogo-16.png b/html-test/ref/hslogo-16.png Binary files differindex 0ff8579f..0ff8579f 100644 --- a/html/Ocean.std-theme/hslogo-16.png +++ b/html-test/ref/hslogo-16.png diff --git a/tests/html-tests/tests/mini_A.html.ref b/html-test/ref/mini_A.html index cbe50e41..cbe50e41 100644 --- a/tests/html-tests/tests/mini_A.html.ref +++ b/html-test/ref/mini_A.html diff --git a/html-test/ref/mini_AdvanceTypes.html b/html-test/ref/mini_AdvanceTypes.html new file mode 100644 index 00000000..59d8dcb1 --- /dev/null +++ b/html-test/ref/mini_AdvanceTypes.html @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >AdvanceTypes</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();}; +//]]> +</script +    ></head +  ><body id="mini" +  ><div id="module-header" +    ><p class="caption" +      >AdvanceTypes</p +      ></div +    ><div id="interface" +    ><div class="top" +      ><p class="src" +	><span class="keyword" +	  >data</span +	  > <a href="" target="main" +	  >Pattern</a +	  > </p +	></div +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/mini_B.html.ref b/html-test/ref/mini_B.html index 211a7deb..211a7deb 100644 --- a/tests/html-tests/tests/mini_B.html.ref +++ b/html-test/ref/mini_B.html diff --git a/tests/html-tests/tests/mini_Bug1.html.ref b/html-test/ref/mini_Bug1.html index adf81c73..adf81c73 100644 --- a/tests/html-tests/tests/mini_Bug1.html.ref +++ b/html-test/ref/mini_Bug1.html diff --git a/tests/html-tests/tests/mini_Bug2.html.ref b/html-test/ref/mini_Bug2.html index b673e459..b673e459 100644 --- a/tests/html-tests/tests/mini_Bug2.html.ref +++ b/html-test/ref/mini_Bug2.html diff --git a/tests/html-tests/tests/mini_Bug3.html.ref b/html-test/ref/mini_Bug3.html index af4cc445..af4cc445 100644 --- a/tests/html-tests/tests/mini_Bug3.html.ref +++ b/html-test/ref/mini_Bug3.html diff --git a/tests/html-tests/tests/mini_Bug4.html.ref b/html-test/ref/mini_Bug4.html index b403e94a..b403e94a 100644 --- a/tests/html-tests/tests/mini_Bug4.html.ref +++ b/html-test/ref/mini_Bug4.html diff --git a/tests/html-tests/tests/mini_Bug6.html.ref b/html-test/ref/mini_Bug6.html index 5c5c1119..5c5c1119 100644 --- a/tests/html-tests/tests/mini_Bug6.html.ref +++ b/html-test/ref/mini_Bug6.html diff --git a/tests/html-tests/tests/mini_Bug7.html.ref b/html-test/ref/mini_Bug7.html index 1bec82ee..1bec82ee 100644 --- a/tests/html-tests/tests/mini_Bug7.html.ref +++ b/html-test/ref/mini_Bug7.html diff --git a/tests/html-tests/tests/mini_Bug8.html.ref b/html-test/ref/mini_Bug8.html index 070dbcf8..070dbcf8 100644 --- a/tests/html-tests/tests/mini_Bug8.html.ref +++ b/html-test/ref/mini_Bug8.html diff --git a/tests/html-tests/tests/mini_BugDeprecated.html.ref b/html-test/ref/mini_BugDeprecated.html index f0410137..f0410137 100644 --- a/tests/html-tests/tests/mini_BugDeprecated.html.ref +++ b/html-test/ref/mini_BugDeprecated.html diff --git a/tests/html-tests/tests/mini_BugExportHeadings.html.ref b/html-test/ref/mini_BugExportHeadings.html index b481720d..b481720d 100644 --- a/tests/html-tests/tests/mini_BugExportHeadings.html.ref +++ b/html-test/ref/mini_BugExportHeadings.html diff --git a/tests/html-tests/tests/mini_Bugs.html.ref b/html-test/ref/mini_Bugs.html index 3c758375..3c758375 100644 --- a/tests/html-tests/tests/mini_Bugs.html.ref +++ b/html-test/ref/mini_Bugs.html diff --git a/tests/html-tests/tests/mini_CrossPackageDocs.html.ref b/html-test/ref/mini_CrossPackageDocs.html index 9d957c1e..4c0588ba 100644 --- a/tests/html-tests/tests/mini_CrossPackageDocs.html.ref +++ b/html-test/ref/mini_CrossPackageDocs.html @@ -30,8 +30,8 @@ window.onload = function () {pageLoad();};  	><span class="keyword"  	  >class</span  	  > <a href="" target="main" -	  >Monad</a -	  > m</p +	  >IsString</a +	  > a</p  	></div        ><div class="top"        ><p class="src" diff --git a/tests/html-tests/tests/mini_DeprecatedClass.html.ref b/html-test/ref/mini_DeprecatedClass.html index 3923c1ff..3923c1ff 100644 --- a/tests/html-tests/tests/mini_DeprecatedClass.html.ref +++ b/html-test/ref/mini_DeprecatedClass.html diff --git a/tests/html-tests/tests/mini_DeprecatedData.html.ref b/html-test/ref/mini_DeprecatedData.html index 8ef20113..8ef20113 100644 --- a/tests/html-tests/tests/mini_DeprecatedData.html.ref +++ b/html-test/ref/mini_DeprecatedData.html diff --git a/html-test/ref/mini_DeprecatedFunction.html b/html-test/ref/mini_DeprecatedFunction.html new file mode 100644 index 00000000..9bb90dac --- /dev/null +++ b/html-test/ref/mini_DeprecatedFunction.html @@ -0,0 +1,37 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >DeprecatedFunction</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();}; +//]]> +</script +    ></head +  ><body id="mini" +  ><div id="module-header" +    ><p class="caption" +      >DeprecatedFunction</p +      ></div +    ><div id="interface" +    ><div class="top" +      ><p class="src" +	><a href="" target="main" +	  >foo</a +	  ></p +	></div +      ><div class="top" +      ><p class="src" +	><a href="" target="main" +	  >bar</a +	  ></p +	></div +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/mini_DeprecatedFunction2.html.ref b/html-test/ref/mini_DeprecatedFunction2.html index a03991a9..a03991a9 100644 --- a/tests/html-tests/tests/mini_DeprecatedFunction2.html.ref +++ b/html-test/ref/mini_DeprecatedFunction2.html diff --git a/tests/html-tests/tests/mini_DeprecatedFunction3.html.ref b/html-test/ref/mini_DeprecatedFunction3.html index 4ea60339..4ea60339 100644 --- a/tests/html-tests/tests/mini_DeprecatedFunction3.html.ref +++ b/html-test/ref/mini_DeprecatedFunction3.html diff --git a/tests/html-tests/tests/mini_DeprecatedModule.html.ref b/html-test/ref/mini_DeprecatedModule.html index bfdef611..bfdef611 100644 --- a/tests/html-tests/tests/mini_DeprecatedModule.html.ref +++ b/html-test/ref/mini_DeprecatedModule.html diff --git a/tests/html-tests/tests/mini_DeprecatedModule2.html.ref b/html-test/ref/mini_DeprecatedModule2.html index dbcc43b9..dbcc43b9 100644 --- a/tests/html-tests/tests/mini_DeprecatedModule2.html.ref +++ b/html-test/ref/mini_DeprecatedModule2.html diff --git a/tests/html-tests/tests/mini_DeprecatedNewtype.html.ref b/html-test/ref/mini_DeprecatedNewtype.html index a913525f..a913525f 100644 --- a/tests/html-tests/tests/mini_DeprecatedNewtype.html.ref +++ b/html-test/ref/mini_DeprecatedNewtype.html diff --git a/html-test/ref/mini_DeprecatedReExport.html b/html-test/ref/mini_DeprecatedReExport.html new file mode 100644 index 00000000..8316dda5 --- /dev/null +++ b/html-test/ref/mini_DeprecatedReExport.html @@ -0,0 +1,37 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >DeprecatedReExport</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();}; +//]]> +</script +    ></head +  ><body id="mini" +  ><div id="module-header" +    ><p class="caption" +      >DeprecatedReExport</p +      ></div +    ><div id="interface" +    ><h1 +      >Re-exported from an other module +</h1 +      ><div class="top" +      ><p class="src" +	><a href="" target="main" +	  >foo</a +	  ></p +	></div +      ><h1 +      >Re-exported from an other package +</h1 +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/mini_DeprecatedRecord.html.ref b/html-test/ref/mini_DeprecatedRecord.html index 3d949d2d..3d949d2d 100644 --- a/tests/html-tests/tests/mini_DeprecatedRecord.html.ref +++ b/html-test/ref/mini_DeprecatedRecord.html diff --git a/tests/html-tests/tests/mini_DeprecatedTypeFamily.html.ref b/html-test/ref/mini_DeprecatedTypeFamily.html index c87d9637..c87d9637 100644 --- a/tests/html-tests/tests/mini_DeprecatedTypeFamily.html.ref +++ b/html-test/ref/mini_DeprecatedTypeFamily.html diff --git a/tests/html-tests/tests/mini_DeprecatedTypeSynonym.html.ref b/html-test/ref/mini_DeprecatedTypeSynonym.html index 5ade100d..5ade100d 100644 --- a/tests/html-tests/tests/mini_DeprecatedTypeSynonym.html.ref +++ b/html-test/ref/mini_DeprecatedTypeSynonym.html diff --git a/html-test/ref/mini_DeprecationMessageParseError.html b/html-test/ref/mini_DeprecationMessageParseError.html new file mode 100644 index 00000000..e52f487f --- /dev/null +++ b/html-test/ref/mini_DeprecationMessageParseError.html @@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >DeprecationMessageParseError</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();}; +//]]> +</script +    ></head +  ><body id="mini" +  ><div id="module-header" +    ><p class="caption" +      >DeprecationMessageParseError</p +      ></div +    ><div id="interface" +    ><div class="top" +      ><p class="src" +	><a href="" target="main" +	  >foo</a +	  ></p +	></div +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/mini_Examples.html.ref b/html-test/ref/mini_Examples.html index c99c2c48..c99c2c48 100644 --- a/tests/html-tests/tests/mini_Examples.html.ref +++ b/html-test/ref/mini_Examples.html diff --git a/tests/html-tests/tests/mini_FunArgs.html.ref b/html-test/ref/mini_FunArgs.html index 89729720..89729720 100644 --- a/tests/html-tests/tests/mini_FunArgs.html.ref +++ b/html-test/ref/mini_FunArgs.html diff --git a/tests/html-tests/tests/mini_GADTRecords.html.ref b/html-test/ref/mini_GADTRecords.html index a8b838f0..a8b838f0 100644 --- a/tests/html-tests/tests/mini_GADTRecords.html.ref +++ b/html-test/ref/mini_GADTRecords.html diff --git a/tests/html-tests/tests/mini_Hash.html.ref b/html-test/ref/mini_Hash.html index 1e6ad1a9..1e6ad1a9 100644 --- a/tests/html-tests/tests/mini_Hash.html.ref +++ b/html-test/ref/mini_Hash.html diff --git a/html-test/ref/mini_HiddenInstances.html b/html-test/ref/mini_HiddenInstances.html new file mode 100644 index 00000000..0f1a2e04 --- /dev/null +++ b/html-test/ref/mini_HiddenInstances.html @@ -0,0 +1,41 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >HiddenInstances</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();}; +//]]> +</script +    ></head +  ><body id="mini" +  ><div id="module-header" +    ><p class="caption" +      >HiddenInstances</p +      ></div +    ><div id="interface" +    ><div class="top" +      ><p class="src" +	><span class="keyword" +	  >class</span +	  > <a href="" target="main" +	  >VisibleClass</a +	  > a</p +	></div +      ><div class="top" +      ><p class="src" +	><span class="keyword" +	  >data</span +	  > <a href="" target="main" +	  >VisibleData</a +	  > </p +	></div +      ></div +    ></body +  ></html +> diff --git a/html-test/ref/mini_HiddenInstancesB.html b/html-test/ref/mini_HiddenInstancesB.html new file mode 100644 index 00000000..3ce4f6a9 --- /dev/null +++ b/html-test/ref/mini_HiddenInstancesB.html @@ -0,0 +1,41 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >HiddenInstancesB</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();}; +//]]> +</script +    ></head +  ><body id="mini" +  ><div id="module-header" +    ><p class="caption" +      >HiddenInstancesB</p +      ></div +    ><div id="interface" +    ><div class="top" +      ><p class="src" +	><span class="keyword" +	  >class</span +	  > <a href="" target="main" +	  >Foo</a +	  > a</p +	></div +      ><div class="top" +      ><p class="src" +	><span class="keyword" +	  >data</span +	  > <a href="" target="main" +	  >Bar</a +	  > </p +	></div +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/mini_DeprecatedFunction.html.ref b/html-test/ref/mini_Hyperlinks.html index 17d3e526..f0c7d65a 100644 --- a/tests/html-tests/tests/mini_DeprecatedFunction.html.ref +++ b/html-test/ref/mini_Hyperlinks.html @@ -3,7 +3,7 @@  ><head    ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"       /><title -    >DeprecatedFunction</title +    >Hyperlinks</title      ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"       /><script src="haddock-util.js" type="text/javascript"      ></script @@ -16,7 +16,7 @@ window.onload = function () {pageLoad();};    ><body id="mini"    ><div id="module-header"      ><p class="caption" -      >DeprecatedFunction</p +      >Hyperlinks</p        ></div      ><div id="interface"      ><div class="top" diff --git a/tests/html-tests/tests/mini_IgnoreExports.html.ref b/html-test/ref/mini_IgnoreExports.html index a420e65a..a420e65a 100644 --- a/tests/html-tests/tests/mini_IgnoreExports.html.ref +++ b/html-test/ref/mini_IgnoreExports.html diff --git a/tests/html-tests/tests/mini_ModuleWithWarning.html.ref b/html-test/ref/mini_ModuleWithWarning.html index 19315a14..19315a14 100644 --- a/tests/html-tests/tests/mini_ModuleWithWarning.html.ref +++ b/html-test/ref/mini_ModuleWithWarning.html diff --git a/tests/html-tests/tests/mini_NamedDoc.html.ref b/html-test/ref/mini_NamedDoc.html index 066bbc61..066bbc61 100644 --- a/tests/html-tests/tests/mini_NamedDoc.html.ref +++ b/html-test/ref/mini_NamedDoc.html diff --git a/tests/html-tests/tests/mini_NoLayout.html.ref b/html-test/ref/mini_NoLayout.html index 19562d70..19562d70 100644 --- a/tests/html-tests/tests/mini_NoLayout.html.ref +++ b/html-test/ref/mini_NoLayout.html diff --git a/tests/html-tests/tests/mini_NonGreedy.html.ref b/html-test/ref/mini_NonGreedy.html index 698c368e..698c368e 100644 --- a/tests/html-tests/tests/mini_NonGreedy.html.ref +++ b/html-test/ref/mini_NonGreedy.html diff --git a/html-test/ref/mini_Properties.html b/html-test/ref/mini_Properties.html new file mode 100644 index 00000000..5f538dfd --- /dev/null +++ b/html-test/ref/mini_Properties.html @@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >Properties</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();}; +//]]> +</script +    ></head +  ><body id="mini" +  ><div id="module-header" +    ><p class="caption" +      >Properties</p +      ></div +    ><div id="interface" +    ><div class="top" +      ><p class="src" +	><a href="" target="main" +	  >fib</a +	  ></p +	></div +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/mini_PruneWithWarning.html.ref b/html-test/ref/mini_PruneWithWarning.html index 9eb3aa00..9eb3aa00 100644 --- a/tests/html-tests/tests/mini_PruneWithWarning.html.ref +++ b/html-test/ref/mini_PruneWithWarning.html diff --git a/tests/html-tests/tests/mini_QuasiExpr.html.ref b/html-test/ref/mini_QuasiExpr.html index 7dd9b829..7dd9b829 100644 --- a/tests/html-tests/tests/mini_QuasiExpr.html.ref +++ b/html-test/ref/mini_QuasiExpr.html diff --git a/tests/html-tests/tests/mini_QuasiQuote.html.ref b/html-test/ref/mini_QuasiQuote.html index 5dac6acc..5dac6acc 100644 --- a/tests/html-tests/tests/mini_QuasiQuote.html.ref +++ b/html-test/ref/mini_QuasiQuote.html diff --git a/html-test/ref/mini_SpuriousSuperclassConstraints.html b/html-test/ref/mini_SpuriousSuperclassConstraints.html new file mode 100644 index 00000000..22079a4e --- /dev/null +++ b/html-test/ref/mini_SpuriousSuperclassConstraints.html @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" +><head +  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" +     /><title +    >SpuriousSuperclassConstraints</title +    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" +     /><script src="haddock-util.js" type="text/javascript" +    ></script +    ><script type="text/javascript" +    >//<![CDATA[ +window.onload = function () {pageLoad();}; +//]]> +</script +    ></head +  ><body id="mini" +  ><div id="module-header" +    ><p class="caption" +      >SpuriousSuperclassConstraints</p +      ></div +    ><div id="interface" +    ><div class="top" +      ><p class="src" +	><span class="keyword" +	  >data</span +	  > <a href="" target="main" +	  >SomeType</a +	  > f a</p +	></div +      ></div +    ></body +  ></html +> diff --git a/tests/html-tests/tests/mini_TH.html.ref b/html-test/ref/mini_TH.html index d2ddbabc..d2ddbabc 100644 --- a/tests/html-tests/tests/mini_TH.html.ref +++ b/html-test/ref/mini_TH.html diff --git a/tests/html-tests/tests/mini_TH2.html.ref b/html-test/ref/mini_TH2.html index 2c9f1340..2c9f1340 100644 --- a/tests/html-tests/tests/mini_TH2.html.ref +++ b/html-test/ref/mini_TH2.html diff --git a/tests/html-tests/tests/mini_Test.html.ref b/html-test/ref/mini_Test.html index 26db2c0f..26db2c0f 100644 --- a/tests/html-tests/tests/mini_Test.html.ref +++ b/html-test/ref/mini_Test.html diff --git a/tests/html-tests/tests/mini_Ticket112.html.ref b/html-test/ref/mini_Ticket112.html index 68a0a5e5..68a0a5e5 100644 --- a/tests/html-tests/tests/mini_Ticket112.html.ref +++ b/html-test/ref/mini_Ticket112.html diff --git a/tests/html-tests/tests/mini_Ticket61.html.ref b/html-test/ref/mini_Ticket61.html index a73fefca..a73fefca 100644 --- a/tests/html-tests/tests/mini_Ticket61.html.ref +++ b/html-test/ref/mini_Ticket61.html diff --git a/tests/html-tests/tests/mini_Ticket75.html.ref b/html-test/ref/mini_Ticket75.html index 75ce882c..75ce882c 100644 --- a/tests/html-tests/tests/mini_Ticket75.html.ref +++ b/html-test/ref/mini_Ticket75.html diff --git a/tests/html-tests/tests/mini_TypeFamilies.html.ref b/html-test/ref/mini_TypeFamilies.html index 0cf39c88..0cf39c88 100644 --- a/tests/html-tests/tests/mini_TypeFamilies.html.ref +++ b/html-test/ref/mini_TypeFamilies.html diff --git a/tests/html-tests/tests/mini_TypeOperators.html.ref b/html-test/ref/mini_TypeOperators.html index f70a0fae..86b6beec 100644 --- a/tests/html-tests/tests/mini_TypeOperators.html.ref +++ b/html-test/ref/mini_TypeOperators.html @@ -60,14 +60,6 @@ window.onload = function () {pageLoad();};  	  >biO</a  	  ></p  	></div -      ><div class="top" -      ><p class="src" -	><span class="keyword" -	  >data</span -	  > <a href="" target="main" -	  >Flip</a -	  > (~>) b a</p -	></div        ></div      ></body    ></html diff --git a/tests/html-tests/tests/mini_Unicode.html.ref b/html-test/ref/mini_Unicode.html index 55336980..55336980 100644 --- a/tests/html-tests/tests/mini_Unicode.html.ref +++ b/html-test/ref/mini_Unicode.html diff --git a/tests/html-tests/tests/mini_Visible.html.ref b/html-test/ref/mini_Visible.html index 976a30c5..976a30c5 100644 --- a/tests/html-tests/tests/mini_Visible.html.ref +++ b/html-test/ref/mini_Visible.html diff --git a/html/Classic.theme/minus.gif b/html-test/ref/minus.gif Binary files differindex 1deac2fe..1deac2fe 100644 --- a/html/Classic.theme/minus.gif +++ b/html-test/ref/minus.gif diff --git a/html/Ocean.std-theme/ocean.css b/html-test/ref/ocean.css index 42238709..42238709 100644 --- a/html/Ocean.std-theme/ocean.css +++ b/html-test/ref/ocean.css diff --git a/html/Classic.theme/plus.gif b/html-test/ref/plus.gif Binary files differindex 2d15c141..2d15c141 100644 --- a/html/Classic.theme/plus.gif +++ b/html-test/ref/plus.gif diff --git a/html/Ocean.std-theme/synopsis.png b/html-test/ref/synopsis.png Binary files differindex 85fb86ec..85fb86ec 100644 --- a/html/Ocean.std-theme/synopsis.png +++ b/html-test/ref/synopsis.png diff --git a/tests/html-tests/runtests.hs b/html-test/run.lhs index 25e53d1a..7d3b805b 100644..100755 --- a/tests/html-tests/runtests.hs +++ b/html-test/run.lhs @@ -1,35 +1,45 @@ +#!/usr/bin/env runhaskell +\begin{code} +{-# LANGUAGE CPP #-} +import Prelude hiding (mod)  import Control.Monad +import Control.Applicative  import Data.List  import Data.Maybe  import Distribution.InstalledPackageInfo -import Distribution.Package +import Distribution.Package (PackageName (..))  import Distribution.Simple.Compiler  import Distribution.Simple.GHC  import Distribution.Simple.PackageIndex  import Distribution.Simple.Program  import Distribution.Simple.Utils  import Distribution.Verbosity +import System.IO  import System.Cmd  import System.Directory  import System.Environment  import System.Exit  import System.FilePath -import System.Process -import Text.Printf +import System.Process (ProcessHandle, runProcess, waitForProcess) -packageRoot   = "." +packageRoot, dataDir, haddockPath, baseDir, testDir, outDir :: FilePath +baseDir = takeDirectory __FILE__ +testDir       = baseDir </> "src" +refDir        = baseDir </> "ref" +outDir        = baseDir </> "out" +packageRoot   = baseDir </> ".." +dataDir       = packageRoot </> "resources"  haddockPath   = packageRoot </> "dist" </> "build" </> "haddock" </> "haddock" -testSuiteRoot = packageRoot </> "tests" </> "html-tests" -testDir       = testSuiteRoot </> "tests" -outDir        = testSuiteRoot </> "output" +main :: IO ()  main = do    test    putStrLn "All tests passed!" +test :: IO ()  test = do    x <- doesFileExist haddockPath    unless x $ die "you need to run 'cabal build' successfully first" @@ -39,34 +49,37 @@ test = do    let (opts, spec) = span ("-" `isPrefixOf`) args    let mods =          case spec of -          x:_ | x /= "all" -> [x ++ ".hs"] +          y:_ | y /= "all" -> [y ++ ".hs"]            _ -> filter ((==) ".hs" . takeExtension) contents    let mods' = map (testDir </>) mods + +  -- add haddock_datadir to environment for subprocesses +  env <- Just . (:) ("haddock_datadir", dataDir) <$> getEnvironment +    putStrLn ""    putStrLn "Haddock version: "    h1 <- runProcess haddockPath ["--version"] Nothing -                   (Just [("haddock_datadir", packageRoot)]) Nothing Nothing Nothing -  waitForProcess h1 +                   env Nothing Nothing Nothing +  wait h1 "*** Running `haddock --version' failed!"    putStrLn ""    putStrLn "GHC version: "    h2 <- runProcess haddockPath ["--ghc-version"] Nothing -                   (Just [("haddock_datadir", packageRoot)]) Nothing Nothing Nothing -  waitForProcess h2 +                   env Nothing Nothing Nothing +  wait h2 "*** Running `haddock --ghc-version' failed!"    putStrLn ""    -- TODO: maybe do something more clever here using haddock.cabal    ghcPath <- fmap init $ rawSystemStdout normal haddockPath ["--print-ghc-path"]    (_, conf) <- configure normal (Just ghcPath) Nothing defaultProgramConfiguration    pkgIndex <- getInstalledPackages normal [GlobalPackageDB] conf -  let safeHead xs = case xs of x : _ -> Just x; [] -> Nothing    let mkDep pkgName = -        maybe (error "Couldn't find test dependencies") id $ do +        fromMaybe (error "Couldn't find test dependencies") $ do            let pkgs = lookupPackageName pkgIndex (PackageName pkgName) -          (_, pkgs') <- safeHead pkgs -          pkg <- safeHead pkgs' -          ifacePath <- safeHead (haddockInterfaces pkg) -          htmlPath <- safeHead (haddockHTMLs pkg) +          (_, pkgs') <- listToMaybe pkgs +          pkg <- listToMaybe pkgs' +          ifacePath <- listToMaybe (haddockInterfaces pkg) +          htmlPath <- listToMaybe (haddockHTMLs pkg)            return ("-i " ++ htmlPath ++ "," ++ ifacePath)    let base    = mkDep "base" @@ -77,22 +90,27 @@ test = do    handle <- runProcess haddockPath                         (["-w", "-o", outDir, "-h", "--pretty-html", "--optghc=-fglasgow-exts"                          , "--optghc=-w", base, process, ghcprim] ++ opts ++ mods') -                       Nothing (Just [("haddock_datadir", packageRoot)]) Nothing +                       Nothing env Nothing                         Nothing Nothing -  code <- waitForProcess handle -  when (code /= ExitSuccess) $ error "Haddock run failed! Exiting." +  wait handle "*** Haddock run failed! Exiting."    check mods (if not (null args) && args !! 0 == "all" then False else True) - - +  where +    wait :: ProcessHandle -> String -> IO () +    wait h msg = do +      r <- waitForProcess h +      unless (r == ExitSuccess) $ do +        hPutStrLn stderr msg +        exitFailure + +check :: [FilePath] -> Bool -> IO ()  check modules strict = do    forM_ modules $ \mod -> do -    let outfile = outDir  </> dropExtension mod ++ ".html" -    let reffile = testDir </> dropExtension mod ++ ".html.ref" +    let outfile = outDir </> dropExtension mod ++ ".html" +    let reffile = refDir </> dropExtension mod ++ ".html"      b <- doesFileExist reffile      if b        then do -        copyFile reffile (outDir </> takeFileName reffile)          out <- readFile outfile          ref <- readFile reffile          if not $ haddockEq out ref @@ -101,22 +119,27 @@ check modules strict = do              let ref' = stripLinks ref                  out' = stripLinks out              let reffile' = outDir </> takeFileName reffile ++ ".nolinks" -                outfile' = outDir </> takeFileName outfile ++ ".nolinks" +                outfile' = outDir </> takeFileName outfile ++ ".ref.nolinks"              writeFile reffile' ref'              writeFile outfile' out' -            b <- programOnPath "colordiff" -            if b +            r <- programOnPath "colordiff" +            code <- if r                then system $ "colordiff " ++ reffile' ++ " " ++ outfile'                else system $ "diff " ++ reffile' ++ " " ++ outfile'              if strict then exitFailure else return () +            unless (code == ExitSuccess) $ do +              hPutStrLn stderr "*** Running diff failed!" +              exitFailure            else do              putStrLn $ "Pass: " ++ mod        else do          putStrLn $ "Pass: " ++ mod ++ " (no .ref file)" +haddockEq :: String -> String -> Bool  haddockEq file1 file2 = stripLinks file1 == stripLinks file2 +stripLinks :: String -> String  stripLinks str =    let prefix = "<a href=\"" in    case stripPrefix prefix str of @@ -126,7 +149,8 @@ stripLinks str =          [] -> []          x : xs -> x : stripLinks xs +programOnPath :: FilePath -> IO Bool  programOnPath p = do    result <- findProgramLocation silent p    return (isJust result) - +\end{code} diff --git a/tests/html-tests/tests/A.hs b/html-test/src/A.hs index 606b0865..606b0865 100644 --- a/tests/html-tests/tests/A.hs +++ b/html-test/src/A.hs diff --git a/html-test/src/AdvanceTypes.hs b/html-test/src/AdvanceTypes.hs new file mode 100644 index 00000000..939fdf07 --- /dev/null +++ b/html-test/src/AdvanceTypes.hs @@ -0,0 +1,9 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE KindSignatures #-} +{-# LANGUAGE TypeOperators #-} +module AdvanceTypes where + +data Pattern :: [*] -> * where +  Nil :: Pattern '[] +  Cons :: Maybe h -> Pattern t -> Pattern (h ': t) diff --git a/tests/html-tests/tests/B.hs b/html-test/src/B.hs index 5fd69acd..5fd69acd 100644 --- a/tests/html-tests/tests/B.hs +++ b/html-test/src/B.hs diff --git a/examples/Bug1.hs b/html-test/src/Bug1.hs index af1ed4d3..af1ed4d3 100644 --- a/examples/Bug1.hs +++ b/html-test/src/Bug1.hs diff --git a/examples/Bug2.hs b/html-test/src/Bug2.hs index 9121922e..9121922e 100644 --- a/examples/Bug2.hs +++ b/html-test/src/Bug2.hs diff --git a/tests/html-tests/tests/Bug3.hs b/html-test/src/Bug3.hs index 67e57892..67e57892 100644 --- a/tests/html-tests/tests/Bug3.hs +++ b/html-test/src/Bug3.hs diff --git a/tests/html-tests/tests/Bug4.hs b/html-test/src/Bug4.hs index 425a77aa..425a77aa 100644 --- a/tests/html-tests/tests/Bug4.hs +++ b/html-test/src/Bug4.hs diff --git a/tests/html-tests/tests/Bug6.hs b/html-test/src/Bug6.hs index 17411f31..17411f31 100644 --- a/tests/html-tests/tests/Bug6.hs +++ b/html-test/src/Bug6.hs diff --git a/examples/Bug7.hs b/html-test/src/Bug7.hs index 8cf57914..8cf57914 100644 --- a/examples/Bug7.hs +++ b/html-test/src/Bug7.hs diff --git a/tests/html-tests/tests/Bug8.hs b/html-test/src/Bug8.hs index 18df63c8..18df63c8 100644 --- a/tests/html-tests/tests/Bug8.hs +++ b/html-test/src/Bug8.hs diff --git a/tests/html-tests/tests/BugDeprecated.hs b/html-test/src/BugDeprecated.hs index 0f7ac2eb..0f7ac2eb 100644 --- a/tests/html-tests/tests/BugDeprecated.hs +++ b/html-test/src/BugDeprecated.hs diff --git a/tests/html-tests/tests/BugExportHeadings.hs b/html-test/src/BugExportHeadings.hs index a5493a08..a5493a08 100644 --- a/tests/html-tests/tests/BugExportHeadings.hs +++ b/html-test/src/BugExportHeadings.hs diff --git a/tests/html-tests/tests/Bugs.hs b/html-test/src/Bugs.hs index 8e1f0079..8e1f0079 100644 --- a/tests/html-tests/tests/Bugs.hs +++ b/html-test/src/Bugs.hs diff --git a/html-test/src/CrossPackageDocs.hs b/html-test/src/CrossPackageDocs.hs new file mode 100644 index 00000000..4d529f79 --- /dev/null +++ b/html-test/src/CrossPackageDocs.hs @@ -0,0 +1,4 @@ +module CrossPackageDocs (map, IsString(..), runInteractiveProcess) where + +import System.Process +import Data.String diff --git a/tests/html-tests/tests/DeprecatedClass.hs b/html-test/src/DeprecatedClass.hs index 018904ab..018904ab 100644 --- a/tests/html-tests/tests/DeprecatedClass.hs +++ b/html-test/src/DeprecatedClass.hs diff --git a/tests/html-tests/tests/DeprecatedData.hs b/html-test/src/DeprecatedData.hs index c40ba122..c40ba122 100644 --- a/tests/html-tests/tests/DeprecatedData.hs +++ b/html-test/src/DeprecatedData.hs diff --git a/html-test/src/DeprecatedFunction.hs b/html-test/src/DeprecatedFunction.hs new file mode 100644 index 00000000..8d626435 --- /dev/null +++ b/html-test/src/DeprecatedFunction.hs @@ -0,0 +1,10 @@ +module DeprecatedFunction where + +-- | some documentation for foo +foo :: Int +foo = 23 +{-# DEPRECATED foo "use `bar` instead" #-} + +-- | some documentation for bar +bar :: Int +bar = 42 diff --git a/tests/html-tests/tests/DeprecatedFunction2.hs b/html-test/src/DeprecatedFunction2.hs index bdbbf95c..bdbbf95c 100644 --- a/tests/html-tests/tests/DeprecatedFunction2.hs +++ b/html-test/src/DeprecatedFunction2.hs diff --git a/tests/html-tests/tests/DeprecatedFunction3.hs b/html-test/src/DeprecatedFunction3.hs index ca719bda..ca719bda 100644 --- a/tests/html-tests/tests/DeprecatedFunction3.hs +++ b/html-test/src/DeprecatedFunction3.hs diff --git a/html-test/src/DeprecatedModule.hs b/html-test/src/DeprecatedModule.hs new file mode 100644 index 00000000..369dba4f --- /dev/null +++ b/html-test/src/DeprecatedModule.hs @@ -0,0 +1,5 @@ +-- | Documentation for "DeprecatedModule". +module DeprecatedModule {-# DEPRECATED "Use \"Foo\" instead" #-} where + +foo :: Int +foo = 23 diff --git a/tests/html-tests/tests/DeprecatedModule2.hs b/html-test/src/DeprecatedModule2.hs index 94185297..94185297 100644 --- a/tests/html-tests/tests/DeprecatedModule2.hs +++ b/html-test/src/DeprecatedModule2.hs diff --git a/tests/html-tests/tests/DeprecatedNewtype.hs b/html-test/src/DeprecatedNewtype.hs index 254f1f55..254f1f55 100644 --- a/tests/html-tests/tests/DeprecatedNewtype.hs +++ b/html-test/src/DeprecatedNewtype.hs diff --git a/html-test/src/DeprecatedReExport.hs b/html-test/src/DeprecatedReExport.hs new file mode 100644 index 00000000..f851e2ff --- /dev/null +++ b/html-test/src/DeprecatedReExport.hs @@ -0,0 +1,16 @@ +-- | +-- What is tested here: +-- +-- * Deprecation messages are shown for re-exported items. +-- +module DeprecatedReExport ( +-- * Re-exported from an other module +  foo +-- * Re-exported from an other package +-- | Not yet working, see <http://trac.haskell.org/haddock/ticket/223> +-- , isEmptyChan +, +) where + +import DeprecatedFunction +import Control.Concurrent.Chan diff --git a/tests/html-tests/tests/DeprecatedRecord.hs b/html-test/src/DeprecatedRecord.hs index d44499e7..d44499e7 100644 --- a/tests/html-tests/tests/DeprecatedRecord.hs +++ b/html-test/src/DeprecatedRecord.hs diff --git a/tests/html-tests/tests/DeprecatedTypeFamily.hs b/html-test/src/DeprecatedTypeFamily.hs index 70473bb8..70473bb8 100644 --- a/tests/html-tests/tests/DeprecatedTypeFamily.hs +++ b/html-test/src/DeprecatedTypeFamily.hs diff --git a/tests/html-tests/tests/DeprecatedTypeSynonym.hs b/html-test/src/DeprecatedTypeSynonym.hs index 34df47da..34df47da 100644 --- a/tests/html-tests/tests/DeprecatedTypeSynonym.hs +++ b/html-test/src/DeprecatedTypeSynonym.hs diff --git a/html-test/src/DeprecationMessageParseError.hs b/html-test/src/DeprecationMessageParseError.hs new file mode 100644 index 00000000..2f8fb492 --- /dev/null +++ b/html-test/src/DeprecationMessageParseError.hs @@ -0,0 +1,12 @@ +-- | +-- What is tested here: +-- +-- * If parsing of a deprecation message fails, the message is included +--   verbatim. +-- +module DeprecationMessageParseError where + +-- | some documentation for foo +foo :: Int +foo = 23 +{-# DEPRECATED foo "use @bar instead" #-} diff --git a/tests/html-tests/tests/Examples.hs b/html-test/src/Examples.hs index c8c450f1..c8c450f1 100644 --- a/tests/html-tests/tests/Examples.hs +++ b/html-test/src/Examples.hs diff --git a/tests/html-tests/tests/FunArgs.hs b/html-test/src/FunArgs.hs index b34d84b7..b34d84b7 100644 --- a/tests/html-tests/tests/FunArgs.hs +++ b/html-test/src/FunArgs.hs diff --git a/tests/html-tests/tests/GADTRecords.hs b/html-test/src/GADTRecords.hs index c77810ad..c77810ad 100644 --- a/tests/html-tests/tests/GADTRecords.hs +++ b/html-test/src/GADTRecords.hs diff --git a/tests/html-tests/tests/Hash.hs b/html-test/src/Hash.hs index 343b69e9..343b69e9 100644 --- a/tests/html-tests/tests/Hash.hs +++ b/html-test/src/Hash.hs diff --git a/tests/html-tests/tests/Hidden.hs b/html-test/src/Hidden.hs index 896da648..896da648 100644 --- a/tests/html-tests/tests/Hidden.hs +++ b/html-test/src/Hidden.hs diff --git a/html-test/src/HiddenInstances.hs b/html-test/src/HiddenInstances.hs new file mode 100644 index 00000000..99a6c2fd --- /dev/null +++ b/html-test/src/HiddenInstances.hs @@ -0,0 +1,35 @@ +-- http://trac.haskell.org/haddock/ticket/37 +module HiddenInstances (VisibleClass, VisibleData) where + +-- | Should be visible +class VisibleClass a + +-- | Should *not* be visible +class HiddenClass a + +-- | Should *not* be visible +data HiddenData = HiddenData + +-- | Should be visible +data VisibleData = VisibleData + +-- | Should be visible +instance VisibleClass Int + +-- | Should be visible +instance VisibleClass VisibleData + +-- | Should be visible +instance Num VisibleData + +-- | Should *not* be visible +instance VisibleClass HiddenData + +-- | Should *not* be visible +instance HiddenClass Int + +-- | Should *not* be visible +instance HiddenClass VisibleData + +-- | Should *not* be visible +instance HiddenClass HiddenData diff --git a/html-test/src/HiddenInstancesA.hs b/html-test/src/HiddenInstancesA.hs new file mode 100644 index 00000000..f1775208 --- /dev/null +++ b/html-test/src/HiddenInstancesA.hs @@ -0,0 +1,17 @@ +{-# OPTIONS_HADDOCK hide #-} +module HiddenInstancesA where + +-- | Should be visible +class Foo a + +-- | Should be visible +data Bar + +-- | Should be visible +instance Foo Bar + +-- | Should *not* be visible +data Baz + +-- | Should *not* be visible +instance Foo Baz diff --git a/html-test/src/HiddenInstancesB.hs b/html-test/src/HiddenInstancesB.hs new file mode 100644 index 00000000..eabf0637 --- /dev/null +++ b/html-test/src/HiddenInstancesB.hs @@ -0,0 +1,2 @@ +module HiddenInstancesB (Foo, Bar) where +import HiddenInstancesA diff --git a/html-test/src/Hyperlinks.hs b/html-test/src/Hyperlinks.hs new file mode 100644 index 00000000..34e64448 --- /dev/null +++ b/html-test/src/Hyperlinks.hs @@ -0,0 +1,8 @@ +module Hyperlinks where + +-- | +-- A plain URL: <http://example.com/> +-- +-- A URL with a label: <http://example.com/ some link> +foo :: Int +foo = 23 diff --git a/tests/html-tests/tests/IgnoreExports.hs b/html-test/src/IgnoreExports.hs index 0321ad02..0321ad02 100644 --- a/tests/html-tests/tests/IgnoreExports.hs +++ b/html-test/src/IgnoreExports.hs diff --git a/tests/html-tests/tests/ModuleWithWarning.hs b/html-test/src/ModuleWithWarning.hs index 2114bac6..e64d9d7e 100644 --- a/tests/html-tests/tests/ModuleWithWarning.hs +++ b/html-test/src/ModuleWithWarning.hs @@ -1,5 +1,5 @@  -- | Documentation for "ModuleWithWarning". -module ModuleWithWarning {-# WARNING "This is an unstable interface." #-} where +module ModuleWithWarning {-# WARNING "This is an unstable interface.  Prefer functions from \"Prelude\" instead!" #-} where  foo :: Int  foo = 23 diff --git a/tests/html-tests/tests/NamedDoc.hs b/html-test/src/NamedDoc.hs index 7c04ba72..7c04ba72 100644 --- a/tests/html-tests/tests/NamedDoc.hs +++ b/html-test/src/NamedDoc.hs diff --git a/tests/html-tests/tests/NoLayout.hs b/html-test/src/NoLayout.hs index 19b38b1d..19b38b1d 100644 --- a/tests/html-tests/tests/NoLayout.hs +++ b/html-test/src/NoLayout.hs diff --git a/tests/html-tests/tests/NonGreedy.hs b/html-test/src/NonGreedy.hs index f51b55f5..f51b55f5 100644 --- a/tests/html-tests/tests/NonGreedy.hs +++ b/html-test/src/NonGreedy.hs diff --git a/html-test/src/Properties.hs b/html-test/src/Properties.hs new file mode 100644 index 00000000..05930ece --- /dev/null +++ b/html-test/src/Properties.hs @@ -0,0 +1,9 @@ +module Properties where + +-- | Fibonacci number of given 'Integer'. +-- +-- prop> fib n <= fib (n + 1) +fib :: Integer -> Integer +fib 0 = 0 +fib 1 = 1 +fib n = fib (n - 1) + fib (n - 2) diff --git a/html-test/src/PruneWithWarning.hs b/html-test/src/PruneWithWarning.hs new file mode 100644 index 00000000..bfa55ea2 --- /dev/null +++ b/html-test/src/PruneWithWarning.hs @@ -0,0 +1,15 @@ +{-# OPTIONS_HADDOCK prune #-} +-- | +-- What is tested here: +-- +-- * If a binding has a deprecation message but no documentation, it is pruned +--   when @OPTIONS_HADDOCK prune@ is used. +-- +module PruneWithWarning (foo, bar) where + +foo :: Int +foo = 23 +{-# DEPRECATED foo "use bar instead" #-} + +bar :: Int +bar = 42 diff --git a/tests/html-tests/tests/QuasiExpr.hs b/html-test/src/QuasiExpr.hs index 970759ba..970759ba 100644 --- a/tests/html-tests/tests/QuasiExpr.hs +++ b/html-test/src/QuasiExpr.hs diff --git a/tests/html-tests/tests/QuasiQuote.hs b/html-test/src/QuasiQuote.hs index 06762cf9..06762cf9 100644 --- a/tests/html-tests/tests/QuasiQuote.hs +++ b/html-test/src/QuasiQuote.hs diff --git a/html-test/src/SpuriousSuperclassConstraints.hs b/html-test/src/SpuriousSuperclassConstraints.hs new file mode 100644 index 00000000..d9e43e1c --- /dev/null +++ b/html-test/src/SpuriousSuperclassConstraints.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE EmptyDataDecls, KindSignatures #-} +-- | +-- What is tested here: +-- +-- Due to a change in GHC 7.6.1 we had a bug that superclass contraints were +-- included in the instances list.  Edward K. repported it here: +-- +--   <http://www.haskell.org/pipermail/haskell-cafe/2012-September/103600.html> +-- +-- And here is the corresponding theard on glasgow-haskell-users: +-- +--   <http://www.haskell.org/pipermail/glasgow-haskell-users/2012-September/022914.html> +-- +-- It has been fixed in: +-- +-- > 6ccf78e15a525282fef61bc4f58a279aa9c21771 +-- > Fix spurious superclass constraints bug. +-- +module SpuriousSuperclassConstraints where + +import Control.Applicative + +data SomeType (f :: * -> *) a + +instance Functor (SomeType f) where +  fmap = undefined + +instance Applicative f => Applicative (SomeType f) where +  pure   = undefined +  (<*>)  = undefined diff --git a/tests/html-tests/tests/TH.hs b/html-test/src/TH.hs index f8178bcb..f8178bcb 100644 --- a/tests/html-tests/tests/TH.hs +++ b/html-test/src/TH.hs diff --git a/tests/html-tests/tests/TH2.hs b/html-test/src/TH2.hs index ea85e547..ea85e547 100644 --- a/tests/html-tests/tests/TH2.hs +++ b/html-test/src/TH2.hs diff --git a/tests/html-tests/tests/Test.hs b/html-test/src/Test.hs index d352f029..d352f029 100644 --- a/tests/html-tests/tests/Test.hs +++ b/html-test/src/Test.hs diff --git a/tests/html-tests/tests/Ticket112.hs b/html-test/src/Ticket112.hs index c9cd5117..c9cd5117 100644 --- a/tests/html-tests/tests/Ticket112.hs +++ b/html-test/src/Ticket112.hs diff --git a/tests/html-tests/tests/Ticket61.hs b/html-test/src/Ticket61.hs index 26ca287f..26ca287f 100644 --- a/tests/html-tests/tests/Ticket61.hs +++ b/html-test/src/Ticket61.hs diff --git a/tests/html-tests/tests/Ticket61_Hidden.hs b/html-test/src/Ticket61_Hidden.hs index 583c10cd..583c10cd 100644 --- a/tests/html-tests/tests/Ticket61_Hidden.hs +++ b/html-test/src/Ticket61_Hidden.hs diff --git a/tests/html-tests/tests/Ticket75.hs b/html-test/src/Ticket75.hs index 94a2f115..94a2f115 100644 --- a/tests/html-tests/tests/Ticket75.hs +++ b/html-test/src/Ticket75.hs diff --git a/tests/html-tests/tests/TypeFamilies.hs b/html-test/src/TypeFamilies.hs index 561f95fd..561f95fd 100644 --- a/tests/html-tests/tests/TypeFamilies.hs +++ b/html-test/src/TypeFamilies.hs diff --git a/tests/html-tests/tests/TypeOperators.hs b/html-test/src/TypeOperators.hs index aa0fbe8c..edbb9344 100644 --- a/tests/html-tests/tests/TypeOperators.hs +++ b/html-test/src/TypeOperators.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE TypeOperators #-}  module TypeOperators (    -- * stuff    (:-:), @@ -5,7 +6,6 @@ module TypeOperators (    Op,    O(..),    biO, -  Flip(..)  ) where  data a :-: b @@ -18,5 +18,3 @@ newtype (g `O` f) a = O { unO :: g (f a) }  biO :: (g `O` f) a  biO = undefined - -newtype Flip (~>) b a = Flip { unFlip :: a ~> b } diff --git a/tests/html-tests/tests/Unicode.hs b/html-test/src/Unicode.hs.disabled index d5bbf445..d5bbf445 100644 --- a/tests/html-tests/tests/Unicode.hs +++ b/html-test/src/Unicode.hs.disabled diff --git a/examples/Visible.hs b/html-test/src/Visible.hs index cad71931..cad71931 100644 --- a/examples/Visible.hs +++ b/html-test/src/Visible.hs diff --git a/html/Classic.theme/haskell_icon.gif b/resources/html/Classic.theme/haskell_icon.gif Binary files differindex 10589f91..10589f91 100644 --- a/html/Classic.theme/haskell_icon.gif +++ b/resources/html/Classic.theme/haskell_icon.gif diff --git a/html/Ocean.std-theme/minus.gif b/resources/html/Classic.theme/minus.gif Binary files differindex 1deac2fe..1deac2fe 100644 --- a/html/Ocean.std-theme/minus.gif +++ b/resources/html/Classic.theme/minus.gif diff --git a/html/Ocean.std-theme/plus.gif b/resources/html/Classic.theme/plus.gif Binary files differindex 2d15c141..2d15c141 100644 --- a/html/Ocean.std-theme/plus.gif +++ b/resources/html/Classic.theme/plus.gif diff --git a/html/Classic.theme/xhaddock.css b/resources/html/Classic.theme/xhaddock.css index 40ea0d06..40ea0d06 100644 --- a/html/Classic.theme/xhaddock.css +++ b/resources/html/Classic.theme/xhaddock.css diff --git a/resources/html/Ocean.std-theme/hslogo-16.png b/resources/html/Ocean.std-theme/hslogo-16.png Binary files differnew file mode 100644 index 00000000..0ff8579f --- /dev/null +++ b/resources/html/Ocean.std-theme/hslogo-16.png diff --git a/resources/html/Ocean.std-theme/minus.gif b/resources/html/Ocean.std-theme/minus.gif Binary files differnew file mode 100644 index 00000000..1deac2fe --- /dev/null +++ b/resources/html/Ocean.std-theme/minus.gif diff --git a/resources/html/Ocean.std-theme/ocean.css b/resources/html/Ocean.std-theme/ocean.css new file mode 100644 index 00000000..42238709 --- /dev/null +++ b/resources/html/Ocean.std-theme/ocean.css @@ -0,0 +1,546 @@ +/* @group Fundamentals */ + +* { margin: 0; padding: 0 } + +/* Is this portable? */ +html { +  background-color: white; +  width: 100%; +  height: 100%; +} + +body { +  background: white; +  color: black; +  text-align: left; +  min-height: 100%; +  position: relative; +} + +p { +  margin: 0.8em 0; +} + +ul, ol { +  margin: 0.8em 0 0.8em 2em; +} + +dl { +  margin: 0.8em 0; +} + +dt { +  font-weight: bold; +} +dd { +  margin-left: 2em; +} + +a { text-decoration: none; } +a[href]:link { color: rgb(196,69,29); } +a[href]:visited { color: rgb(171,105,84); } +a[href]:hover { text-decoration:underline; } + +/* @end */ + +/* @group Fonts & Sizes */ + +/* Basic technique & IE workarounds from YUI 3 +   For reasons, see: +      http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css + */ +  +body { +	font:13px/1.4 sans-serif; +	*font-size:small; /* for IE */ +	*font:x-small; /* for IE in quirks mode */ +} + +h1 { font-size: 146.5%; /* 19pt */ }  +h2 { font-size: 131%;   /* 17pt */ } +h3 { font-size: 116%;   /* 15pt */ } +h4 { font-size: 100%;   /* 13pt */ } +h5 { font-size: 100%;   /* 13pt */ } + +select, input, button, textarea { +	font:99% sans-serif; +} + +table { +	font-size:inherit; +	font:100%; +} + +pre, code, kbd, samp, tt, .src { +	font-family:monospace; +	*font-size:108%; +	line-height: 124%; +} + +.links, .link { +  font-size: 85%; /* 11pt */ +} + +#module-header .caption { +  font-size: 182%; /* 24pt */ +} + +.info  { +  font-size: 85%; /* 11pt */ +} + +#table-of-contents, #synopsis  { +  /* font-size: 85%; /* 11pt */ +} + + +/* @end */ + +/* @group Common */ + +.caption, h1, h2, h3, h4, h5, h6 {  +  font-weight: bold; +  color: rgb(78,98,114); +  margin: 0.8em 0 0.4em; +} + +* + h1, * + h2, * + h3, * + h4, * + h5, * + h6 { +  margin-top: 2em; +} + +h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6 { +  margin-top: inherit; +} + +ul.links { +  list-style: none; +  text-align: left; +  float: right; +  display: inline-table; +  margin: 0 0 0 1em; +} + +ul.links li { +  display: inline; +  border-left: 1px solid #d5d5d5;  +  white-space: nowrap; +  padding: 0; +} + +ul.links li a { +  padding: 0.2em 0.5em; +} + +.hide { display: none; } +.show { display: inherit; } +.clear { clear: both; } + +.collapser { +  background-image: url(minus.gif); +  background-repeat: no-repeat; +} +.expander { +  background-image: url(plus.gif); +  background-repeat: no-repeat; +} +p.caption.collapser, +p.caption.expander { +  background-position: 0 0.4em; +} +.collapser, .expander { +  padding-left: 14px; +  margin-left: -14px; +  cursor: pointer; +} + +pre { +  padding: 0.25em; +  margin: 0.8em 0; +  background: rgb(229,237,244); +  overflow: auto; +  border-bottom: 0.25em solid white; +  /* white border adds some space below the box to compensate +     for visual extra space that paragraphs have between baseline +     and the bounding box */ +} + +.src { +  background: #f0f0f0; +  padding: 0.2em 0.5em; +} + +.keyword { font-weight: normal; } +.def { font-weight: bold; } + + +/* @end */ + +/* @group Page Structure */ + +#content { +  margin: 0 auto; +  padding: 0 2em 6em; +} + +#package-header { +  background: rgb(41,56,69); +  border-top: 5px solid rgb(78,98,114); +  color: #ddd; +  padding: 0.2em; +  position: relative; +  text-align: left; +} + +#package-header .caption { +  background: url(hslogo-16.png) no-repeat 0em; +  color: white; +  margin: 0 2em; +  font-weight: normal; +  font-style: normal; +  padding-left: 2em; +} + +#package-header a:link, #package-header a:visited { color: white; } +#package-header a:hover { background: rgb(78,98,114); } + +#module-header .caption { +  color: rgb(78,98,114); +  font-weight: bold; +  border-bottom: 1px solid #ddd; +} + +table.info { +  float: right; +  padding: 0.5em 1em; +  border: 1px solid #ddd; +  color: rgb(78,98,114); +  background-color: #fff; +  max-width: 40%; +  border-spacing: 0; +  position: relative; +  top: -0.5em; +  margin: 0 0 0 2em; +} + +.info th { +	padding: 0 1em 0 0; +} + +div#style-menu-holder { +  position: relative; +  z-index: 2; +  display: inline; +} + +#style-menu { +  position: absolute; +  z-index: 1; +  overflow: visible; +  background: #374c5e; +  margin: 0; +  text-align: center; +  right: 0; +  padding: 0; +  top: 1.25em; +} + +#style-menu li { +	display: list-item; +	border-style: none; +	margin: 0; +	padding: 0; +	color: #000; +	list-style-type: none; +} + +#style-menu li + li { +	border-top: 1px solid #919191; +} + +#style-menu a { +  width: 6em; +  padding: 3px; +  display: block; +} + +#footer { +  background: #ddd; +  border-top: 1px solid #aaa; +  padding: 0.5em 0; +  color: #666; +  text-align: center; +  position: absolute; +  bottom: 0; +  width: 100%; +  height: 3em; +} + +/* @end */ + +/* @group Front Matter */ + +#table-of-contents { +  float: right; +  clear: right; +  background: #faf9dc; +  border: 1px solid #d8d7ad; +  padding: 0.5em 1em; +  max-width: 20em; +  margin: 0.5em 0 1em 1em; +} + +#table-of-contents .caption { +  text-align: center; +  margin: 0; +} + +#table-of-contents ul { +  list-style: none; +  margin: 0; +} + +#table-of-contents ul ul { +  margin-left: 2em; +} + +#description .caption { +  display: none; +} + +#synopsis { +  display: none; +} + +.no-frame #synopsis { +  display: block; +  position: fixed; +  right: 0; +  height: 80%; +  top: 10%; +  padding: 0; +} + +#synopsis .caption { +  float: left; +  width: 29px; +  color: rgba(255,255,255,0); +  height: 110px; +  margin: 0; +  font-size: 1px; +  padding: 0; +} + +#synopsis p.caption.collapser { +  background: url(synopsis.png) no-repeat -64px -8px; +} + +#synopsis p.caption.expander { +  background: url(synopsis.png) no-repeat 0px -8px; +} + +#synopsis ul { +  height: 100%; +  overflow: auto; +  padding: 0.5em; +  margin: 0; +} + +#synopsis ul ul { +  overflow: hidden; +} + +#synopsis ul, +#synopsis ul li.src { +  background-color: #faf9dc; +  white-space: nowrap; +  list-style: none; +  margin-left: 0; +} + +/* @end */ + +/* @group Main Content */ + +#interface div.top { margin: 2em 0; } +#interface h1 + div.top, +#interface h2 + div.top, +#interface h3 + div.top, +#interface h4 + div.top, +#interface h5 + div.top { + 	margin-top: 1em; +} +#interface p.src .link { +  float: right; +  color: #919191; +  border-left: 1px solid #919191; +  background: #f0f0f0; +  padding: 0 0.5em 0.2em; +  margin: 0 -0.5em 0 0.5em; +} + +#interface table { border-spacing: 2px; } +#interface td { +  vertical-align: top; +  padding-left: 0.5em; +} +#interface td.src { +  white-space: nowrap; +} +#interface td.doc p { +  margin: 0; +} +#interface td.doc p + p { +  margin-top: 0.8em; +} + +.subs dl { +  margin: 0; +} + +.subs dt { +  float: left; +  clear: left; +  display: block; +  margin: 1px 0; +} + +.subs dd { +  float: right; +  width: 90%; +  display: block; +  padding-left: 0.5em; +  margin-bottom: 0.5em; +} + +.subs dd.empty { +  display: none; +} + +.subs dd p { +  margin: 0; +} + +.top p.src { +  border-top: 1px solid #ccc; +} + +.subs, .doc { +  /* use this selector for one level of indent */ +  padding-left: 2em; +} + +.warning { +  color: red; +} + +.arguments { +  margin-top: -0.4em; +} +.arguments .caption { +  display: none; +} + +.fields { padding-left: 1em; } + +.fields .caption { display: none; } + +.fields p { margin: 0 0; } + +/* this seems bulky to me +.methods, .constructors { +  background: #f8f8f8; +  border: 1px solid #eee; +} +*/ + +/* @end */ + +/* @group Auxillary Pages */ + +#mini { +  margin: 0 auto; +  padding: 0 1em 1em; +} + +#mini > * { +  font-size: 93%; /* 12pt */   +} + +#mini #module-list .caption, +#mini #module-header .caption { +  font-size: 125%; /* 15pt */ +} + +#mini #interface h1, +#mini #interface h2, +#mini #interface h3, +#mini #interface h4 { +  font-size: 109%; /* 13pt */ +  margin: 1em 0 0; +} + +#mini #interface .top, +#mini #interface .src { +  margin: 0; +} + +#mini #module-list ul { +  list-style: none; +  margin: 0; +} + +#alphabet ul { +	list-style: none; +	padding: 0; +	margin: 0.5em 0 0; +	text-align: center; +} + +#alphabet li { +	display: inline; +	margin: 0 0.25em; +} + +#alphabet a { +	font-weight: bold; +} + +#index .caption, +#module-list .caption { font-size: 131%; /* 17pt */ } + +#index table { +  margin-left: 2em; +} + +#index .src { +  font-weight: bold; +} +#index .alt { +  font-size: 77%; /* 10pt */ +  font-style: italic; +  padding-left: 2em; +} + +#index td + td { +  padding-left: 1em; +} + +#module-list ul { +  list-style: none; +  margin: 0 0 0 2em; +} + +#module-list li { +  clear: right; +} + +#module-list span.collapser, +#module-list span.expander { +  background-position: 0 0.3em; +} + +#module-list .package { +  float: right; +} + +/* @end */ diff --git a/resources/html/Ocean.std-theme/plus.gif b/resources/html/Ocean.std-theme/plus.gif Binary files differnew file mode 100644 index 00000000..2d15c141 --- /dev/null +++ b/resources/html/Ocean.std-theme/plus.gif diff --git a/resources/html/Ocean.std-theme/synopsis.png b/resources/html/Ocean.std-theme/synopsis.png Binary files differnew file mode 100644 index 00000000..85fb86ec --- /dev/null +++ b/resources/html/Ocean.std-theme/synopsis.png diff --git a/tests/html-tests/tests/frames.html.ref b/resources/html/frames.html index 1b4e38d4..1b4e38d4 100644 --- a/tests/html-tests/tests/frames.html.ref +++ b/resources/html/frames.html diff --git a/resources/html/haddock-util.js b/resources/html/haddock-util.js new file mode 100644 index 00000000..9a6fccf7 --- /dev/null +++ b/resources/html/haddock-util.js @@ -0,0 +1,344 @@ +// Haddock JavaScript utilities + +var rspace = /\s\s+/g, +	  rtrim = /^\s+|\s+$/g; + +function spaced(s) { return (" " + s + " ").replace(rspace, " "); } +function trim(s)   { return s.replace(rtrim, ""); } + +function hasClass(elem, value) { +  var className = spaced(elem.className || ""); +  return className.indexOf( " " + value + " " ) >= 0; +} + +function addClass(elem, value) { +  var className = spaced(elem.className || ""); +  if ( className.indexOf( " " + value + " " ) < 0 ) { +    elem.className = trim(className + " " + value); +  } +} + +function removeClass(elem, value) { +  var className = spaced(elem.className || ""); +  className = className.replace(" " + value + " ", " "); +  elem.className = trim(className); +} + +function toggleClass(elem, valueOn, valueOff, bool) { +  if (bool == null) { bool = ! hasClass(elem, valueOn); } +  if (bool) { +    removeClass(elem, valueOff); +    addClass(elem, valueOn); +  } +  else { +    removeClass(elem, valueOn); +    addClass(elem, valueOff); +  } +  return bool; +} + + +function makeClassToggle(valueOn, valueOff) +{ +  return function(elem, bool) { +    return toggleClass(elem, valueOn, valueOff, bool); +  } +} + +toggleShow = makeClassToggle("show", "hide"); +toggleCollapser = makeClassToggle("collapser", "expander"); + +function toggleSection(id) +{ +  var b = toggleShow(document.getElementById("section." + id)); +  toggleCollapser(document.getElementById("control." + id), b); +  rememberCollapsed(id, b); +  return b; +} + +var collapsed = {}; +function rememberCollapsed(id, b) +{ +  if(b) +    delete collapsed[id] +  else +    collapsed[id] = null; + +  var sections = []; +  for(var i in collapsed) +  { +    if(collapsed.hasOwnProperty(i)) +      sections.push(i); +  } +  // cookie specific to this page; don't use setCookie which sets path=/ +  document.cookie = "collapsed=" + escape(sections.join('+')); +} + +function restoreCollapsed() +{ +  var cookie = getCookie("collapsed"); +  if(!cookie) +    return; + +  var ids = cookie.split('+'); +  for(var i in ids) +  { +    if(document.getElementById("section." + ids[i])) +      toggleSection(ids[i]); +  } +} + +function setCookie(name, value) { +  document.cookie = name + "=" + escape(value) + ";path=/;"; +} + +function clearCookie(name) { +  document.cookie = name + "=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT;"; +} + +function getCookie(name) { +  var nameEQ = name + "="; +  var ca = document.cookie.split(';'); +  for(var i=0;i < ca.length;i++) { +    var c = ca[i]; +    while (c.charAt(0)==' ') c = c.substring(1,c.length); +    if (c.indexOf(nameEQ) == 0) { +      return unescape(c.substring(nameEQ.length,c.length)); +    } +  } +  return null; +} + + + +var max_results = 75; // 50 is not enough to search for map in the base libraries +var shown_range = null; +var last_search = null; + +function quick_search() +{ +    perform_search(false); +} + +function full_search() +{ +    perform_search(true); +} + + +function perform_search(full) +{ +    var text = document.getElementById("searchbox").value.toLowerCase(); +    if (text == last_search && !full) return; +    last_search = text; +     +    var table = document.getElementById("indexlist"); +    var status = document.getElementById("searchmsg"); +    var children = table.firstChild.childNodes; +     +    // first figure out the first node with the prefix +    var first = bisect(-1); +    var last = (first == -1 ? -1 : bisect(1)); + +    if (first == -1) +    { +        table.className = ""; +        status.innerHTML = "No results found, displaying all"; +    } +    else if (first == 0 && last == children.length - 1) +    { +        table.className = ""; +        status.innerHTML = ""; +    } +    else if (last - first >= max_results && !full) +    { +        table.className = ""; +        status.innerHTML = "More than " + max_results + ", press Search to display"; +    } +    else +    { +        // decide what you need to clear/show +        if (shown_range) +            setclass(shown_range[0], shown_range[1], "indexrow"); +        setclass(first, last, "indexshow"); +        shown_range = [first, last]; +        table.className = "indexsearch"; +        status.innerHTML = ""; +    } + +     +    function setclass(first, last, status) +    { +        for (var i = first; i <= last; i++) +        { +            children[i].className = status; +        } +    } +     +     +    // do a binary search, treating 0 as ... +    // return either -1 (no 0's found) or location of most far match +    function bisect(dir) +    { +        var first = 0, finish = children.length - 1; +        var mid, success = false; + +        while (finish - first > 3) +        { +            mid = Math.floor((finish + first) / 2); + +            var i = checkitem(mid); +            if (i == 0) i = dir; +            if (i == -1) +                finish = mid; +            else +                first = mid; +        } +        var a = (dir == 1 ? first : finish); +        var b = (dir == 1 ? finish : first); +        for (var i = b; i != a - dir; i -= dir) +        { +            if (checkitem(i) == 0) return i; +        } +        return -1; +    }     +     +     +    // from an index, decide what the result is +    // 0 = match, -1 is lower, 1 is higher +    function checkitem(i) +    { +        var s = getitem(i).toLowerCase().substr(0, text.length); +        if (s == text) return 0; +        else return (s > text ? -1 : 1); +    } +     +     +    // from an index, get its string +    // this abstracts over alternates +    function getitem(i) +    { +        for ( ; i >= 0; i--) +        { +            var s = children[i].firstChild.firstChild.data; +            if (s.indexOf(' ') == -1) +                return s; +        } +        return ""; // should never be reached +    } +} + +function setSynopsis(filename) { +    if (parent.window.synopsis) { +        if (parent.window.synopsis.location.replace) { +            // In Firefox this avoids adding the change to the history. +            parent.window.synopsis.location.replace(filename); +        } else { +            parent.window.synopsis.location = filename; +        } +    } +} + +function addMenuItem(html) { +  var menu = document.getElementById("page-menu"); +  if (menu) { +    var btn = menu.firstChild.cloneNode(false); +    btn.innerHTML = html; +    menu.appendChild(btn); +  } +} + +function adjustForFrames() { +  var bodyCls; +   +  if (parent.location.href == window.location.href) { +    // not in frames, so add Frames button +    addMenuItem("<a href='#' onclick='reframe();return true;'>Frames</a>"); +    bodyCls = "no-frame"; +  } +  else { +    bodyCls = "in-frame"; +  } +  addClass(document.body, bodyCls); +} + +function reframe() { +  setCookie("haddock-reframe", document.URL); +  window.location = "frames.html"; +} + +function postReframe() { +  var s = getCookie("haddock-reframe"); +  if (s) { +    parent.window.main.location = s; +    clearCookie("haddock-reframe"); +  } +} + +function styles() { +  var i, a, es = document.getElementsByTagName("link"), rs = []; +  for (i = 0; a = es[i]; i++) { +    if(a.rel.indexOf("style") != -1 && a.title) { +      rs.push(a); +    } +  } +  return rs; +} + +function addStyleMenu() { +  var as = styles(); +  var i, a, btns = ""; +  for(i=0; a = as[i]; i++) { +    btns += "<li><a href='#' onclick=\"setActiveStyleSheet('" +      + a.title + "'); return false;\">" +      + a.title + "</a></li>" +  } +  if (as.length > 1) { +    var h = "<div id='style-menu-holder'>" +      + "<a href='#' onclick='styleMenu(); return false;'>Style ▾</a>" +      + "<ul id='style-menu' class='hide'>" + btns + "</ul>" +      + "</div>"; +    addMenuItem(h); +  } +} + +function setActiveStyleSheet(title) { +  var as = styles(); +  var i, a, found; +  for(i=0; a = as[i]; i++) { +    a.disabled = true; +          // need to do this always, some browsers are edge triggered +    if(a.title == title) { +      found = a; +    } +  } +  if (found) { +    found.disabled = false; +    setCookie("haddock-style", title); +  } +  else { +    as[0].disabled = false; +    clearCookie("haddock-style"); +  } +  styleMenu(false); +} + +function resetStyle() { +  var s = getCookie("haddock-style"); +  if (s) setActiveStyleSheet(s); +} + + +function styleMenu(show) { +  var m = document.getElementById('style-menu'); +  if (m) toggleShow(m, show); +} + + +function pageLoad() { +  addStyleMenu(); +  adjustForFrames(); +  resetStyle(); +  restoreCollapsed(); +} + diff --git a/latex/haddock.sty b/resources/latex/haddock.sty index 6e031a98..6e031a98 100644 --- a/latex/haddock.sty +++ b/resources/latex/haddock.sty diff --git a/src/.ghci b/src/.ghci deleted file mode 100644 index f00e6d55..00000000 --- a/src/.ghci +++ /dev/null @@ -1 +0,0 @@ -:set -i../dist/build/autogen -i../dist/build/haddock/haddock-tmp/ -packageghc -optP-include -optP../dist/build/autogen/cabal_macros.h -XCPP -XDeriveDataTypeable -XScopedTypeVariables -XMagicHash diff --git a/src/Documentation/Haddock.hs b/src/Documentation/Haddock.hs index 60bb3147..36115a2a 100644 --- a/src/Documentation/Haddock.hs +++ b/src/Documentation/Haddock.hs @@ -35,7 +35,13 @@ module Documentation.Haddock (    -- * Documentation comments    Doc(..),    Example(..), +  Hyperlink(..),    DocMarkup(..), +  Documentation(..), +  ArgMap, +  AliasMap, +  WarningMap, +  DocMap,    HaddockModInfo(..),    markup, @@ -48,8 +54,10 @@ module Documentation.Haddock (    -- * Flags and options    Flag(..), -  DocOption(..) +  DocOption(..), +  -- * Program entry point +  haddock,  ) where @@ -58,7 +66,7 @@ import Haddock.Interface  import Haddock.Types  import Haddock.Options  import Haddock.Utils -import Main +import Haddock  -- | Create 'Interface' structures from a given list of Haddock command-line @@ -70,6 +78,5 @@ createInterfaces    -> [String]       -- ^ File or module names    -> IO [Interface] -- ^ Resulting list of interfaces  createInterfaces flags modules = do -  (_, ifaces, _) <- readPackagesAndProcessModules flags modules +  (_, ifaces, _) <- withGhc' flags (readPackagesAndProcessModules flags modules)    return ifaces - diff --git a/src/Main.hs b/src/Haddock.hs index dc5a49d2..3b31c756 100644 --- a/src/Main.hs +++ b/src/Haddock.hs @@ -1,8 +1,8 @@  {-# OPTIONS_GHC -Wwarn #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE CPP, ScopedTypeVariables #-}  -----------------------------------------------------------------------------  -- | --- Module      :  Main +-- Module      :  Haddock  -- Copyright   :  (c) Simon Marlow 2003-2006,  --                    David Waern  2006-2010  -- License     :  BSD-like @@ -15,7 +15,7 @@  --  -- Program entry point and top-level code.  ----------------------------------------------------------------------------- -module Main (main, readPackagesAndProcessModules) where +module Haddock (haddock, readPackagesAndProcessModules, withGhc') where  import Haddock.Backends.Xhtml @@ -32,14 +32,14 @@ import Haddock.Options  import Haddock.Utils  import Haddock.GhcUtils hiding (pretty) -import Control.Monad +import Control.Monad hiding (forM_) +import Data.Foldable (forM_)  import Control.Exception  import Data.Maybe  import Data.IORef  import qualified Data.Map as Map  import System.IO  import System.Exit -import System.Environment  #if defined(mingw32_HOST_OS)  import Foreign @@ -61,9 +61,6 @@ import StaticFlags (saveStaticFlagGlobals, restoreStaticFlagGlobals)  import Panic (handleGhcException)  import Module -import Control.Monad.Fix (MonadFix) - -  --------------------------------------------------------------------------------  -- * Exception handling  -------------------------------------------------------------------------------- @@ -123,27 +120,23 @@ handleGhcExceptions =  ------------------------------------------------------------------------------- -main :: IO () -main = handleTopExceptions $ do +-- | Run Haddock with given list of arguments. +-- +-- Haddock's own main function is defined in terms of this: +-- +-- > main = getArgs >>= haddock +haddock :: [String] -> IO () +haddock args = handleTopExceptions $ do    -- Parse command-line flags and handle some of them initially.    -- TODO: unify all of this (and some of what's in the 'render' function),    -- into one function that returns a record with a field for each option,    -- or which exits with an error or help message. -  args <- getArgs    (flags, files) <- parseHaddockOpts args    shortcutFlags flags    qual <- case qualification flags of {Left msg -> throwE msg; Right q -> return q} -  libDir <- fmap snd (getGhcDirs flags) - -  -- Catches all GHC source errors, then prints and re-throws them. -  let handleSrcErrors action' = flip handleSourceError action' $ \err -> do -        printException err -        liftIO exitFailure - -  -- Initialize GHC. -  withGhc libDir (ghcFlags flags) $ \_ -> handleSrcErrors $ do +  withGhc' flags $ do      dflags <- getDynFlags @@ -151,9 +144,11 @@ main = handleTopExceptions $ do        (packages, ifaces, homeLinks) <- readPackagesAndProcessModules flags files        -- Dump an "interface file" (.haddock file), if requested. -      case optDumpInterfaceFile flags of -        Just f -> liftIO $ dumpInterfaceFile f (map toInstalledIface ifaces) homeLinks -        Nothing -> return () +      forM_ (optDumpInterfaceFile flags) $ \path -> liftIO $ do +        writeInterfaceFile path InterfaceFile { +            ifInstalledIfaces = map toInstalledIface ifaces +          , ifLinkEnv         = homeLinks +          }        -- Render the interfaces.        liftIO $ renderStep dflags flags qual packages ifaces @@ -169,6 +164,18 @@ main = handleTopExceptions $ do        liftIO $ renderStep dflags flags qual packages [] +withGhc' :: [Flag] -> Ghc a -> IO a +withGhc' flags action = do +  libDir <- fmap snd (getGhcDirs flags) + +  -- Catches all GHC source errors, then prints and re-throws them. +  let handleSrcErrors action' = flip handleSourceError action' $ \err -> do +        printException err +        liftIO exitFailure + +  withGhc libDir (ghcFlags flags) (\_ -> handleSrcErrors action) + +  readPackagesAndProcessModules :: [Flag] -> [String]                                -> Ghc ([(DocPaths, InterfaceFile)], [Interface], LinkEnv)  readPackagesAndProcessModules flags files = do @@ -260,13 +267,12 @@ render dflags flags qual ifaces installedIfaces srcMap = do  ------------------------------------------------------------------------------- -readInterfaceFiles :: (MonadFix m, MonadIO m) => -                      NameCacheAccessor m -                   -> [(DocPaths, FilePath)] -> -                      m [(DocPaths, InterfaceFile)] +readInterfaceFiles :: MonadIO m +                   => NameCacheAccessor m +                   -> [(DocPaths, FilePath)] +                   -> m [(DocPaths, InterfaceFile)]  readInterfaceFiles name_cache_accessor pairs = do -  mbPackages <- mapM tryReadIface pairs -  return (catMaybes mbPackages) +  catMaybes `liftM` mapM tryReadIface pairs    where      -- try to read an interface, warn if we can't      tryReadIface (paths, file) = do @@ -280,15 +286,6 @@ readInterfaceFiles name_cache_accessor pairs = do          Right f -> return $ Just (paths, f) -dumpInterfaceFile :: FilePath -> [InstalledInterface] -> LinkEnv -> IO () -dumpInterfaceFile path ifaces homeLinks = writeInterfaceFile path ifaceFile -  where -    ifaceFile = InterfaceFile { -        ifInstalledIfaces = ifaces, -        ifLinkEnv         = homeLinks -      } - -  -------------------------------------------------------------------------------  -- * Creating a GHC session  ------------------------------------------------------------------------------- diff --git a/src/Haddock/Backends/Hoogle.hs b/src/Haddock/Backends/Hoogle.hs index 4417dc52..64905a37 100644 --- a/src/Haddock/Backends/Hoogle.hs +++ b/src/Haddock/Backends/Hoogle.hs @@ -253,8 +253,9 @@ markupTag dflags = Markup {    markupOrderedList          = box (TagL 'o'),    markupDefList              = box (TagL 'u') . map (\(a,b) -> TagInline "i" a : Str " " : b),    markupCodeBlock            = box TagPre, -  markupURL                  = box (TagInline "a") . str, +  markupHyperlink            = \(Hyperlink url mLabel) -> (box (TagInline "a") . str) (fromMaybe url mLabel),    markupAName                = const $ str "", +  markupProperty             = box TagPre . str,    markupExample              = box TagPre . str . unlines . map exampleToString    } diff --git a/src/Haddock/Backends/LaTeX.hs b/src/Haddock/Backends/LaTeX.hs index 6df9062e..5d0fabe9 100644 --- a/src/Haddock/Backends/LaTeX.hs +++ b/src/Haddock/Backends/LaTeX.hs @@ -1002,8 +1002,9 @@ parLatexMarkup ppId = Markup {    markupOrderedList          = \p v -> enumeratedList (map ($v) p) $$ text "",    markupDefList              = \l v -> descriptionList (map (\(a,b) -> (a v, b v)) l),    markupCodeBlock            = \p _ -> quote (verb (p Verb)) $$ text "", -  markupURL                  = \u _ -> text "\\url" <> braces (text u), +  markupHyperlink            = \l _ -> markupLink l,    markupAName                = \_ _ -> empty, +  markupProperty             = \p _ -> quote $ verb $ text p,    markupExample              = \e _ -> quote $ verb $ text $ unlines $ map exampleToString e    }    where @@ -1011,6 +1012,10 @@ parLatexMarkup ppId = Markup {      fixString Verb  s = s      fixString Mono  s = latexMonoFilter s +    markupLink (Hyperlink url mLabel) = case mLabel of +      Just label -> text "\\href" <> braces (text url) <> braces (text label) +      Nothing    -> text "\\url"  <> braces (text url) +      markupId ppId_ id v =        case v of          Verb  -> theid diff --git a/src/Haddock/Backends/Xhtml/DocMarkup.hs b/src/Haddock/Backends/Xhtml/DocMarkup.hs index 052116ee..aa4ba377 100644 --- a/src/Haddock/Backends/Xhtml/DocMarkup.hs +++ b/src/Haddock/Backends/Xhtml/DocMarkup.hs @@ -25,6 +25,7 @@ import Haddock.Types  import Haddock.Utils  import Text.XHtml hiding ( name, title, p, quote ) +import Data.Maybe (fromMaybe)  import GHC @@ -46,9 +47,10 @@ parHtmlMarkup qual ppId = Markup {    markupOrderedList          = ordList,    markupDefList              = defList,    markupCodeBlock            = pre, -  markupURL                  = \url -> anchor ! [href url] << url, +  markupHyperlink            = \(Hyperlink url mLabel) -> anchor ! [href url] << fromMaybe url mLabel,    markupAName                = \aname -> namedAnchor aname << "",    markupPic                  = \path -> image ! [src path], +  markupProperty             = pre . toHtml,    markupExample              = examplesToHtml    }    where diff --git a/src/Haddock/Interface.hs b/src/Haddock/Interface.hs index e1e65d18..ea1f42e5 100644 --- a/src/Haddock/Interface.hs +++ b/src/Haddock/Interface.hs @@ -43,6 +43,7 @@ import Haddock.Utils  import Control.Monad  import Data.List  import qualified Data.Map as Map +import qualified Data.Set as Set  import Distribution.Verbosity  import System.Directory  import System.FilePath @@ -72,8 +73,12 @@ processModules verbosity modules flags extIfaces = do                                     , iface <- ifInstalledIfaces ext ]    interfaces <- createIfaces0 verbosity modules flags instIfaceMap +  let exportedNames = +        Set.unions $ map (Set.fromList . ifaceExports) $ +        filter (\i -> not $ OptHide `elem` ifaceOptions i) interfaces +      mods = Set.fromList $ map ifaceMod interfaces    out verbosity verbose "Attaching instances..." -  interfaces' <- attachInstances interfaces instIfaceMap +  interfaces' <- attachInstances (exportedNames, mods) interfaces instIfaceMap    out verbosity verbose "Building cross-linking environment..."    -- Combine the link envs of the external packages into one diff --git a/src/Haddock/Interface/AttachInstances.hs b/src/Haddock/Interface/AttachInstances.hs index 427ef84d..04c4e5e1 100644 --- a/src/Haddock/Interface/AttachInstances.hs +++ b/src/Haddock/Interface/AttachInstances.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE MagicHash #-} +{-# LANGUAGE CPP, MagicHash #-}  -----------------------------------------------------------------------------  -- |  -- Module      :  Haddock.Interface.AttachInstances @@ -20,37 +20,42 @@ import Haddock.Convert  import Control.Arrow  import Data.List  import qualified Data.Map as Map +import qualified Data.Set as Set -import GHC -import Name -import InstEnv  import Class +import FastString +import GHC  import GhcMonad (withSession) -import TysPrim( funTyCon ) +import Id +import InstEnv  import MonadUtils (liftIO) +import Name +import PrelNames  import TcRnDriver (tcRnGetInfo) +import TyCon  import TypeRep +import TysPrim( funTyCon )  import Var hiding (varName) -import TyCon -import PrelNames -import FastString  #define FSLIT(x) (mkFastString# (x#)) +type ExportedNames = Set.Set Name +type Modules = Set.Set Module +type ExportInfo = (ExportedNames, Modules) -attachInstances :: [Interface] -> InstIfaceMap -> Ghc [Interface] -attachInstances ifaces instIfaceMap = mapM attach ifaces +attachInstances :: ExportInfo -> [Interface] -> InstIfaceMap -> Ghc [Interface] +attachInstances expInfo ifaces instIfaceMap = mapM attach ifaces    where      -- TODO: take an IfaceMap as input      ifaceMap = Map.fromList [ (ifaceMod i, i) | i <- ifaces ]      attach iface = do -      newItems <- mapM (attachToExportItem iface ifaceMap instIfaceMap) +      newItems <- mapM (attachToExportItem expInfo iface ifaceMap instIfaceMap)                         (ifaceExportItems iface)        return $ iface { ifaceExportItems = newItems } -attachToExportItem :: Interface -> IfaceMap -> InstIfaceMap -> ExportItem Name -> Ghc (ExportItem Name) -attachToExportItem iface ifaceMap instIfaceMap export = +attachToExportItem :: ExportInfo -> Interface -> IfaceMap -> InstIfaceMap -> ExportItem Name -> Ghc (ExportItem Name) +attachToExportItem expInfo iface ifaceMap instIfaceMap export =    case export of      ExportDecl { expItemDecl = L _ (TyClD d) } -> do        mb_info <- getAllInfo (tcdName d) @@ -61,6 +66,11 @@ attachToExportItem iface ifaceMap instIfaceMap export =                    Just (_, _, instances) ->                      let insts = map (first synifyInstHead) $ sortImage (first instHead)                                  [ (instanceSig i, getName i) | i <- instances ] +{- FIXME +                    let insts = map (first synifyInstHead) $ sortImage (first instHead) $ +                                filter (\((_,_,cls,tys),_) -> not $ isInstanceHidden expInfo cls tys) +                                [ (instanceHead' i, getName i) | i <- instances ] +-}                      in [ (inst, lookupInstDoc name iface ifaceMap instIfaceMap)                         | (inst, name) <- insts ]                    Nothing -> [] @@ -89,6 +99,22 @@ lookupInstDoc name iface ifaceMap instIfaceMap =      modName = nameModule name +-- | Like GHC's 'instanceHead' but drops "silent" arguments. +{- FIXME +instanceHead' :: ClsInst -> ([TyVar], ThetaType, Class, [Type]) +instanceHead' ispec = (tvs, dropSilentArgs dfun theta, cls, tys) +  where +    dfun = is_dfun ispec +    (tvs, theta, cls, tys) = instanceHead ispec +-} + + +-- | Drop "silent" arguments. See GHC Note [Silent superclass +-- arguments]. +dropSilentArgs :: DFunId -> ThetaType -> ThetaType +dropSilentArgs dfun theta = drop (dfunNSilent dfun) theta + +  -- | Like GHC's getInfo but doesn't cut things out depending on the  -- interative context, which we don't set sufficiently anyway.  getAllInfo :: GhcMonad m => Name -> m (Maybe (TyThing,Fixity,[ClsInst])) @@ -143,3 +169,42 @@ funTyConName = mkWiredInName gHC_PRIM                          funTyConKey                          (ATyCon funTyCon)       -- Relevant TyCon                          BuiltInSyntax + +-------------------------------------------------------------------------------- +-- Filtering hidden instances +-------------------------------------------------------------------------------- + +-- | A class or data type is hidden iff +-- +-- * it is defined in one of the modules that are being processed +-- +-- * and it is not exported by any non-hidden module +isNameHidden :: ExportInfo -> Name -> Bool +isNameHidden (names, modules) name = +  nameModule name `Set.member` modules && +  not (name `Set.member` names) + +-- | We say that an instance is «hidden» iff its class or any (part) +-- of its type(s) is hidden. +isInstanceHidden :: ExportInfo -> Class -> [Type] -> Bool +isInstanceHidden expInfo cls tys = +    instClassHidden || instTypeHidden +  where +    instClassHidden :: Bool +    instClassHidden = isNameHidden expInfo $ getName cls + +    instTypeHidden :: Bool +    instTypeHidden = any typeHidden tys + +    nameHidden :: Name -> Bool +    nameHidden = isNameHidden expInfo + +    typeHidden :: Type -> Bool +    typeHidden t = +      case t of +        TyVarTy {} -> False +        AppTy t1 t2 -> typeHidden t1 || typeHidden t2 +        TyConApp tcon args -> nameHidden (getName tcon) || any typeHidden args +        FunTy t1 t2 -> typeHidden t1 || typeHidden t2 +        ForAllTy _ ty -> typeHidden ty +        LitTy _ -> False diff --git a/src/Haddock/Interface/Create.hs b/src/Haddock/Interface/Create.hs index 8f429d9c..40016a0b 100644 --- a/src/Haddock/Interface/Create.hs +++ b/src/Haddock/Interface/Create.hs @@ -1,4 +1,5 @@  {-# LANGUAGE TupleSections, BangPatterns #-} +{-# OPTIONS_GHC -Wwarn #-}  -----------------------------------------------------------------------------  -- |  -- Module      :  Haddock.Interface.Create @@ -40,7 +41,7 @@ import Name  import Bag  import RdrName  import TcRnTypes -import FastString (unpackFS) +import FastString (unpackFS, concatFS)  -- | Use a 'TypecheckedModule' to produce an 'Interface'. @@ -89,8 +90,11 @@ createInterface tm flags modMap instIfaceMap = do    liftErrMsg $ warnAboutFilteredDecls dflags mdl decls -  let warningMap = mkWarningMap warnings gre exportedNames -  exportItems <- mkExportItems modMap mdl warningMap gre exportedNames decls maps exports +  warningMap <- liftErrMsg $ mkWarningMap dflags warnings gre exportedNames + +  let allWarnings = M.unions (warningMap : map ifaceWarningMap (M.elems modMap)) + +  exportItems <- mkExportItems modMap mdl allWarnings gre exportedNames decls maps exports                     instances instIfaceMap dflags    let !visibleNames = mkVisibleNames exportItems opts @@ -111,26 +115,29 @@ createInterface tm flags modMap instIfaceMap = do    let !aliases =          mkAliasMap dflags $ tm_renamed_source tm +  modWarn <- liftErrMsg $ moduleWarning dflags gre warnings +    return $! Interface { -    ifaceMod             = mdl, -    ifaceOrigFilename    = msHsFilePath ms, -    ifaceInfo            = info, -    ifaceDoc             = Documentation mbDoc (moduleWarning warnings), -    ifaceRnDoc           = Documentation Nothing Nothing, -    ifaceOptions         = opts, -    ifaceDocMap          = docMap, -    ifaceArgMap          = argMap, -    ifaceRnDocMap        = M.empty, -    ifaceRnArgMap        = M.empty, -    ifaceExportItems     = prunedExportItems, -    ifaceRnExportItems   = [], -    ifaceExports         = exportedNames, -    ifaceVisibleExports  = visibleNames, -    ifaceDeclMap         = declMap, -    ifaceSubMap          = subMap, -    ifaceModuleAliases   = aliases, -    ifaceInstances       = instances, -    ifaceHaddockCoverage = coverage +    ifaceMod             = mdl +  , ifaceOrigFilename    = msHsFilePath ms +  , ifaceInfo            = info +  , ifaceDoc             = Documentation mbDoc modWarn +  , ifaceRnDoc           = Documentation Nothing Nothing +  , ifaceOptions         = opts +  , ifaceDocMap          = docMap +  , ifaceArgMap          = argMap +  , ifaceRnDocMap        = M.empty +  , ifaceRnArgMap        = M.empty +  , ifaceExportItems     = prunedExportItems +  , ifaceRnExportItems   = [] +  , ifaceExports         = exportedNames +  , ifaceVisibleExports  = visibleNames +  , ifaceDeclMap         = declMap +  , ifaceSubMap          = subMap +  , ifaceModuleAliases   = aliases +  , ifaceInstances       = instances +  , ifaceHaddockCoverage = coverage +  , ifaceWarningMap      = warningMap    }  mkAliasMap :: DynFlags -> Maybe RenamedSource -> M.Map Module ModuleName @@ -166,31 +173,35 @@ lookupModuleDyn dflags Nothing mdlName =  -- Warnings  ------------------------------------------------------------------------------- -type WarningMap = DocMap Name - -mkWarningMap :: Warnings -> GlobalRdrEnv -> [Name] -> WarningMap -mkWarningMap NoWarnings  _ _ = M.empty -mkWarningMap (WarnAll _) _ _ = M.empty -mkWarningMap (WarnSome ws) gre exps = M.fromList -      [ (n, warnToDoc w) | (occ, w) <- ws, elt <- lookupGlobalRdrEnv gre occ -      , let n = gre_name elt, n `elem` exps ] +mkWarningMap :: DynFlags -> Warnings -> GlobalRdrEnv -> [Name] -> ErrMsgM WarningMap +mkWarningMap dflags warnings gre exps = case warnings of +  NoWarnings  -> return M.empty +  WarnAll _   -> return M.empty +  WarnSome ws -> do +    let ws' = [ (n, w) | (occ, w) <- ws, elt <- lookupGlobalRdrEnv gre occ +              , let n = gre_name elt, n `elem` exps ] +    M.fromList <$> mapM parse ws' +  where +    parse (n, w) = (,) n <$> parseWarning dflags gre w -moduleWarning :: Warnings -> Maybe (Doc id) -moduleWarning ws = +moduleWarning :: DynFlags -> GlobalRdrEnv -> Warnings -> ErrMsgM (Maybe (Doc Name)) +moduleWarning dflags gre ws =    case ws of -    NoWarnings -> Nothing -    WarnSome _ -> Nothing -    WarnAll w  -> Just $! warnToDoc w - - -warnToDoc :: WarningTxt -> Doc id -warnToDoc w = case w of -  (DeprecatedTxt msg) -> format "Deprecated: " msg -  (WarningTxt    msg) -> format "Warning: "    msg +    NoWarnings -> return Nothing +    WarnSome _ -> return Nothing +    WarnAll w  -> Just <$> parseWarning dflags gre w + +parseWarning :: DynFlags -> GlobalRdrEnv -> WarningTxt -> ErrMsgM (Doc Name) +parseWarning dflags gre w = do +  r <- case w of +    (DeprecatedTxt msg) -> format "Deprecated: " (concatFS msg) +    (WarningTxt    msg) -> format "Warning: "    (concatFS msg) +  r `deepseq` return r    where -    format x xs = let !str = force $ concat (x : map unpackFS xs) -                  in DocWarning $ DocParagraph $ DocString str +    format x xs = DocWarning . DocParagraph . DocAppend (DocString x) +      .   fromMaybe (DocString . unpackFS $ xs) +      <$> processDocString dflags gre (HsDocString xs)  ------------------------------------------------------------------------------- @@ -703,6 +714,7 @@ fullModuleContents dflags warnings gre (docMap, argMap, subMap, declMap) decls =          f (L l (SigD (GenericSig names t))) xs = foldr (\n acc -> L l (SigD (GenericSig [n] t)) : acc) xs names          f x xs = x : xs +    mkExportItem :: LHsDecl Name -> ErrMsgGhc (Maybe (ExportItem Name))      mkExportItem (L _ (DocD (DocGroup lev docStr))) = do        mbDoc <- liftErrMsg $ processDocString dflags gre docStr        return $ fmap (ExportGroup lev "") mbDoc @@ -777,7 +789,7 @@ extractRecSel nm mdl t tvs (L _ con : rest) =    data_ty = foldl (\x y -> noLoc (HsAppTy x y)) (noLoc (HsTyVar t)) (map toTypeNoLoc tvs) --- | Keep exprt items with docs. +-- | Keep export items with docs.  pruneExportItems :: [ExportItem Name] -> [ExportItem Name]  pruneExportItems = filter hasDoc    where diff --git a/src/Haddock/Interface/LexParseRn.hs b/src/Haddock/Interface/LexParseRn.hs index 8070b137..ced12d8d 100644 --- a/src/Haddock/Interface/LexParseRn.hs +++ b/src/Haddock/Interface/LexParseRn.hs @@ -1,3 +1,4 @@ +{-# OPTIONS_GHC -Wwarn #-}  {-# LANGUAGE BangPatterns #-}    -----------------------------------------------------------------------------  -- | @@ -117,9 +118,10 @@ rename dflags gre = rn        DocCodeBlock doc -> DocCodeBlock (rn doc)        DocIdentifierUnchecked x -> DocIdentifierUnchecked x        DocModule str -> DocModule str -      DocURL str -> DocURL str +      DocHyperlink l -> DocHyperlink l        DocPic str -> DocPic str        DocAName str -> DocAName str +      DocProperty p -> DocProperty p        DocExamples e -> DocExamples e        DocEmpty -> DocEmpty        DocString str -> DocString str diff --git a/src/Haddock/Interface/ParseModuleHeader.hs b/src/Haddock/Interface/ParseModuleHeader.hs index 411b6661..18f4c768 100644 --- a/src/Haddock/Interface/ParseModuleHeader.hs +++ b/src/Haddock/Interface/ParseModuleHeader.hs @@ -1,3 +1,4 @@ +{-# OPTIONS_GHC -Wwarn #-}  -----------------------------------------------------------------------------  -- |  -- Module      :  Haddock.Interface.ParseModuleHeader diff --git a/src/Haddock/Interface/Rename.hs b/src/Haddock/Interface/Rename.hs index b384886c..a2499726 100644 --- a/src/Haddock/Interface/Rename.hs +++ b/src/Haddock/Interface/Rename.hs @@ -82,42 +82,41 @@ renameInterface dflags renamingEnv warnings iface =  -------------------------------------------------------------------------------- -newtype GenRnM n a = -  RnM { unRn :: (n -> (Bool, DocName))  -- name lookup function -             -> (a,[n]) +newtype RnM a = +  RnM { unRn :: (Name -> (Bool, DocName))  -- name lookup function +             -> (a,[Name])        } -type RnM a = GenRnM Name a - -instance Monad (GenRnM n) where +instance Monad RnM where    (>>=) = thenRn    return = returnRn -instance Functor (GenRnM n) where +instance Functor RnM where    fmap f x = do a <- x; return (f a) -instance Applicative (GenRnM n) where +instance Applicative RnM where    pure = return    (<*>) = ap -returnRn :: a -> GenRnM n a +returnRn :: a -> RnM a  returnRn a   = RnM (const (a,[])) -thenRn :: GenRnM n a -> (a -> GenRnM n b) -> GenRnM n b +thenRn :: RnM a -> (a -> RnM b) -> RnM b  m `thenRn` k = RnM (\lkp -> case unRn m lkp of    (a,out1) -> case unRn (k a) lkp of      (b,out2) -> (b,out1++out2))  getLookupRn :: RnM (Name -> (Bool, DocName))  getLookupRn = RnM (\lkp -> (lkp,[])) +  outRn :: Name -> RnM ()  outRn name = RnM (const ((),[name])) -lookupRn :: (DocName -> a) -> Name -> RnM a -lookupRn and_then name = do +lookupRn :: Name -> RnM DocName +lookupRn name = do    lkp <- getLookupRn    case lkp name of -    (False,maps_to) -> do outRn name; return (and_then maps_to) -    (True, maps_to) -> return (and_then maps_to) +    (False,maps_to) -> do outRn name; return maps_to +    (True, maps_to) -> return maps_to  runRnFM :: LinkEnv -> RnM a -> (a,[Name]) @@ -134,7 +133,7 @@ runRnFM env rn = unRn rn lkp  rename :: Name -> RnM DocName -rename = lookupRn id +rename = lookupRn  renameL :: Located Name -> RnM (Located DocName) @@ -199,9 +198,10 @@ renameDoc d = case d of    DocCodeBlock doc -> do      doc' <- renameDoc doc      return (DocCodeBlock doc') -  DocURL str -> return (DocURL str) +  DocHyperlink l -> return (DocHyperlink l)    DocPic str -> return (DocPic str)    DocAName str -> return (DocAName str) +  DocProperty p -> return (DocProperty p)    DocExamples e -> return (DocExamples e) @@ -270,8 +270,16 @@ renameType t = case t of    HsTyLit x -> return (HsTyLit x) -  _ -> error "renameType" +  HsWrapTy a b            -> HsWrapTy a <$> renameType b +  HsRecTy a               -> HsRecTy <$> mapM renameConDeclFieldField a +  HsCoreTy a              -> pure (HsCoreTy a) +  HsExplicitListTy  a b   -> HsExplicitListTy  a <$> mapM renameLType b +  HsExplicitTupleTy a b   -> HsExplicitTupleTy a <$> mapM renameLType b +  HsQuasiQuoteTy a        -> HsQuasiQuoteTy <$> renameHsQuasiQuote a +  HsSpliceTy _ _ _        -> error "renameType: HsSpliceTy" +renameHsQuasiQuote :: HsQuasiQuote Name -> RnM (HsQuasiQuote DocName) +renameHsQuasiQuote (HsQuasiQuote a b c) = HsQuasiQuote <$> rename a <*> pure b <*> pure c  renameLTyVarBndrs :: LHsTyVarBndrs Name -> RnM (LHsTyVarBndrs DocName)  renameLTyVarBndrs (HsQTvs { hsq_kvs = _, hsq_tvs = tvs }) @@ -402,22 +410,25 @@ renameCon decl@(ConDecl { con_name = lname, con_qvars = ltyvars        return (decl { con_name = lname', con_qvars = ltyvars', con_cxt = lcontext'                     , con_details = details', con_res = restype', con_doc = mbldoc' })    where -    renameDetails (RecCon fields) = return . RecCon =<< mapM renameField fields +    renameDetails (RecCon fields) = return . RecCon =<< mapM renameConDeclFieldField fields      renameDetails (PrefixCon ps) = return . PrefixCon =<< mapM renameLType ps      renameDetails (InfixCon a b) = do        a' <- renameLType a        b' <- renameLType b        return (InfixCon a' b') -    renameField (ConDeclField name t doc) = do -      name' <- renameL name -      t'   <- renameLType t -      doc' <- mapM renameLDocHsSyn doc -      return (ConDeclField name' t' doc') -      renameResType (ResTyH98) = return ResTyH98      renameResType (ResTyGADT t) = return . ResTyGADT =<< renameLType t + +renameConDeclFieldField :: ConDeclField Name -> RnM (ConDeclField DocName) +renameConDeclFieldField (ConDeclField name t doc) = do +  name' <- renameL name +  t'   <- renameLType t +  doc' <- mapM renameLDocHsSyn doc +  return (ConDeclField name' t' doc') + +  renameSig :: Sig Name -> RnM (Sig DocName)  renameSig sig = case sig of    TypeSig lnames ltype -> do @@ -498,8 +509,8 @@ renameExportItem item = case item of        return (inst', idoc')      return (ExportDecl decl' doc' subs' instances')    ExportNoDecl x subs -> do -    x'    <- lookupRn id x -    subs' <- mapM (lookupRn id) subs +    x'    <- lookupRn x +    subs' <- mapM lookupRn subs      return (ExportNoDecl x' subs')    ExportDoc doc -> do      doc' <- renameDoc doc diff --git a/src/Haddock/InterfaceFile.hs b/src/Haddock/InterfaceFile.hs index a07b1b03..ec7272e7 100644 --- a/src/Haddock/InterfaceFile.hs +++ b/src/Haddock/InterfaceFile.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE CPP, RankNTypes, ScopedTypeVariables #-}  {-# OPTIONS_GHC -fno-warn-orphans #-}  -----------------------------------------------------------------------------  -- | @@ -61,9 +61,18 @@ binaryInterfaceMagic :: Word32  binaryInterfaceMagic = 0xD0Cface --- Since datatypes in the GHC API might change between major versions, and --- because we store GHC datatypes in our interface files, we need to make sure --- we version our interface files accordingly. +-- IMPORTANT: Since datatypes in the GHC API might change between major +-- versions, and because we store GHC datatypes in our interface files, we need +-- to make sure we version our interface files accordingly. +-- +-- If you change the interface file format or adapt Haddock to work with a new +-- major version of GHC (so that the format changes indirectly) *you* need to +-- follow these steps: +-- +-- (1) increase `binaryInterfaceVersion` +-- +-- (2) set `binaryInterfaceVersionCompatibility` to [binaryInterfaceVersion] +--  binaryInterfaceVersion :: Word16  #if __GLASGOW_HASKELL__ == 702  binaryInterfaceVersion = 20 @@ -76,9 +85,12 @@ binaryInterfaceVersion = 20  #elif __GLASGOW_HASKELL__ == 706  binaryInterfaceVersion = 20  #elif __GLASGOW_HASKELL__ == 707 -binaryInterfaceVersion = 20 +binaryInterfaceVersion = 22 + +binaryInterfaceVersionCompatibility :: [Word16] +binaryInterfaceVersionCompatibility = [21, 22]  #else -#error Unknown GHC version +#error Unsupported GHC version  #endif @@ -189,7 +201,7 @@ readInterfaceFile (get_name_cache, set_name_cache) filename = do    case () of      _ | magic /= binaryInterfaceMagic -> return . Left $        "Magic number mismatch: couldn't load interface file: " ++ filename -      | version /= binaryInterfaceVersion -> return . Left $ +      | version `notElem` binaryInterfaceVersionCompatibility -> return . Left $        "Interface file is of wrong version: " ++ filename        | otherwise -> with_name_cache $ \update_nc -> do @@ -417,6 +429,15 @@ instance Binary Example where          result <- get bh          return (Example expression result) +instance Binary Hyperlink where +    put_ bh (Hyperlink url label) = do +        put_ bh url +        put_ bh label +    get bh = do +        url <- get bh +        label <- get bh +        return (Hyperlink url label) +  {-* Generated by DrIFT : Look, but Don't Touch. *-}  instance (Binary id) => Binary (Doc id) where @@ -456,7 +477,7 @@ instance (Binary id) => Binary (Doc id) where      put_ bh (DocCodeBlock al) = do              putByte bh 11              put_ bh al -    put_ bh (DocURL am) = do +    put_ bh (DocHyperlink am) = do              putByte bh 12              put_ bh am      put_ bh (DocPic x) = do @@ -474,6 +495,9 @@ instance (Binary id) => Binary (Doc id) where      put_ bh (DocWarning ag) = do              putByte bh 17              put_ bh ag +    put_ bh (DocProperty x) = do +            putByte bh 18 +            put_ bh x      get bh = do              h <- getByte bh              case h of @@ -515,7 +539,7 @@ instance (Binary id) => Binary (Doc id) where                      return (DocCodeBlock al)                12 -> do                      am <- get bh -                    return (DocURL am) +                    return (DocHyperlink am)                13 -> do                      x <- get bh                      return (DocPic x) @@ -531,6 +555,9 @@ instance (Binary id) => Binary (Doc id) where                17 -> do                      ag <- get bh                      return (DocWarning ag) +              18 -> do +                    x <- get bh +                    return (DocProperty x)                _ -> fail "invalid binary data found" diff --git a/src/Haddock/Lex.x b/src/Haddock/Lex.x index b9ebe688..0d8dd954 100644 --- a/src/Haddock/Lex.x +++ b/src/Haddock/Lex.x @@ -50,6 +50,7 @@ $ident    = [$alphanum \'\_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~\:]  <0,para> {   $ws* \n		;   $ws* \>		{ begin birdtrack } + $ws* prop \> .* \n	{ strtoken TokProperty `andBegin` property}   $ws* \>\>\>            { strtoken TokExamplePrompt `andBegin` exampleexpr }   $ws* [\*\-]		{ token TokBullet `andBegin` string }   $ws* \[		{ token TokDefStart `andBegin` def } @@ -74,6 +75,8 @@ $ident    = [$alphanum \'\_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~\:]  <birdtrack> .*	\n?	{ strtokenNL TokBirdTrack `andBegin` line } +<property> ()           { token TokPara `andBegin` para } +  <example> {    $ws*	\n		{ token TokPara `andBegin` para }    $ws* \>\>\>	        { strtoken TokExamplePrompt `andBegin` exampleexpr } @@ -129,6 +132,7 @@ data Token    | TokEmphasis String    | TokAName String    | TokBirdTrack String +  | TokProperty String    | TokExamplePrompt String    | TokExampleExpression String    | TokExampleResult String diff --git a/src/Haddock/Parse.y b/src/Haddock/Parse.y index e36e8416..f40ff521 100644 --- a/src/Haddock/Parse.y +++ b/src/Haddock/Parse.y @@ -7,10 +7,10 @@  --     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings  -- for details -module Haddock.Parse where +module Haddock.Parse (parseString, parseParas) where  import Haddock.Lex -import Haddock.Types (Doc(..), Example(Example)) +import Haddock.Types (Doc(..), Example(Example), Hyperlink(..))  import Haddock.Doc  import HsSyn  import RdrName @@ -35,6 +35,7 @@ import Data.List  (stripPrefix)  	'-'	{ (TokBullet,_) }  	'(n)'	{ (TokNumber,_) }  	'>..'	{ (TokBirdTrack $$,_) } +	PROP	{ (TokProperty $$,_) }  	PROMPT	{ (TokExamplePrompt $$,_) }  	RESULT	{ (TokExampleResult $$,_) }  	EXP	{ (TokExampleExpression $$,_) } @@ -73,12 +74,16 @@ defpara :: { (Doc RdrName, Doc RdrName) }  para    :: { Doc RdrName }  	: seq			{ docParagraph $1 }  	| codepara		{ DocCodeBlock $1 } +	| property		{ $1 }  	| examples		{ DocExamples $1 }  codepara :: { Doc RdrName }  	: '>..' codepara	{ docAppend (DocString $1) $2 }  	| '>..'			{ DocString $1 } +property :: { Doc RdrName } +	: PROP			{ makeProperty $1 } +  examples :: { [Example] }  	: example examples	{ $1 : $2 }  	| example		{ [$1] } @@ -107,7 +112,7 @@ seq1	:: { Doc RdrName }  elem1	:: { Doc RdrName }  	: STRING		{ DocString $1 }  	| '/../'                { DocEmphasis (DocString $1) } -	| URL			{ DocURL $1 } +	| URL			{ DocHyperlink (makeHyperlink $1) }  	| PIC                   { DocPic $1 }  	| ANAME			{ DocAName $1 }  	| IDENT			{ DocIdentifier $1 } @@ -121,6 +126,22 @@ strings  :: { String }  happyError :: [LToken] -> Maybe a  happyError toks = Nothing +-- | Create a `Hyperlink` from given string. +-- +-- A hyperlink consists of a URL and an optional label.  The label is separated +-- from the url by one or more whitespace characters. +makeHyperlink :: String -> Hyperlink +makeHyperlink input = case break isSpace $ strip input of +  (url, "")    -> Hyperlink url Nothing +  (url, label) -> Hyperlink url (Just . dropWhile isSpace $ label) + +makeProperty :: String -> Doc RdrName +makeProperty s = case strip s of +  'p':'r':'o':'p':'>':xs -> +	DocProperty (dropWhile isSpace xs) +  xs -> +	error $ "makeProperty: invalid input " ++ show xs +  -- | Create an 'Example', stripping superfluous characters as appropriate  makeExample :: String -> String -> [String] -> Example  makeExample prompt expression result = diff --git a/src/Haddock/Types.hs b/src/Haddock/Types.hs index 8ea5b930..181ea026 100644 --- a/src/Haddock/Types.hs +++ b/src/Haddock/Types.hs @@ -1,5 +1,5 @@ -{-# OPTIONS_HADDOCK hide #-}  {-# LANGUAGE DeriveDataTypeable, DeriveFunctor #-} +{-# OPTIONS_GHC -fno-warn-orphans #-}  -----------------------------------------------------------------------------  -- |  -- Module      :  Haddock.Types @@ -22,6 +22,7 @@ module Haddock.Types (  import Control.Exception  import Control.Arrow +import Control.DeepSeq  import Data.Typeable  import Data.Map (Map)  import Data.Maybe @@ -113,8 +114,13 @@ data Interface = Interface      -- | The number of haddockable and haddocked items in the module, as a      -- tuple. Haddockable items are the exports and the module itself.    , ifaceHaddockCoverage :: !(Int, Int) + +    -- | Warnings for things defined in this module. +  , ifaceWarningMap :: !WarningMap    } +type WarningMap = DocMap Name +  -- | A subset of the fields of 'Interface' that we store in the interface  -- files. @@ -303,9 +309,10 @@ data Doc id    | DocOrderedList [Doc id]    | DocDefList [(Doc id, Doc id)]    | DocCodeBlock (Doc id) -  | DocURL String +  | DocHyperlink Hyperlink    | DocPic String    | DocAName String +  | DocProperty String    | DocExamples [Example]    deriving (Functor) @@ -315,12 +322,54 @@ instance Monoid (Doc id) where    mappend = DocAppend +instance NFData a => NFData (Doc a) where +  rnf doc = case doc of +    DocEmpty                  -> () +    DocAppend a b             -> a `deepseq` b `deepseq` () +    DocString a               -> a `deepseq` () +    DocParagraph a            -> a `deepseq` () +    DocIdentifier a           -> a `deepseq` () +    DocIdentifierUnchecked a  -> a `deepseq` () +    DocModule a               -> a `deepseq` () +    DocWarning a              -> a `deepseq` () +    DocEmphasis a             -> a `deepseq` () +    DocMonospaced a           -> a `deepseq` () +    DocUnorderedList a        -> a `deepseq` () +    DocOrderedList a          -> a `deepseq` () +    DocDefList a              -> a `deepseq` () +    DocCodeBlock a            -> a `deepseq` () +    DocHyperlink a            -> a `deepseq` () +    DocPic a                  -> a `deepseq` () +    DocAName a                -> a `deepseq` () +    DocProperty a             -> a `deepseq` () +    DocExamples a             -> a `deepseq` () + + +instance NFData Name +instance NFData OccName +instance NFData ModuleName + + +data Hyperlink = Hyperlink +  { hyperlinkUrl   :: String +  , hyperlinkLabel :: Maybe String +  } deriving (Eq, Show) + + +instance NFData Hyperlink where +  rnf (Hyperlink a b) = a `deepseq` b `deepseq` () + +  data Example = Example    { exampleExpression :: String    , exampleResult     :: [String]    } deriving (Eq, Show) +instance NFData Example where +  rnf (Example a b) = a `deepseq` b `deepseq` () + +  exampleToString :: Example -> String  exampleToString (Example expression result) =      ">>> " ++ expression ++ "\n" ++  unlines result @@ -341,9 +390,10 @@ data DocMarkup id a = Markup    , markupOrderedList          :: [a] -> a    , markupDefList              :: [(a,a)] -> a    , markupCodeBlock            :: a -> a -  , markupURL                  :: String -> a +  , markupHyperlink            :: Hyperlink -> a    , markupAName                :: String -> a    , markupPic                  :: String -> a +  , markupProperty             :: String -> a    , markupExample              :: [Example] -> a    } diff --git a/src/Haddock/Utils.hs b/src/Haddock/Utils.hs index 20f45c95..e0b86350 100644 --- a/src/Haddock/Utils.hs +++ b/src/Haddock/Utils.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-}  -----------------------------------------------------------------------------  -- |  -- Module      :  Haddock.Utils @@ -426,9 +427,10 @@ markup m (DocUnorderedList ds)       = markupUnorderedList m (map (markup m) ds)  markup m (DocOrderedList ds)         = markupOrderedList m (map (markup m) ds)  markup m (DocDefList ds)             = markupDefList m (map (markupPair m) ds)  markup m (DocCodeBlock d)            = markupCodeBlock m (markup m d) -markup m (DocURL url)                = markupURL m url +markup m (DocHyperlink l)            = markupHyperlink m l  markup m (DocAName ref)              = markupAName m ref  markup m (DocPic img)                = markupPic m img +markup m (DocProperty p)             = markupProperty m p  markup m (DocExamples e)             = markupExample m e @@ -453,9 +455,10 @@ idMarkup = Markup {    markupOrderedList          = DocOrderedList,    markupDefList              = DocDefList,    markupCodeBlock            = DocCodeBlock, -  markupURL                  = DocURL, +  markupHyperlink            = DocHyperlink,    markupAName                = DocAName,    markupPic                  = DocPic, +  markupProperty             = DocProperty,    markupExample              = DocExamples    } diff --git a/test/Haddock/ParseSpec.hs b/test/Haddock/ParseSpec.hs new file mode 100644 index 00000000..d692cb0c --- /dev/null +++ b/test/Haddock/ParseSpec.hs @@ -0,0 +1,81 @@ +{-# LANGUAGE OverloadedStrings, StandaloneDeriving, FlexibleInstances, UndecidableInstances, IncoherentInstances #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} +module Haddock.ParseSpec (main, spec) where + +import           Test.Hspec +import           RdrName (RdrName) +import           DynFlags (DynFlags, defaultDynFlags) +import           Haddock.Lex (tokenise) +import qualified Haddock.Parse as Parse +import           Haddock.Types +import           Outputable (Outputable, showSDoc, ppr) +import           Data.Monoid +import           Data.String + +dynFlags :: DynFlags +dynFlags = defaultDynFlags (error "dynFlags for Haddock tests: undefined") + +instance Outputable a => Show a where +  show = showSDoc dynFlags . ppr + +deriving instance Show a => Show (Doc a) +deriving instance Eq a =>Eq (Doc a) + +instance IsString (Doc RdrName) where +  fromString = DocString + +parseParas :: String -> Maybe (Doc RdrName) +parseParas s = Parse.parseParas $ tokenise dynFlags s (0,0) + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do +  describe "parseParas" $ do +    it "parses a paragraph" $ do +      parseParas "foobar" `shouldBe` Just (DocParagraph "foobar\n") + +    context "when parsing an example" $ do +      it "requires an example to be separated from a previous paragrap by an empty line" $ do +        parseParas "foobar\n\n>>> fib 10\n55" `shouldBe` +          Just (DocParagraph "foobar\n" <> DocExamples [Example "fib 10" ["55"]]) + +        -- parse error +        parseParas "foobar\n>>> fib 10\n55" `shouldBe` Nothing + +      it "parses a result line that only contains <BLANKLINE> as an emptly line" $ do +        parseParas ">>> putFooBar\nfoo\n<BLANKLINE>\nbar" `shouldBe` +          Just (DocExamples [Example "putFooBar" ["foo","","bar"]]) + +    context "when parsing a code block" $ do +      it "requires a code blocks to be separated from a previous paragrap by an empty line" $ do +        parseParas "foobar\n\n> some code" `shouldBe` +          Just (DocParagraph "foobar\n" <> DocCodeBlock " some code\n") + +        -- parse error +        parseParas "foobar\n> some code" `shouldBe` Nothing + + +    context "when parsing a URL" $ do +      it "parses a URL" $ do +        parseParas "<http://example.com/>" `shouldBe` +          Just (DocParagraph $ hyperlink "http://example.com/" Nothing <> "\n") + +      it "accepts an optional label" $ do +        parseParas "<http://example.com/ some link>" `shouldBe` +          Just (DocParagraph $ hyperlink "http://example.com/" (Just "some link") <> "\n") + +    context "when parsing properties" $ do +      it "can parse a single property" $ do +        parseParas "prop> 23 == 23" `shouldBe` Just (DocProperty "23 == 23") + +      it "can parse multiple subsequent properties" $ do +        parseParas $ unlines [ +              "prop> 23 == 23" +            , "prop> 42 == 42" +            ] +        `shouldBe` Just (DocProperty "23 == 23" <> DocProperty "42 == 42") +  where +    hyperlink :: String -> Maybe String -> Doc RdrName +    hyperlink url = DocHyperlink . Hyperlink url diff --git a/test/Spec.hs b/test/Spec.hs new file mode 100644 index 00000000..68521c03 --- /dev/null +++ b/test/Spec.hs @@ -0,0 +1,9 @@ +module Main where + +import           Test.Hspec + +import qualified Haddock.ParseSpec + +main :: IO () +main = hspec $ do +  describe "Haddock.Parse" Haddock.ParseSpec.spec diff --git a/test/nanospec/README b/test/nanospec/README new file mode 100644 index 00000000..ffce7c74 --- /dev/null +++ b/test/nanospec/README @@ -0,0 +1,6 @@ +A lightweight implementation of a subset of Hspec's API with minimal +dependencies. + +http://hackage.haskell.org/package/nanospec + +This is a copy of version 0.1.0. diff --git a/test/nanospec/Test/Hspec.hs b/test/nanospec/Test/Hspec.hs new file mode 100644 index 00000000..904ce2e0 --- /dev/null +++ b/test/nanospec/Test/Hspec.hs @@ -0,0 +1,126 @@ +{-# LANGUAGE DeriveDataTypeable, CPP #-} +-- | A lightweight implementation of a subset of Hspec's API. +module Test.Hspec ( +-- * Types +  SpecM +, Spec + +-- * Defining a spec +, describe +, context +, it + +-- ** Setting expectations +, Expectation +, expect +, shouldBe +, shouldReturn + +-- * Running a spec +, hspec +) where + +import           Control.Applicative +import           Control.Monad +import           Data.Monoid +import           Data.List (intercalate) +import           Data.Typeable +import qualified Control.Exception as E +import           System.Exit + +-- a writer monad +data SpecM a = SpecM a [SpecTree] + +add :: SpecTree -> SpecM () +add s = SpecM () [s] + +instance Monad SpecM where +  return a             = SpecM a [] +  SpecM a xs >>= f = case f a of +    SpecM b ys -> SpecM b (xs ++ ys) + +data SpecTree = SpecGroup String Spec +              | SpecExample String (IO Result) + +data Result = Success | Failure String +  deriving (Eq, Show) + +type Spec = SpecM () + +describe :: String -> Spec -> Spec +describe label = add . SpecGroup label + +context :: String -> Spec -> Spec +context = describe + +it :: String -> Expectation -> Spec +it label = add . SpecExample label . evaluateExpectation + +-- | Summary of a test run. +data Summary = Summary Int Int + +instance Monoid Summary where +  mempty = Summary 0 0 +  (Summary x1 x2) `mappend` (Summary y1 y2) = Summary (x1 + y1) (x2 + y2) + +runSpec :: Spec -> IO Summary +runSpec = runForrest [] +  where +    runForrest :: [String] -> Spec -> IO Summary +    runForrest labels (SpecM () xs) = mconcat <$> mapM (runTree labels) xs + +    runTree :: [String] -> SpecTree -> IO Summary +    runTree labels spec = case spec of +      SpecExample label x -> do +        putStr $ "/" ++ (intercalate "/" . reverse) (label:labels) ++ "/ " +        r <- x +        case r of +          Success   -> do +            putStrLn "OK" +            return (Summary 1 0) +          Failure err -> do +            putStrLn "FAILED" +            putStrLn err +            return (Summary 1 1) +      SpecGroup label xs  -> do +        runForrest (label:labels) xs + +hspec :: Spec -> IO () +hspec spec = do +  Summary total failures <- runSpec spec +  putStrLn (show total ++ " example(s), " ++ show failures ++ " failure(s)") +  when (failures /= 0) exitFailure + +type Expectation = IO () + +infix 1 `shouldBe`, `shouldReturn` + +shouldBe :: (Show a, Eq a) => a -> a -> Expectation +actual `shouldBe` expected = +  expect ("expected: " ++ show expected ++ "\n but got: " ++ show actual) (actual == expected) + +shouldReturn :: (Show a, Eq a) => IO a -> a -> Expectation +action `shouldReturn` expected = action >>= (`shouldBe` expected) + +expect :: String -> Bool -> Expectation +expect label f +  | f         = return () +  | otherwise = E.throwIO (ExpectationFailure label) + +data ExpectationFailure = ExpectationFailure String +  deriving (Show, Eq, Typeable) + +instance E.Exception ExpectationFailure + +evaluateExpectation :: Expectation -> IO Result +evaluateExpectation action = (action >> return Success) +  `E.catches` [ +  -- Re-throw AsyncException, otherwise execution will not terminate on SIGINT +  -- (ctrl-c).  All AsyncExceptions are re-thrown (not just UserInterrupt) +  -- because all of them indicate severe conditions and should not occur during +  -- normal operation. +    E.Handler $ \e -> E.throw (e :: E.AsyncException) + +  , E.Handler $ \(ExpectationFailure err) -> return (Failure err) +  , E.Handler $ \e -> (return . Failure) ("*** Exception: " ++ show (e :: E.SomeException)) +  ] diff --git a/tests/html-tests/README b/tests/html-tests/README deleted file mode 100644 index 9afb10e7..00000000 --- a/tests/html-tests/README +++ /dev/null @@ -1,24 +0,0 @@ -This is a testsuite for Haddock that uses the concept of "golden files". That -is, it compares output files against a set of reference files. - -To add a new test:  - - 1) Create a module in the "tests" directory. - - 2) Run "cabal test". You should now have output/<modulename>.html. The test -    passes since there is no reference file to compare with. - - 3) To make a reference file from the output file, do -      runhaskell accept.hs <modulename> - -Tips and tricks: - -To "accept" all output files (copy them to reference files), run -  runhaskell accept.hs - -You can run all tests despite failing tests, like so -  cabal test --test-option=all - -You can pass extra options to haddock like so -  cabal test --test-options='all --title="All Tests"' - diff --git a/tests/html-tests/accept.hs b/tests/html-tests/accept.hs deleted file mode 100644 index 49da5c5a..00000000 --- a/tests/html-tests/accept.hs +++ /dev/null @@ -1,36 +0,0 @@ -import System.Cmd -import System.Environment -import System.FilePath -import System.Exit -import System.Directory -import Data.List -import Control.Monad - - -main = do -  args <- getArgs -  dir <- getCurrentDirectory -  contents <- getDirectoryContents (dir </> "output") -  if not $ null args -    then -      mapM_ copy [ "output" </> file  | file <- contents, ".html" `isSuffixOf` file, takeBaseName file `elem` args  ] -    else -      mapM_ copy [ "output" </> file | file <- contents, ".html" `isSuffixOf` file ] - - -copy file = do -  let new = "tests" </> takeFileName file <.> ".ref" -  print file -  print new -  contents <- readFile file -  writeFile new (stripLinks contents) - - -stripLinks str = -  let prefix = "<a href=\"" in -  case stripPrefix prefix str of -    Just str' -> prefix ++ stripLinks (dropWhile (/= '"') str') -    Nothing -> -      case str of -        [] -> [] -        x : xs -> x : stripLinks xs diff --git a/tests/html-tests/tests/Bug1.hs b/tests/html-tests/tests/Bug1.hs deleted file mode 100644 index af1ed4d3..00000000 --- a/tests/html-tests/tests/Bug1.hs +++ /dev/null @@ -1,6 +0,0 @@ -module Bug1 where - --- | We should have different anchors for constructors and types\/classes.  This --- hyperlink should point to the type constructor by default: 'T'. -data T = T - diff --git a/tests/html-tests/tests/Bug2.hs b/tests/html-tests/tests/Bug2.hs deleted file mode 100644 index 9121922e..00000000 --- a/tests/html-tests/tests/Bug2.hs +++ /dev/null @@ -1,4 +0,0 @@ -module Bug2 ( x ) where -import B -x :: A -x = A diff --git a/tests/html-tests/tests/Bug7.hs b/tests/html-tests/tests/Bug7.hs deleted file mode 100644 index 8cf57914..00000000 --- a/tests/html-tests/tests/Bug7.hs +++ /dev/null @@ -1,12 +0,0 @@ --- | This module caused a duplicate instance in the documentation for the Foo --- type. -module Bug7  where - --- | The Foo datatype -data Foo = Foo - --- | The Bar class -class Bar x y - --- | Just one instance -instance Bar Foo Foo diff --git a/tests/html-tests/tests/CrossPackageDocs.hs b/tests/html-tests/tests/CrossPackageDocs.hs deleted file mode 100644 index de55060e..00000000 --- a/tests/html-tests/tests/CrossPackageDocs.hs +++ /dev/null @@ -1,3 +0,0 @@ -module CrossPackageDocs (map, Monad(..), runInteractiveProcess) where - -import System.Process diff --git a/tests/html-tests/tests/DeprecatedFunction.hs b/tests/html-tests/tests/DeprecatedFunction.hs deleted file mode 100644 index 55416369..00000000 --- a/tests/html-tests/tests/DeprecatedFunction.hs +++ /dev/null @@ -1,6 +0,0 @@ -module DeprecatedFunction where - --- | some documentation foo -foo :: Int -foo = 23 -{-# DEPRECATED foo "use bar instead" #-} diff --git a/tests/html-tests/tests/DeprecatedModule.hs b/tests/html-tests/tests/DeprecatedModule.hs deleted file mode 100644 index 61a09d64..00000000 --- a/tests/html-tests/tests/DeprecatedModule.hs +++ /dev/null @@ -1,5 +0,0 @@ --- | Documentation for "DeprecatedModule". -module DeprecatedModule {-# DEPRECATED "Use Foo instead" #-} where - -foo :: Int -foo = 23 diff --git a/tests/html-tests/tests/PruneWithWarning.hs b/tests/html-tests/tests/PruneWithWarning.hs deleted file mode 100644 index fefe81f5..00000000 --- a/tests/html-tests/tests/PruneWithWarning.hs +++ /dev/null @@ -1,9 +0,0 @@ -{-# OPTIONS_HADDOCK prune #-} -module PruneWithWarning (foo, bar) where - -foo :: Int -foo = 23 -{-# DEPRECATED foo "use bar instead" #-} - -bar :: Int -bar = 42 diff --git a/tests/html-tests/tests/Visible.hs b/tests/html-tests/tests/Visible.hs deleted file mode 100644 index cad71931..00000000 --- a/tests/html-tests/tests/Visible.hs +++ /dev/null @@ -1,3 +0,0 @@ -module Visible where -visible :: Int -> Int -visible a = a diff --git a/tests/unit-tests/.ghci b/tests/unit-tests/.ghci deleted file mode 100644 index 10563664..00000000 --- a/tests/unit-tests/.ghci +++ /dev/null @@ -1 +0,0 @@ -:set -i../../src -i../../dist/build/autogen -i../../dist/build/haddock/haddock-tmp/ -packageghc -optP-include -optP../../dist/build/autogen/cabal_macros.h -XCPP -XDeriveDataTypeable -XScopedTypeVariables -XMagicHash diff --git a/tests/unit-tests/parsetests.hs b/tests/unit-tests/parsetests.hs deleted file mode 100644 index 7180a79e..00000000 --- a/tests/unit-tests/parsetests.hs +++ /dev/null @@ -1,69 +0,0 @@ -{-# LANGUAGE StandaloneDeriving, FlexibleInstances, UndecidableInstances, IncoherentInstances #-} -{-# OPTIONS_GHC -fno-warn-orphans #-} -module Main (main) where - -import Test.HUnit -import RdrName (RdrName) -import DynFlags (defaultDynFlags) -import Haddock.Lex (tokenise) -import Haddock.Parse (parseParas) -import Haddock.Types -import Outputable - -instance Outputable a => Show a where -  show = showSDoc . ppr - -deriving instance Show a => Show (Doc a) -deriving instance Eq a =>Eq (Doc a) - -data ParseTest = ParseTest { -    input   :: String -  , result  :: (Maybe (Doc RdrName)) -  } - -tests :: [ParseTest] -tests = [ -    ParseTest { -      input  = "foobar" -    , result = Just $ DocParagraph $ DocString "foobar\n" -    } - -  , ParseTest { -      input  = "foobar\n\n>>> fib 10\n55" -    , result = Just $ DocAppend (DocParagraph $ DocString "foobar\n") (DocExamples $ [Example "fib 10" ["55"]]) -    } - -  , ParseTest { -      input  = "foobar\n>>> fib 10\n55" -    , result = Nothing -- parse error -    } - -  , ParseTest { -      input  = "foobar\n\n> some code" -    , result = Just (DocAppend (DocParagraph (DocString "foobar\n")) (DocCodeBlock (DocString " some code\n"))) -    } - -  , ParseTest { -      input  = "foobar\n> some code" -    , result = Nothing -- parse error -    } - -  -- test <BLANKLINE> support -  , ParseTest { -      input  = ">>> putFooBar\nfoo\n<BLANKLINE>\nbar" -    , result = Just $ DocExamples $ [Example "putFooBar" ["foo","","bar"]] -    } -  ] - - -main :: IO () -main = do -  _ <- runTestTT $ TestList $ map toTestCase tests -  return (); -  where - -    toTestCase :: ParseTest -> Test -    toTestCase (ParseTest s r) = TestCase $ assertEqual s r (parse s) - -    parse :: String -> Maybe (Doc RdrName) -    parse s = parseParas $ tokenise (defaultDynFlags undefined) s (0,0) diff --git a/tests/unit-tests/runparsetests.sh b/tests/unit-tests/runparsetests.sh deleted file mode 100755 index ead0ccf5..00000000 --- a/tests/unit-tests/runparsetests.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -cd `dirname $0` - -runhaskell \ -    -i../../src \ -    -i../../dist/build/autogen \ -    -i../../dist/build/haddock/haddock-tmp/ \ -    -packageghc \ -    -optP-include \ -    -optP../../dist/build/autogen/cabal_macros.h \ -    -XCPP \ -    -XDeriveDataTypeable \ -    -XScopedTypeVariables \ -    -XMagicHash \ -    parsetests.hs  | 
