diff --git a/misc/stdlib_diff/README.md b/misc/stdlib_diff/README.md index 3ed9c70bfcb..9b05deaed03 100644 --- a/misc/stdlib_diff/README.md +++ b/misc/stdlib_diff/README.md @@ -7,13 +7,13 @@ Stdlibs_diff is a tool that generates an html report indicating differences betw Compare the `go` standard libraries the `gno` standard libraries ```shell -./stdlibs_diff --src --dst --out +./stdlibs_diff -src -dst -out ``` Compare the `gno` standard libraries the `go` standard libraries ```shell -./stdlibs_diff --src --dst --out --src_is_gno +./stdlibs_diff -src -dst -out -src_is_gno ``` diff --git a/misc/stdlib_diff/go.mod b/misc/stdlib_diff/go.mod new file mode 100644 index 00000000000..b533ae398f0 --- /dev/null +++ b/misc/stdlib_diff/go.mod @@ -0,0 +1,3 @@ +module github.com/gnolang/gno/misc/stdlib_diff + +go 1.21.0 diff --git a/misc/stdlib_diff/packagediff.go b/misc/stdlib_diff/packagediff.go index 247e49a9a27..5564e080c7c 100644 --- a/misc/stdlib_diff/packagediff.go +++ b/misc/stdlib_diff/packagediff.go @@ -1,8 +1,10 @@ package main import ( - "fmt" + "errors" + "io/fs" "os" + "path/filepath" "slices" "strings" ) @@ -155,26 +157,28 @@ func (p *PackageDiffChecker) hasSameNumberOfFiles() bool { // listDirFiles returns a list of file names in the specified directory. func listDirFiles(dirPath string) ([]string, error) { - f, err := os.Open(dirPath) - if err != nil { - return []string{}, nil - } + fileNames := make([]string, 0) + err := filepath.WalkDir(dirPath, func(path string, dirEntry fs.DirEntry, err error) error { + if err != nil { + // Avoid returning an error if the file does not exists on source or destination. + if errors.Is(err, os.ErrNotExist) { + return nil + } + return err + } - defer func() { - if err := f.Close(); err != nil { - fmt.Fprintln(os.Stderr, "can't close "+dirPath) + // Only list .go and .gno files + if !strings.Contains(path, ".go") && !strings.Contains(path, ".gno") { + return nil } - }() - filesInfo, err := f.Readdir(0) - if err != nil { - return nil, fmt.Errorf("can't list file in directory :%w", err) - } + if dirEntry != nil && !dirEntry.IsDir() { + filenameWithSubfolder := strings.TrimPrefix(path, dirPath+"/") + fileNames = append(fileNames, filenameWithSubfolder) + } - fileNames := make([]string, 0) - for _, info := range filesInfo { - fileNames = append(fileNames, info.Name()) - } + return nil + }) - return fileNames, nil + return fileNames, err } diff --git a/misc/stdlib_diff/report.go b/misc/stdlib_diff/report.go index 44ba8feb49e..72403ea434a 100644 --- a/misc/stdlib_diff/report.go +++ b/misc/stdlib_diff/report.go @@ -6,6 +6,7 @@ import ( "fmt" "html/template" "os" + "slices" ) var ( @@ -133,7 +134,7 @@ func (builder *ReportBuilder) listSrcDirectories() ([]string, error) { directories := make([]string, 0) for _, dirEntry := range dirEntries { - if dirEntry.IsDir() { + if dirEntry.IsDir() && !slices.Contains([]string{"cmd", "vendor"}, dirEntry.Name()) { directories = append(directories, dirEntry.Name()) } } diff --git a/misc/stdlib_diff/templates/package_diff_template.html b/misc/stdlib_diff/templates/package_diff_template.html index 684e6d7bd1f..9b2158fc73b 100644 --- a/misc/stdlib_diff/templates/package_diff_template.html +++ b/misc/stdlib_diff/templates/package_diff_template.html @@ -12,7 +12,7 @@ {{- else if eq .Line ""}}
{{- else}} -

{{.Line}}

+

{{.Line}}

{{- end}} {{- end}}