Skip to content

Commit c3217ab

Browse files
committed
feat: In doc, add newPkgDataFromMemPkg
Signed-off-by: Jeff Thompson <[email protected]>
1 parent 27073ec commit c3217ab

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

gnovm/pkg/doc/pkg.go

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import (
66
"go/doc"
77
"go/parser"
88
"go/token"
9-
"os"
109
"path/filepath"
1110
"strings"
11+
12+
"github.com/gnolang/gno/gnovm"
13+
"github.com/gnolang/gno/gnovm/pkg/gnolang"
1214
)
1315

1416
type pkgData struct {
@@ -36,54 +38,55 @@ type symbolData struct {
3638
}
3739

3840
func newPkgData(dir bfsDir, unexported bool) (*pkgData, error) {
39-
files, err := os.ReadDir(dir.dir)
41+
memPkg, err := gnolang.ReadMemPackage(dir.dir, dir.importPath)
4042
if err != nil {
41-
return nil, fmt.Errorf("commands/doc: open %q: %w", dir.dir, err)
43+
return nil, fmt.Errorf("commands/doc: read files %q: %w", dir.dir, err)
4244
}
45+
return newPkgDataFromMemPkg(memPkg, unexported)
46+
}
47+
48+
func newPkgDataFromMemPkg(memPkg *gnovm.MemPackage, unexported bool) (*pkgData, error) {
4349
pkg := &pkgData{
44-
dir: dir,
50+
dir: bfsDir{
51+
importPath: memPkg.Name,
52+
dir: memPkg.Path,
53+
},
4554
fset: token.NewFileSet(),
4655
}
47-
for _, file := range files {
48-
n := file.Name()
56+
for _, file := range memPkg.Files {
57+
n := file.Name
4958
// Ignore files with prefix . or _ like go tools do.
5059
// Ignore _filetest.gno, but not _test.gno, as we use those to compute
5160
// examples.
52-
if file.IsDir() ||
53-
!strings.HasSuffix(n, ".gno") ||
61+
if !strings.HasSuffix(n, ".gno") ||
5462
strings.HasPrefix(n, ".") ||
5563
strings.HasPrefix(n, "_") ||
5664
strings.HasSuffix(n, "_filetest.gno") {
5765
continue
5866
}
59-
fullPath := filepath.Join(dir.dir, n)
60-
err := pkg.parseFile(fullPath, unexported)
67+
fullPath := filepath.Join(memPkg.Path, n)
68+
err := pkg.parseFile(n, file.Body, unexported)
6169
if err != nil {
6270
return nil, fmt.Errorf("commands/doc: parse file %q: %w", fullPath, err)
6371
}
6472
}
6573

6674
if len(pkg.files) == 0 {
67-
return nil, fmt.Errorf("commands/doc: no valid gno files in %q", dir.dir)
75+
return nil, fmt.Errorf("commands/doc: no valid gno files in %q", memPkg.Path)
6876
}
6977
pkgName := pkg.files[0].Name.Name
7078
for _, file := range pkg.files[1:] {
7179
if file.Name.Name != pkgName {
72-
return nil, fmt.Errorf("commands/doc: multiple packages (%q / %q) in dir %q", pkgName, file.Name.Name, dir.dir)
80+
return nil, fmt.Errorf("commands/doc: multiple packages (%q / %q) in dir %q", pkgName, file.Name.Name, memPkg.Path)
7381
}
7482
}
7583
pkg.name = pkgName
7684

7785
return pkg, nil
7886
}
7987

80-
func (pkg *pkgData) parseFile(fileName string, unexported bool) error {
81-
f, err := os.Open(fileName)
82-
if err != nil {
83-
return err
84-
}
85-
defer f.Close()
86-
astf, err := parser.ParseFile(pkg.fset, filepath.Base(fileName), f, parser.ParseComments)
88+
func (pkg *pkgData) parseFile(fileName string, body string, unexported bool) error {
89+
astf, err := parser.ParseFile(pkg.fset, fileName, body, parser.ParseComments)
8790
if err != nil {
8891
return err
8992
}

0 commit comments

Comments
 (0)