Skip to content

Commit 5bf02c2

Browse files
committed
Wrap ModuleName and PackageName strings into newtypes
1 parent 16e1a4b commit 5bf02c2

19 files changed

+258
-175
lines changed

src/Docs/Search/App/SearchResults.purs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ import Docs.Search.PackageIndex (PackageResult)
1414
import Docs.Search.SearchResult (ResultInfo(..), SearchResult(..))
1515
import Docs.Search.TypeDecoder (Constraint(..), FunDep(..), FunDeps(..), Kind(..), QualifiedName(..), Type(..), TypeArgument(..), joinForAlls, joinRows)
1616
import Docs.Search.TypeIndex (TypeIndex)
17+
import Docs.Search.Types (ModuleName(..), packageInfoToString)
1718

1819
import Prelude
1920

2021
import Data.Array ((!!))
2122
import Data.Array as Array
2223
import Data.List as List
2324
import Data.Maybe (Maybe(..), isJust, fromMaybe)
24-
import Data.Newtype (wrap)
25+
import Data.Newtype (wrap, unwrap)
2526
import Data.String.CodeUnits (stripSuffix) as String
2627
import Data.String.Common (null, trim) as String
2728
import Data.String.Pattern (Pattern(..)) as String
@@ -63,7 +64,7 @@ data Query a
6364

6465

6566
data Action
66-
= SearchResultClicked String
67+
= SearchResultClicked ModuleName
6768
| MoreResultsRequested
6869

6970

@@ -145,7 +146,7 @@ handleAction = case _ of
145146
location <- Window.location window
146147
pathname <- Location.pathname location
147148
pure $ isJust $
148-
String.stripSuffix (String.Pattern $ moduleName <> ".html") pathname
149+
String.stripSuffix (String.Pattern $ unwrap moduleName <> ".html") pathname
149150

150151
when onThisPage do
151152
showPageContents
@@ -254,7 +255,7 @@ renderPackageResult { name, description, repository } =
254255
, HH.a [ HP.class_ (wrap "result__link")
255256
, HP.href $ fromMaybe "" repository # homePageFromRepository
256257
]
257-
[ HH.text name ]
258+
[ HH.text $ unwrap name ]
258259
]
259260
]
260261
] <>
@@ -280,9 +281,9 @@ renderModuleResult { name, package } =
280281
[ HH.text "M" ]
281282

282283
, HH.a [ HP.class_ (wrap "result__link")
283-
, HP.href $ name <> ".html"
284+
, HP.href $ unwrap name <> ".html"
284285
]
285-
[ HH.text name ]
286+
[ HH.text $ unwrap name ]
286287
]
287288
]
288289
]
@@ -300,7 +301,7 @@ renderSearchResult markdownIt (SearchResult result) =
300301
[ HH.a [ HP.class_ (wrap "result__link")
301302
, HE.onClick $ const $ Just $ SearchResultClicked result.moduleName
302303
, HP.href $
303-
result.moduleName <> ".html#" <>
304+
unwrap result.moduleName <> ".html#" <>
304305
result.hashAnchor <> ":" <> result.name
305306
]
306307
[ HH.text result.name ]
@@ -321,7 +322,7 @@ renderSearchResult markdownIt (SearchResult result) =
321322
, HP.title "Package"
322323
]
323324
[ HH.text "P" ]
324-
, HH.text result.packageName
325+
, HH.text $ packageInfoToString result.packageInfo
325326
]
326327

327328
, HH.span [ HP.class_ (wrap "result__actions__item") ]
@@ -331,7 +332,7 @@ renderSearchResult markdownIt (SearchResult result) =
331332
, HP.title "Module"
332333
]
333334
[ HH.text "M" ]
334-
, HH.text result.moduleName
335+
, HH.text $ unwrap result.moduleName
335336
]
336337
]
337338
]
@@ -341,7 +342,7 @@ renderResultType
341342
:: forall a rest
342343
. { info :: ResultInfo
343344
, name :: String
344-
, moduleName :: String
345+
, moduleName :: ModuleName
345346
| rest
346347
}
347348
-> Array (HH.HTML a Action)
@@ -371,7 +372,7 @@ renderResultType result =
371372

