summaryrefslogtreecommitdiff
path: root/internal/re
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2019-07-06 18:47:57 +0200
committerDimitri Sokolyuk <demon@dim13.org>2019-07-06 18:47:57 +0200
commitbe263b349d54318de512b25ba2488044c867df0d (patch)
treee270185c963fbad8aacab99e9cfcc0b5994d8be4 /internal/re
parent090d2fae173d241ee93966e6c6aa95e7d0ec9e86 (diff)
renamedev
Diffstat (limited to 'internal/re')
-rw-r--r--internal/re/re.go64
-rw-r--r--internal/re/re_test.go34
2 files changed, 0 insertions, 98 deletions
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)
- }
- })
- }
-}