From 4871754e069713f5348b816370a3342acfc5aeab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20L=C3=B6nnblad?= Date: Fri, 13 Mar 2020 15:50:21 -0300 Subject: [PATCH] Broke out snippets to its own file --- fmt.go | 84 +--------------------------------- undefined_snippets_gen.go | 94 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 82 deletions(-) create mode 100644 undefined_snippets_gen.go diff --git a/fmt.go b/fmt.go index 7aa35d5..aa60ed1 100644 --- a/fmt.go +++ b/fmt.go @@ -5,48 +5,17 @@ import ( "fmt" "io" "os" - "reflect" - "regexp" "strconv" "strings" "sync" - "text/template" "time" "unicode" - "github.com/cucumber/godog/colors" - "github.com/cucumber/messages-go/v10" + + "github.com/cucumber/godog/colors" ) -// some snippet formatting regexps -var snippetExprCleanup = regexp.MustCompile("([\\/\\[\\]\\(\\)\\\\^\\$\\.\\|\\?\\*\\+\\'])") -var snippetExprQuoted = regexp.MustCompile("(\\W|^)\"(?:[^\"]*)\"(\\W|$)") -var snippetMethodName = regexp.MustCompile("[^a-zA-Z\\_\\ ]") -var snippetNumbers = regexp.MustCompile("(\\d+)") - -var snippetHelperFuncs = template.FuncMap{ - "backticked": func(s string) string { - return "`" + s + "`" - }, -} - -var undefinedSnippetsTpl = template.Must(template.New("snippets").Funcs(snippetHelperFuncs).Parse(` -{{ range . }}func {{ .Method }}({{ .Args }}) error { - return godog.ErrPending -} - -{{end}}func FeatureContext(s *godog.Suite) { {{ range . }} - s.Step({{ backticked .Expr }}, {{ .Method }}){{end}} -} -`)) - -type undefinedSnippet struct { - Method string - Expr string - argument *messages.PickleStepArgument -} - type registeredFormatter struct { name string fmt FormatterFunc @@ -438,55 +407,6 @@ func (f *basefmt) Copy(cf ConcurrentFormatter) { } } -func (s *undefinedSnippet) Args() (ret string) { - var ( - args []string - pos int - breakLoop bool - ) - for !breakLoop { - part := s.Expr[pos:] - ipos := strings.Index(part, "(\\d+)") - spos := strings.Index(part, "\"([^\"]*)\"") - switch { - case spos == -1 && ipos == -1: - breakLoop = true - case spos == -1: - pos += ipos + len("(\\d+)") - args = append(args, reflect.Int.String()) - case ipos == -1: - pos += spos + len("\"([^\"]*)\"") - args = append(args, reflect.String.String()) - case ipos < spos: - pos += ipos + len("(\\d+)") - args = append(args, reflect.Int.String()) - case spos < ipos: - pos += spos + len("\"([^\"]*)\"") - args = append(args, reflect.String.String()) - } - } - - if s.argument != nil { - if s.argument.GetDocString() != nil { - args = append(args, "*messages.PickleStepArgument_PickleDocString") - } - if s.argument.GetDataTable() != nil { - args = append(args, "*messages.PickleStepArgument_PickleTable") - } - } - - var last string - for i, arg := range args { - if last == "" || last == arg { - ret += fmt.Sprintf("arg%d, ", i+1) - } else { - ret = strings.TrimRight(ret, ", ") + fmt.Sprintf(" %s, arg%d, ", last, i+1) - } - last = arg - } - return strings.TrimSpace(strings.TrimRight(ret, ", ") + " " + last) -} - func (f *basefmt) findStepResults(status stepResultStatus) (res []*stepResult) { for _, feat := range f.features { for _, pr := range feat.pickleResults { diff --git a/undefined_snippets_gen.go b/undefined_snippets_gen.go new file mode 100644 index 0000000..947047b --- /dev/null +++ b/undefined_snippets_gen.go @@ -0,0 +1,94 @@ +package godog + +import ( + "fmt" + "reflect" + "regexp" + "strings" + "text/template" + + "github.com/cucumber/messages-go/v10" +) + +// some snippet formatting regexps +var snippetExprCleanup = regexp.MustCompile("([\\/\\[\\]\\(\\)\\\\^\\$\\.\\|\\?\\*\\+\\'])") +var snippetExprQuoted = regexp.MustCompile("(\\W|^)\"(?:[^\"]*)\"(\\W|$)") +var snippetMethodName = regexp.MustCompile("[^a-zA-Z\\_\\ ]") +var snippetNumbers = regexp.MustCompile("(\\d+)") + +var snippetHelperFuncs = template.FuncMap{ + "backticked": func(s string) string { + return "`" + s + "`" + }, +} + +var undefinedSnippetsTpl = template.Must(template.New("snippets").Funcs(snippetHelperFuncs).Parse(` +{{ range . }}func {{ .Method }}({{ .Args }}) error { + return godog.ErrPending +} + +{{end}}func FeatureContext(s *godog.Suite) { {{ range . }} + s.Step({{ backticked .Expr }}, {{ .Method }}){{end}} +} +`)) + +type undefinedSnippet struct { + Method string + Expr string + argument *messages.PickleStepArgument +} + +func (s *undefinedSnippet) Args() (ret string) { + var ( + args []string + pos int + breakLoop bool + ) + + for !breakLoop { + part := s.Expr[pos:] + ipos := strings.Index(part, "(\\d+)") + spos := strings.Index(part, "\"([^\"]*)\"") + + switch { + case spos == -1 && ipos == -1: + breakLoop = true + case spos == -1: + pos += ipos + len("(\\d+)") + args = append(args, reflect.Int.String()) + case ipos == -1: + pos += spos + len("\"([^\"]*)\"") + args = append(args, reflect.String.String()) + case ipos < spos: + pos += ipos + len("(\\d+)") + args = append(args, reflect.Int.String()) + case spos < ipos: + pos += spos + len("\"([^\"]*)\"") + args = append(args, reflect.String.String()) + } + } + + if s.argument != nil { + if s.argument.GetDocString() != nil { + args = append(args, "*messages.PickleStepArgument_PickleDocString") + } + + if s.argument.GetDataTable() != nil { + args = append(args, "*messages.PickleStepArgument_PickleTable") + } + } + + var last string + + for i, arg := range args { + if last == "" || last == arg { + ret += fmt.Sprintf("arg%d, ", i+1) + } else { + ret = strings.TrimRight(ret, ", ") + fmt.Sprintf(" %s, arg%d, ", last, i+1) + } + + last = arg + } + + return strings.TrimSpace(strings.TrimRight(ret, ", ") + " " + last) +}