本文整理汇总了Golang中go/ast.SortImports函数的典型用法代码示例。如果您正苦于以下问题:Golang SortImports函数的具体用法?Golang SortImports怎么用?Golang SortImports使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SortImports函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: FormatCode
// FormatCode runs "goimports -w" on the source file.
func (f *SourceFile) FormatCode() error {
// Parse file into AST
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, f.Abs(), nil, parser.ParseComments)
if err != nil {
content, _ := ioutil.ReadFile(f.Abs())
var buf bytes.Buffer
scanner.PrintError(&buf, err)
return fmt.Errorf("%s\n========\nContent:\n%s", buf.String(), content)
}
// Clean unused imports
imports := astutil.Imports(fset, file)
for _, group := range imports {
for _, imp := range group {
path := strings.Trim(imp.Path.Value, `"`)
if !astutil.UsesImport(file, path) {
if imp.Name != nil {
astutil.DeleteNamedImport(fset, file, imp.Name.Name, path)
} else {
astutil.DeleteImport(fset, file, path)
}
}
}
}
ast.SortImports(fset, file)
// Open file to be written
w, err := os.OpenFile(f.Abs(), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)
if err != nil {
return err
}
defer w.Close()
// Write formatted code without unused imports
return format.Node(w, fset, file)
}
开发者ID:smessier,项目名称:goa,代码行数:35,代码来源:workspace.go
示例2: init
func init() {
act(Action{
Path: "/fmt",
Doc: `
formats the source like gofmt does
@data: {"fn": "...", "src": "..."}
@resp: "formatted source"
`,
Func: func(r Request) (data, error) {
a := AcFmtArgs{
TabIndent: true,
TabWidth: 8,
}
res := ""
if err := r.Decode(&a); err != nil {
return res, err
}
fset, af, err := parseAstFile(a.Fn, a.Src, parser.ParseComments)
if err == nil {
ast.SortImports(fset, af)
res, err = printSrc(fset, af, a.TabIndent, a.TabWidth)
}
return res, err
},
})
}
开发者ID:hardPass,项目名称:MarGo,代码行数:28,代码来源:ac_fmt.go
示例3: FormatCode
// FormatCode runs "goimports -w" on the source file.
func (f *SourceFile) FormatCode() error {
if NoFormat {
return nil
}
// Parse file into AST
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, f.Abs(), nil, parser.ParseComments)
if err != nil {
return err
}
// Clean unused imports
imports := astutil.Imports(fset, file)
for _, group := range imports {
for _, imp := range group {
path := strings.Trim(imp.Path.Value, `"`)
if !astutil.UsesImport(file, path) {
astutil.DeleteImport(fset, file, path)
}
}
}
ast.SortImports(fset, file)
// Open file to be written
w, err := os.OpenFile(f.Abs(), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)
if err != nil {
return err
}
defer w.Close()
// Write formatted code without unused imports
return format.Node(w, fset, file)
}
开发者ID:wbmcloud,项目名称:goa,代码行数:31,代码来源:workspace.go
示例4: rewriteImportsInFile
// inspired by godeps rewrite, rewrites import paths with gx vendored names
func rewriteImportsInFile(fi string, rw func(string) string) error {
cfg := &printer.Config{Mode: printer.UseSpaces | printer.TabIndent, Tabwidth: 8}
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, fi, nil, parser.ParseComments)
if err != nil {
return err
}
var changed bool
for _, imp := range file.Imports {
p, err := strconv.Unquote(imp.Path.Value)
if err != nil {
return err
}
np := rw(p)
if np != p {
changed = true
imp.Path.Value = strconv.Quote(np)
}
}
if !changed {
return nil
}
buf := bufpool.Get().(*bytes.Buffer)
if err = cfg.Fprint(buf, fset, file); err != nil {
return err
}
fset = token.NewFileSet()
file, err = parser.ParseFile(fset, fi, buf, parser.ParseComments)
if err != nil {
return err
}
buf.Reset()
bufpool.Put(buf)
ast.SortImports(fset, file)
wpath := fi + ".temp"
w, err := os.Create(wpath)
if err != nil {
return err
}
if err = cfg.Fprint(w, fset, file); err != nil {
return err
}
if err = w.Close(); err != nil {
return err
}
return os.Rename(wpath, fi)
}
开发者ID:whyrusleeping,项目名称:gx-go,代码行数:60,代码来源:rewrite.go
示例5: gofmt
func gofmt(fset *token.FileSet, filename string, src *bytes.Buffer) error {
f, _, err := parse(fset, filename, src.Bytes(), false)
if err != nil {
return err
}
ast.SortImports(fset, f)
src.Reset()
return (&printer.Config{Mode: printerMode, Tabwidth: *tabWidth}).Fprint(src, fset, f)
}
开发者ID:stevenxiao215,项目名称:go,代码行数:9,代码来源:long_test.go
示例6: Call
func (m *mFmt) Call() (interface{}, string) {
res := M{}
fset, af, err := parseAstFile(m.Fn, m.Src, parser.ParseComments)
if err == nil {
ast.SortImports(fset, af)
res["src"], err = printSrc(fset, af, m.TabIndent, m.TabWidth)
}
return res, errStr(err)
}
开发者ID:nuance,项目名称:GoSublime,代码行数:9,代码来源:m_fmt.go
示例7: gofmtFile
func gofmtFile(f *ast.File) ([]byte, error) {
var buf bytes.Buffer
ast.SortImports(fset, f)
err := printConfig.Fprint(&buf, fset, f)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
开发者ID:Pinkxa,项目名称:gophernotes,代码行数:10,代码来源:main.go
示例8: GenerateMockSource
// Given a set of interfaces to mock, write out source code for a package named
// `pkg` that contains mock implementations of those interfaces.
func GenerateMockSource(w io.Writer, pkg string, interfaces []reflect.Type) error {
// Sanity-check arguments.
if pkg == "" {
return errors.New("Package name must be non-empty.")
}
if len(interfaces) == 0 {
return errors.New("List of interfaces must be non-empty.")
}
// Make sure each type is indeed an interface.
for _, it := range interfaces {
if it.Kind() != reflect.Interface {
return errors.New("Invalid type: " + it.String())
}
}
// Create an appropriate template arg, then execute the template. Write the
// raw output into a buffer.
var arg tmplArg
arg.Pkg = pkg
arg.Imports = getImports(interfaces)
arg.Interfaces = interfaces
buf := new(bytes.Buffer)
if err := tmpl.Execute(buf, arg); err != nil {
return err
}
// Parse the output.
fset := token.NewFileSet()
astFile, err := parser.ParseFile(fset, pkg+".go", buf, parser.ParseComments)
if err != nil {
return errors.New("Error parsing generated code: " + err.Error())
}
// Sort the import lines in the AST in the same way that gofmt does.
ast.SortImports(fset, astFile)
// Pretty-print the AST, using the same options that gofmt does by default.
cfg := &printer.Config{
Mode: printer.UseSpaces | printer.TabIndent,
Tabwidth: 8,
}
if err = cfg.Fprint(w, fset, astFile); err != nil {
return errors.New("Error pretty printing: " + err.Error())
}
return nil
}
开发者ID:BanzaiMan,项目名称:gcsfuse,代码行数:53,代码来源:generate.go
示例9: gofmt
// gofmt takes a Go program, formats it using the standard Go formatting
// rules, and returns it or an error.
func gofmt(body string) (string, error) {
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "prog.go", body, parser.ParseComments)
if err != nil {
return "", err
}
ast.SortImports(fset, f)
var buf bytes.Buffer
err = printer.Fprint(&buf, fset, f)
if err != nil {
return "", err
}
return buf.String(), nil
}
开发者ID:hfeeki,项目名称:go,代码行数:16,代码来源:play.go
示例10: gofmt
func gofmt(body string) (string, error) {
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "prog.go", body, parser.ParseComments)
if err != nil {
return "", err
}
ast.SortImports(fset, f)
var buf bytes.Buffer
config := &printer.Config{Mode: printer.UseSpaces | printer.TabIndent, Tabwidth: 8}
err = config.Fprint(&buf, fset, f)
if err != nil {
return "", err
}
return buf.String(), nil
}
开发者ID:ufo22940268,项目名称:two-server-others,代码行数:15,代码来源:fmt.go
示例11: Source
// Source formats src in canonical gofmt style and returns the result
// or an (I/O or syntax) error. src is expected to be a syntactically
// correct Go source file, or a list of Go declarations or statements.
//
// If src is a partial source file, the leading and trailing space of src
// is applied to the result (such that it has the same leading and trailing
// space as src), and the result is indented by the same amount as the first
// line of src containing code. Imports are not sorted for partial source files.
//
func Source(src []byte) ([]byte, error) {
fset := token.NewFileSet()
file, sourceAdj, indentAdj, err := parse(fset, "", src, true)
if err != nil {
return nil, err
}
if sourceAdj == nil {
// Complete source file.
// TODO(gri) consider doing this always.
ast.SortImports(fset, file)
}
return format(fset, file, sourceAdj, indentAdj, src, config)
}
开发者ID:2thetop,项目名称:go,代码行数:24,代码来源:format.go
示例12: rewriteGoFile
// rewriteGoFile rewrites import statments in the named file
// according to the rules for func qualify.
func rewriteGoFile(name, qual string, paths []string) error {
debugln("rewriteGoFile", name, ",", qual, ",", paths)
printerConfig := &printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, name, nil, parser.ParseComments)
if err != nil {
return err
}
var changed bool
for _, s := range f.Imports {
name, err := strconv.Unquote(s.Path.Value)
if err != nil {
return err // can't happen
}
q := qualify(unqualify(name), qual, paths)
if q != name {
s.Path.Value = strconv.Quote(q)
changed = true
}
}
if !changed {
return nil
}
var buffer bytes.Buffer
if err = printerConfig.Fprint(&buffer, fset, f); err != nil {
return err
}
fset = token.NewFileSet()
f, err = parser.ParseFile(fset, name, &buffer, parser.ParseComments)
ast.SortImports(fset, f)
tpath := name + ".temp"
t, err := os.Create(tpath)
if err != nil {
return err
}
if err = printerConfig.Fprint(t, fset, f); err != nil {
return err
}
if err = t.Close(); err != nil {
return err
}
// This is required before the rename on windows.
if err = os.Remove(name); err != nil {
return err
}
return os.Rename(tpath, name)
}
开发者ID:mitake,项目名称:godep,代码行数:50,代码来源:rewrite.go
示例13: write
func write(filePath string, fset *token.FileSet, f *ast.File) error {
if parentdir := path.Dir(filePath); parentdir != "." {
if err := os.MkdirAll(parentdir, os.ModePerm); err != nil {
return err
}
}
file, err := os.Create(filePath)
if err != nil {
return err
}
ast.SortImports(fset, f)
err = (&printer.Config{Mode: printerMode, Tabwidth: tabWidth}).Fprint(file, fset, f)
_ = file.Close()
return err
}
开发者ID:cbusbey,项目名称:quickfix,代码行数:17,代码来源:generate.go
示例14: scanPackages
func scanPackages(filename string) (ret []string) {
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, filename, nil, 0)
if err != nil {
return
}
ast.SortImports(fset, f)
goroot := os.Getenv("GOROOT")
for _, imp := range f.Imports {
pkg := unquote(imp.Path.Value)
p := filepath.Join(goroot, "src", "pkg", pkg)
if _, err = os.Stat(p); err != nil {
ret = appendPkg(ret, imp.Path.Value)
}
}
return ret
}
开发者ID:ruitao,项目名称:gom,代码行数:17,代码来源:gen.go
示例15: goProcessFile
func goProcessFile(filename string, in io.Reader, out io.Writer) error {
dest := strings.TrimSuffix(filename, ".go") + ".igo"
f, err := os.Open(filename)
if err != nil {
return err
}
defer f.Close()
src, err := ioutil.ReadAll(f)
if err != nil {
return err
}
file, adjust, err := goParse(goFileSet, filename, src)
if err != nil {
return err
}
ast.SortImports(goFileSet, file)
var buf bytes.Buffer
err = (&printer.Config{Mode: goPrinterMode, Tabwidth: *tabWidth}).Fprint(&buf, goFileSet, file)
if err != nil {
return err
}
res := buf.Bytes()
if adjust != nil {
res = adjust(src, res)
}
if *DestDir != "" {
dest = filepath.Join(*DestDir, dest)
createDir(dest)
}
err = ioutil.WriteFile(dest, res, 0644)
if err != nil {
return err
}
return err
}
开发者ID:shaunstanislaus,项目名称:igo,代码行数:43,代码来源:from_go.go
示例16: Clean
// Clean writes the clean source to io.Writer. The source can be a io.Reader,
// string or []bytes
func Clean(w io.Writer, src interface{}) error {
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, "clean.go", src, parser.ParseComments)
if err != nil {
return err
}
// Clean unused imports
imports := astutil.Imports(fset, file)
for _, group := range imports {
for _, imp := range group {
path := strings.Trim(imp.Path.Value, `"`)
if !astutil.UsesImport(file, path) {
astutil.DeleteImport(fset, file, path)
}
}
}
ast.SortImports(fset, file)
// Write formatted code without unused imports
return format.Node(w, fset, file)
}
开发者ID:ernesto-jimenez,项目名称:gogen,代码行数:22,代码来源:clean.go
示例17: GoFmt
// GoFmt runs `gofmt` to io.Reader and save it as file
// If something wrong it returns error.
func GoFmt(filename string, in io.Reader) error {
if in == nil {
f, err := os.Open(filename)
if err != nil {
return err
}
defer f.Close()
in = f
}
src, err := ioutil.ReadAll(in)
if err != nil {
return err
}
fileSet := token.NewFileSet()
file, err := parser.ParseFile(fileSet, filename, src, parser.ParseComments)
if err != nil {
return err
}
ast.SortImports(fileSet, file)
var buf bytes.Buffer
tabWidth := 8
printerMode := printer.UseSpaces | printer.TabIndent
err = (&printer.Config{Mode: printerMode, Tabwidth: tabWidth}).Fprint(&buf, fileSet, file)
if err != nil {
return err
}
res := buf.Bytes()
if !bytes.Equal(src, res) {
err = ioutil.WriteFile(filename, res, 0)
if err != nil {
return err
}
}
return nil
}
开发者ID:ciarant,项目名称:gcli,代码行数:42,代码来源:gofmt.go
示例18: Node
// Node formats node in canonical gofmt style and writes the result to dst.
//
// The node type must be *ast.File, *printer.CommentedNode, []ast.Decl,
// []ast.Stmt, or assignment-compatible to ast.Expr, ast.Decl, ast.Spec,
// or ast.Stmt. Node does not modify node. Imports are not sorted for
// nodes representing partial source files (i.e., if the node is not an
// *ast.File or a *printer.CommentedNode not wrapping an *ast.File).
//
// The function may return early (before the entire result is written)
// and return a formatting error, for instance due to an incorrect AST.
//
func Node(dst io.Writer, fset *token.FileSet, node interface{}) error {
// Determine if we have a complete source file (file != nil).
var file *ast.File
var cnode *printer.CommentedNode
switch n := node.(type) {
case *ast.File:
file = n
case *printer.CommentedNode:
if f, ok := n.Node.(*ast.File); ok {
file = f
cnode = n
}
}
// Sort imports if necessary.
if file != nil && hasUnsortedImports(file) {
// Make a copy of the AST because ast.SortImports is destructive.
// TODO(gri) Do this more efficiently.
var buf bytes.Buffer
err := config.Fprint(&buf, fset, file)
if err != nil {
return err
}
file, err = parser.ParseFile(fset, "", buf.Bytes(), parserMode)
if err != nil {
// We should never get here. If we do, provide good diagnostic.
return fmt.Errorf("format.Node internal error (%s)", err)
}
ast.SortImports(fset, file)
// Use new file with sorted imports.
node = file
if cnode != nil {
node = &printer.CommentedNode{Node: file, Comments: cnode.Comments}
}
}
return config.Fprint(dst, fset, node)
}
开发者ID:2thetop,项目名称:go,代码行数:50,代码来源:format.go
示例19: addImportsToMock
func addImportsToMock(mockAst *ast.File, fset *token.FileSet, imports []*ast.ImportSpec) {
// Find all the imports we're using in the mockAST
fi := newFindUsedImports()
ast.Walk(fi, mockAst)
// Pick imports out of our input AST that are used in the mock
usedImports := []ast.Spec{}
for _, is := range imports {
if fi.isUsed(is) {
usedImports = append(usedImports, is)
}
}
if len(usedImports) > 0 {
// Add these imports into the mock AST
ai := &addImports{usedImports}
ast.Walk(ai, mockAst)
// Sort the imports
ast.SortImports(fset, mockAst)
}
}
开发者ID:patrickToca,项目名称:ut,代码行数:22,代码来源:main.go
示例20: RemoveImport
// RemoveImport will remove an import from source code
func RemoveImport(source, path string) string {
header, body := header(source)
if header == "" {
panic("parse failure")
}
src := []byte(header)
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "", src, 0)
if err != nil {
panic(err)
}
astutil.DeleteImport(fset, f, path)
ast.SortImports(fset, f)
var buf bytes.Buffer
err = printer.Fprint(&buf, fset, f)
if err != nil {
panic(err)
}
return buf.String() + "\n" + body
}
开发者ID:mattdryden,项目名称:atom,代码行数:24,代码来源:modimport.go
注:本文中的go/ast.SortImports函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论