From 5e4dc87ffec7f87bbf3ebfcf256777ad773e8450 Mon Sep 17 00:00:00 2001 From: Michael Muré Date: Sat, 14 Mar 2020 16:47:38 +0100 Subject: cache: replace the all-in-one query parser by a complete one with AST/lexer/parser --- commands/ls.go | 57 +++++++++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 32 deletions(-) (limited to 'commands') diff --git a/commands/ls.go b/commands/ls.go index 70a948e6..aff56f61 100644 --- a/commands/ls.go +++ b/commands/ls.go @@ -7,7 +7,10 @@ import ( text "github.com/MichaelMure/go-term-text" "github.com/spf13/cobra" + "github.com/MichaelMure/git-bug/bug" "github.com/MichaelMure/git-bug/cache" + "github.com/MichaelMure/git-bug/query" + "github.com/MichaelMure/git-bug/query/ast" "github.com/MichaelMure/git-bug/util/colors" "github.com/MichaelMure/git-bug/util/interrupt" ) @@ -32,21 +35,21 @@ func runLsBug(cmd *cobra.Command, args []string) error { defer backend.Close() interrupt.RegisterCleaner(backend.Close) - var query *cache.Query + var q *ast.Query if len(args) >= 1 { - query, err = cache.ParseQuery(strings.Join(args, " ")) + q, err = query.Parse(strings.Join(args, " ")) if err != nil { return err } } else { - query, err = lsQueryFromFlags() + q, err = lsQueryFromFlags() if err != nil { return err } } - allIds := backend.QueryBugs(query) + allIds := backend.QueryBugs(q) for _, id := range allIds { b, err := backend.ResolveBugExcerpt(id) @@ -96,47 +99,37 @@ func runLsBug(cmd *cobra.Command, args []string) error { return nil } -// Transform the command flags into a query -func lsQueryFromFlags() (*cache.Query, error) { - query := cache.NewQuery() +// Transform the command flags into an ast.Query +func lsQueryFromFlags() (*ast.Query, error) { + q := ast.NewQuery() - for _, status := range lsStatusQuery { - f, err := cache.StatusFilter(status) + for _, str := range lsStatusQuery { + status, err := bug.StatusFromString(str) if err != nil { return nil, err } - query.Status = append(query.Status, f) + q.Status = append(q.Status, status) } - for _, title := range lsTitleQuery { - f := cache.TitleFilter(title) - query.Title = append(query.Title, f) + q.Title = append(q.Title, title) } - for _, author := range lsAuthorQuery { - f := cache.AuthorFilter(author) - query.Author = append(query.Author, f) + q.Author = append(q.Author, author) } - for _, actor := range lsActorQuery { - f := cache.ActorFilter(actor) - query.Actor = append(query.Actor, f) + q.Actor = append(q.Actor, actor) } - for _, participant := range lsParticipantQuery { - f := cache.ParticipantFilter(participant) - query.Participant = append(query.Participant, f) + q.Participant = append(q.Participant, participant) } - for _, label := range lsLabelQuery { - f := cache.LabelFilter(label) - query.Label = append(query.Label, f) + q.Label = append(q.Label, label) } for _, no := range lsNoQuery { switch no { case "label": - query.NoFilters = append(query.NoFilters, cache.NoLabelFilter()) + q.NoLabel = true default: return nil, fmt.Errorf("unknown \"no\" filter %s", no) } @@ -144,25 +137,25 @@ func lsQueryFromFlags() (*cache.Query, error) { switch lsSortBy { case "id": - query.OrderBy = cache.OrderById + q.OrderBy = ast.OrderById case "creation": - query.OrderBy = cache.OrderByCreation + q.OrderBy = ast.OrderByCreation case "edit": - query.OrderBy = cache.OrderByEdit + q.OrderBy = ast.OrderByEdit default: return nil, fmt.Errorf("unknown sort flag %s", lsSortBy) } switch lsSortDirection { case "asc": - query.OrderDirection = cache.OrderAscending + q.OrderDirection = ast.OrderAscending case "desc": - query.OrderDirection = cache.OrderDescending + q.OrderDirection = ast.OrderDescending default: return nil, fmt.Errorf("unknown sort direction %s", lsSortDirection) } - return query, nil + return q, nil } var lsCmd = &cobra.Command{ -- cgit From 314fcbb2293d869c33d6a76aedd148aedff6561d Mon Sep 17 00:00:00 2001 From: Michael Muré Date: Sun, 22 Mar 2020 13:53:34 +0100 Subject: query: no need for an ast package --- commands/ls.go | 76 ++++++++++++++++++++++------------------------------------ 1 file changed, 28 insertions(+), 48 deletions(-) (limited to 'commands') diff --git a/commands/ls.go b/commands/ls.go index aff56f61..f125d916 100644 --- a/commands/ls.go +++ b/commands/ls.go @@ -10,21 +10,17 @@ import ( "github.com/MichaelMure/git-bug/bug" "github.com/MichaelMure/git-bug/cache" "github.com/MichaelMure/git-bug/query" - "github.com/MichaelMure/git-bug/query/ast" "github.com/MichaelMure/git-bug/util/colors" "github.com/MichaelMure/git-bug/util/interrupt" ) var ( - lsStatusQuery []string - lsAuthorQuery []string - lsParticipantQuery []string - lsLabelQuery []string - lsTitleQuery []string - lsActorQuery []string - lsNoQuery []string - lsSortBy string - lsSortDirection string + lsQuery query.Query + + lsStatusQuery []string + lsNoQuery []string + lsSortBy string + lsSortDirection string ) func runLsBug(cmd *cobra.Command, args []string) error { @@ -35,7 +31,7 @@ func runLsBug(cmd *cobra.Command, args []string) error { defer backend.Close() interrupt.RegisterCleaner(backend.Close) - var q *ast.Query + var q *query.Query if len(args) >= 1 { q, err = query.Parse(strings.Join(args, " ")) @@ -43,10 +39,11 @@ func runLsBug(cmd *cobra.Command, args []string) error { return err } } else { - q, err = lsQueryFromFlags() + err = completeQuery() if err != nil { return err } + q = &lsQuery } allIds := backend.QueryBugs(q) @@ -99,63 +96,46 @@ func runLsBug(cmd *cobra.Command, args []string) error { return nil } -// Transform the command flags into an ast.Query -func lsQueryFromFlags() (*ast.Query, error) { - q := ast.NewQuery() - +// Finish the command flags transformation into the query.Query +func completeQuery() error { for _, str := range lsStatusQuery { status, err := bug.StatusFromString(str) if err != nil { - return nil, err + return err } - q.Status = append(q.Status, status) - } - for _, title := range lsTitleQuery { - q.Title = append(q.Title, title) - } - for _, author := range lsAuthorQuery { - q.Author = append(q.Author, author) - } - for _, actor := range lsActorQuery { - q.Actor = append(q.Actor, actor) - } - for _, participant := range lsParticipantQuery { - q.Participant = append(q.Participant, participant) - } - for _, label := range lsLabelQuery { - q.Label = append(q.Label, label) + lsQuery.Status = append(lsQuery.Status, status) } for _, no := range lsNoQuery { switch no { case "label": - q.NoLabel = true + lsQuery.NoLabel = true default: - return nil, fmt.Errorf("unknown \"no\" filter %s", no) + return fmt.Errorf("unknown \"no\" filter %s", no) } } switch lsSortBy { case "id": - q.OrderBy = ast.OrderById + lsQuery.OrderBy = query.OrderById case "creation": - q.OrderBy = ast.OrderByCreation + lsQuery.OrderBy = query.OrderByCreation case "edit": - q.OrderBy = ast.OrderByEdit + lsQuery.OrderBy = query.OrderByEdit default: - return nil, fmt.Errorf("unknown sort flag %s", lsSortBy) + return fmt.Errorf("unknown sort flag %s", lsSortBy) } switch lsSortDirection { case "asc": - q.OrderDirection = ast.OrderAscending + lsQuery.OrderDirection = query.OrderAscending case "desc": - q.OrderDirection = ast.OrderDescending + lsQuery.OrderDirection = query.OrderDescending default: - return nil, fmt.Errorf("unknown sort direction %s", lsSortDirection) + return fmt.Errorf("unknown sort direction %s", lsSortDirection) } - return q, nil + return nil } var lsCmd = &cobra.Command{ @@ -181,15 +161,15 @@ func init() { lsCmd.Flags().StringSliceVarP(&lsStatusQuery, "status", "s", nil, "Filter by status. Valid values are [open,closed]") - lsCmd.Flags().StringSliceVarP(&lsAuthorQuery, "author", "a", nil, + lsCmd.Flags().StringSliceVarP(&lsQuery.Author, "author", "a", nil, "Filter by author") - lsCmd.Flags().StringSliceVarP(&lsParticipantQuery, "participant", "p", nil, + lsCmd.Flags().StringSliceVarP(&lsQuery.Participant, "participant", "p", nil, "Filter by participant") - lsCmd.Flags().StringSliceVarP(&lsActorQuery, "actor", "A", nil, + lsCmd.Flags().StringSliceVarP(&lsQuery.Actor, "actor", "A", nil, "Filter by actor") - lsCmd.Flags().StringSliceVarP(&lsLabelQuery, "label", "l", nil, + lsCmd.Flags().StringSliceVarP(&lsQuery.Label, "label", "l", nil, "Filter by label") - lsCmd.Flags().StringSliceVarP(&lsTitleQuery, "title", "t", nil, + lsCmd.Flags().StringSliceVarP(&lsQuery.Title, "title", "t", nil, "Filter by title") lsCmd.Flags().StringSliceVarP(&lsNoQuery, "no", "n", nil, "Filter by absence of something. Valid values are [label]") -- cgit