Skip to content

Commit ad5a1e3

Browse files
authored
Docs: get package names from purs graph (purescript#1309)
1 parent c723832 commit ad5a1e3

30 files changed

+417
-476
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
/.spago
1212
/bin/bundle.js
1313
/bin/docs-search-app.js
14+
/bin/docs-search-app.js.map
1415
.direnv
1516
.envrc
1617
.spec-results

bin/docs-search-app.js.map

Lines changed: 0 additions & 7 deletions
This file was deleted.

bin/spago.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ package:
1616
- foldable-traversable
1717
- lists
1818
- maybe
19-
- node-path
20-
- node-process
2119
- now
2220
- optparse
2321
- ordered-collections
@@ -26,9 +24,7 @@ package:
2624
- registry-lib
2725
- spago
2826
- spago-core
29-
- strings
3027
- transformers
31-
- unsafe-coerce
3228
bundle:
3329
module: Main
3430
outfile: bundle.js

core/src/Purs/Types.purs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module Spago.Purs.Types where
2+
3+
import Spago.Core.Prelude
4+
5+
type ModuleGraphWithPackage = Map ModuleName ModuleGraphWithPackageNode
6+
7+
type ModuleGraphWithPackageNode =
8+
{ path :: String
9+
, depends :: Array ModuleName
10+
, package :: PackageName
11+
}
12+
13+
type ModuleName = String
14+
15+
newtype ModuleGraph = ModuleGraph (Map ModuleName ModuleGraphNode)
16+
17+
derive instance Newtype ModuleGraph _
18+
19+
type ModuleGraphNode =
20+
{ path :: String
21+
, depends :: Array ModuleName
22+
}

docs-search/client-halogen/spago.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ package:
2525
- ordered-collections
2626
- prelude
2727
- profunctor-lenses
28+
- registry-lib
2829
- search-trie
2930
- strings
3031
- tuples

docs-search/client-halogen/src/Docs/Search/App.purs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
-- | This is the main module of the client-side Halogen app.
22
module Docs.Search.App where
33

4-
import Docs.Search.App.SearchField as SearchField
5-
import Docs.Search.App.SearchResults as SearchResults
6-
import Docs.Search.App.Sidebar as Sidebar
7-
import Docs.Search.Config as Config
8-
import Docs.Search.Extra (whenJust)
9-
import Docs.Search.ModuleIndex as ModuleIndex
10-
import Docs.Search.PackageIndex as PackageIndex
11-
import Docs.Search.Meta as Meta
12-
134
import Prelude
145

156
import Control.Alt (alt)
7+
import Data.Map as Map
168
import Data.Maybe (Maybe(..))
179
import Data.Newtype (wrap)
18-
import Data.Map as Map
1910
import Data.Tuple (Tuple(..))
2011
import Data.Tuple.Nested ((/\))
12+
import Docs.Search.App.SearchField as SearchField
13+
import Docs.Search.App.SearchResults as SearchResults
14+
import Docs.Search.App.Sidebar as Sidebar
15+
import Docs.Search.Config as Config
16+
import Docs.Search.Extra (whenJust)
17+
import Docs.Search.ModuleIndex as ModuleIndex
18+
import Docs.Search.PackageIndex as PackageIndex
2119
import Effect (Effect)
2220
import Effect.Aff (launchAff_)
2321
import Halogen as H
@@ -26,8 +24,8 @@ import Halogen.Subscription (subscribe)
2624
import Halogen.VDom.Driver (runUI)
2725
import MarkdownIt as MD
2826
import Web.DOM.ChildNode as ChildNode
29-
import Web.DOM.Document as Document
3027
import Web.DOM.Document (Document)
28+
import Web.DOM.Document as Document
3129
import Web.DOM.Element as Element
3230
import Web.DOM.Node as Node
3331
import Web.DOM.ParentNode as ParentNode
@@ -66,7 +64,6 @@ main = do
6664
HA.runHalogenAff do
6765
packageIndex <- PackageIndex.loadPackageIndex
6866
moduleIndex <- ModuleIndex.unpackModuleIndex <$> ModuleIndex.loadModuleIndex
69-
meta <- Meta.load
7067
let scores = PackageIndex.mkScoresFromPackageIndex packageIndex
7168

7269
let
@@ -82,7 +79,6 @@ main = do
8279
initialSearchEngineState
8380
pageContents
8481
markdownIt
85-
meta
8682

8783
sfio <- runUI SearchField.component unit searchField
8884
srio <- runUI resultsComponent unit searchResults
@@ -106,7 +102,7 @@ main = do
106102
addEventListener hashchange listener true (Window.toEventTarget window)
107103

108104
sbio <- do
109-
component <- Sidebar.mkComponent moduleIndex isIndexHTML meta
105+
component <- Sidebar.mkComponent moduleIndex isIndexHTML
110106
runUI component unit sidebarContainer
111107

112108
-- Subscribe to window focus events

docs-search/client-halogen/src/Docs/Search/App/SearchResults.purs

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
11
-- | This module contains a Halogen component for search results.
22
module Docs.Search.App.SearchResults where
33

4+
import Prelude
5+
6+
import Data.Array as Array
7+
import Data.List as List
8+
import Data.Maybe (Maybe(..), isJust, fromMaybe)
9+
import Data.Newtype (wrap, unwrap)
10+
import Data.String.CodeUnits (stripPrefix, stripSuffix) as String
11+
import Data.String.Common (null, trim) as String
12+
import Data.String.Pattern (Pattern(..)) as String
13+
import Data.Tuple (Tuple(..))
414
import Docs.Search.App.SearchField (SearchFieldMessage(..))
515
import Docs.Search.BrowserEngine (PartialIndex, browserSearchEngine)
616
import Docs.Search.Config as Config
717
import Docs.Search.Declarations (DeclLevel(..), declLevelToHashAnchor)
818
import Docs.Search.DocTypes (DataDeclType(..))
919
import Docs.Search.Engine (Result(..), packageInfoToString)
1020
import Docs.Search.Engine as Engine
11-
import Docs.Search.Extra (homePageFromRepository, (>#>))
21+
import Docs.Search.Extra ((>#>))
1222
import Docs.Search.ModuleIndex (ModuleResult)
1323
import Docs.Search.PackageIndex (PackageResult)
1424
import Docs.Search.SearchResult (ResultInfo(..), SearchResult(..))
1525
import Docs.Search.TypeDecoder (Constraint(..), Constraint', Type', Qualified(..), QualifiedBy(..), ProperName(..), Type(..), TypeArgument, ClassName, FunDeps)
16-
import Docs.Search.TypeQuery as TypeQuery
1726
import Docs.Search.TypeIndex (TypeIndex)
18-
import Docs.Search.Types (Identifier, ModuleName(..), PackageName)
19-
import Docs.Search.Meta (Meta)
20-
21-
import Prelude
22-
import Data.Array as Array
23-
import Data.List as List
24-
import Data.Maybe (Maybe(..), isJust, fromMaybe)
25-
import Data.Newtype (wrap, unwrap)
26-
import Data.String.CodeUnits (stripSuffix) as String
27-
import Data.String.Common (null, trim) as String
28-
import Data.String.Pattern (Pattern(..)) as String
29-
import Data.Tuple (Tuple(..))
27+
import Docs.Search.TypeQuery as TypeQuery
28+
import Docs.Search.Types (Identifier, ModuleName(..))
3029
import Effect.Aff (Aff)
3130
import Halogen as H
3231
import Halogen.HTML as HH
@@ -35,6 +34,8 @@ import Halogen.HTML.Properties as HP
3534
import Language.PureScript.PSString as PSString
3635
import MarkdownIt as MD
3736
import MarkdownIt.Renderer.Halogen as MDH
37+
import Registry.Location (Location(..))
38+
import Registry.PackageName as PackageName
3839
import Web.DOM.Element (Element)
3940
import Web.DOM.Element as Element
4041
import Web.HTML as HTML
@@ -56,7 +57,6 @@ type State =
5657
, resultsCount :: Int
5758
, mode :: Mode
5859
, markdownIt :: MD.MarkdownIt
59-
, localPackageName :: PackageName
6060
}
6161

6262
data Query a = MessageFromSearchField SearchFieldMessage a
@@ -70,9 +70,8 @@ mkComponent
7070
. EngineState
7171
-> Element
7272
-> MD.MarkdownIt
73-
-> Meta
7473
-> H.Component Query i o Aff
75-
mkComponent initialEngineState contents markdownIt { localPackageName } =
74+
mkComponent initialEngineState contents markdownIt =
7675
H.mkComponent
7776
{ initialState: const
7877
{ engineState: initialEngineState
@@ -82,7 +81,6 @@ mkComponent initialEngineState contents markdownIt { localPackageName } =
8281
, resultsCount: Config.resultsCount
8382
, mode: Off
8483
, markdownIt
85-
, localPackageName
8684
}
8785
, render
8886
, eval: H.mkEval $ H.defaultEval
@@ -257,16 +255,25 @@ renderPackageResult { name, description, repository } =
257255

258256
, HH.a
259257
[ HP.class_ (wrap "result__link")
260-
, HP.href $ fromMaybe "" repository # homePageFromRepository
258+
, HP.href $ renderLocation repository
261259
]
262-
[ HH.text $ unwrap name ]
260+
[ HH.text $ PackageName.print name ]
263261
]
264262
]
265263
] <>
266264
description >#> \descriptionText ->
267265
[ HH.div [ HP.class_ (wrap "result__body") ]
268266
[ HH.text descriptionText ]
269267
]
268+
where
269+
-- TODO subdir
270+
renderLocation :: Location -> String
271+
renderLocation = case _ of
272+
GitHub { owner, repo } -> "https://github.com/" <> owner <> "/" <> repo
273+
Git { url } ->
274+
fromMaybe url $ String.stripSuffix (wrap ".git")
275+
$ fromMaybe url
276+
$ String.stripPrefix (wrap "git:") url <#> ("https:" <> _)
270277

271278
renderModuleResult
272279
:: forall a
@@ -331,7 +338,7 @@ renderSearchResult state (SearchResult result) =
331338
, HP.title "Package"
332339
]
333340
[ HH.text "P" ]
334-
, HH.text $ packageInfoToString state.localPackageName result.packageInfo
341+
, HH.text $ packageInfoToString result.packageInfo
335342
]
336343