372373
renderValueSignature
373374
:: forall a rest
374-
. { moduleName :: String
375+
. { moduleName :: ModuleName
375376
, name :: String
376377
| rest
377378
}
@@ -391,7 +392,7 @@ renderTypeClassSignature
391392
, arguments :: Array TypeArgument
392393
, superclasses :: Array Constraint
393394
}
394-
-> { name :: String, moduleName :: String | rest }
395+
-> { name :: String, moduleName :: ModuleName | rest }
395396
-> Array (HH.HTML a Action)
396397
renderTypeClassSignature { fundeps, arguments, superclasses } { name, moduleName } =
397398
[ keyword "class"
@@ -520,14 +521,14 @@ renderType = case _ of
520521
TypeOp qname -> renderQualifiedName true TypeLevel qname
521522

522523
TypeApp (TypeApp (TypeConstructor
523-
(QualifiedName { moduleName: [ "Prim" ]
524+
(QualifiedName { moduleNameParts: [ "Prim" ]
524525
, name: "Function" })) t1) t2 ->
525526
HH.span_ [ renderType t1
526527
, syntax " -> "
527528
, renderType t2
528529
]
529530

530-
TypeApp (TypeConstructor (QualifiedName { moduleName: [ "Prim" ]
531+
TypeApp (TypeConstructor (QualifiedName { moduleNameParts: [ "Prim" ]
531532
, name: "Record" }))
532533
row ->
533534
renderRow false row
@@ -635,6 +636,9 @@ renderRow asRow =
635636
opening = if asRow then "( " else "{ "
636637
closing = if asRow then " )" else " }"
637638

639+
primRecord :: QualifiedName
640+
primRecord = QualifiedName { moduleNameParts: [ "Prim" ], name: "Record" }
641+
638642

639643
renderConstraint
640644
:: forall a
@@ -652,18 +656,18 @@ renderQualifiedName
652656
-> DeclLevel
653657
-> QualifiedName
654658
-> HH.HTML a Action
655-
renderQualifiedName isInfix level (QualifiedName { moduleName, name })
659+
renderQualifiedName isInfix level (QualifiedName { moduleNameParts, name })
656660
= if isBuiltIn then
657661
HH.text name
658662
else
659663
HH.a [ HE.onClick $ const $ Just $
660-
SearchResultClicked moduleNameString
661-
, makeHref level isInfix moduleNameString name
664+
SearchResultClicked $ moduleName
665+
, makeHref level isInfix moduleName name
662666
]
663667
[ HH.text name ]
664668
where
665-
moduleNameString = Array.intercalate "." moduleName
666-
isBuiltIn = moduleName !! 0 == Just "Prim"
669+
moduleName = ModuleName $ Array.intercalate "." $ moduleNameParts
670+
isBuiltIn = moduleNameParts !! 0 == Just "Prim"
667671

668672

669673
renderKind
@@ -681,20 +685,16 @@ makeHref
681685
:: forall t rest
682686
. DeclLevel
683687
-> Boolean
684-
-> String
688+
-> ModuleName
685689
-> String
686690
-> HH.IProp ( href :: String | rest ) t
687691
makeHref level isInfix moduleName name =
688692
HP.href $
689-
moduleName <> ".html#" <>
693+
unwrap moduleName <> ".html#" <>
690694
declLevelToHashAnchor level <> ":" <>
691695
if isInfix then "type (" <> name <> ")" else name
692696

693697

694-
primRecord :: QualifiedName
695-
primRecord = QualifiedName { moduleName: [ "Prim" ], name: "Record" }
696-
697-
698698
keyword
699699
:: forall a
700700
. String

src/Docs/Search/App/Sidebar.purs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@ module Docs.Search.App.Sidebar where
22

33
import Docs.Search.Config (config)
44
import Docs.Search.ModuleIndex (PackedModuleIndex)
5-
import Docs.Search.Types (ModuleName, PackageName)
5+
import Docs.Search.Types (ModuleName, PackageName(..))
66

77
import Prelude
8+
89
import Data.Array as Array
910
import Data.Lens ((.~))
1011
import Data.Lens.Record (prop)
1112
import Data.List (foldr)
1213
import Data.Map (Map)
1314
import Data.Map as Map
1415
import Data.Maybe (Maybe(..), isJust)
15-
import Data.Newtype (wrap)
16+
import Data.Newtype (wrap, unwrap)
1617
import Data.Set (Set)
1718
import Data.Set as Set
1819
import Data.Symbol (SProxy(..))
@@ -132,7 +133,7 @@ render { moduleIndex, groupingMode, moduleNames, isIndexHTML } =
132133
]
133134
where
134135

135-
renderPackageEntry (packageName /\ modules) =
136+
renderPackageEntry (PackageName packageName /\ modules) =
136137
HH.li [ HP.classes [ wrap "li-package" ] ]
137138
[ HH.details_
138139
[ HH.summary_ [ HH.text packageName ]
@@ -142,11 +143,11 @@ render { moduleIndex, groupingMode, moduleNames, isIndexHTML } =
142143

143144
renderModuleName moduleName =
144145
HH.li_
145-
[ HH.a [ HP.href (moduleName <> ".html") ]
146-
[ HH.text moduleName ]
146+
[ HH.a [ HP.href (unwrap moduleName <> ".html") ]
147+
[ HH.text $ unwrap moduleName ]
147148
]
148149

149-
packageList :: Array (String /\ Set ModuleName)
150+
packageList :: Array (PackageName /\ Set ModuleName)
150151
packageList = Map.toUnfoldable moduleIndex
151152

152153

0 commit comments

Comments
 (0)