summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2009-12-10 15:45:57 -0800
committerRobert Griesemer <gri@golang.org>2009-12-10 15:45:57 -0800
commit389e7acc957c6e1edeb65aa8e57fa235ddad9bed (patch)
treef9e1f485cfc1f7adce912344661b300057c8ae19 /src
parent28ebedc0d488ac0a8db3d1ef33e646653bdd153a (diff)
downloadgolang-389e7acc957c6e1edeb65aa8e57fa235ddad9bed.tar.gz
implement NoSemis and NoStringConcat mode for go/printer
R=rsc http://codereview.appspot.com/174050
Diffstat (limited to 'src')
-rw-r--r--src/pkg/go/printer/nodes.go25
-rw-r--r--src/pkg/go/printer/printer.go2
2 files changed, 22 insertions, 5 deletions
diff --git a/src/pkg/go/printer/nodes.go b/src/pkg/go/printer/nodes.go
index efb61a75c..e5ecdd278 100644
--- a/src/pkg/go/printer/nodes.go
+++ b/src/pkg/go/printer/nodes.go
@@ -127,7 +127,11 @@ func (p *printer) stringList(list []*ast.BasicLit, multiLine *bool) {
for i, x := range list {
xlist[i] = x
}
- p.exprList(noPos, xlist, 1, stringListMode, multiLine);
+ mode := stringListMode;
+ if p.Mode&NoStringConcat != 0 {
+ mode |= plusSep
+ }
+ p.exprList(noPos, xlist, 1, mode, multiLine);
}
@@ -136,6 +140,7 @@ type exprListMode uint
const (
blankStart exprListMode = 1 << iota; // print a blank before a non-empty list
blankEnd; // print a blank after a non-empty list
+ plusSep; // elements are separared by + operators
commaSep; // elements are separated by commas
commaTerm; // elements are terminated by comma
noIndent; // no extra indentation in multi-line lists
@@ -165,6 +170,9 @@ func (p *printer) exprList(prev token.Position, list []ast.Expr, depth int, mode
// all list entries on a single line
for i, x := range list {
if i > 0 {
+ if mode&plusSep != 0 {
+ p.print(blank, token.ADD)
+ }
if mode&commaSep != 0 {
p.print(token.COMMA)
}
@@ -197,6 +205,9 @@ func (p *printer) exprList(prev token.Position, list []ast.Expr, depth int, mode
prev := line;
line = x.Pos().Line;
if i > 0 {
+ if mode&plusSep != 0 {
+ p.print(blank, token.ADD)
+ }
if mode&commaSep != 0 {
p.print(token.COMMA)
}
@@ -374,7 +385,9 @@ func (p *printer) fieldList(lbrace token.Position, list []*ast.Field, rbrace tok
p.expr(&ast.StringList{f.Tag}, &ml);
extraTabs = 0;
}
- p.print(token.SEMICOLON);
+ if p.Mode&NoSemis == 0 {
+ p.print(token.SEMICOLON)
+ }
if f.Comment != nil {
for ; extraTabs > 0; extraTabs-- {
p.print(vtab)
@@ -407,7 +420,9 @@ func (p *printer) fieldList(lbrace token.Position, list []*ast.Field, rbrace tok
// embedded interface
p.expr(f.Type, &ml)
}
- p.print(token.SEMICOLON);
+ if p.Mode&NoSemis == 0 {
+ p.print(token.SEMICOLON)
+ }
p.lineComment(f.Comment);
}
if isIncomplete {
@@ -818,7 +833,7 @@ func (p *printer) stmtList(list []ast.Stmt, _indent int) {
// in those cases each clause is a new section
p.linebreak(s.Pos().Line, 1, maxStmtNewlines, ignore, i == 0 || _indent == 0 || multiLine);
multiLine = false;
- if !p.stmt(s, &multiLine) && (!fewerSemis || len(list) > 1) {
+ if !p.stmt(s, &multiLine) && (!fewerSemis || len(list) > 1) && p.Mode&NoSemis == 0 {
p.print(token.SEMICOLON)
}
}
@@ -1144,7 +1159,7 @@ func (p *printer) spec(spec ast.Spec, n int, context declContext, multiLine *boo
panic("unreachable")
}
- if context == inGroup || context == inStmtList && !optSemi {
+ if (context == inGroup || context == inStmtList && !optSemi) && p.Mode&NoSemis == 0 {
p.print(token.SEMICOLON)
}
diff --git a/src/pkg/go/printer/printer.go b/src/pkg/go/printer/printer.go
index a59dba32e..727b7afc9 100644
--- a/src/pkg/go/printer/printer.go
+++ b/src/pkg/go/printer/printer.go
@@ -894,6 +894,8 @@ const (
RawFormat; // do not use a tabwriter; if set, UseSpaces is ignored
TabIndent; // use tabs for indentation independent of UseSpaces
UseSpaces; // use spaces instead of tabs for alignment
+ NoSemis; // don't print semicolons at the end of a line
+ NoStringConcat; // don't print string lists without "+"
)