mirror of
https://github.com/golang/go
synced 2024-10-05 12:11:22 -06:00
1afc37fa7e
As a special case, multi-line raw strings (i.e., strings in `` quotes) were not indented if they were the only token on a line. This heuristic was meant to improve formatting for multi-line raw strings where sub- sequent lines are not indented at the level of the surrounding code. Multiple people have complained about this. Removing the heuristic again because it makes the formatting more regular, easier to under- stand, and simplifies the implementation. - manual changes to ebnf/ebnf_test.go for readability - gofmt -w src misc Fixes #1643. R=r, rsc CC=golang-dev https://golang.org/cl/4307045
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"go/ast"
|
|
"go/token"
|
|
)
|
|
|
|
var procattrFix = fix{
|
|
"procattr",
|
|
procattr,
|
|
`Adapt calls to os.StartProcess to use new ProcAttr type.
|
|
|
|
http://codereview.appspot.com/4253052
|
|
`,
|
|
}
|
|
|
|
func init() {
|
|
register(procattrFix)
|
|
}
|
|
|
|
func procattr(f *ast.File) bool {
|
|
if !imports(f, "os") && !imports(f, "syscall") {
|
|
return false
|
|
}
|
|
|
|
fixed := false
|
|
rewrite(f, func(n interface{}) {
|
|
call, ok := n.(*ast.CallExpr)
|
|
if !ok || len(call.Args) != 5 {
|
|
return
|
|
}
|
|
var pkg string
|
|
if isPkgDot(call.Fun, "os", "StartProcess") {
|
|
pkg = "os"
|
|
} else if isPkgDot(call.Fun, "syscall", "StartProcess") {
|
|
pkg = "syscall"
|
|
} else {
|
|
return
|
|
}
|
|
// os.StartProcess(a, b, c, d, e) -> os.StartProcess(a, b, &os.ProcAttr{Env: c, Dir: d, Files: e})
|
|
lit := &ast.CompositeLit{Type: ast.NewIdent(pkg + ".ProcAttr")}
|
|
env, dir, files := call.Args[2], call.Args[3], call.Args[4]
|
|
if !isName(env, "nil") && !isCall(env, "os", "Environ") {
|
|
lit.Elts = append(lit.Elts, &ast.KeyValueExpr{Key: ast.NewIdent("Env"), Value: env})
|
|
}
|
|
if !isEmptyString(dir) {
|
|
lit.Elts = append(lit.Elts, &ast.KeyValueExpr{Key: ast.NewIdent("Dir"), Value: dir})
|
|
}
|
|
if !isName(files, "nil") {
|
|
lit.Elts = append(lit.Elts, &ast.KeyValueExpr{Key: ast.NewIdent("Files"), Value: files})
|
|
}
|
|
call.Args[2] = &ast.UnaryExpr{Op: token.AND, X: lit}
|
|
call.Args = call.Args[:3]
|
|
fixed = true
|
|
})
|
|
return fixed
|
|
}
|