feat: react segment

This commit is contained in:
srpmtt 2024-01-15 20:04:01 +00:00 committed by Jan De Dobbeleer
parent ed40fc7bf5
commit b8830a683a
5 changed files with 134 additions and 0 deletions

View file

@ -208,6 +208,8 @@ const (
QUASAR SegmentType = "quasar"
// R version
R SegmentType = "r"
// REACT writes the current react version
REACT SegmentType = "react"
// ROOT writes root symbol
ROOT SegmentType = "root"
// RUBY writes which ruby version is currently active
@ -323,6 +325,7 @@ var Segments = map[SegmentType]func() SegmentWriter{
PYTHON: func() SegmentWriter { return &segments.Python{} },
QUASAR: func() SegmentWriter { return &segments.Quasar{} },
R: func() SegmentWriter { return &segments.R{} },
REACT: func() SegmentWriter { return &segments.React{} },
ROOT: func() SegmentWriter { return &segments.Root{} },
RUBY: func() SegmentWriter { return &segments.Ruby{} },
RUST: func() SegmentWriter { return &segments.Rust{} },

38
src/segments/react.go Normal file
View file

@ -0,0 +1,38 @@
package segments
import (
"github.com/jandedobbeleer/oh-my-posh/src/platform"
"github.com/jandedobbeleer/oh-my-posh/src/properties"
)
type React struct {
language
}
func (r *React) Template() string {
return languageTemplate
}
func (r *React) Init(props properties.Properties, env platform.Environment) {
r.language = language{
env: env,
props: props,
extensions: []string{"package.json"},
commands: []*cmd{
{
regex: `(?:(?P<version>((?P<major>[0-9]+).(?P<minor>[0-9]+).(?P<patch>[0-9]+))))`,
getVersion: r.getVersion,
},
},
versionURLTemplate: "https://github.com/facebook/react/releases/tag/v{{.Full}}",
}
}
func (r *React) Enabled() bool {
return r.language.Enabled()
}
func (r *React) getVersion() (string, error) {
// tested by nx_test.go
return getNodePackageVersion(r.language.env, "react")
}

View file

@ -299,6 +299,7 @@
"ruby",
"rust",
"r",
"react",
"sapling",
"session",
"sitecore",
@ -2548,6 +2549,37 @@
}
}
},
{
"if": {
"properties": {
"type": {
"const": "react"
}
}
},
"then": {
"title": "React Segment",
"description": "https://ohmyposh.dev/docs/segments/react",
"properties": {
"properties": {
"properties": {
"home_enabled": {
"$ref": "#/definitions/home_enabled"
},
"fetch_version": {
"$ref": "#/definitions/fetch_version"
},
"display_mode": {
"$ref": "#/definitions/display_mode"
},
"version_url_template": {
"$ref": "#/definitions/version_url_template"
}
}
}
}
}
},
{
"if": {
"properties": {

View file

@ -0,0 +1,60 @@
---
id: react
title: React
sidebar_label: React
---
## What
Display the currently active React version.
## Sample Configuration
import Config from "@site/src/components/Config.js";
<Config
data={{
type: "react",
style: "powerline",
powerline_symbol: "\uE0B0",
foreground: "#81a1c1",
template: " \uE7ba {{ .Full }} ",
}}
/>
## Properties
| Name | Type | Description |
| ---------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `home_enabled` | `boolean` | display the segment in the HOME folder or not - defaults to `false` |
| `fetch_version` | `boolean` | fetch the active version or not; useful if all you need is an icon indicating `ng` |
| `display_mode` | `string` | <ul><li>`always`: the segment is always displayed</li><li>`files`: the segment is only displayed when `package.json` file is present (**default**)</li></ul> |
| `version_url_template` | `string` | a go [text/template][go-text-template] [template][templates] that creates the URL of the version info / release notes |
| `extensions` | `[]string` | allows to override the default list of file extensions to validate |
| `folders` | `[]string` | allows to override the list of folder names to validate |
| `cache_version` | `boolean` | cache the executable's version or not - defaults to `false` |
## Template ([info][templates])
:::note default template
```template
{{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}
```
:::
### Properties
| Name | Type | Description |
| -------- | -------- | -------------------------------------------------- |
| `.Full` | `string` | the full version |
| `.Major` | `string` | major number |
| `.Minor` | `string` | minor number |
| `.Patch` | `string` | patch number |
| `.URL` | `string` | URL of the version info / release notes |
| `.Error` | `string` | error encountered when fetching the version string |
[go-text-template]: https://golang.org/pkg/text/template/
[templates]: /docs/configuration/templates
[react]: https://react.dev/

View file

@ -107,6 +107,7 @@ module.exports = {
"segments/python",
"segments/quasar",
"segments/r",
"segments/react",
"segments/root",
"segments/ruby",
"segments/rust",