337344
, HH.span [ HP.class_ (wrap "result__actions__item") ]

docs-search/client-halogen/src/Docs/Search/App/Sidebar.purs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
module Docs.Search.App.Sidebar where
22

3-
import Docs.Search.Config as Config
4-
import Docs.Search.Meta (Meta)
5-
import Docs.Search.ModuleIndex (ModuleIndex)
6-
import Docs.Search.Types (ModuleName(..), PackageInfo(..), PackageName)
7-
83
import Prelude
94

105
import Data.Array as Array
@@ -17,23 +12,27 @@ import Data.Maybe (Maybe(..), isJust, fromMaybe)
1712
import Data.Newtype (wrap, unwrap)
1813
import Data.Set (Set)
1914
import Data.Set as Set
15+
import Data.Traversable (traverse)
2016
import Data.Tuple.Nested (type (/\), (/\))
17+
import Docs.Search.Config as Config
18+
import Docs.Search.ModuleIndex (ModuleIndex)
19+
import Docs.Search.Types (ModuleName(..), PackageInfo(..))
2120
import Effect (Effect)
2221
import Effect.Aff (Aff)
2322
import Halogen as H
2423
import Halogen.HTML as HH
2524
import Halogen.HTML.Events as HE
2625
import Halogen.HTML.Properties as HP
26+
import Registry.PackageName as PackageName
2727
import Type.Proxy (Proxy(..))
28-
import Web.HTML as HTML
29-
import Web.HTML.Window as Window
30-
import Web.Storage.Storage as Storage
3128
import Web.DOM.Document as Document
3229
import Web.DOM.Element as Element
33-
import Web.HTML.HTMLDocument as HTMLDocument
34-
import Web.DOM.ParentNode as ParentNode
35-
import Data.Traversable (traverse)
3630
import Web.DOM.Node as Node
31+
import Web.DOM.ParentNode as ParentNode
32+
import Web.HTML as HTML
33+
import Web.HTML.HTMLDocument as HTMLDocument
34+
import Web.HTML.Window as Window
35+
import Web.Storage.Storage as Storage
3736

