Skip to content

Commit 780b45a

Browse files
author
Sergey Kostyaev
committed
fix src-d#296 - add go modules support
Signed-off-by: Sergey Kostyaev <[email protected]>
1 parent 54324d6 commit 780b45a

File tree

2 files changed

+13
-74
lines changed

2 files changed

+13
-74
lines changed

generator/processor.go

+6-70
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ package generator
22

33
import (
44
"fmt"
5-
"go/ast"
6-
"go/build"
7-
"go/parser"
8-
"go/token"
95
"go/types"
106
"path/filepath"
117
"reflect"
128
"strings"
139

10+
"golang.org/x/tools/go/packages"
1411
parseutil "gopkg.in/src-d/go-parse-utils.v1"
1512
)
1613

@@ -59,70 +56,18 @@ func (p *Processor) write(msg string, args ...interface{}) {
5956

6057
// Do performs all the processing and returns the scanned package.
6158
func (p *Processor) Do() (*Package, error) {
62-
files, err := p.getSourceFiles()
63-
if err != nil {
64-
return nil, err
65-
}
66-
67-
p.Package, err = p.parseSourceFiles(files)
59+
pkgs, err := packages.Load(&packages.Config{
60+
Dir: ".",
61+
Mode: packages.NeedImports | packages.NeedTypes | packages.NeedDeps,
62+
}, p.Path)
6863
if err != nil {
6964
return nil, err
7065
}
66+
p.Package = pkgs[0].Types
7167

7268
return p.processPackage()
7369
}
7470

75-
func (p *Processor) getSourceFiles() ([]string, error) {
76-
pkg, err := build.Default.ImportDir(p.Path, 0)
77-
if err != nil {
78-
return nil, fmt.Errorf("kallax: cannot process directory %s: %s", p.Path, err)
79-
}
80-
81-
var files []string
82-
files = append(files, pkg.GoFiles...)
83-
files = append(files, pkg.CgoFiles...)
84-
85-
if len(files) == 0 {
86-
return nil, fmt.Errorf("kallax: %s: no buildable Go files", p.Path)
87-
}
88-
89-
return joinDirectory(p.Path, p.removeIgnoredFiles(files)), nil
90-
}
91-
92-
func (p *Processor) removeIgnoredFiles(filenames []string) []string {
93-
var output []string
94-
for _, filename := range filenames {
95-
if _, ok := p.Ignore[filename]; ok {
96-
continue
97-
}
98-
99-
output = append(output, filename)
100-
}
101-
102-
return output
103-
}
104-
105-
func (p *Processor) parseSourceFiles(filenames []string) (*types.Package, error) {
106-
var files []*ast.File
107-
fs := token.NewFileSet()
108-
for _, filename := range filenames {
109-
file, err := parser.ParseFile(fs, filename, nil, 0)
110-
if err != nil {
111-
return nil, fmt.Errorf("kallax: parsing package: %s: %s", filename, err)
112-
}
113-
114-
files = append(files, file)
115-
}
116-
117-
config := types.Config{
118-
FakeImportC: true,
119-
Error: func(error) {},
120-
Importer: parseutil.NewImporter(),
121-
}
122-
123-
return config.Check(p.Path, fs, files, new(types.Info))
124-
}
125-
12671
func (p *Processor) processPackage() (*Package, error) {
12772
pkg := NewPackage(p.Package)
12873
var ctors []*types.Func
@@ -465,15 +410,6 @@ func (p *Processor) processBaseField(m *Model, f *Field) {
465410
}
466411
}
467412

468-
func joinDirectory(directory string, files []string) []string {
469-
result := make([]string, len(files))
470-
for i, file := range files {
471-
result[i] = filepath.Join(directory, file)
472-
}
473-
474-
return result
475-
}
476-
477413
func typeName(typ types.Type) string {
478414
return removeGoPath(typ.String())
479415
}

generator/template.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ import (
1111
"strings"
1212
"text/template"
1313

14-
parseutil "gopkg.in/src-d/go-parse-utils.v1"
15-
14+
"golang.org/x/tools/go/packages"
1615
"golang.org/x/tools/imports"
1716
)
1817

@@ -486,11 +485,15 @@ func printDocumentWithNumbers(code string) {
486485
const pkgPath = "gopkg.in/src-d/go-kallax.v1/generator"
487486

488487
var pkgAbsPath = func() string {
489-
path, err := parseutil.DefaultGoPath.Abs(pkgPath)
488+
pkgs, err := packages.Load(&packages.Config{
489+
Dir: ".",
490+
Mode: packages.NeedFiles,
491+
}, pkgPath)
490492
if err != nil {
491493
panic(err)
492494
}
493-
return path
495+
496+
return filepath.Dir(pkgs[0].GoFiles[0])
494497
}()
495498

496499
func loadTemplateText(filename string) string {

0 commit comments

Comments
 (0)