Skip to content

Commit

Permalink
Add: liner to repl
Browse files Browse the repository at this point in the history
  • Loading branch information
candy12t committed Jan 14, 2024
1 parent c9028f4 commit bc0c334
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 21 deletions.
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ go 1.21.3
require (
github.com/AlecAivazis/survey/v2 v2.3.6
github.com/golang/mock v1.6.0
github.com/peterh/liner v1.2.2
github.com/stretchr/testify v1.7.1
github.com/urfave/cli/v2 v2.3.0
gopkg.in/yaml.v2 v2.4.0
Expand All @@ -17,6 +18,7 @@ require (
github.com/kr/pretty v0.1.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.16 // indirect
github.com/mattn/go-runewidth v0.0.3 // indirect
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
Expand Down
5 changes: 5 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/peterh/liner v1.2.2 h1:aJ4AOodmL+JxOZZEL2u9iJf8omNRpqHc/EbrK+3mAXw=
github.com/peterh/liner v1.2.2/go.mod h1:xFwJyiKIXJZUKItq5dGHZSTBRAuG/CpeNpWLyiNRNwI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
Expand Down Expand Up @@ -58,6 +62,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
Expand Down
63 changes: 42 additions & 21 deletions internal/controller/repl.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,45 +3,66 @@ package controller
import (
"errors"
"fmt"
"strings"
"os"
"path/filepath"

"github.com/AlecAivazis/survey/v2"
"github.com/candy12t/deepl-cli/internal/repository"
"github.com/peterh/liner"
"github.com/urfave/cli/v2"
)

var ErrTextLength = errors.New("Error: input text length is 0")
var historyFilePath = filepath.Join(os.TempDir(), ".deepl_cli_history")

func ReplAction(client repository.Translator) cli.ActionFunc {
return func(ctx *cli.Context) error {
sourceLanguage := ctx.String("source")
targetLanguage := ctx.String("target")
message := fmt.Sprintf("(%s->%s) >>", sourceLanguage, targetLanguage)
l := liner.NewLiner()
defer l.Close()

for {
var text string
prompt := &survey.Input{
Message: message,
l.SetCtrlCAborts(true)

f, err := os.Open(historyFilePath)
if err != nil {
if !os.IsNotExist(err) {
return err
}
if err := survey.AskOne(prompt, &text, survey.WithIcons(func(icons *survey.IconSet) {
icons.Question.Text = "deepl-cli"
icons.Question.Format = "default+hb"
})); err != nil {
} else {
if _, err := l.ReadHistory(f); err != nil {

Check failure on line 30 in internal/controller/repl.go

View workflow job for this annotation

GitHub Actions / ci

shadow: declaration of "err" shadows declaration at line 24 (govet)
return err
}
}
defer f.Close()

trimedSpaceText := strings.TrimSpace(text)
if len(trimedSpaceText) == 0 {
fmt.Fprintln(ctx.App.ErrWriter, ErrTextLength.Error())
continue
source := ctx.String("source")
target := ctx.String("target")
prompt := fmt.Sprintf("deepl-cli (%s->%s)> ", source, target)
var promptError error
for {
text, err := l.Prompt(prompt)

Check failure on line 41 in internal/controller/repl.go

View workflow job for this annotation

GitHub Actions / ci

shadow: declaration of "err" shadows declaration at line 24 (govet)
if err != nil {
promptError = err
break
}

tr, err := client.TranslateText(trimedSpaceText, sourceLanguage, targetLanguage)
if text == "exit" {
break
}
t, err := client.TranslateText(text, source, target)
if err != nil {
return err
promptError = err
}
fmt.Fprintln(ctx.App.Writer, t.TranslateText)
l.AppendHistory(text)
}

fmt.Fprintln(ctx.App.Writer, tr.TranslateText)
ff, err := os.Create(historyFilePath)
if err != nil {
return err
}
defer ff.Close()
if _, err := l.WriteHistory(ff); err != nil {
return err
}

return promptError
}
}

0 comments on commit bc0c334

Please sign in to comment.