implement identityExcerpt match method and integrate it into filters

Amine Hilaly created

Update docs

Change summary

cache/filter.go           | 15 +++------------
cache/identity_excerpt.go |  8 ++++++++
doc/queries.md            |  1 +
3 files changed, 12 insertions(+), 12 deletions(-)

Detailed changes

cache/filter.go 🔗

@@ -33,10 +33,7 @@ func AuthorFilter(query string) Filter {
 				panic("missing identity in the cache")
 			}
 
-			return query == author.Id ||
-				query == author.HumanId() ||
-				strings.Contains(strings.ToLower(author.Name), query) ||
-				strings.Contains(strings.ToLower(author.Login), query)
+			return author.Match(query)
 		}
 
 		// Legacy identity support
@@ -68,10 +65,7 @@ func ActorFilter(query string) Filter {
 				panic("missing identity in the cache")
 			}
 
-			if query == identityExcerpt.Id ||
-				query == identityExcerpt.HumanId() ||
-				strings.Contains(strings.ToLower(identityExcerpt.Name), query) ||
-				query == strings.ToLower(identityExcerpt.Login) {
+			if identityExcerpt.Match(query) {
 				return true
 			}
 		}
@@ -90,10 +84,7 @@ func ParticipantFilter(query string) Filter {
 				panic("missing identity in the cache")
 			}
 
-			if query == identityExcerpt.Id ||
-				query == identityExcerpt.HumanId() ||
-				strings.Contains(strings.ToLower(identityExcerpt.Name), query) ||
-				query == strings.ToLower(identityExcerpt.Login) {
+			if identityExcerpt.Match(query) {
 				return true
 			}
 		}

cache/identity_excerpt.go 🔗

@@ -3,6 +3,7 @@ package cache
 import (
 	"encoding/gob"
 	"fmt"
+	"strings"
 
 	"github.com/MichaelMure/git-bug/identity"
 )
@@ -51,6 +52,13 @@ func (i *IdentityExcerpt) DisplayName() string {
 	panic("invalid person data")
 }
 
+// Match matches a query with the identity name, login and ID prefixes
+func (i *IdentityExcerpt) Match(query string) bool {
+	return strings.HasPrefix(i.Id, query) ||
+		strings.Contains(strings.ToLower(i.Name), query) ||
+		strings.Contains(strings.ToLower(i.Login), query)
+}
+
 /*
  * Sorting
  */

doc/queries.md 🔗

@@ -11,6 +11,7 @@ A few tips:
 - queries are case insensitive.
 - you can combine as many qualifiers as you want.
 - you can use double quotes for multi-word search terms. For example, `author:"René Descartes"` searches for bugs opened by René Descartes, whereas `author:René Descartes` will throw an error since full-text search is not yet supported.
+- instead of a complete ID, you can use any prefix length. For example `participant=9ed1a`.
 
 
 ## Filtering