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  }