Skip to content

Commit

Permalink
refactor: use language context to display segment
Browse files Browse the repository at this point in the history
relates to #239
  • Loading branch information
JanDeDobbeleer committed Jan 13, 2021
1 parent db69cfb commit 9183fbe
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 22 deletions.
26 changes: 25 additions & 1 deletion src/segment_language.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ package main

import "errors"

type loadContext func()

type inContext func() bool

type language struct {
props *properties
env environmentInfo
Expand All @@ -12,6 +16,8 @@ type language struct {
versionRegex string
version string
exitCode int
loadContext loadContext
inContext inContext
}

const (
Expand All @@ -21,6 +27,8 @@ const (
DisplayModeAlways string = "always"
// DisplayModeFiles displays the segment when the current folder contains certain extensions
DisplayModeFiles string = "files"
// DisplayModeEnvironment displays the segment when the environment has a language's context
DisplayModeEnvironment string = "environment"
// MissingCommandTextProperty sets the text to display when the command is not present in the system
MissingCommandTextProperty Property = "missing_command_text"
// MissingCommandText displays empty string by default
Expand All @@ -43,10 +51,12 @@ func (l *language) string() string {
func (l *language) enabled() bool {
displayMode := l.props.getString(DisplayMode, DisplayModeFiles)
displayVersion := l.props.getBool(DisplayVersion, true)

l.loadLanguageContext()
switch displayMode {
case DisplayModeAlways:
return (!displayVersion || l.hasCommand())
case DisplayModeEnvironment:
return l.inLanguageContext()
case DisplayModeFiles:
fallthrough
default:
Expand Down Expand Up @@ -97,3 +107,17 @@ func (l *language) hasCommand() bool {
}
return true
}

func (l *language) loadLanguageContext() {
if l.loadContext == nil {
return
}
l.loadContext()
}

func (l *language) inLanguageContext() bool {
if l.inContext == nil {
return false
}
return l.inContext()
}
15 changes: 10 additions & 5 deletions src/segment_python.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,19 @@ func (p *python) init(props *properties, env environmentInfo) {
versionParam: "--version",
extensions: []string{"*.py", "*.ipynb"},
versionRegex: `Python (?P<version>[0-9]+.[0-9]+.[0-9]+)`,
loadContext: p.loadContext,
inContext: p.inContext,
}
}

func (p *python) enabled() bool {
if !p.language.enabled() {
return false
}
return p.language.enabled()
}

func (p *python) loadContext() {
venvVars := []string{
"VIRTUAL_ENV",
"CONDA_ENV_PATH",
"CONDA_DEFAULT_ENV",
"PYENV_VERSION",
}
var venv string
Expand All @@ -52,5 +54,8 @@ func (p *python) enabled() bool {
break
}
}
return true
}

func (p *python) inContext() bool {
return p.venvName != ""
}
36 changes: 20 additions & 16 deletions src/segment_python_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ import (
)

type pythonArgs struct {
virtualEnvName string
condaEnvName string
condaDefaultName string
pyEnvName string
displayVersion bool
virtualEnvName string
condaEnvName string
pyEnvName string
displayVersion bool
}

func bootStrapPythonTest(args *pythonArgs) *python {
Expand All @@ -21,7 +20,6 @@ func bootStrapPythonTest(args *pythonArgs) *python {
env.On("hasFiles", "*.py").Return(true)
env.On("getenv", "VIRTUAL_ENV").Return(args.virtualEnvName)
env.On("getenv", "CONDA_ENV_PATH").Return(args.condaEnvName)
env.On("getenv", "CONDA_DEFAULT_ENV").Return(args.condaDefaultName)
env.On("getenv", "PYENV_VERSION").Return(args.pyEnvName)
env.On("getPathSeperator", nil).Return("")
props := &properties{
Expand Down Expand Up @@ -55,16 +53,6 @@ func TestPythonCondaEnv(t *testing.T) {
assert.Equal(t, expected, python.string())
}

func TestPythonCondaDefaultName(t *testing.T) {
expected := "CONDADEF"
args := &pythonArgs{
condaDefaultName: expected,
}
python := bootStrapPythonTest(args)
assert.True(t, python.enabled())
assert.Equal(t, expected, python.string())
}

func TestPythonPyEnv(t *testing.T) {
expected := "PYENV"
args := &pythonArgs{
Expand All @@ -86,3 +74,19 @@ func TestPythonPyEnvWithVersion(t *testing.T) {
assert.Equal(t, expected, python.string())
assert.Equal(t, "3.8.4", python.language.version)
}

func TestPythonPythonInContext(t *testing.T) {
args := &pythonArgs{
pyEnvName: "PYENV",
displayVersion: true,
}
python := bootStrapPythonTest(args)
python.loadContext()
assert.True(t, python.inContext())
}

func TestPythonPythonNotInContext(t *testing.T) {
python := bootStrapPythonTest(&pythonArgs{})
python.loadContext()
assert.False(t, python.inContext())
}

0 comments on commit 9183fbe

Please sign in to comment.