(ctx *snap.Context, spec docSpec)
| 1600 | } |
| 1601 | |
| 1602 | func openDoc(ctx *snap.Context, spec docSpec) error { |
| 1603 | now := time.Now() |
| 1604 | if spec.fileName == nil { |
| 1605 | return reportError(ctx, fmt.Errorf("missing file name generator for doc")) |
| 1606 | } |
| 1607 | fileName := spec.fileName(now) |
| 1608 | if fileName = strings.TrimSpace(fileName); fileName == "" { |
| 1609 | return reportError(ctx, fmt.Errorf("empty file name for doc")) |
| 1610 | } |
| 1611 | |
| 1612 | homeDir, err := os.UserHomeDir() |
| 1613 | if err != nil { |
| 1614 | return reportError(ctx, fmt.Errorf("determine home directory: %w", err)) |
| 1615 | } |
| 1616 | |
| 1617 | baseDir := filepath.Join(append([]string{homeDir}, spec.dirSegments...)...) |
| 1618 | if err := os.MkdirAll(baseDir, 0o755); err != nil { |
| 1619 | return reportError(ctx, fmt.Errorf("create directory %s: %w", baseDir, err)) |
| 1620 | } |
| 1621 | |
| 1622 | targetFile := filepath.Join(baseDir, fileName) |
| 1623 | |
| 1624 | created := false |
| 1625 | if _, err := os.Stat(targetFile); err != nil { |
| 1626 | if errors.Is(err, os.ErrNotExist) { |
| 1627 | if err := os.WriteFile(targetFile, []byte{}, 0o644); err != nil { |
| 1628 | return reportError(ctx, fmt.Errorf("create file %s: %w", targetFile, err)) |
| 1629 | } |
| 1630 | created = true |
| 1631 | } else { |
| 1632 | return reportError(ctx, fmt.Errorf("stat %s: %w", targetFile, err)) |
| 1633 | } |
| 1634 | } |
| 1635 | |
| 1636 | if err := openInCursor(ctx, targetFile); err != nil { |
| 1637 | return reportError(ctx, err) |
| 1638 | } |
| 1639 | |
| 1640 | if created { |
| 1641 | fmt.Fprintf(ctx.Stdout(), "✔️ Created %s\n", targetFile) |
| 1642 | } |
| 1643 | fmt.Fprintf(ctx.Stdout(), "✔️ Opened %s in Cursor\n", targetFile) |
| 1644 | return nil |
| 1645 | } |
| 1646 | |
| 1647 | func runOpenDoc(ctx *snap.Context) error { |
| 1648 | if ctx.NArgs() != 1 { |
no test coverage detected