oh-my-posh/src/segment_golang.go

62 lines
1.4 KiB
Go
Raw Normal View History

2020-10-22 04:47:42 -07:00
package main
import (
"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
}
const (
ParseModFile Property = "parse_mod_file"
)
2020-10-22 04:47:42 -07:00
func (g *golang) string() string {
2022-01-22 10:46:56 -08:00
segmentTemplate := g.language.props.getString(SegmentTemplate, "")
if len(segmentTemplate) == 0 {
return g.language.string()
}
return g.language.renderTemplate(segmentTemplate, g)
2020-10-22 04:47:42 -07:00
}
2022-01-01 11:09:52 -08:00
func (g *golang) init(props Properties, env 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{
{
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
},
},
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
}
func (g *golang) getVersion() (string, error) {
if !g.props.getBool(ParseModFile, false) {
return "", nil
}
gomod, err := g.language.env.hasParentFilePath("go.mod")
if err != nil {
return "", nil
}
contents := g.language.env.getFileContent(gomod.path)
file, err := modfile.Parse(gomod.path, []byte(contents), nil)
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
}