@@ -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
1416type pkgData struct {
@@ -36,54 +38,55 @@ type symbolData struct {
3638}
3739
3840func 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