git.iko.soy/rowtype-yoga/purescript-docs-search
on master help sign in
fixed: IndexBuilder.writeIndex

renamed: Spago.Search -> Docs.Search renamed: spago-search -> docs-search

commit410a14eb1f757602b282ae5cdaad121d9f5398f7 authorklntsky <klntsky@gmail.com> dateSat 13 Jul 2019, 13:44 (7 years ago) parent02a2d7b
21 files changed+86−85
README.md+4−4 spago.dhall+1−1 src/Spago/Search/App.purs → src/Docs/Search/App.purs+4−4 src/Spago/Search/App/SearchField.purs → src/Docs/Search/App/SearchField.purs+1−1 src/Spago/Search/App/SearchResults.purs → src/Docs/Search/App/SearchResults.purs+14−15 src/Spago/Search/Config.purs → src/Docs/Search/Config.purs+1−1 src/Spago/Search/Declarations.purs → src/Docs/Search/Declarations.purs+4−4 src/Spago/Search/DocsJson.purs → src/Docs/Search/DocsJson.purs+2−2 src/Spago/Search/Extra.purs → src/Docs/Search/Extra.purs+1−1 src/Spago/Search/Index.js → src/Docs/Search/Index.js+4−4 src/Spago/Search/Index.purs → src/Docs/Search/Index.purs+3−3 src/Spago/Search/IndexBuilder.purs → src/Docs/Search/IndexBuilder.purs+24−22 src/Spago/Search/SearchResult.purs → src/Docs/Search/SearchResult.purs+3−3 src/Spago/Search/TypeDecoder.purs → src/Docs/Search/TypeDecoder.purs+1−1 src/Spago/Search/TypeIndex.js → src/Docs/Search/TypeIndex.js+4−4 src/Spago/Search/TypeIndex.purs → src/Docs/Search/TypeIndex.purs+6−6 src/Spago/Search/TypeQuery.purs → src/Docs/Search/TypeQuery.purs+3−3 src/Spago/Search/TypeShape.js → src/Docs/Search/TypeShape.js src/Spago/Search/TypeShape.purs → src/Docs/Search/TypeShape.purs+3−3 test/Main.purs+1−1 test/Test/TypeQuery.purs+2−2
README.md+4−4
@@ -1,4 +1,4 @@
1−# spago-search
1+# purescript-docs-search
22
33An app that adds search capabilities to generated documentation for purescript code.
44
@@ -6,11 +6,11 @@ The goal is to replicate all functionality of pursuit, including querying by typ
66
77See [#89](https://github.com/spacchetti/spago/issues/89).
88
9−
9+To see it in action, run the following:
1010
1111```
1212spago build
1313spago docs
14−spago bundle-app -m Spago.Search.App --to generated-docs/spago-search-app.js
15−spago run -m Spago.Search.IndexBuilder
14+spago bundle-app -m Docs.Search.App --to generated-docs/docs-search-app.js
15+spago run -m Docs.Search.IndexBuilder
1616```
spago.dhall+1−1
@@ -1,5 +1,5 @@
11{ name =
2− "my-project"
2+ "docs-search"
33, dependencies =
44 [ "aff-promise"
55 , "argonaut-codecs"
src/Spago/Search/App.purs → src/Docs/Search/App.pursrenamed+4−4
@@ -1,10 +1,10 @@
1−module Spago.Search.App where
1+module Docs.Search.App where
22
33import Prelude
44
5−import Spago.Search.App.SearchField as SearchField
6−import Spago.Search.App.SearchResults as SearchResults
7−import Spago.Search.Extra (whenJust)
5+import Docs.Search.App.SearchField as SearchField
6+import Docs.Search.App.SearchResults as SearchResults
7+import Docs.Search.Extra (whenJust)
88
99import Control.Coroutine as Coroutine
1010import Data.Maybe (Maybe(..))
src/Spago/Search/App/SearchField.purs → src/Docs/Search/App/SearchField.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Spago.Search.App.SearchField where
1+module Docs.Search.App.SearchField where
22
33import Prelude
44
src/Spago/Search/App/SearchResults.purs → src/Docs/Search/App/SearchResults.pursrenamed+14−15
@@ -1,19 +1,19 @@
1−module Spago.Search.App.SearchResults where
1+module Docs.Search.App.SearchResults where
22
33import Prelude
44
5−import Spago.Search.App.SearchField (SearchFieldMessage(..))
6−import Spago.Search.Config (config)
7−import Spago.Search.Declarations (DeclLevel(..), declLevelToHashAnchor)
8−import Spago.Search.DocsJson (DataDeclType(..))
9−import Spago.Search.Extra ((>#>))
10−import Spago.Search.Index (Index)
11−import Spago.Search.Index as Index
12−import Spago.Search.SearchResult (ResultInfo(..), SearchResult, typeOf)
13−import Spago.Search.TypeDecoder (Constraint(..), FunDep(..), FunDeps(..), Kind(..), QualifiedName(..), Type(..), TypeArgument(..), joinForAlls, joinRows)
14−import Spago.Search.TypeIndex (TypeIndex)
15−import Spago.Search.TypeIndex as TypeIndex
16−import Spago.Search.TypeQuery (TypeQuery(..), parseTypeQuery, penalty)
5+import Docs.Search.App.SearchField (SearchFieldMessage(..))
6+import Docs.Search.Config (config)
7+import Docs.Search.Declarations (DeclLevel(..), declLevelToHashAnchor)
8+import Docs.Search.DocsJson (DataDeclType(..))
9+import Docs.Search.Extra ((>#>))
10+import Docs.Search.Index (Index)
11+import Docs.Search.Index as Index
12+import Docs.Search.SearchResult (ResultInfo(..), SearchResult, typeOf)
13+import Docs.Search.TypeDecoder (Constraint(..), FunDep(..), FunDeps(..), Kind(..), QualifiedName(..), Type(..), TypeArgument(..), joinForAlls, joinRows)
14+import Docs.Search.TypeIndex (TypeIndex)
15+import Docs.Search.TypeIndex as TypeIndex
16+import Docs.Search.TypeQuery (TypeQuery(..), parseTypeQuery, penalty)
1717
1818import CSS (textWhitespace, whitespacePreWrap)
1919import Data.Array ((!!))
@@ -236,8 +236,7 @@ renderSummary
236236 . String
237237 -> HH.HTML b a
238238renderSummary text =
239− HH.div [ HP.id_ "spago-search-summary" ]
240− [ HH.text text ]
239+ HH.div_ [ HH.text text ]
241240
242241renderResult
243242 :: forall a
src/Spago/Search/Config.purs → src/Docs/Search/Config.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Spago.Search.Config where
1+module Docs.Search.Config where
22
33import Prelude
44
src/Spago/Search/Declarations.purs → src/Docs/Search/Declarations.pursrenamed+4−4
@@ -1,10 +1,10 @@
1−module Spago.Search.Declarations where
1+module Docs.Search.Declarations where
22
33import Prelude
44
5−import Spago.Search.SearchResult (ResultInfo(..), SearchResult(..))
6−import Spago.Search.DocsJson (ChildDeclType(..), ChildDeclaration(..), DeclType(..), Declaration(..), DocsJson(..))
7−import Spago.Search.TypeDecoder (Constraint(..), QualifiedName(..), Type(..), joinForAlls)
5+import Docs.Search.SearchResult (ResultInfo(..), SearchResult(..))
6+import Docs.Search.DocsJson (ChildDeclType(..), ChildDeclaration(..), DeclType(..), Declaration(..), DocsJson(..))
7+import Docs.Search.TypeDecoder (Constraint(..), QualifiedName(..), Type(..), joinForAlls)
88
99import Control.Alt ((<|>))
1010import Data.Array ((!!))
src/Spago/Search/DocsJson.purs → src/Docs/Search/DocsJson.pursrenamed+2−2
@@ -1,8 +1,8 @@
1−module Spago.Search.DocsJson where
1+module Docs.Search.DocsJson where
22
33import Prelude
44
5−import Spago.Search.TypeDecoder
5+import Docs.Search.TypeDecoder
66
77import Control.Promise (Promise, toAffE)
88import Data.Argonaut.Core (Json, fromString, stringify, toString)
src/Spago/Search/Extra.purs → src/Docs/Search/Extra.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Spago.Search.Extra where
1+module Docs.Search.Extra where
22
33import Prelude
44
src/Spago/Search/Index.js → src/Docs/Search/Index.jsrenamed+4−4
@@ -4,17 +4,17 @@ exports.loadIndex_ = function (partId) {
44 return function (url) {
55 return function () {
66 return new Promise(function(resolve, reject) {
7− if (typeof window.spagoIndex[partId] === 'undefined') {
7+ if (typeof window.DocsSearchIndex[partId] === 'undefined') {
88
99 var script = document.createElement('script');
1010 script.type = 'text/javascript';
1111 script.src = url;
1212
1313 script.addEventListener('load', function () {
14− if (typeof window.spagoIndex[partId] == 'undefined') {
14+ if (typeof window.DocsSearchIndex[partId] == 'undefined') {
1515 reject();
1616 } else {
17− resolve(window.spagoIndex[partId]);
17+ resolve(window.DocsSearchIndex[partId]);
1818 }
1919 });
2020
@@ -22,7 +22,7 @@ exports.loadIndex_ = function (partId) {
2222
2323 document.body.appendChild(script);
2424 } else {
25− resolve(window.spagoIndex[partId]);
25+ resolve(window.DocsSearchIndex[partId]);
2626 }
2727 });
2828 };
src/Spago/Search/Index.purs → src/Docs/Search/Index.pursrenamed+3−3
@@ -1,9 +1,9 @@
1−module Spago.Search.Index where
1+module Docs.Search.Index where
22
33import Prelude
44
5−import Spago.Search.Config (config)
6−import Spago.Search.SearchResult (SearchResult)
5+import Docs.Search.Config (config)
6+import Docs.Search.SearchResult (SearchResult)
77
88import Control.Promise (Promise, toAffE)
99import Data.Argonaut.Core (Json)
src/Spago/Search/IndexBuilder.purs → src/Docs/Search/IndexBuilder.pursrenamed+24−22
@@ -1,13 +1,13 @@
1−module Spago.Search.IndexBuilder where
1+module Docs.Search.IndexBuilder where
22
33import Prelude
44
5−import Spago.Search.Config (config)
6−import Spago.Search.Declarations (Declarations(..), mkDeclarations)
7−import Spago.Search.Extra ((>#>))
8−import Spago.Search.Index (getPartId)
9−import Spago.Search.SearchResult (SearchResult)
10−import Spago.Search.TypeIndex (TypeIndex, mkTypeIndex)
5+import Docs.Search.Config (config)
6+import Docs.Search.Declarations (Declarations(..), mkDeclarations)
7+import Docs.Search.Extra ((>#>))
8+import Docs.Search.Index (getPartId)
9+import Docs.Search.SearchResult (SearchResult)
10+import Docs.Search.TypeIndex (TypeIndex, mkTypeIndex)
1111
1212import Data.Argonaut.Core (stringify)
1313import Data.Argonaut.Decode (decodeJson)
@@ -17,6 +17,7 @@ import Data.Array as Array
1717import Data.Either (Either(..))
1818import Data.List (List)
1919import Data.List as List
20+import Data.Map (Map)
2021import Data.Map as Map
2122import Data.Maybe (Maybe(..))
2223import Data.Newtype (unwrap)
@@ -37,7 +38,7 @@ import Node.Encoding (Encoding(UTF8))
3738import Node.FS.Aff (exists, mkdir, readTextFile, readdir, stat, writeTextFile)
3839import Node.FS.Stats (isDirectory, isFile)
3940import Node.Process as Process
40−import Spago.Search.DocsJson (DocsJson)
41+import Docs.Search.DocsJson (DocsJson)
4142
4243main :: Effect Unit
4344main = launchAff_ mainAff
@@ -74,9 +75,7 @@ checkDirectories :: Aff Unit
7475checkDirectories = do
7576 for_ config.requiredDirectories \dir -> do
7677 whenM (not <$> directoryExists dir) $
77− liftEffect $ do
78− log "Run `spago build && spago docs` first!"
79− Process.exit 1
78+ liftEffect $ logAndExit "Generate the documentation first!"
8079
8180-- | Read and decode all `docs.json` files in the `outputDir`.
8281collectDocsJsons :: String -> Aff (Array DocsJson)
@@ -94,7 +93,7 @@ collectDocsJsons outputDir = do
9493 case eiResult of
9594 Left error -> do
9695 liftEffect $ log $
97− "`docs.json` decoding failed failed for module " <> moduleName <> ": " <> show error
96+ "\"docs.json\" decoding failed failed for module " <> moduleName <> ": " <> show error
9897 pure Nothing
9998 Right result -> pure result
10099
@@ -113,8 +112,8 @@ writeTypeIndex typeIndex =
113112 (mkHeader typeShape <> stringify (encodeJson results))
114113 where
115114 mkHeader typeShape =
116− "// This file was generated by spago\n" <>
117− "window.spagoTypeIndex[\"" <> typeShape <> "\"] = "
115+ "// This file was generated by purescript-docs-search\n" <>
116+ "window.DocsSearchTypeIndex[\"" <> typeShape <> "\"] = "
118117 entries :: Array _
119118 entries = Map.toUnfoldableUnordered (unwrap typeIndex)
120119
@@ -140,13 +139,16 @@ writeIndex (Declarations trie) = do
140139 in
141140 { prefix, results }
142141
143− resultsMap = Array.foldr (\part -> Map.insertWith append (getPartId part.prefix) part) mempty parts
142+ resultsMap :: Map Int (Array (Tuple String (Array SearchResult)))
143+ resultsMap = Array.foldr insert mempty parts
144+
145+ insert part = Map.insertWith append (getPartId part.prefix) part.results
144146
145147 for_ (Map.toUnfoldableUnordered resultsMap :: Array _)
146148 \(Tuple indexPartId results) -> do
147149 let header =
148− "// This file was generated by spago.\n" <>
149− "window.spagoIndex[\"" <> show indexPartId <> "\"] = "
150+ "// This file was generated by purescript-docs-search.\n" <>
151+ "window.DocsSearchIndex[\"" <> show indexPartId <> "\"] = "
150152
151153 writeTextFile UTF8 (config.mkIndexPartPath indexPartId) $
152154 header <> stringify (encodeJson results)
@@ -155,11 +157,11 @@ patchDocs :: Aff Unit
155157patchDocs = do
156158 let dirname = "generated-docs/"
157159 pattern = Pattern "</body>"
158− patch = "<!-- Spago search index. -->" <>
159− "<script type=\"text/javascript\" src=\"../spago-search-app.js\"></script>" <>
160+ patch = "<!-- Docs search index. -->" <>
161+ "<script type=\"text/javascript\" src=\"../docs-search-app.js\"></script>" <>
160162 "<script type=\"text/javascript\">" <>
161− "window.spagoTypeIndex = {};" <>
162− "window.spagoIndex = {};" <>
163+ "window.DocsSearchTypeIndex = {};" <>
164+ "window.DocsSearchIndex = {};" <>
163165 "</script>" <>
164166 "</body>"
165167
@@ -182,7 +184,7 @@ createDirectories = do
182184 typeIndexDir = "generated-docs/index/types"
183185
184186 whenM (not <$> directoryExists generatedDocsDir) $ liftEffect do
185− logAndExit "Run `spago docs` first!"
187+ logAndExit "Generate the documentation first!"
186188
187189 whenM (not <$> directoryExists indexDir) do
188190 mkdir indexDir
src/Spago/Search/SearchResult.purs → src/Docs/Search/SearchResult.pursrenamed+3−3
@@ -1,7 +1,7 @@
1−module Spago.Search.SearchResult where
1+module Docs.Search.SearchResult where
22
3−import Spago.Search.DocsJson (DataDeclType)
4−import Spago.Search.TypeDecoder (Constraint, FunDeps, Kind, QualifiedName, Type, TypeArgument)
3+import Docs.Search.DocsJson (DataDeclType)
4+import Docs.Search.TypeDecoder (Constraint, FunDeps, Kind, QualifiedName, Type, TypeArgument)
55
66import Data.Argonaut.Decode (class DecodeJson)
77import Data.Argonaut.Decode.Generic.Rep (genericDecodeJson)
src/Spago/Search/TypeDecoder.purs → src/Docs/Search/TypeDecoder.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Spago.Search.TypeDecoder where
1+module Docs.Search.TypeDecoder where
22
33import Prelude
44
src/Spago/Search/TypeIndex.js → src/Docs/Search/TypeIndex.jsrenamed+4−4
@@ -4,21 +4,21 @@ exports.lookup_ = function (shape) {
44 return function (url) {
55 return function () {
66 return new Promise(function (resolve, reject) {
7− if (typeof window.spagoTypeIndex[shape] === 'undefined') {
7+ if (typeof window.DocsSearchTypeIndex[shape] === 'undefined') {
88 var script = document.createElement('script');
99 script.type = 'text/javascript';
1010 script.src = url;
1111 script.addEventListener('load', function () {
12− if (typeof window.spagoTypeIndex[shape] === 'undefined') {
12+ if (typeof window.DocsSearchTypeIndex[shape] === 'undefined') {
1313 reject(new Error("Couldn't load index for type shape " + shape));
1414 } else {
15− resolve(window.spagoTypeIndex[shape]);
15+ resolve(window.DocsSearchTypeIndex[shape]);
1616 }
1717 });
1818 script.addEventListener('error', reject);
1919 document.body.appendChild(script);
2020 } else {
21− resolve(window.spagoTypeIndex[shape]);
21+ resolve(window.DocsSearchTypeIndex[shape]);
2222 }
2323 });
2424 };
src/Spago/Search/TypeIndex.purs → src/Docs/Search/TypeIndex.pursrenamed+6−6
@@ -1,12 +1,12 @@
1−module Spago.Search.TypeIndex where
1+module Docs.Search.TypeIndex where
22
33import Prelude
44
5−import Spago.Search.Config (config)
6−import Spago.Search.Declarations (Declarations(..))
7−import Spago.Search.SearchResult (ResultInfo(..), SearchResult)
8−import Spago.Search.TypeQuery (TypeQuery)
9−import Spago.Search.TypeShape (shapeOfType, shapeOfTypeQuery, stringifyShape)
5+import Docs.Search.Config (config)
6+import Docs.Search.Declarations (Declarations(..))
7+import Docs.Search.SearchResult (ResultInfo(..), SearchResult)
8+import Docs.Search.TypeQuery (TypeQuery)
9+import Docs.Search.TypeShape (shapeOfType, shapeOfTypeQuery, stringifyShape)
1010
1111import Control.Promise (Promise, toAffE)
1212import Data.Argonaut.Core (Json)
src/Spago/Search/TypeQuery.purs → src/Docs/Search/TypeQuery.pursrenamed+3−3
@@ -1,4 +1,4 @@
1−module Spago.Search.TypeQuery
1+module Docs.Search.TypeQuery
22 ( TypeQuery(..)
33 , Substitution(..)
44 , parseTypeQuery
@@ -11,8 +11,8 @@ where
1111
1212import Prelude
1313
14−import Spago.Search.TypeDecoder
15−import Spago.Search.Config
14+import Docs.Search.TypeDecoder
15+import Docs.Search.Config
1616
1717import Control.Alt ((<|>))
1818import Data.Array as Array
src/Spago/Search/TypeShape.js → src/Docs/Search/TypeShape.jsrenamed

The content is the same.

src/Spago/Search/TypeShape.purs → src/Docs/Search/TypeShape.pursrenamed+3−3
@@ -1,9 +1,9 @@
1−module Spago.Search.TypeShape where
1+module Docs.Search.TypeShape where
22
33import Prelude
44
5−import Spago.Search.TypeDecoder (QualifiedName(..), Type(..), joinForAlls, joinRows)
6−import Spago.Search.TypeQuery (TypeQuery(..), getFreeVariables)
5+import Docs.Search.TypeDecoder (QualifiedName(..), Type(..), joinForAlls, joinRows)
6+import Docs.Search.TypeQuery (TypeQuery(..), getFreeVariables)
77
88import Data.Generic.Rep (class Generic)
99import Data.Generic.Rep.Show (genericShow)
test/Main.purs+1−1
@@ -2,7 +2,7 @@ module Test.Main where
22
33import Prelude
44
5−import Spago.Search.TypeDecoder (Constraint(..), FunDep(..), FunDeps(..), Kind(..), QualifiedName(..), Type(..))
5+import Docs.Search.TypeDecoder (Constraint(..), FunDep(..), FunDeps(..), Kind(..), QualifiedName(..), Type(..))
66import Test.TypeQuery as TypeQuery
77
88import Data.Argonaut.Decode (decodeJson)
test/Test/TypeQuery.purs+2−2
@@ -3,8 +3,8 @@ module Test.TypeQuery where
33import Prelude
44
55
6−import Spago.Search.TypeQuery (TypeQuery(..), Substitution(..), getFreeVariables, parseTypeQuery, typeVarPenalty)
7−import Spago.Search.TypeShape (ShapeChunk(..), shapeOfTypeQuery)
6+import Docs.Search.TypeQuery (TypeQuery(..), Substitution(..), getFreeVariables, parseTypeQuery, typeVarPenalty)
7+import Docs.Search.TypeShape (ShapeChunk(..), shapeOfTypeQuery)
88
99import Data.Either (Either(..))
1010import Data.Foldable (class Foldable)