code: func VyperVersion(vyper string) (*Vyper, error) {
  	if vyper == "" {
  		vyper = "vyper"
  	}
  	var out bytes.Buffer
  	cmd := exec.Command(vyper, "--version")
  	cmd.Stdout = &out
  	err := cmd.Run()
  	if err != nil {
  		return nil, err
  	}
  	matches := versionRegexp.FindStringSubmatch(out.String())
  	if len(matches) != 4 {
  		return nil, fmt.Errorf("can't parse vyper version %q", out.String())
  	}
  	s := &Vyper{Path: cmd.Path, FullVersion: out.String(), Version: matches[0]}
  	if s.Major, err = strconv.Atoi(matches[1]); err != nil {
  		return nil, err
  	}
  	if s.Minor, err = strconv.Atoi(matches[2]); err != nil {
  		return nil, err
  	}
  	if s.Patch, err = strconv.Atoi(matches[3]); err != nil {
  		return nil, err
  	}
  	return s, nil
  }
docs: // VyperVersion runs vyper and parses its version output.