@@ -21,14 +21,15 @@ import (
2121)
2222
2323func runList () error {
24- items , err := exercises .List ()
24+ cat , err := exercises .ListAll ()
2525 if err != nil {
2626 return err
2727 }
28- if h := theme .Heading ("Exercises" ); h != "" {
28+
29+ if h := theme .Heading ("Concepts" ); h != "" {
2930 fmt .Println (h )
3031 }
31- for _ , ex := range items {
32+ for _ , ex := range cat . Concepts {
3233 status := "pending"
3334 done , _ := progress .IsCompleted (ex .Slug )
3435 if done {
@@ -39,6 +40,22 @@ func runList() error {
3940 }
4041 fmt .Printf ("%s - %s [%s]\n " , ex .Slug , ex .Title , status )
4142 }
43+
44+ if h := theme .Heading ("Projects" ); h != "" {
45+ fmt .Println (h )
46+ }
47+ for _ , ex := range cat .Projects {
48+ status := "pending"
49+ done , _ := progress .IsCompleted (ex .Slug )
50+ if done {
51+ status = theme .Success ("done" )
52+ }
53+ if ! done {
54+ status = theme .Muted (status )
55+ }
56+ fmt .Printf ("%s - %s [%s]\n " , ex .Slug , ex .Title , status )
57+ }
58+
4259 return nil
4360}
4461
@@ -50,12 +67,18 @@ func runVerify(name string) error {
5067 }
5168 return verifyOne (ex )
5269 }
53- items , err := exercises .List ()
70+
71+ cat , err := exercises .ListAll ()
5472 if err != nil {
5573 return err
5674 }
75+
76+ var allExercises []exercises.Exercise
77+ allExercises = append (allExercises , cat .Concepts ... )
78+ allExercises = append (allExercises , cat .Projects ... )
79+
5780 var anyFailed bool
58- for _ , ex := range items {
81+ for _ , ex := range allExercises {
5982 if err := verifyOne (ex ); err != nil {
6083 anyFailed = true
6184 }
@@ -204,14 +227,19 @@ func runWatch() error {
204227}
205228
206229func runProgress () error {
207- items , err := exercises .List ()
230+ cat , err := exercises .ListAll ()
208231 if err != nil {
209232 return err
210233 }
211- sort .Slice (items , func (i , j int ) bool { return items [i ].Slug < items [j ].Slug })
234+
235+ var allExercises []exercises.Exercise
236+ allExercises = append (allExercises , cat .Concepts ... )
237+ allExercises = append (allExercises , cat .Projects ... )
238+
239+ sort .Slice (allExercises , func (i , j int ) bool { return allExercises [i ].Slug < allExercises [j ].Slug })
212240 doneCount := 0
213- statuses := make ([]bool , len (items ))
214- for i , ex := range items {
241+ statuses := make ([]bool , len (allExercises ))
242+ for i , ex := range allExercises {
215243 done , _ := progress .IsCompleted (ex .Slug )
216244 statuses [i ] = done
217245 if done {
@@ -226,13 +254,24 @@ func runProgress() error {
226254 fmt .Println (theme .Heading ("GoLearn Progress Dashboard" ))
227255 fmt .Println (strings .Repeat ("=" , 26 ))
228256 width := progressBarWidth ()
229- fmt .Printf ("\n Completed: %d/%d\n " , doneCount , len (items ))
230- fmt .Println (renderProgressBar (doneCount , len (items ), width ))
257+ fmt .Printf ("\n Completed: %d/%d\n " , doneCount , len (allExercises ))
258+ fmt .Println (renderProgressBar (doneCount , len (allExercises ), width ))
231259 fmt .Println ()
232- fmt .Println (theme .Emph ("Exercises :" ))
233- for i , ex := range items {
260+ fmt .Println (theme .Emph ("Concepts :" ))
261+ for _ , ex := range cat . Concepts {
234262 box := "[ ]"
235- if statuses [i ] {
263+ done , _ := progress .IsCompleted (ex .Slug )
264+ if done {
265+ box = theme .Success ("[x]" )
266+ }
267+ fmt .Printf (" %s %s - %s\n " , box , ex .Slug , ex .Title )
268+ }
269+ fmt .Println ()
270+ fmt .Println (theme .Emph ("Projects:" ))
271+ for _ , ex := range cat .Projects {
272+ box := "[ ]"
273+ done , _ := progress .IsCompleted (ex .Slug )
274+ if done {
236275 box = theme .Success ("[x]" )
237276 }
238277 fmt .Printf (" %s %s - %s\n " , box , ex .Slug , ex .Title )
0 commit comments