Skip to content

Commit 7ef516a

Browse files
committed
Improve project dependency qualification
1 parent 432f8c4 commit 7ef516a

File tree

1 file changed

+54
-14
lines changed

1 file changed

+54
-14
lines changed

src/Code/ProjectDependency.elm

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
module Code.ProjectDependency exposing (ProjectDependency, fromString, toString, toTag)
22

3+
import Code.ProjectSlug as ProjectSlug exposing (ProjectSlug)
34
import Code.Version as Version exposing (Version)
5+
import Lib.UserHandle as UserHandle exposing (UserHandle)
46
import Maybe.Extra as MaybeE
57
import UI.Tag as Tag exposing (Tag)
68

79

10+
type DependencyName
11+
= UserProject UserHandle ProjectSlug
12+
| UnqualifiedDependency String
13+
14+
815
type alias ProjectDependency =
9-
{ name : String, version : Maybe Version }
16+
{ name : DependencyName, version : Maybe Version }
1017

1118

1219
fromString : String -> ProjectDependency
@@ -18,7 +25,16 @@ fromString raw =
1825
( name, version ) =
1926
case parts of
2027
[ user, project, major, minor, patch ] ->
21-
( "@" ++ user ++ "/" ++ project, Version.fromString (String.join "." [ major, minor, patch ]) )
28+
case ( UserHandle.fromString user, ProjectSlug.fromString project ) of
29+
( Just user_, Just project_ ) ->
30+
( UserProject user_ project_
31+
, Version.fromString (String.join "." [ major, minor, patch ])
32+
)
33+
34+
_ ->
35+
( UnqualifiedDependency ("@" ++ user ++ "/" ++ project)
36+
, Version.fromString (String.join "." [ major, minor, patch ])
37+
)
2238

2339
[ n, major, minor, patch ] ->
2440
let
@@ -27,17 +43,26 @@ fromString raw =
2743
in
2844
case version_ of
2945
Just v ->
30-
( n, Just v )
46+
( UnqualifiedDependency n, Just v )
3147

3248
-- It wasn't a version after all, so we give up trying to parse it
3349
Nothing ->
34-
( raw, Nothing )
50+
( UnqualifiedDependency raw, Nothing )
3551

3652
[ user, project ] ->
37-
( "@" ++ user ++ "/" ++ project, Nothing )
53+
case ( UserHandle.fromString user, ProjectSlug.fromString project ) of
54+
( Just user_, Just project_ ) ->
55+
( UserProject user_ project_
56+
, Nothing
57+
)
58+
59+
_ ->
60+
( UnqualifiedDependency ("@" ++ user ++ "/" ++ project)
61+
, Nothing
62+
)
3863

3964
[ n ] ->
40-
( n, Nothing )
65+
( UnqualifiedDependency n, Nothing )
4166

4267
_ ->
4368
case List.reverse parts of
@@ -48,26 +73,41 @@ fromString raw =
4873
in
4974
case version_ of
5075
Just v ->
51-
( String.join "_" (List.reverse n), Just v )
76+
( UnqualifiedDependency (String.join "_" (List.reverse n)), Just v )
5277

5378
-- It wasn't a version after all, so we give up trying to parse it
5479
Nothing ->
55-
( raw, Nothing )
80+
( UnqualifiedDependency raw, Nothing )
5681

5782
_ ->
58-
( raw, Nothing )
83+
( UnqualifiedDependency raw, Nothing )
5984
in
6085
ProjectDependency name version
6186

6287

88+
dependencyName : ProjectDependency -> String
89+
dependencyName { name } =
90+
case name of
91+
UserProject userHandle projectSlug ->
92+
UserHandle.toString userHandle ++ "/" ++ ProjectSlug.toString projectSlug
93+
94+
UnqualifiedDependency n ->
95+
n
96+
97+
6398
toString : ProjectDependency -> String
64-
toString { name, version } =
65-
name ++ MaybeE.unwrap "" (\v -> " v" ++ Version.toString v) version
99+
toString projectDep =
100+
let
101+
name_ =
102+
dependencyName projectDep
103+
in
104+
name_ ++ MaybeE.unwrap "" (\v -> " v" ++ Version.toString v) projectDep.version
66105

67106

68107
toTag : ProjectDependency -> Tag msg
69-
toTag { name, version } =
70-
name
108+
toTag projectDep =
109+
projectDep
110+
|> dependencyName
71111
|> Tag.tag
72112
|> Tag.large
73-
|> Tag.withRightText (MaybeE.unwrap "" (\v -> " v" ++ Version.toString v) version)
113+
|> Tag.withRightText (MaybeE.unwrap "" (\v -> " v" ++ Version.toString v) projectDep.version)

0 commit comments

Comments
 (0)