2020-10-22 04:47:42 -07:00
|
|
|
package main
|
|
|
|
|
2021-12-13 13:35:42 -08:00
|
|
|
import (
|
2022-01-26 01:23:18 -08:00
|
|
|
"oh-my-posh/environment"
|
2022-01-26 04:53:35 -08:00
|
|
|
"oh-my-posh/properties"
|
2022-01-26 01:23:18 -08:00
|
|
|
|
2021-12-13 13:35:42 -08:00
|
|
|
"golang.org/x/mod/modfile"
|
|
|
|
)
|
|
|
|
|
2020-10-22 04:47:42 -07:00
|
|
|
type golang struct {
|
2021-12-03 11:19:57 -08:00
|
|
|
language
|
2020-10-22 04:47:42 -07:00
|
|
|
}
|
|
|
|
|
2021-12-13 13:35:42 -08:00
|
|
|
const (
|
2022-01-26 04:53:35 -08:00
|
|
|
ParseModFile properties.Property = "parse_mod_file"
|
2021-12-13 13:35:42 -08:00
|
|
|
)
|
|
|
|
|
2022-01-23 12:37:51 -08:00
|
|
|
func (g *golang) template() string {
|
|
|
|
return languageTemplate
|
2020-10-22 04:47:42 -07:00
|
|
|
}
|
|
|
|
|
2022-01-26 04:53:35 -08:00
|
|
|
func (g *golang) init(props properties.Properties, env environment.Environment) {
|
2021-12-03 11:19:57 -08:00
|
|
|
g.language = language{
|
2021-02-03 10:11:32 -08:00
|
|
|
env: env,
|
|
|
|
props: props,
|
|
|
|
extensions: []string{"*.go", "go.mod"},
|
|
|
|
commands: []*cmd{
|
2021-12-13 13:35:42 -08:00
|
|
|
{
|
|
|
|
regex: `(?P<version>((?P<major>[0-9]+).(?P<minor>[0-9]+)(.(?P<patch>[0-9]+))?))`,
|
|
|
|
getVersion: g.getVersion,
|
|
|
|
},
|
2021-02-03 10:11:32 -08:00
|
|
|
{
|
|
|
|
executable: "go",
|
|
|
|
args: []string{"version"},
|
2021-02-17 23:38:51 -08:00
|
|
|
regex: `(?:go(?P<version>((?P<major>[0-9]+).(?P<minor>[0-9]+)(.(?P<patch>[0-9]+))?)))`,
|
2021-02-03 10:11:32 -08:00
|
|
|
},
|
2021-01-10 03:14:43 -08:00
|
|
|
},
|
2022-01-23 09:48:55 -08:00
|
|
|
versionURLTemplate: "https://golang.org/doc/go{{ .Major }}.{{ .Minor }})",
|
2020-11-14 11:04:04 -08:00
|
|
|
}
|
2020-10-22 04:47:42 -07:00
|
|
|
}
|
|
|
|
|
2021-12-13 13:35:42 -08:00
|
|
|
func (g *golang) getVersion() (string, error) {
|
2022-01-26 04:09:21 -08:00
|
|
|
if !g.props.GetBool(ParseModFile, false) {
|
2021-12-13 13:35:42 -08:00
|
|
|
return "", nil
|
|
|
|
}
|
2022-01-23 12:37:51 -08:00
|
|
|
gomod, err := g.language.env.HasParentFilePath("go.mod")
|
2021-12-13 13:35:42 -08:00
|
|
|
if err != nil {
|
|
|
|
return "", nil
|
|
|
|
}
|
2022-01-23 12:37:51 -08:00
|
|
|
contents := g.language.env.FileContent(gomod.Path)
|
|
|
|
file, err := modfile.Parse(gomod.Path, []byte(contents), nil)
|
2021-12-13 13:35:42 -08:00
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
return file.Go.Version, nil
|
|
|
|
}
|
|
|
|
|
2020-10-22 04:47:42 -07:00
|
|
|
func (g *golang) enabled() bool {
|
2020-11-14 11:04:04 -08:00
|
|
|
return g.language.enabled()
|
2020-10-22 04:47:42 -07:00
|
|
|
}
|