github.com/jmigpin/editor@v1.6.0/core/findfileinfo.go (about) 1 package core 2 3 import ( 4 "os" 5 "path/filepath" 6 7 "github.com/jmigpin/editor/util/goutil" 8 ) 9 10 // Checks in GOROOT/GOPATH, and some C include dirs. 11 func FindFileInfo(name, dir string) (string, os.FileInfo, bool) { 12 // absolute path 13 if filepath.IsAbs(name) { 14 fi, err := os.Stat(name) 15 if err == nil { 16 return name, fi, true 17 } 18 return "", nil, false 19 } 20 21 // join with dir 22 { 23 u := filepath.Join(dir, name) 24 fi, err := os.Stat(u) 25 if err == nil { 26 return u, fi, true 27 } 28 } 29 30 // go paths 31 { 32 a := []string{goutil.GoRoot()} 33 a = append(a, goutil.GoPath()...) 34 for _, d := range a { 35 u := filepath.Join(d, "src", name) 36 fi, err := os.Stat(u) 37 if err == nil { 38 return u, fi, true 39 } 40 } 41 } 42 43 // c include paths 44 { 45 a := []string{ 46 "/usr/include", 47 "/usr/include/x86_64-linux-gnu", 48 "/usr/local/include", 49 } 50 for _, d := range a { 51 u := filepath.Join(d, name) 52 fi, err := os.Stat(u) 53 if err == nil { 54 return u, fi, true 55 } 56 } 57 } 58 59 return "", nil, false 60 }