3837
data Action = ToggleGrouping GroupingMode
3938

@@ -54,17 +53,15 @@ type State =
5453
, groupingMode :: GroupingMode
5554
, moduleNames :: Array ModuleName
5655
, isIndexHTML :: IsIndexHTML
57-
, localPackageName :: PackageName
5856
, currentPackage :: PackageInfo
5957
}
6058

6159
mkComponent
6260
:: forall i
6361
. ModuleIndex
6462
-> IsIndexHTML
65-
-> Meta
6663
-> Aff (H.Component Query i Action Aff)
67-
mkComponent moduleIndex@{ packageModules } isIndexHTML { localPackageName } = do
64+
mkComponent moduleIndex@{ packageModules } isIndexHTML = do
6865
groupingMode <- H.liftEffect loadGroupingModeFromLocalStorage
6966
mbModuleName <- H.liftEffect getCurrentModuleName
7067
let currentPackage = getCurrentPackage moduleIndex mbModuleName
@@ -75,7 +72,6 @@ mkComponent moduleIndex@{ packageModules } isIndexHTML { localPackageName } = do
7572
, groupingMode
7673
, moduleNames
7774
, isIndexHTML
78-
, localPackageName
7975
, currentPackage
8076
}
8177
, render
@@ -118,7 +114,7 @@ render
118114
:: forall m
119115
. State
120116
-> H.ComponentHTML Action () m
121-
render state@{ groupingMode, moduleNames, localPackageName } =
117+
render state@{ groupingMode, moduleNames } =
122118
HH.div
123119
[ HP.classes
124120
[ wrap "col"
@@ -156,8 +152,8 @@ render state@{ groupingMode, moduleNames, localPackageName } =
156152
[ HH.summary_
157153
[ HH.text $
158154
case package of
159-
Package packageName -> unwrap packageName
160-
LocalPackage -> unwrap localPackageName
155+
Package packageName -> PackageName.print packageName
156+
LocalPackage packageName -> PackageName.print packageName
161157
Builtin -> "<builtins>"
162158
UnknownPackage -> "<unknown>"
163159
]

docs-search/common/spago.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ package:
2828
- prelude
2929
- profunctor
3030
- profunctor-lenses
31+
- registry-lib
3132
- safe-coerce
3233
- search-trie
34+
- spago-core
3335
- string-parsers
3436
- strings
3537
- transformers

docs-search/common/src/Docs/Search/Config.purs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import Prelude
55
import Data.Char as Char
66
import Data.List (List, (:))
77
import Data.Newtype (wrap)
8-
import Docs.Search.Types (GlobalIdentifier, PackageName, PartId(..), URL, FilePath)
8+
import Docs.Search.Types (GlobalIdentifier, PartId(..), URL, FilePath)
99

10+
-- TODO use the spago-generated one
1011
version :: String
1112
version = "0.0.12"
1213

@@ -90,14 +91,8 @@ getPartId (a : _) =
9091
PartId $ Char.toCharCode a `mod` numberOfIndexParts
9192
getPartId _ = PartId 0
9293

93-
defaultPackageName :: PackageName
94-
defaultPackageName = wrap "<local package>"
95-
9694
defaultDocsFiles :: Array String
9795
defaultDocsFiles = [ "output/**/docs.json" ]
9896

99-
defaultBowerFiles :: Array String
100-
defaultBowerFiles = [ ".spago/*/*/bower.json", "bower_components/purescript-*/bower.json" ]
101-
102-
defaultSourceFiles :: Array String
103-
defaultSourceFiles = [ "src/**/*.purs" ]
97+
defaultPursFiles :: Array String
98+
defaultPursFiles = [ ".spago/*/*/purs.json" ]

0 commit comments

Comments
 (0)