Commit db2b6ed8 authored by Robert Griesemer's avatar Robert Griesemer

go/printer, gofmt: trim trailing whitespace in comments

Also: updated go fix testcases to pass tests.

Fixes #4310.

R=r
CC=golang-dev
https://golang.org/cl/6810055
parent 640d818f
...@@ -120,7 +120,7 @@ func (enc *Encoder) sendActualType(w io.Writer, state *encoderState, ut *userTyp ...@@ -120,7 +120,7 @@ func (enc *Encoder) sendActualType(w io.Writer, state *encoderState, ut *userTyp
return true return true
} }
// sendType sends the type info to the other side, if necessary. // sendType sends the type info to the other side, if necessary.
func (enc *Encoder) sendType(w io.Writer, state *encoderState, origt reflect.Type) (sent bool) { func (enc *Encoder) sendType(w io.Writer, state *encoderState, origt reflect.Type) (sent bool) {
ut := userType(origt) ut := userType(origt)
if ut.isGobEncoder { if ut.isGobEncoder {
......
...@@ -120,7 +120,7 @@ func (enc *Encoder) sendActualType(w io.Writer, state *encoderState, ut *userTyp ...@@ -120,7 +120,7 @@ func (enc *Encoder) sendActualType(w io.Writer, state *encoderState, ut *userTyp
return true return true
} }
// sendType sends the type info to the other side, if necessary. // sendType sends the type info to the other side, if necessary.
func (enc *Encoder) sendType(w io.Writer, state *encoderState, origt reflect.Type) (sent bool) { func (enc *Encoder) sendType(w io.Writer, state *encoderState, origt reflect.Type) (sent bool) {
ut := userType(origt) ut := userType(origt)
if ut.isGobEncoder { if ut.isGobEncoder {
......
...@@ -162,7 +162,7 @@ func (client *expClient) run() { ...@@ -162,7 +162,7 @@ func (client *expClient) run() {
// all messages <=N have been seen by the recipient. We check anyway. // all messages <=N have been seen by the recipient. We check anyway.
expLog("sequence out of order:", client.ackNum, hdr.SeqNum) expLog("sequence out of order:", client.ackNum, hdr.SeqNum)
} }
if client.ackNum < hdr.SeqNum { // If there has been an error, don't back up the count. if client.ackNum < hdr.SeqNum { // If there has been an error, don't back up the count.
client.ackNum = hdr.SeqNum client.ackNum = hdr.SeqNum
} }
client.mu.Unlock() client.mu.Unlock()
......
...@@ -162,7 +162,7 @@ func (client *expClient) run() { ...@@ -162,7 +162,7 @@ func (client *expClient) run() {
// all messages <=N have been seen by the recipient. We check anyway. // all messages <=N have been seen by the recipient. We check anyway.
expLog("sequence out of order:", client.ackNum, hdr.SeqNum) expLog("sequence out of order:", client.ackNum, hdr.SeqNum)
} }
if client.ackNum < hdr.SeqNum { // If there has been an error, don't back up the count. if client.ackNum < hdr.SeqNum { // If there has been an error, don't back up the count.
client.ackNum = hdr.SeqNum client.ackNum = hdr.SeqNum
} }
client.mu.Unlock() client.mu.Unlock()
......
...@@ -182,7 +182,7 @@ func Sprintf(format string, a ...interface{}) string { ...@@ -182,7 +182,7 @@ func Sprintf(format string, a ...interface{}) string {
return s return s
} }
// Errorf formats according to a format specifier and returns the string // Errorf formats according to a format specifier and returns the string
// converted to an os.ErrorString, which satisfies the os.Error interface. // converted to an os.ErrorString, which satisfies the os.Error interface.
func Errorf(format string, a ...interface{}) os.Error { func Errorf(format string, a ...interface{}) os.Error {
return os.NewError(Sprintf(format, a...)) return os.NewError(Sprintf(format, a...))
......
...@@ -182,7 +182,7 @@ func Sprintf(format string, a ...interface{}) string { ...@@ -182,7 +182,7 @@ func Sprintf(format string, a ...interface{}) string {
return s return s
} }
// Errorf formats according to a format specifier and returns the string // Errorf formats according to a format specifier and returns the string
// converted to an os.ErrorString, which satisfies the os.Error interface. // converted to an os.ErrorString, which satisfies the os.Error interface.
func Errorf(format string, a ...interface{}) os.Error { func Errorf(format string, a ...interface{}) os.Error {
return os.NewError(Sprintf(format, a...)) return os.NewError(Sprintf(format, a...))
......
...@@ -14,6 +14,7 @@ import ( ...@@ -14,6 +14,7 @@ import (
"strconv" "strconv"
"strings" "strings"
"text/tabwriter" "text/tabwriter"
"unicode"
) )
const ( const (
...@@ -405,6 +406,7 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, prev, comment *as ...@@ -405,6 +406,7 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, prev, comment *as
// Split comment text into lines // Split comment text into lines
// (using strings.Split(text, "\n") is significantly slower for // (using strings.Split(text, "\n") is significantly slower for
// this specific purpose, as measured with: go test -bench=Print) // this specific purpose, as measured with: go test -bench=Print)
//
func split(text string) []string { func split(text string) []string {
// count lines (comment text never ends in a newline) // count lines (comment text never ends in a newline)
n := 1 n := 1
...@@ -432,6 +434,7 @@ func split(text string) []string { ...@@ -432,6 +434,7 @@ func split(text string) []string {
// Returns true if s contains only white space // Returns true if s contains only white space
// (only tabs and blanks can appear in the printer's context). // (only tabs and blanks can appear in the printer's context).
//
func isBlank(s string) bool { func isBlank(s string) bool {
for i := 0; i < len(s); i++ { for i := 0; i < len(s); i++ {
if s[i] > ' ' { if s[i] > ' ' {
...@@ -441,6 +444,7 @@ func isBlank(s string) bool { ...@@ -441,6 +444,7 @@ func isBlank(s string) bool {
return true return true
} }
// commonPrefix returns the common prefix of a and b.
func commonPrefix(a, b string) string { func commonPrefix(a, b string) string {
i := 0 i := 0
for i < len(a) && i < len(b) && a[i] == b[i] && (a[i] <= ' ' || a[i] == '*') { for i < len(a) && i < len(b) && a[i] == b[i] && (a[i] <= ' ' || a[i] == '*') {
...@@ -449,6 +453,11 @@ func commonPrefix(a, b string) string { ...@@ -449,6 +453,11 @@ func commonPrefix(a, b string) string {
return a[0:i] return a[0:i]
} }
// trimRight returns s with trailing whitespace removed.
func trimRight(s string) string {
return strings.TrimRightFunc(s, unicode.IsSpace)
}
// stripCommonPrefix removes a common prefix from /*-style comment lines (unless no // stripCommonPrefix removes a common prefix from /*-style comment lines (unless no
// comment line is indented, all but the first line have some form of space prefix). // comment line is indented, all but the first line have some form of space prefix).
// The prefix is computed using heuristics such that is is likely that the comment // The prefix is computed using heuristics such that is is likely that the comment
...@@ -611,7 +620,7 @@ func (p *printer) writeComment(comment *ast.Comment) { ...@@ -611,7 +620,7 @@ func (p *printer) writeComment(comment *ast.Comment) {
// shortcut common case of //-style comments // shortcut common case of //-style comments
if text[1] == '/' { if text[1] == '/' {
p.writeString(pos, text, true) p.writeString(pos, trimRight(text), true)
return return
} }
...@@ -641,7 +650,7 @@ func (p *printer) writeComment(comment *ast.Comment) { ...@@ -641,7 +650,7 @@ func (p *printer) writeComment(comment *ast.Comment) {
pos = p.pos pos = p.pos
} }
if len(line) > 0 { if len(line) > 0 {
p.writeString(pos, line, true) p.writeString(pos, trimRight(line), true)
} }
} }
} }
...@@ -1159,7 +1168,7 @@ func (p *trimmer) Write(data []byte) (n int, err error) { ...@@ -1159,7 +1168,7 @@ func (p *trimmer) Write(data []byte) (n int, err error) {
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Public interface // Public interface
// A Mode value is a set of flags (or 0). They control printing. // A Mode value is a set of flags (or 0). They control printing.
type Mode uint type Mode uint
const ( const (
......
...@@ -529,7 +529,7 @@ func _() { ...@@ -529,7 +529,7 @@ func _() {
} }
func _() { func _() {
var a = []int{1, 2}// jasldf var a = []int{1, 2}// jasldf
_ = a _ = a
} }
...@@ -626,4 +626,13 @@ func _() { ...@@ -626,4 +626,13 @@ func _() {
var lflag bool // -l - disable line directives var lflag bool // -l - disable line directives
} }
// Trailing white space in comments should be trimmed
func _() {
// This comment has 4 blanks following that should be trimmed:
/* Each line of this comment has blanks or tabs following that should be trimmed:
line 2:
line 3:
*/
}
/* This comment is the last entry in this file. It must be printed and should be followed by a newline */ /* This comment is the last entry in this file. It must be printed and should be followed by a newline */
...@@ -534,7 +534,7 @@ func _() { ...@@ -534,7 +534,7 @@ func _() {
} }
func _() { func _() {
var a = []int{1, 2, // jasldf var a = []int{1, 2, // jasldf
} }
_ = a _ = a
} }
...@@ -630,5 +630,13 @@ var vflag string // -v [y.output] - y.output file ...@@ -630,5 +630,13 @@ var vflag string // -v [y.output] - y.output file
var lflag bool // -l - disable line directives var lflag bool // -l - disable line directives
} }
// Trailing white space in comments should be trimmed
func _() {
// This comment has 4 blanks following that should be trimmed:
/* Each line of this comment has blanks or tabs following that should be trimmed:
line 2:
line 3:
*/
}
/* This comment is the last entry in this file. It must be printed and should be followed by a newline */ /* This comment is the last entry in this file. It must be printed and should be followed by a newline */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment