// TestLineComments, using a simple test case, checks that consequtive line // comments are properly terminated with a newline even if the AST position // information is incorrect. // func TestLineComments(t *testing.T) { const src = `// comment 1 // comment 2 // comment 3 package main ` fset := token.NewFileSet() ast1, err1 := parser.ParseFile(fset, "", src, parser.ParseComments, nil, nil) if err1 != nil { panic(err1) } var buf bytes.Buffer fset = token.NewFileSet() // use the wrong file set Fprint(&buf, fset, ast1) nlines := 0 for _, ch := range buf.Bytes() { if ch == '\n' { nlines++ } } const expected = 3 if nlines < expected { t.Errorf("got %d, expected %d\n", nlines, expected) } }
func NewContext() *Context { ctxt := &Context{ pkgCache: make(map[string]*ast.Package), FileSet: token.NewFileSet(), ChangedFiles: make(map[string]*ast.File), } ctxt.importer = ctxt.importerFunc() return ctxt }
// Copyright 2009 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 scanner import ( "os" "path/filepath" "runtime" "testing" "github.com/gonotes/godef/go/token" ) var fset = token.NewFileSet() const /* class */ ( special = iota literal operator keyword ) func tokenclass(tok token.Token) int { switch { case tok.IsLiteral(): return literal case tok.IsOperator(): return operator case tok.IsKeyword():
if err != nil { panic("cannot unquote") } return v } type astVisitor func(n ast.Node) bool func (f astVisitor) Visit(n ast.Node) ast.Visitor { if f(n) { return f } return nil } var emptyFileSet = token.NewFileSet() func pretty(n ast.Node) string { var b bytes.Buffer printer.Fprint(&b, emptyFileSet, n) return b.String() } var printConfig = &printer.Config{ Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8, } func (ctxt *Context) gofmtFile(f *ast.File) ([]byte, error) { var buf bytes.Buffer _, err := printConfig.Fprint(&buf, ctxt.FileSet, f)
var falseIdent = predecl("false") var trueIdent = predecl("true") var iotaIdent = predecl("iota") var boolIdent = predecl("bool") var intIdent = predecl("int") var floatIdent = predecl("float") var stringIdent = predecl("string") func predecl(name string) *ast.Ident { return &ast.Ident{Name: name, Obj: parser.Universe.Lookup(name)} } type Importer func(path string, srcDir string) *ast.Package // When DefaultImporter is called, it adds any files to FileSet. var FileSet = token.NewFileSet() // DefaultImporter looks for the package; if it finds it, // it parses and returns it. If no package was found, it returns nil. func DefaultImporter(path string, srcDir string) *ast.Package { bpkg, err := build.Default.Import(path, srcDir, 0) if err != nil { return nil } pkgs, err := parser.ParseDir(FileSet, bpkg.Dir, isGoFile, 0, DefaultImportPathToName) if err != nil { if Debug { switch err := err.(type) { case scanner.ErrorList: for _, e := range err { debugp("\t%v: %s", e.Pos, e.Msg)