code: func ParseURL(us string) (*URL, error) {
  	// if it's no URL build file URL and parse that
  	nu, err := url.Parse(us)
  	if err != nil {
  		nu, err = url.Parse("gpgcli-gitcli-fs+file://" + us)
  		if err != nil {
  			return nil, err
  		}
  	}
  	u := &URL{
  		url: nu,
  	}
  	if err := u.parseScheme(); err != nil {
  		return u, err
  	}
  	u.Path = nu.Path
  	if nu.User != nil {
  		u.Username = nu.User.Username()
  		u.Password, _ = nu.User.Password()
  	}
  	if nu.Host == "~" {
  		hd, err := homedir.Dir()
  		if err != nil {
  			return u, err
  		}
  		u.Path = filepath.Join(hd, u.Path)
  		nu.Host = ""
  	}
  	u.Query = nu.Query()
  	if nu.Host != "" {
  		h, p, err := net.SplitHostPort(nu.Host)
  		if err == nil {
  			u.Host = h
  			u.Port = p
  		}
  	} else if runtime.GOOS == "windows" {
  		// only trim if this is a local path, e. g. file:///C:/Users/...
  		// (specified in https://blogs.msdn.microsoft.com/ie/2006/12/06/file-uris-in-windows/)
  		// In that case, u.Path will contain a leading slash.
  		// (correctly, as per RFC 3986, see https://github.com/golang/go/issues/6027)
  		u.Path = strings.TrimPrefix(u.Path, "/")
  	}
  	return u, nil
  }
docs: // ParseURL attempts to parse an backend URL