From be263b349d54318de512b25ba2488044c867df0d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 6 Jul 2019 18:47:57 +0200 Subject: rename --- internal/re/re.go | 64 -------------------------------------------------- internal/re/re_test.go | 34 --------------------------- 2 files changed, 98 deletions(-) delete mode 100644 internal/re/re.go delete mode 100644 internal/re/re_test.go (limited to 'internal/re') diff --git a/internal/re/re.go b/internal/re/re.go deleted file mode 100644 index f7e9543..0000000 --- a/internal/re/re.go +++ /dev/null @@ -1,64 +0,0 @@ -package re - -import ( - "errors" - "fmt" - "io" - "regexp" - "strings" - - lru "github.com/hashicorp/golang-lru" -) - -var errNotRE = errors.New("not re") - -type RE struct { - last *lru.Cache - w io.Writer -} - -func NewRE(w io.Writer) *RE { - last, _ := lru.New(100) - return &RE{last: last, w: w} -} - -func (r *RE) Replace(text, nick string) { - defer r.last.Add(nick, text) - if !strings.HasPrefix(text, "s") { - return - } - if tofix, ok := r.last.Get(nick); ok { - global := strings.HasSuffix(text, "g") - fixed, err := Replace(tofix.(string), text[1:], global) - if err == nil && fixed != tofix { - fmt.Fprintf(r.w, "%v meant to say: %s", nick, fixed) - } - } -} - -func Replace(s, r string, global bool) (string, error) { - // min: at least two separators - if len(r) < 2 { - return "", errNotRE - } - z := strings.Split(r[1:], string(r[0])) - // match // and /// - if len(z) < 2 || len(z) > 3 { - return "", errNotRE - } - re, err := regexp.Compile(z[0]) - if err != nil { - return "", err - } - i := 1 - if global { - i = -1 - } - return re.ReplaceAllStringFunc(s, func(b string) string { - if i != 0 { - i-- - return z[1] - } - return b - }), nil -} diff --git a/internal/re/re_test.go b/internal/re/re_test.go deleted file mode 100644 index 9824392..0000000 --- a/internal/re/re_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package re - -import "testing" - -func TestRE(t *testing.T) { - testCases := []struct { - r, s, x string - global bool - err error - }{ - {"/ddd/xxx/", "abd ddd xxx", "abd xxx xxx", false, nil}, - {",ddd,xxx,", "abd ddd xxx", "abd xxx xxx", false, nil}, - {"/ddd/xxx", "abd ddd xxx", "abd xxx xxx", false, nil}, - {"/x$/X", "abd ddd xxx", "abd ddd xxX", false, nil}, - {"/ /A", "abd ddd xxx", "abdAddd xxx", false, nil}, - {"/ /A", "abd ddd xxx", "abdAdddAxxx", true, nil}, - {"///", "abd ddd xxx", "abd ddd xxx", false, nil}, - {"//", "abd ddd xxx", "abd ddd xxx", false, nil}, - {"/", "abd ddd xxx", "", false, errNotRE}, - {"/1/2", "1", "2", false, nil}, - {"/^d/X", "abd ddd xxx", "abd ddd xxx", false, nil}, - } - for _, tc := range testCases { - t.Run(tc.r, func(t *testing.T) { - res, err := Replace(tc.s, tc.r, tc.global) - if err != tc.err { - t.Errorf("got %q, want %q", err, tc.err) - } - if res != tc.x { - t.Errorf("got %q, want %q", res, tc.x) - } - }) - } -} -- cgit v1.2.3