diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..c52fd12 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,21 @@ +linters: + enable: + - errcheck + - errname + - errorlint + - goconst + - gofumpt + - gosimple + - govet + - ineffassign + - nilerr + - prealloc + - predeclared + - revive + - rowserrcheck + - sqlclosecheck + - staticcheck + - unconvert + - unused + - usestdlibvars + - wastedassign diff --git a/cmd/db.go b/cmd/db.go index a64845d..ac102df 100644 --- a/cmd/db.go +++ b/cmd/db.go @@ -7,6 +7,9 @@ import ( func getDB(dbpath string) (*sql.DB, error) { db, err := sql.Open("sqlite", dbpath) + if err != nil { + return nil, err + } db.SetMaxOpenConns(1) db.SetMaxIdleConns(1) return db, err diff --git a/cmd/db_migrations.go b/cmd/db_migrations.go index 2df12e0..f59c2e7 100644 --- a/cmd/db_migrations.go +++ b/cmd/db_migrations.go @@ -12,9 +12,9 @@ const ( ) var ( - errDBDowngraded = errors.New(`Looks like you downgraded omm. You should either delete omm's -database file (you will lose data by doing that), or upgrade omm to -the latest version.`) + errDBDowngraded = errors.New("database downgraded") + errDBMigrationFailed = errors.New("database migration failed") + errCouldntFetchDBVersion = errors.New("couldn't fetch version") ) type dbVersionInfo struct { @@ -55,15 +55,9 @@ LIMIT 1; } func upgradeDBIfNeeded(db *sql.DB) error { - latestVersionInDB, versionErr := fetchLatestDBVersion(db) - if versionErr != nil { - return fmt.Errorf(`Couldn't get omm's latest database version. This is a fatal error; let %s -know about this via %s. - -Error: %s`, - author, - repoIssuesUrl, - versionErr) + latestVersionInDB, err := fetchLatestDBVersion(db) + if err != nil { + return fmt.Errorf("%w: %s", errCouldntFetchDBVersion, err.Error()) } if latestVersionInDB.version > latestDBVersion { @@ -71,7 +65,7 @@ Error: %s`, } if latestVersionInDB.version < latestDBVersion { - err := upgradeDB(db, latestVersionInDB.version) + err = upgradeDB(db, latestVersionInDB.version) if err != nil { return err } @@ -86,19 +80,7 @@ func upgradeDB(db *sql.DB, currentVersion int) error { migrateQuery := migrations[i] migrateErr := runMigration(db, migrateQuery, i) if migrateErr != nil { - return fmt.Errorf(`Something went wrong migrating omm's database to version %d. This is not -supposed to happen. You can try running omm by passing it a custom database -file path (using --dbpath; this will create a new database) to see if that fixes -things. If that works, you can either delete the previous database, or keep -using this new database (both are not ideal). - -If you can, let %s know about this error via %s. -Sorry for breaking the upgrade step! - ---- - -DB Error: %s -`, i, author, repoIssuesUrl, migrateErr) + return fmt.Errorf("%w (version %d): %v", errDBMigrationFailed, i, migrateErr.Error()) } } return nil diff --git a/cmd/db_migrations_test.go b/cmd/db_migrations_test.go index e17efcd..03c40fe 100644 --- a/cmd/db_migrations_test.go +++ b/cmd/db_migrations_test.go @@ -5,7 +5,6 @@ import ( ) func TestMigrationsAreSetupCorrectly(t *testing.T) { - migrations := getMigrations() for i := 2; i <= latestDBVersion; i++ { m, ok := migrations[i] diff --git a/cmd/guide.go b/cmd/guide.go index 3854838..77dbe9c 100644 --- a/cmd/guide.go +++ b/cmd/guide.go @@ -68,7 +68,6 @@ func getContext(summary string) (string, error) { } func insertGuideTasks(db *sql.DB) error { - tasks := make([]types.Task, len(guideEntries)) now := time.Now() @@ -78,7 +77,6 @@ func insertGuideTasks(db *sql.DB) error { var err error for i, e := range guideEntries { ctxs[i], err = getContext(guideEntries[i].summary) - if err != nil { continue } diff --git a/cmd/import.go b/cmd/import.go index a43f64a..fa9874d 100644 --- a/cmd/import.go +++ b/cmd/import.go @@ -2,15 +2,14 @@ package cmd import ( "database/sql" + "errors" "fmt" "time" pers "github.com/dhth/omm/internal/persistence" ) -var ( - errImportWillExceedTaskLimit = fmt.Errorf("Import will exceed maximum number of tasks allowed, which is %d. Archive/Delete tasks that are not active using ctrl+d/ctrl+x.", pers.TaskNumLimit) -) +var errWillExceedCapacity = errors.New("import will exceed capacity") func importTask(db *sql.DB, taskSummary string) error { numTasks, err := pers.FetchNumActiveTasksFromDB(db) @@ -18,7 +17,7 @@ func importTask(db *sql.DB, taskSummary string) error { return err } if numTasks+1 > pers.TaskNumLimit { - return errImportWillExceedTaskLimit + return fmt.Errorf("%w (current task count: %d)", errWillExceedCapacity, numTasks) } now := time.Now() @@ -31,7 +30,7 @@ func importTasks(db *sql.DB, taskSummaries []string) error { return err } if numTasks+len(taskSummaries) > pers.TaskNumLimit { - return errImportWillExceedTaskLimit + return fmt.Errorf("%w (current task count: %d)", errWillExceedCapacity, numTasks) } now := time.Now() diff --git a/cmd/root.go b/cmd/root.go index 99515a3..5ae879d 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -25,7 +25,7 @@ const ( defaultConfigFilename = "omm" envPrefix = "OMM" author = "@dhth" - repoIssuesUrl = "https://github.com/dhth/omm/issues" + repoIssuesURL = "https://github.com/dhth/omm/issues" defaultConfigDir = ".config" defaultDataDir = ".local/share" defaultConfigDirWindows = "AppData/Roaming" @@ -41,13 +41,29 @@ var ( errConfigFileDoesntExist = errors.New("config file does not exist") errDBFileExtIncorrect = errors.New("db file needs to end with .db") - errMaxImportLimitExceeded = fmt.Errorf("Max number of tasks that can be imported at a time: %d", pers.TaskNumLimit) - errNothingToImport = errors.New("Nothing to import") + errMaxImportLimitExceeded = errors.New("import limit exceeded") + errNothingToImport = errors.New("nothing to import") - errListDensityIncorrect = errors.New("List density is incorrect; valid values: compact/spacious") + errListDensityIncorrect = errors.New("list density is incorrect; valid values: compact/spacious") + + errCouldntCreateDBDirectory = errors.New("couldn't create directory for database") + errCouldntCreateDB = errors.New("couldn't create database") + errCouldntInitializeDB = errors.New("couldn't initialize database") + errCouldntOpenDB = errors.New("couldn't open database") //go:embed assets/updates.txt updateContents string + + reportIssueMsg = fmt.Sprintf("Let %s know about this error via %s.", author, repoIssuesURL) + maxImportNumMsg = fmt.Sprintf(`A maximum of %d tasks that can be imported at a time. +Archive/Delete tasks that are not active using ctrl+d/ctrl+x. + +`, pers.TaskNumLimit) + + taskCapacityMsg = fmt.Sprintf(`A maximum of %d tasks that can be active at a time. +Archive/Delete tasks that are not active using ctrl+d/ctrl+x. + +`, pers.TaskNumLimit) ) func Execute(version string) error { @@ -63,7 +79,6 @@ func Execute(version string) error { } func setupDB(dbPathFull string) (*sql.DB, error) { - var db *sql.DB var err error @@ -71,35 +86,19 @@ func setupDB(dbPathFull string) (*sql.DB, error) { if errors.Is(err, fs.ErrNotExist) { dir := filepath.Dir(dbPathFull) - err = os.MkdirAll(dir, 0755) + err = os.MkdirAll(dir, 0o755) if err != nil { - return nil, fmt.Errorf(`Couldn't create directory for data files: %s -Error: %s`, - dir, - err) + return nil, fmt.Errorf("%w: %s", errCouldntCreateDBDirectory, err.Error()) } db, err = getDB(dbPathFull) - if err != nil { - return nil, fmt.Errorf(`Couldn't create omm's local database. This is a fatal error; -Let %s know about this via %s. - -Error: %s`, - author, - repoIssuesUrl, - err) + return nil, fmt.Errorf("%w: %s", errCouldntCreateDB, err.Error()) } err = initDB(db) if err != nil { - return nil, fmt.Errorf(`Couldn't create omm's local database. This is a fatal error; -Let %s know about this via %s. - -Error: %s`, - author, - repoIssuesUrl, - err) + return nil, fmt.Errorf("%w: %s", errCouldntInitializeDB, err.Error()) } err = upgradeDB(db, 1) if err != nil { @@ -108,13 +107,7 @@ Error: %s`, } else { db, err = getDB(dbPathFull) if err != nil { - return nil, fmt.Errorf(`Couldn't open omm's local database. This is a fatal error; -Let %s know about this via %s. - -Error: %s`, - author, - repoIssuesUrl, - err) + return nil, fmt.Errorf("%w: %s", errCouldntOpenDB, err.Error()) } err = upgradeDBIfNeeded(db) if err != nil { @@ -126,7 +119,6 @@ Error: %s`, } func NewRootCommand() (*cobra.Command, error) { - var ( configPath string configPathFull string @@ -158,7 +150,7 @@ Tip: Quickly add a task using 'omm "task summary goes here"'. `, Args: cobra.MaximumNArgs(1), SilenceUsage: true, - PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { if cmd.CalledAs() == "updates" { return nil } @@ -197,6 +189,49 @@ Tip: Quickly add a task using 'omm "task summary goes here"'. } db, err = setupDB(dbPathFull) + switch { + case errors.Is(err, errCouldntCreateDB): + fmt.Printf(`Couldn't create omm's local database. This is a fatal error. +%s + +`, reportIssueMsg) + case errors.Is(err, errCouldntInitializeDB): + fmt.Printf(`Couldn't initialise omm's local database. This is a fatal error. +%s + +`, reportIssueMsg) + case errors.Is(err, errCouldntOpenDB): + fmt.Printf(`Couldn't open omm's local database. This is a fatal error. +%s + +`, reportIssueMsg) + case errors.Is(err, errCouldntFetchDBVersion): + fmt.Printf(`Couldn't get omm's latest database version. This is a fatal error. +%s + +`, reportIssueMsg) + case errors.Is(err, errDBDowngraded): + fmt.Printf(`Looks like you downgraded omm. You should either delete omm's database file (you +will lose data by doing that), or upgrade omm to the latest version. + +%s + +`, reportIssueMsg) + case errors.Is(err, errDBMigrationFailed): + fmt.Printf(`Something went wrong migrating omm's database. This is not supposed to happen. +You can try running omm by passing it a custom database file path (using +--db-path; this will create a new database) to see if that fixes things. If that +works, you can either delete the previous database, or keep using this new +database (both are not ideal). + +%s +Sorry for breaking the upgrade step! + +--- + +`, reportIssueMsg) + } + if err != nil { return err } @@ -204,14 +239,17 @@ Tip: Quickly add a task using 'omm "task summary goes here"'. return nil }, RunE: func(cmd *cobra.Command, args []string) error { - if len(args) != 0 { summaryValid, err := types.CheckIfTaskSummaryValid(args[0]) if !summaryValid { - return err + return fmt.Errorf("%w", err) } err = importTask(db, args[0]) + if errors.Is(err, errWillExceedCapacity) { + fmt.Print(taskCapacityMsg) + } + if err != nil { return err } @@ -262,16 +300,12 @@ Tip: Quickly add a task using 'omm "task summary goes here"'. importCmd := &cobra.Command{ Use: "import", Short: "Import tasks into omm from stdin", - RunE: func(cmd *cobra.Command, args []string) error { - + RunE: func(_ *cobra.Command, _ []string) error { var tasks []string taskCounter := 0 scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { - if taskCounter > pers.TaskNumLimit { - return errMaxImportLimitExceeded - } line := scanner.Text() line = strings.TrimSpace(line) @@ -282,6 +316,10 @@ Tip: Quickly add a task using 'omm "task summary goes here"'. tasks = append(tasks, line) } taskCounter++ + if taskCounter > pers.TaskNumLimit { + fmt.Print(maxImportNumMsg) + return fmt.Errorf("%w", errMaxImportLimitExceeded) + } } if len(tasks) == 0 { @@ -289,6 +327,9 @@ Tip: Quickly add a task using 'omm "task summary goes here"'. } err := importTasks(db, tasks) + if errors.Is(err, errWillExceedCapacity) { + fmt.Print(taskCapacityMsg) + } if err != nil { return err } @@ -300,7 +341,7 @@ Tip: Quickly add a task using 'omm "task summary goes here"'. tasksCmd := &cobra.Command{ Use: "tasks", Short: "Output tasks tracked by omm to stdout", - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, _ []string) error { return printTasks(db, printTasksNum, os.Stdout) }, } @@ -308,20 +349,18 @@ Tip: Quickly add a task using 'omm "task summary goes here"'. guideCmd := &cobra.Command{ Use: "guide", Short: "Starts a guided walkthrough of omm's features", - PreRunE: func(cmd *cobra.Command, args []string) error { - + PreRunE: func(_ *cobra.Command, _ []string) error { guideErr := insertGuideTasks(db) if guideErr != nil { return fmt.Errorf(`Failed to set up a guided walkthrough. -Let %s know about this via %s. +%s -Error: %s`, author, repoIssuesUrl, guideErr) +Error: %w`, reportIssueMsg, guideErr) } return nil }, - RunE: func(cmd *cobra.Command, args []string) error { - + RunE: func(cmd *cobra.Command, _ []string) error { if cmd.Flags().Lookup("editor").Changed { editorCmd = editorFlagInp } else { @@ -348,7 +387,7 @@ Error: %s`, author, repoIssuesUrl, guideErr) updatesCmd := &cobra.Command{ Use: "updates", Short: "List updates recently added to omm", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { fmt.Print(updateContents) }, } @@ -357,13 +396,13 @@ Error: %s`, author, repoIssuesUrl, guideErr) var defaultConfigPath, defaultDBPath string var configPathAdditionalCxt, dbPathAdditionalCxt string hd, err := os.UserHomeDir() - if err != nil { return nil, fmt.Errorf(`Couldn't get your home directory. This is a fatal error; use --dbpath to specify database path manually -Let %s know about this via %s. -Error: %s`, author, repoIssuesUrl, err) +%s + +Error: %w`, reportIssueMsg, err) } switch ros { @@ -427,11 +466,9 @@ func initializeConfig(cmd *cobra.Command, configFile string) error { v.SetConfigType("toml") v.AddConfigPath(filepath.Dir(configFile)) - var err error - if err = v.ReadInConfig(); err != nil { - if _, ok := err.(viper.ConfigFileNotFoundError); !ok { - return err - } + err := v.ReadInConfig() + if err != nil && !errors.As(err, &viper.ConfigFileNotFoundError{}) { + return err } v.SetEnvPrefix(envPrefix) diff --git a/internal/persistence/queries.go b/internal/persistence/queries.go index 5d26561..60ea6ea 100644 --- a/internal/persistence/queries.go +++ b/internal/persistence/queries.go @@ -14,7 +14,6 @@ const ( ) func FetchNumActiveTasksFromDB(db *sql.DB) (int, error) { - row := db.QueryRow(` SELECT json_array_length(sequence) AS num_tasks FROM task_sequence where id=1; @@ -30,8 +29,7 @@ FROM task_sequence where id=1; } func UpdateTaskSequenceInDB(db *sql.DB, sequence []uint64) error { - - sequenceJson, err := json.Marshal(sequence) + sequenceJSON, err := json.Marshal(sequence) if err != nil { return err } @@ -46,8 +44,7 @@ WHERE id = 1; } defer stmt.Close() - _, err = stmt.Exec(sequenceJson) - + _, err = stmt.Exec(sequenceJSON) if err != nil { return err } @@ -56,7 +53,6 @@ WHERE id = 1; } func InsertTaskInDB(db *sql.DB, summary string, createdAt, updatedAt time.Time) (uint64, error) { - stmt, err := db.Prepare(` INSERT INTO task (summary, active, created_at, updated_at) VALUES (?, true, ?, ?); @@ -67,7 +63,6 @@ VALUES (?, true, ?, ?); defer stmt.Close() res, err := stmt.Exec(summary, createdAt.UTC(), updatedAt.UTC()) - if err != nil { return 0, err } @@ -81,7 +76,6 @@ VALUES (?, true, ?, ?); } func ImportTaskIntoDB(db *sql.DB, summary string, active bool, createdAt, updatedAt time.Time) error { - tx, err := db.Begin() if err != nil { return err @@ -98,7 +92,7 @@ VALUES (?, ?, ?, ?);` return err } - lastInsertId, err := res.LastInsertId() + lastInsertID, err := res.LastInsertId() if err != nil { return err } @@ -118,10 +112,10 @@ VALUES (?, ?, ?, ?);` } newTaskID := make([]int, 1) - newTaskID[0] = int(lastInsertId) + newTaskID[0] = int(lastInsertID) updatedSeqItems := append(newTaskID, seqItems...) - sequenceJson, err := json.Marshal(updatedSeqItems) + sequenceJSON, err := json.Marshal(updatedSeqItems) if err != nil { return err } @@ -136,8 +130,7 @@ WHERE id = 1; } defer seqUpdateStmt.Close() - _, err = seqUpdateStmt.Exec(sequenceJson) - + _, err = seqUpdateStmt.Exec(sequenceJSON) if err != nil { return err } @@ -150,7 +143,6 @@ WHERE id = 1; } func ImportTaskSummariesIntoDB(db *sql.DB, tasks []string, active bool, createdAt, updatedAt time.Time) error { - tx, err := db.Begin() if err != nil { return err @@ -181,7 +173,7 @@ VALUES ` return err } - lastInsertId, err := res.LastInsertId() + lastInsertID, err := res.LastInsertId() if err != nil { return err } @@ -202,13 +194,13 @@ VALUES ` newTaskIDs := make([]int, len(tasks)) counter := 0 - for i := int(lastInsertId) - len(tasks) + 1; i <= int(lastInsertId); i++ { + for i := int(lastInsertID) - len(tasks) + 1; i <= int(lastInsertID); i++ { newTaskIDs[counter] = i counter++ } updatedSeqItems := append(newTaskIDs, seqItems...) - sequenceJson, err := json.Marshal(updatedSeqItems) + sequenceJSON, err := json.Marshal(updatedSeqItems) if err != nil { return err } @@ -223,8 +215,7 @@ WHERE id = 1; } defer seqUpdateStmt.Close() - _, err = seqUpdateStmt.Exec(sequenceJson) - + _, err = seqUpdateStmt.Exec(sequenceJSON) if err != nil { return err } @@ -237,7 +228,6 @@ WHERE id = 1; } func InsertTasksIntoDB(db *sql.DB, tasks []types.Task) error { - tx, err := db.Begin() if err != nil { return err @@ -273,7 +263,7 @@ VALUES ` return err } - sequenceJson, err := json.Marshal(seqItems) + sequenceJSON, err := json.Marshal(seqItems) if err != nil { return err } @@ -288,8 +278,7 @@ WHERE id = 1; } defer seqUpdateStmt.Close() - _, err = seqUpdateStmt.Exec(sequenceJson) - + _, err = seqUpdateStmt.Exec(sequenceJSON) if err != nil { return err } @@ -302,7 +291,6 @@ WHERE id = 1; } func UpdateTaskSummaryInDB(db *sql.DB, id uint64, summary string, updatedAt time.Time) error { - stmt, err := db.Prepare(` UPDATE task SET summary = ?, @@ -315,7 +303,6 @@ WHERE id = ? defer stmt.Close() _, err = stmt.Exec(summary, updatedAt.UTC(), id) - if err != nil { return err } @@ -323,7 +310,6 @@ WHERE id = ? } func UpdateTaskContextInDB(db *sql.DB, id uint64, context string, updatedAt time.Time) error { - stmt, err := db.Prepare(` UPDATE task SET context = ?, @@ -336,7 +322,6 @@ WHERE id = ? defer stmt.Close() _, err = stmt.Exec(context, updatedAt.UTC(), id) - if err != nil { return err } @@ -344,7 +329,6 @@ WHERE id = ? } func UnsetTaskContextInDB(db *sql.DB, id uint64, updatedAt time.Time) error { - stmt, err := db.Prepare(` UPDATE task SET context = NULL, @@ -357,7 +341,6 @@ WHERE id = ? defer stmt.Close() _, err = stmt.Exec(updatedAt.UTC(), id) - if err != nil { return err } @@ -365,7 +348,6 @@ WHERE id = ? } func ChangeTaskStatusInDB(db *sql.DB, id uint64, active bool, updatedAt time.Time) error { - stmt, err := db.Prepare(` UPDATE task SET active = ?, @@ -378,7 +360,6 @@ WHERE id = ? defer stmt.Close() _, err = stmt.Exec(active, updatedAt.UTC(), id) - if err != nil { return err } @@ -386,7 +367,6 @@ WHERE id = ? } func FetchActiveTasksFromDB(db *sql.DB, limit int) ([]types.Task, error) { - var tasks []types.Task rows, err := db.Query(` @@ -419,11 +399,15 @@ LIMIT ?; tasks = append(tasks, entry) } + err = rows.Err() + if err != nil { + return nil, err + } + return tasks, nil } func FetchInActiveTasksFromDB(db *sql.DB, limit int) ([]types.Task, error) { - var tasks []types.Task rows, err := db.Query(` @@ -454,11 +438,15 @@ LIMIT ?; tasks = append(tasks, entry) } + err = rows.Err() + if err != nil { + return nil, err + } + return tasks, nil } func DeleteTaskInDB(db *sql.DB, id uint64) error { - stmt, err := db.Prepare(` DELETE from task WHERE id=?; @@ -469,7 +457,6 @@ WHERE id=?; defer stmt.Close() _, err = stmt.Exec(id) - if err != nil { return err } diff --git a/internal/types/colors.go b/internal/types/colors.go index 2e61357..97a3238 100644 --- a/internal/types/colors.go +++ b/internal/types/colors.go @@ -1,158 +1,156 @@ package types -var ( - colors = []string{ - "#fe77a4", - "#d3869a", - "#ff4c8b", - "#ffb0c2", - "#df748b", - "#ff6682", - "#f19597", - "#d89e9d", - "#fc5260", - "#e96462", - "#ffb5a2", - "#febcac", - "#f0947b", - "#ff6334", - "#af9084", - "#ff5405", - "#e98658", - "#be876e", - "#ff803b", - "#fd780b", - "#ff9743", - "#e2ac85", - "#d67717", - "#d4925c", - "#ffb472", - "#fe9103", - "#de9644", - "#dc8b00", - "#ffb13c", - "#c9b094", - "#faca7d", - "#c7921f", - "#c6a267", - "#d3cdc5", - "#fabd2f", - "#dcad50", - "#daa402", - "#ffc20c", - "#fbcf56", - "#b29807", - "#e7c727", - "#c7b648", - "#9c9360", - "#cec48b", - "#bbb206", - "#ddd601", - "#d1cc74", - "#b8bb26", - "#acaa5e", - "#b4c800", - "#a6b92b", - "#a8b64c", - "#aab08a", - "#849843", - "#a8d906", - "#a8a9a3", - "#88b500", - "#add562", - "#a0d845", - "#8de107", - "#829b60", - "#7db839", - "#94bc63", - "#71c200", - "#b5d092", - "#6e9f3a", - "#51a100", - "#b5e48c", - "#8ce852", - "#59d412", - "#89d967", - "#59c435", - "#4ba539", - "#00b700", - "#00db04", - "#9ae089", - "#6fbd63", - "#83b87a", - "#5ddb63", - "#04eb4d", - "#7a9879", - "#00ce48", - "#05b64c", - "#9cdea5", - "#64d97f", - "#8fbc96", - "#4daa67", - "#00d977", - "#12b667", - "#6ed999", - "#63bd8f", - "#00d990", - "#a7e0c2", - "#0abe88", - "#90b4a6", - "#83a598", - "#5cab95", - "#b9d9cf", - "#03d7b3", - "#00b499", - "#6fd0bd", - "#1edacd", - "#19b7b2", - "#89cbce", - "#4dcfdb", - "#62a6ae", - "#90e1ef", - "#01aac0", - "#48cae4", - "#00ddff", - "#6ac1db", - "#00c3f9", - "#99bbcd", - "#149ccd", - "#6da2c6", - "#7bcaff", - "#07b1fa", - "#b4d4fb", - "#629fdb", - "#5aaaff", - "#0798ff", - "#4896ef", - "#bbd1ff", - "#9fb9f0", - "#949aab", - "#7b8ad5", - "#8498fb", - "#aaaffc", - "#8187dc", - "#ada7ff", - "#aba3ca", - "#d2c8f2", - "#a681fb", - "#b798f0", - "#c3a4e1", - "#ce8cf7", - "#c97df9", - "#e6a5f4", - "#e47cfb", - "#ffc6ff", - "#f344ff", - "#a882a7", - "#c57fbf", - "#ff4ded", - "#f081de", - "#fc69e6", - "#dfa5ca", - "#f646c1", - "#ceb4c3", - "#f27abe", - "#ae8c99", - "#ee91b6", - } -) +var colors = []string{ + "#fe77a4", + "#d3869a", + "#ff4c8b", + "#ffb0c2", + "#df748b", + "#ff6682", + "#f19597", + "#d89e9d", + "#fc5260", + "#e96462", + "#ffb5a2", + "#febcac", + "#f0947b", + "#ff6334", + "#af9084", + "#ff5405", + "#e98658", + "#be876e", + "#ff803b", + "#fd780b", + "#ff9743", + "#e2ac85", + "#d67717", + "#d4925c", + "#ffb472", + "#fe9103", + "#de9644", + "#dc8b00", + "#ffb13c", + "#c9b094", + "#faca7d", + "#c7921f", + "#c6a267", + "#d3cdc5", + "#fabd2f", + "#dcad50", + "#daa402", + "#ffc20c", + "#fbcf56", + "#b29807", + "#e7c727", + "#c7b648", + "#9c9360", + "#cec48b", + "#bbb206", + "#ddd601", + "#d1cc74", + "#b8bb26", + "#acaa5e", + "#b4c800", + "#a6b92b", + "#a8b64c", + "#aab08a", + "#849843", + "#a8d906", + "#a8a9a3", + "#88b500", + "#add562", + "#a0d845", + "#8de107", + "#829b60", + "#7db839", + "#94bc63", + "#71c200", + "#b5d092", + "#6e9f3a", + "#51a100", + "#b5e48c", + "#8ce852", + "#59d412", + "#89d967", + "#59c435", + "#4ba539", + "#00b700", + "#00db04", + "#9ae089", + "#6fbd63", + "#83b87a", + "#5ddb63", + "#04eb4d", + "#7a9879", + "#00ce48", + "#05b64c", + "#9cdea5", + "#64d97f", + "#8fbc96", + "#4daa67", + "#00d977", + "#12b667", + "#6ed999", + "#63bd8f", + "#00d990", + "#a7e0c2", + "#0abe88", + "#90b4a6", + "#83a598", + "#5cab95", + "#b9d9cf", + "#03d7b3", + "#00b499", + "#6fd0bd", + "#1edacd", + "#19b7b2", + "#89cbce", + "#4dcfdb", + "#62a6ae", + "#90e1ef", + "#01aac0", + "#48cae4", + "#00ddff", + "#6ac1db", + "#00c3f9", + "#99bbcd", + "#149ccd", + "#6da2c6", + "#7bcaff", + "#07b1fa", + "#b4d4fb", + "#629fdb", + "#5aaaff", + "#0798ff", + "#4896ef", + "#bbd1ff", + "#9fb9f0", + "#949aab", + "#7b8ad5", + "#8498fb", + "#aaaffc", + "#8187dc", + "#ada7ff", + "#aba3ca", + "#d2c8f2", + "#a681fb", + "#b798f0", + "#c3a4e1", + "#ce8cf7", + "#c97df9", + "#e6a5f4", + "#e47cfb", + "#ffc6ff", + "#f344ff", + "#a882a7", + "#c57fbf", + "#ff4ded", + "#f081de", + "#fc69e6", + "#dfa5ca", + "#f646c1", + "#ceb4c3", + "#f27abe", + "#ae8c99", + "#ee91b6", +} diff --git a/internal/types/types.go b/internal/types/types.go index 978e655..86f63be 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -32,9 +32,10 @@ var ( hasContextStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color(hasContextColor)) - ErrTaskPrefixEmpty = errors.New("Task prefix cannot be empty") - ErrTaskSummaryBodyEmpty = errors.New("Task summary body is empty") - ErrTaskSummaryTooLong = fmt.Errorf("Task summary is too long; max length allowed: %d", TaskSummaryMaxLen) + ErrTaskSummaryEmpty = errors.New("task summary is empty") + ErrTaskPrefixEmpty = errors.New("task prefix is empty") + ErrTaskSummaryBodyEmpty = errors.New("task summary body is empty") + ErrTaskSummaryTooLong = errors.New("task summary is too long") ) type Task struct { @@ -66,7 +67,11 @@ func (t Task) Prefix() (TaskPrefix, bool) { func CheckIfTaskSummaryValid(summary string) (bool, error) { if strings.TrimSpace(summary) == "" { - return false, ErrTaskPrefixEmpty + return false, ErrTaskSummaryEmpty + } + + if len(summary) > TaskSummaryMaxLen { + return false, ErrTaskSummaryTooLong } summEls := strings.Split(summary, PrefixDelimiter) diff --git a/internal/ui/cmds.go b/internal/ui/cmds.go index 0bb939d..da222fb 100644 --- a/internal/ui/cmds.go +++ b/internal/ui/cmds.go @@ -1,17 +1,16 @@ package ui import ( + "database/sql" "os/exec" "runtime" "time" - "database/sql" - "github.com/atotto/clipboard" tea "github.com/charmbracelet/bubbletea" pers "github.com/dhth/omm/internal/persistence" "github.com/dhth/omm/internal/types" - _ "modernc.org/sqlite" + _ "modernc.org/sqlite" // sqlite driver ) func hideHelp(interval time.Duration) tea.Cmd { @@ -83,12 +82,11 @@ func fetchTasks(db *sql.DB, active bool, limit int) tea.Cmd { } } -func openTextEditor(fPath string, editorCmd []string, taskIndex int, taskId uint64, oldContext *string) tea.Cmd { - +func openTextEditor(fPath string, editorCmd []string, taskIndex int, taskID uint64, oldContext *string) tea.Cmd { c := exec.Command(editorCmd[0], append(editorCmd[1:], fPath)...) return tea.ExecProcess(c, func(err error) tea.Msg { - return tea.Msg(textEditorClosed{fPath, taskIndex, taskId, oldContext, err}) + return tea.Msg(textEditorClosed{fPath, taskIndex, taskID, oldContext, err}) }) } diff --git a/internal/ui/initial.go b/internal/ui/initial.go index 17422ad..8938312 100644 --- a/internal/ui/initial.go +++ b/internal/ui/initial.go @@ -11,8 +11,7 @@ import ( "github.com/dhth/omm/internal/utils" ) -func InitialModel(db *sql.DB, config Config) model { - +func InitialModel(db *sql.DB, config Config) Model { taskItems := make([]list.Item, 0) tlSelItemStyle := lipgloss.NewStyle().Foreground(lipgloss.Color(config.TaskListColor)) @@ -66,7 +65,7 @@ func InitialModel(db *sql.DB, config Config) model { defaultListHeight, ) } - archivedTaskList.Title = "archived" + archivedTaskList.Title = archivedTitle archivedTaskList.SetShowStatusBar(true) archivedTaskList.SetStatusBarItemName("task", "tasks") archivedTaskList.SetFilteringEnabled(true) @@ -119,7 +118,7 @@ func InitialModel(db *sql.DB, config Config) model { tr, _ := utils.GetMarkDownRenderer(taskDetailsWordWrap) - m := model{ + m := Model{ db: db, cfg: config, taskList: taskList, @@ -132,7 +131,7 @@ func InitialModel(db *sql.DB, config Config) model { atlTitleStyle: archivedTaskListTitleStyle, tlSelStyle: tlSelItemStyle, atlSelStyle: atlSelItemStyle, - contextVPTaskId: 0, + contextVPTaskID: 0, rtos: runtime.GOOS, uriRegex: utils.GetURIRegex(), taskDetailsMdRenderer: tr, diff --git a/internal/ui/model.go b/internal/ui/model.go index c8ddd17..29db429 100644 --- a/internal/ui/model.go +++ b/internal/ui/model.go @@ -19,6 +19,7 @@ const ( prefixPadding = 24 timeFormat = "2006/01/02 15:04" taskSummaryWidth = 120 + archivedTitle = "archived" ) type taskChangeType uint @@ -55,7 +56,7 @@ const ( prefixChoose ) -type model struct { +type Model struct { db *sql.DB cfg Config taskList list.Model @@ -65,7 +66,7 @@ type model struct { tlIndexMap map[uint64]int atlIndexMap map[uint64]int taskIndex int - taskId uint64 + taskID uint64 taskChange taskChangeType contextVP viewport.Model contextVPReady bool @@ -87,7 +88,7 @@ type model struct { atlSelStyle lipgloss.Style terminalWidth int terminalHeight int - contextVPTaskId uint64 + contextVPTaskID uint64 rtos string uriRegex *regexp.Regexp shortenedListHt int @@ -97,7 +98,7 @@ type model struct { showDeletePrompt bool } -func (m model) Init() tea.Cmd { +func (m Model) Init() tea.Cmd { return tea.Batch( fetchTasks(m.db, true, pers.TaskNumLimit), fetchTasks(m.db, false, pers.TaskNumLimit), diff --git a/internal/ui/msgs.go b/internal/ui/msgs.go index f98a96a..25975d7 100644 --- a/internal/ui/msgs.go +++ b/internal/ui/msgs.go @@ -61,7 +61,7 @@ type tasksFetched struct { type textEditorClosed struct { fPath string taskIndex int - taskId uint64 + taskID uint64 oldContext *string err error } diff --git a/internal/ui/ui.go b/internal/ui/ui.go index f151c80..e899bf8 100644 --- a/internal/ui/ui.go +++ b/internal/ui/ui.go @@ -10,7 +10,6 @@ import ( ) func RenderUI(db *sql.DB, config Config) { - if len(os.Getenv("DEBUG")) > 0 { f, err := tea.LogToFile("debug.log", "debug") if err != nil { diff --git a/internal/ui/update.go b/internal/ui/update.go index 837bb16..69f2365 100644 --- a/internal/ui/update.go +++ b/internal/ui/update.go @@ -18,15 +18,19 @@ import ( ) const ( - noSpaceAvailableMsg = "Task list is at capacity. Archive/delete tasks using ctrl+d/ctrl+x." - noContextMsg = " ∅" - viewPortMoveLineCount = 3 + noSpaceAvailableMsg = "Task list is at capacity. Archive/delete tasks using ctrl+d/ctrl+x." + noContextMsg = " ∅" + viewPortMoveLineCount = 3 + cannotMoveWhenFilteredMsg = "Can't move items when the task list is filtered" + cannotAddWhenFilteredMsg = "Can't add items when the task list is filtered" + cannotDeleteWhenFilteredMsg = "Can't delete items when the task list is filtered" + somethingWentWrongMsg = "Something went wrong" ) //go:embed assets/help.md var helpStr string -func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { +func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { var cmd tea.Cmd var cmds []tea.Cmd m.successMsg = "" @@ -82,7 +86,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.activeView = taskListView m.activeTaskList = activeTasks case taskUpdateSummary: - cmd = updateTaskSummary(m.db, m.taskIndex, m.taskId, taskSummary) + cmd = updateTaskSummary(m.db, m.taskIndex, m.taskID, taskSummary) cmds = append(cmds, cmd) m.taskInput.Reset() m.activeView = taskListView @@ -249,7 +253,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.taskList.Title = m.cfg.TaskListTitle m.taskList.Styles.Title = m.taskList.Styles.Title.Background(lipgloss.Color(m.cfg.TaskListColor)) case archivedTaskListView: - m.archivedTaskList.Title = "archived" + m.archivedTaskList.Title = archivedTitle m.archivedTaskList.Styles.Title = m.archivedTaskList.Styles.Title.Background(lipgloss.Color(m.cfg.ArchivedTaskListColor)) } return m, tea.Batch(cmds...) @@ -344,7 +348,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.taskList.IsFiltered() { - m.errorMsg = "Cannot add items when the task list is filtered" + m.errorMsg = cannotAddWhenFilteredMsg break } @@ -366,7 +370,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.taskList.IsFiltered() { - m.errorMsg = "Cannot add items when the task list is filtered" + m.errorMsg = cannotAddWhenFilteredMsg break } @@ -388,7 +392,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.taskList.IsFiltered() { - m.errorMsg = "Cannot add items when the task list is filtered" + m.errorMsg = cannotAddWhenFilteredMsg break } @@ -414,7 +418,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.taskList.IsFiltered() { - m.errorMsg = "Cannot add items when the task list is filtered" + m.errorMsg = cannotAddWhenFilteredMsg break } @@ -529,7 +533,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.taskList.IsFiltered() { - m.errorMsg = "Cannot move items when the task list is filtered" + m.errorMsg = cannotMoveWhenFilteredMsg break } @@ -557,7 +561,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.taskList.IsFiltered() { - m.errorMsg = "Cannot move items when the task list is filtered" + m.errorMsg = cannotMoveWhenFilteredMsg break } @@ -588,14 +592,14 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { index := m.taskList.Index() t, ok := listItem.(types.Task) if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } m.taskInput.SetValue(t.Summary) m.taskInput.Focus() m.taskIndex = index - m.taskId = t.ID + m.taskID = t.ID m.taskChange = taskUpdateSummary m.activeView = taskEntryView return m, tea.Batch(cmds...) @@ -662,7 +666,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { index := m.archivedTaskList.Index() t, ok := listItem.(types.Task) if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } @@ -684,7 +688,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.taskList.IsFiltered() { - m.errorMsg = "Cannot delete items when the task list is filtered" + m.errorMsg = cannotDeleteWhenFilteredMsg quit = true break } @@ -695,7 +699,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.archivedTaskList.IsFiltered() { - m.errorMsg = "Cannot delete items when the task list is filtered" + m.errorMsg = cannotDeleteWhenFilteredMsg quit = true break } @@ -725,7 +729,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { index := m.taskList.Index() t, ok := m.taskList.SelectedItem().(types.Task) if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } cmd = deleteTask(m.db, t.ID, index, true) @@ -740,7 +744,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { index := m.archivedTaskList.Index() task, ok := m.archivedTaskList.SelectedItem().(types.Task) if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } @@ -748,7 +752,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { cmds = append(cmds, cmd) if m.cfg.ConfirmBeforeDeletion { m.showDeletePrompt = false - m.archivedTaskList.Title = "archived" + m.archivedTaskList.Title = archivedTitle m.archivedTaskList.Styles.Title = m.archivedTaskList.Styles.Title.Background(lipgloss.Color(m.cfg.ArchivedTaskListColor)) } } @@ -825,13 +829,13 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { if m.taskList.IsFiltered() { selected, ok := m.taskList.SelectedItem().(types.Task) if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } listIndex, ok := m.tlIndexMap[selected.ID] if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } @@ -867,13 +871,13 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { selected, ok := m.archivedTaskList.SelectedItem().(types.Task) if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } listIndex, ok := m.atlIndexMap[selected.ID] if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } @@ -936,7 +940,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } - case "E": + case "E", "$": if m.activeView != taskListView { break } @@ -946,7 +950,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if m.taskList.IsFiltered() { - m.errorMsg = "Cannot move items when the task list is filtered" + m.errorMsg = cannotMoveWhenFilteredMsg break } @@ -986,14 +990,14 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case activeTasks: t, ok = m.taskList.SelectedItem().(types.Task) if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } index = m.taskList.Index() case archivedTasks: t, ok = m.archivedTaskList.SelectedItem().(types.Task) if !ok { - m.errorMsg = "Something went wrong" + m.errorMsg = somethingWentWrongMsg break } index = m.archivedTaskList.Index() @@ -1361,7 +1365,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.setContextFSContent(t) } // to force refresh - m.contextVPTaskId = 0 + m.contextVPTaskID = 0 } case taskStatusChangedMsg: @@ -1433,7 +1437,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } case textEditorClosed: if msg.err != nil { - m.errorMsg = fmt.Sprintf("Something went wrong: %s", msg.err) + m.errorMsg = fmt.Sprintf("%s: %s", somethingWentWrongMsg, msg.err) _ = os.Remove(msg.fPath) break } @@ -1458,7 +1462,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { break } - cmds = append(cmds, updateTaskContext(m.db, msg.taskIndex, msg.taskId, string(context), m.activeTaskList)) + cmds = append(cmds, updateTaskContext(m.db, msg.taskIndex, msg.taskID, string(context), m.activeTaskList)) case uriOpenedMsg: if msg.err != nil { m.errorMsg = fmt.Sprintf("Error opening uri: %s", msg.err) @@ -1492,7 +1496,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { break } - if m.contextVPTaskId == t.ID { + if m.contextVPTaskID == t.ID { break } @@ -1515,7 +1519,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } m.contextVP.SetContent(detailsToRender) - m.contextVPTaskId = t.ID + m.contextVPTaskID = t.ID case archivedTaskListView: if !skipListUpdate { @@ -1531,7 +1535,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { break } - if m.contextVPTaskId == t.ID { + if m.contextVPTaskID == t.ID { break } @@ -1549,7 +1553,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } else { m.contextVP.SetContent(noContextMsg) } - m.contextVPTaskId = t.ID + m.contextVPTaskID = t.ID case taskEntryView: m.taskInput, viewUpdateCmd = m.taskInput.Update(msg) @@ -1576,7 +1580,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, tea.Batch(cmds...) } -func (m *model) updateActiveTasksSequence() tea.Cmd { +func (m *Model) updateActiveTasksSequence() tea.Cmd { sequence := make([]uint64, len(m.taskList.Items())) tlIndexMap := make(map[uint64]int) @@ -1593,7 +1597,7 @@ func (m *model) updateActiveTasksSequence() tea.Cmd { return updateTaskSequence(m.db, sequence) } -func (m *model) updateArchivedTasksIndex() { +func (m *Model) updateArchivedTasksIndex() { sequence := make([]uint64, len(m.archivedTaskList.Items())) tlIndexMap := make(map[uint64]int) @@ -1608,11 +1612,11 @@ func (m *model) updateArchivedTasksIndex() { m.atlIndexMap = tlIndexMap } -func (m model) isSpaceAvailable() bool { +func (m Model) isSpaceAvailable() bool { return len(m.taskList.Items()) < pers.TaskNumLimit } -func (m *model) setContextFSContent(task types.Task) { +func (m *Model) setContextFSContent(task types.Task) { var ctx string if task.Context != nil { ctx = fmt.Sprintf("---\n%s", *task.Context) @@ -1635,7 +1639,7 @@ func (m *model) setContextFSContent(task types.Task) { m.taskDetailsVP.SetContent(details) } -func (m model) getTaskURIs() ([]string, bool) { +func (m Model) getTaskURIs() ([]string, bool) { var t types.Task var ok bool diff --git a/internal/ui/utils_test.go b/internal/ui/utils_test.go index 432b63b..9f3d3e0 100644 --- a/internal/ui/utils_test.go +++ b/internal/ui/utils_test.go @@ -70,5 +70,4 @@ func TestGetSummaryWithNewPrefix(t *testing.T) { assert.Equal(t, tt.expected, got) }) } - } diff --git a/internal/ui/view.go b/internal/ui/view.go index b119df2..126fe36 100644 --- a/internal/ui/view.go +++ b/internal/ui/view.go @@ -13,7 +13,7 @@ var ( contextWordWrapUpperLimit = 160 ) -func (m model) View() string { +func (m Model) View() string { if m.quitting { return "" } @@ -62,7 +62,7 @@ func (m model) View() string { content = fmt.Sprintf(` %s - %s`, m.atlTitleStyle.Render("archived"), formStyle.Render("No items. You archive items by pressing ctrl+d.\n")) + %s`, m.atlTitleStyle.Render(archivedTitle), formStyle.Render("No items. You archive items by pressing ctrl+d.\n")) listEmpty = true } @@ -168,5 +168,4 @@ func (m model) View() string { components = append(components, statusBar) return lipgloss.JoinVertical(lipgloss.Left, components...) - } diff --git a/internal/utils/markdown.go b/internal/utils/markdown.go index 677b00c..251e001 100644 --- a/internal/utils/markdown.go +++ b/internal/utils/markdown.go @@ -7,14 +7,12 @@ import ( "github.com/muesli/termenv" ) -var ( - //go:embed assets/gruvbox.json - glamourJsonBytes []byte -) +//go:embed assets/gruvbox.json +var glamourJSONBytes []byte func GetMarkDownRenderer(wrap int) (*glamour.TermRenderer, error) { return glamour.NewTermRenderer( - glamour.WithStylesFromJSONBytes(glamourJsonBytes), + glamour.WithStylesFromJSONBytes(glamourJSONBytes), glamour.WithColorProfile(termenv.TrueColor), glamour.WithWordWrap(wrap), ) diff --git a/internal/utils/markdown_test.go b/internal/utils/markdown_test.go index 64d6d68..7093df0 100644 --- a/internal/utils/markdown_test.go +++ b/internal/utils/markdown_test.go @@ -9,7 +9,7 @@ import ( ) func TestGetGlamourStyleFromFile(t *testing.T) { - gotOption := glamour.WithStylesFromJSONBytes(glamourJsonBytes) + gotOption := glamour.WithStylesFromJSONBytes(glamourJSONBytes) renderer, err := glamour.NewTermRenderer(gotOption) assert.NoError(t, err) assert.NotNil(t, renderer) @@ -19,6 +19,6 @@ func TestGetGlamourStyleFromFile(t *testing.T) { } func TestGlamourStylesFileIsValid(t *testing.T) { - got := json.Valid(glamourJsonBytes) + got := json.Valid(glamourJSONBytes) assert.True(t, got) } diff --git a/main.go b/main.go index 476d444..05f29c2 100644 --- a/main.go +++ b/main.go @@ -7,9 +7,7 @@ import ( "github.com/dhth/omm/cmd" ) -var ( - version = "dev" -) +var version = "dev" func main() { v := version