Skip to content

Commit

Permalink
feature: Add list-themes option (#50)
Browse files Browse the repository at this point in the history
* go mod tidy

* Use short variable declarations

* Add listThemes flag

* Add func: printThems

* Tweak yml

* Organize variables

* Print sample code with syntax-hilight

* Add TestListThemesFlag
  • Loading branch information
toshimaru committed Oct 22, 2019
1 parent 84d80f0 commit 9c01692
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 18 deletions.
1 change: 0 additions & 1 deletion .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ jobs:
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@master
with:
version: latest
args: release --snapshot --skip-publish --rm-dist
# GitHub Actions doesn't support colored output, so comment it out temporarily.
# - name: Colored Output Test
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
name: goreleaser
steps:
- name: Set up Go 1.13.x
- name: Set up Go 1.13
uses: actions/setup-go@v1
with:
go-version: 1.13
Expand Down
1 change: 0 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,4 @@ require (
github.com/mattn/go-isatty v0.0.10
github.com/spf13/cobra v0.0.5
github.com/stretchr/testify v1.3.0
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e // indirect
)
6 changes: 0 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtix
github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U=
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI=
github.com/alecthomas/chroma v0.6.6 h1:AwWMP1sWgMNgEiptNtV/T5GWOLtZFDdrc2ZfWx1ogmg=
github.com/alecthomas/chroma v0.6.6/go.mod h1:zVlgtbRS7BJDrDY9SB238RmpoCBCYFlLmcfZ3durxTk=
github.com/alecthomas/chroma v0.6.7 h1:1hKci+AyKOxJrugR9veaocu9DQGR2/GecI72BpaO0Rg=
github.com/alecthomas/chroma v0.6.7/go.mod h1:zVlgtbRS7BJDrDY9SB238RmpoCBCYFlLmcfZ3durxTk=
github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo=
Expand Down Expand Up @@ -43,8 +41,6 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
Expand Down Expand Up @@ -83,8 +79,6 @@ golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnf
golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qqCB4teTffacDWr7CI+0=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU=
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down
38 changes: 30 additions & 8 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ import (
)

var (
version = "dev"
isTerminalFunc = isatty.IsTerminal
version = "dev"

listThemes bool
showVersion bool
theme string
)
Expand All @@ -30,12 +33,10 @@ $ nyan -t solarized-dark FILE1`,
RunE: cmdMain,
}

var isTerminalFunc = isatty.IsTerminal

func init() {
rootCmd.PersistentFlags().BoolVarP(&showVersion, "version", "v", false, `show version`)
rootCmd.PersistentFlags().StringVarP(&theme, "theme", "t", "monokai", fmt.Sprintf(`color theme
available themes: %s`, styles.Names()))
rootCmd.PersistentFlags().StringVarP(&theme, "theme", "t", "monokai", fmt.Sprintf("color theme\navailable themes: %s", styles.Names()))
rootCmd.PersistentFlags().BoolVarP(&listThemes, "list-themes", "T", false, `list available themes`)
}

func main() {
Expand All @@ -51,23 +52,25 @@ func cmdMain(cmd *cobra.Command, args []string) (err error) {
if showVersion {
cmd.Println("version", version)
return
} else if listThemes {
printThemes(cmd)
return
}

var data []byte
var lexer chroma.Lexer

if len(args) < 1 || args[0] == "-" {
if data, err = ioutil.ReadAll(cmd.InOrStdin()); err != nil {
return
}
lexer = lexers.Analyse(string(data))
lexer := lexers.Analyse(string(data))
printData(&data, cmd, lexer)
} else {
for _, filename := range args {
if data, err = ioutil.ReadFile(filename); err != nil {
cmd.Println(err)
}
lexer = lexers.Match(filename)
lexer := lexers.Match(filename)
printData(&data, cmd, lexer)
}
}
Expand All @@ -87,3 +90,22 @@ func printData(data *[]byte, cmd *cobra.Command, lexer chroma.Lexer) {
cmd.Print(string(*data))
}
}

const sampleCode = `package main
import "fmt"
func main() {
fmt.Println("Hello nyan cat command 😺")
}
`

func printThemes(cmd *cobra.Command) {
for _, theme = range styles.Names() {
cmd.Println("Theme: ", theme)
code := []byte(sampleCode)
lexer := lexers.Get("go")
printData(&code, cmd, lexer)
cmd.Println()
}
}
15 changes: 14 additions & 1 deletion main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,18 @@ func TestVersionFlag(t *testing.T) {
assert.Contains(t, o.String(), "version ")
}

func TestListThemesFlag(t *testing.T) {
o := bytes.NewBufferString("")
rootCmd.SetArgs([]string{"--list-themes"})
rootCmd.SetOut(o)
err := rootCmd.Execute()
resetFlags()

assert.Nil(t, err)
assert.NotNil(t, o.String())
assert.Contains(t, o.String(), "Theme: ")
}

func TestUnknownFile(t *testing.T) {
o := bytes.NewBufferString("")
rootCmd.SetArgs([]string{"testdata/dummyfile"})
Expand All @@ -136,7 +148,7 @@ func TestFromStdIn(t *testing.T) {
i := bytes.NewBufferString("package main")
o := bytes.NewBufferString("")
isTerminalFunc = func(fd uintptr) bool { return true }
rootCmd.SetArgs([]string{})
rootCmd.SetArgs([]string{"-t", "monokai"})
rootCmd.SetIn(i)
rootCmd.SetOut(o)
err := rootCmd.Execute()
Expand Down Expand Up @@ -213,6 +225,7 @@ func TestShell(t *testing.T) {

func resetFlags() {
showVersion = false
listThemes = false
rootCmd.Flags().Set("help", "false")
}

Expand Down

0 comments on commit 9c01692

Please sign in to comment.