@@ -23,8 +23,8 @@ func NewFS() *FS {
2323// Walk walks the filesystem rooted at root, calling fn for each unfiltered file.
2424func (w * FS ) Walk (root string , opt Option , fn WalkFunc ) error {
2525 opt .SkipFiles = w .BuildSkipPaths (root , opt .SkipFiles )
26- opt .SkipDirs = append (opt .SkipDirs , defaultSkipDirs ... )
2726 opt .SkipDirs = w .BuildSkipPaths (root , opt .SkipDirs )
27+ opt .SkipDirs = append (opt .SkipDirs , defaultSkipDirs ... )
2828
2929 walkDirFunc := w .WalkDirFunc (root , fn , opt )
3030 walkDirFunc = w .onError (walkDirFunc )
@@ -50,24 +50,24 @@ func (w *FS) WalkDirFunc(root string, fn WalkFunc, opt Option) fs.WalkDirFunc {
5050 }
5151 relPath = filepath .ToSlash (relPath )
5252
53- info , err := d .Info ()
54- if err != nil {
55- return xerrors .Errorf ("file info error: %w" , err )
56- }
57-
5853 // Skip unnecessary files
5954 switch {
60- case info .IsDir ():
55+ case d .IsDir ():
6156 if SkipPath (relPath , opt .SkipDirs ) {
6257 return filepath .SkipDir
6358 }
6459 return nil
65- case ! info . Mode ().IsRegular ():
60+ case ! d . Type ().IsRegular ():
6661 return nil
6762 case SkipPath (relPath , opt .SkipFiles ):
6863 return nil
6964 }
7065
66+ info , err := d .Info ()
67+ if err != nil {
68+ return xerrors .Errorf ("file info error: %w" , err )
69+ }
70+
7171 if err = fn (relPath , info , fileOpener (filePath )); err != nil {
7272 return xerrors .Errorf ("failed to analyze file: %w" , err )
7373 }
@@ -83,7 +83,7 @@ func (w *FS) onError(wrapped fs.WalkDirFunc) fs.WalkDirFunc {
8383 // Unwrap fs.SkipDir error
8484 case errors .Is (err , fs .SkipDir ):
8585 return fs .SkipDir
86- // ignore permission errors
86+ // Ignore permission errors
8787 case os .IsPermission (err ):
8888 return nil
8989 case err != nil :
0 commit comments