Skip to content

Commit 05b8287

Browse files
committed
fix weird fmt printing repetition
1 parent 2be8f0b commit 05b8287

File tree

3 files changed

+48
-40
lines changed

3 files changed

+48
-40
lines changed

internal/repl/commands.go

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ func actionDoc(s *Session, in string) (string, error) {
190190
s.storeMainBody()
191191
defer s.restoreMainBody()
192192

193-
expr, err := s.evalExpr(in)
193+
exprs, err := s.evalExpr(in)
194194
if err != nil {
195195
return "", err
196196
}
@@ -206,33 +206,35 @@ func actionDoc(s *Session, in string) (string, error) {
206206
debugf("typecheck error (ignored): %s", err)
207207
}
208208

209-
// :doc patterns:
210-
// - "json" -> "encoding/json" (package name)
211-
// - "json.Encoder" -> "encoding/json", "Encoder" (package member)
212-
// - "json.NewEncoder(nil).Encode" -> "encoding/json", "Decode" (package type member)
213209
var docObj types.Object
214-
if sel, ok := expr.(*ast.SelectorExpr); ok {
215-
// package member, package type member
216-
docObj = s.TypeInfo.ObjectOf(sel.Sel)
217-
} else if t := s.TypeInfo.TypeOf(expr); t != nil && t != types.Typ[types.Invalid] {
218-
for {
219-
if pt, ok := t.(*types.Pointer); ok {
220-
t = pt.Elem()
221-
} else {
222-
break
210+
for _, expr := range exprs {
211+
// :doc patterns:
212+
// - "json" -> "encoding/json" (package name)
213+
// - "json.Encoder" -> "encoding/json", "Encoder" (package member)
214+
// - "json.NewEncoder(nil).Encode" -> "encoding/json", "Decode" (package type member)
215+
if sel, ok := expr.(*ast.SelectorExpr); ok {
216+
// package member, package type member
217+
docObj = s.TypeInfo.ObjectOf(sel.Sel)
218+
} else if t := s.TypeInfo.TypeOf(expr); t != nil && t != types.Typ[types.Invalid] {
219+
for {
220+
if pt, ok := t.(*types.Pointer); ok {
221+
t = pt.Elem()
222+
} else {
223+
break
224+
}
223225
}
226+
switch t := t.(type) {
227+
case *types.Named:
228+
docObj = t.Obj()
229+
case *types.Basic:
230+
// builtin types
231+
docObj = types.Universe.Lookup(t.Name())
232+
}
233+
} else if ident, ok := expr.(*ast.Ident); ok {
234+
// package name
235+
mainScope := s.TypeInfo.Scopes[s.mainFunc().Type]
236+
_, docObj = mainScope.LookupParent(ident.Name, ident.NamePos)
224237
}
225-
switch t := t.(type) {
226-
case *types.Named:
227-
docObj = t.Obj()
228-
case *types.Basic:
229-
// builtin types
230-
docObj = types.Universe.Lookup(t.Name())
231-
}
232-
} else if ident, ok := expr.(*ast.Ident); ok {
233-
// package name
234-
mainScope := s.TypeInfo.Scopes[s.mainFunc().Type]
235-
_, docObj = mainScope.LookupParent(ident.Name, ident.NamePos)
236238
}
237239

238240
if docObj == nil {

internal/repl/quickfix.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ quickFixAttempt:
7474

7575
stmts := s.mainBody.List[0:i]
7676
for _, expr := range exprs {
77-
stmts = append(stmts, &ast.ExprStmt{expr})
77+
stmts = append(stmts, &ast.ExprStmt{X: expr})
7878
}
7979

8080
s.mainBody.List = append(stmts, s.mainBody.List[i+1:]...)

internal/repl/repl.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -154,22 +154,29 @@ func goRun(files []string) ([]byte, bytes.Buffer, error) {
154154
return out, stderr, err
155155
}
156156

157-
func (s *Session) evalExpr(in string) (ast.Expr, error) {
158-
expr, err := parser.ParseExpr(in)
159-
if err != nil {
160-
return nil, err
161-
}
157+
func (s *Session) evalExpr(in string) ([]ast.Expr, error) {
158+
inLines := strings.Split(in, "\n")
162159

163-
stmt := &ast.ExprStmt{
164-
X: &ast.CallExpr{
165-
Fun: ast.NewIdent(printerName),
166-
Args: []ast.Expr{expr},
167-
},
168-
}
160+
var exprs []ast.Expr
161+
for _, line := range inLines {
169162

170-
s.appendStatements(stmt)
163+
expr, err := parser.ParseExpr(line)
164+
if err != nil {
165+
return nil, err
166+
}
167+
exprs = append(exprs, expr)
168+
169+
stmt := &ast.ExprStmt{
170+
X: &ast.CallExpr{
171+
Fun: ast.NewIdent(printerName),
172+
Args: []ast.Expr{expr},
173+
},
174+
}
175+
176+
s.appendStatements(stmt)
177+
}
171178

172-
return expr, nil
179+
return exprs, nil
173180
}
174181

175182
func isNamedIdent(expr ast.Expr, name string) bool {
@@ -307,7 +314,6 @@ func (s *Session) Eval(in string) (string, bytes.Buffer, error) {
307314
advance := 1
308315
currentLine := inLines[idx+advance]
309316
for !strings.Contains(currentLine, ")") {
310-
fmt.Println(currentLine)
311317
args = append(args, currentLine)
312318
advance++
313319
currentLine = inLines[idx+advance]

0 commit comments

Comments
 (0)