// Package newproject scaffolds a new Arduino sketch directory. package newproject import ( "embed" "fmt" "os" "path/filepath" "strings" "gitlab.hive-brain.de/MDietermann/Archduino/internal/config" "gitlab.hive-brain.de/MDietermann/Archduino/internal/platform" ) //go:embed assets var assetsFS embed.FS const clangdContent = `CompileFlags: Add: - -xc++ - -std=c++17 ` // Run creates a new Arduino project directory. It errors if the project // directory already exists, if the board is unknown, or if the project name // contains a path separator. func Run(cfg config.Config, project, board string) error { if project == "" { return fmt.Errorf("project name required") } if strings.ContainsAny(project, "/\\") || strings.HasPrefix(project, ".") { return fmt.Errorf("invalid project name %q", project) } var b *config.Board var valid []string for i := range cfg.Scaffolding.Boards { bp := &cfg.Scaffolding.Boards[i] valid = append(valid, bp.Name) if bp.Name == board { b = bp } } if b == nil { return fmt.Errorf("unknown board %q; valid: %s", board, strings.Join(valid, ", ")) } if _, err := os.Stat(project); err == nil { return fmt.Errorf("project directory %q already exists", project) } if err := os.MkdirAll(project, 0o755); err != nil { return err } // Pick .ino template: try