Skip to content

Commit fd181ba

Browse files
committed
feat: Made init be able to properly initialize default config
1 parent 4304227 commit fd181ba

5 files changed

Lines changed: 70 additions & 1 deletion

File tree

internal/command/init.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,15 @@ func initHandler(ctx *gear.Context, args gear.ValidatedArgs) error {
3434
projectType = detector.DetectCurrentProjectType()
3535
}
3636
if projectType == models.ProjectTypeUnknown {
37-
return fmt.Errorf("unsupported project type: %s", projectType)
37+
logger.Info("Detected project type is unknown and would generate a default config.")
38+
answer, err := logger.Prompt("Continue with default config? (y/n): ")
39+
if err != nil {
40+
return err
41+
}
42+
if answer != "y" {
43+
logger.Warning("Initialization cancelled.")
44+
return nil
45+
}
3846
}
3947
logger.Info("Detected project type: %s", projectType)
4048
generator := generator.GetGeneratorByProjectType(projectType)

internal/logger/logger.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,18 @@ func (l *Logger) TaskError(taskName string, format string, args ...interface{})
125125
fmt.Printf("%s %s %s\n", l.timestamp(), taskBadge, ColorRed.Bright().Wrap(msg))
126126
}
127127

128+
func (l *Logger) Prompt(format string, args ...interface{}) (string, error) {
129+
if !l.enabled || l.level > LevelInfo {
130+
return "", fmt.Errorf("logger is disabled")
131+
}
132+
msg := fmt.Sprintf(format, args...)
133+
promptBadge := l.badge("PROMPT", ColorCyan)
134+
fmt.Printf("%s %s %s ", l.timestamp(), promptBadge, ColorWhite.Wrap(msg))
135+
var input string
136+
fmt.Scanln(&input)
137+
return input, nil
138+
}
139+
128140
func (l *Logger) Print(format string, args ...interface{}) {
129141
msg := fmt.Sprintf(format, args...)
130142
fmt.Println(msg)
@@ -169,6 +181,10 @@ func Debug(format string, args ...interface{}) {
169181
Default.Debug(format, args...)
170182
}
171183

184+
func Prompt(format string, args ...interface{}) (string, error) {
185+
return Default.Prompt(format, args...)
186+
}
187+
172188
func Print(format string, args ...interface{}) {
173189
Default.Print(format, args...)
174190
}

internal/models/project.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ func ParseProjectType(s string) ProjectType {
2020
return ProjectTypePython
2121
case "rust":
2222
return ProjectTypeRust
23+
case "unknown":
24+
return ProjectTypeUnknown
25+
case "default":
26+
return ProjectTypeUnknown
2327
default:
2428
return ProjectTypeUnknown
2529
}

internal/template/generator/generator.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ func (g *baseGenerator) afterGenerate(cfg *config.Config) error {
6060

6161
func GetGeneratorByProjectType(projectType models.ProjectType) Generator {
6262
switch projectType {
63+
case models.ProjectTypeUnknown:
64+
return NewUnknownGenerator()
6365
case models.ProjectTypeGo:
6466
return NewGoGenerator()
6567
case models.ProjectTypeNode:
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package generator
2+
3+
import (
4+
"github.com/azuyamat/pace/internal/config"
5+
"github.com/azuyamat/pace/internal/models"
6+
)
7+
8+
func NewUnknownGenerator() Generator {
9+
return newGenerator(generateUnknown, models.ProjectTypeUnknown)
10+
}
11+
12+
func generateUnknown() (config.Config, error) {
13+
cfg := config.NewDefaultConfig()
14+
15+
cfg.DefaultTask = "build"
16+
17+
cfg.Tasks["build"] = models.Task{
18+
Name: "build",
19+
Alias: "b",
20+
Command: "echo 'No build command specified'",
21+
Description: "Build the project",
22+
}
23+
24+
cfg.Tasks["test"] = models.Task{
25+
Name: "test",
26+
Alias: "t",
27+
Command: "echo 'No test command specified'",
28+
Description: "Run tests",
29+
}
30+
31+
cfg.Tasks["lint"] = models.Task{
32+
Name: "lint",
33+
Alias: "l",
34+
Command: "echo 'No lint command specified'",
35+
Description: "Lint code",
36+
}
37+
38+
return *cfg, nil
39+
}

0 commit comments

Comments
 (0)