Skip to content

Commit

Permalink
docs: godoc
Browse files Browse the repository at this point in the history
  • Loading branch information
caarlos0 committed May 14, 2024
1 parent 8fc562a commit 52d2d64
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 19 deletions.
16 changes: 7 additions & 9 deletions tree/renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ type Style struct {
itemFunc StyleFunc
}

// NewDefaultRenderer returns the default renderer with the given style and
// enumerator.
func newDefaultRenderer() *defaultRenderer {
return &defaultRenderer{
// newRenderer returns the renderer used to render a tree.
func newRenderer() *renderer {
return &renderer{
style: Style{
enumeratorFunc: func(Data, int) lipgloss.Style {
return lipgloss.NewStyle().MarginRight(1)
Expand All @@ -31,14 +30,13 @@ func newDefaultRenderer() *defaultRenderer {
}
}

// defaultRenderer is the default renderer used by the tree.
type defaultRenderer struct {
type renderer struct {
style Style
enumerator Enumerator
}

// Render conforms with the Renderer interface.
func (r *defaultRenderer) Render(node Node, root bool, prefix string) string {
// render is responsible for actually rendering the tree.
func (r *renderer) render(node Node, root bool, prefix string) string {
if node.Hidden() {
return ""
}
Expand Down Expand Up @@ -115,7 +113,7 @@ func (r *defaultRenderer) Render(node Node, root bool, prefix string) string {
renderer = child.renderer
}
}
if s := renderer.Render(
if s := renderer.render(
child,
false,
prefix+enumStyle.Render(indent),
Expand Down
29 changes: 19 additions & 10 deletions tree/tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,40 @@ import (
"github.com/charmbracelet/lipgloss"
)

// Node is a node in a tree.
// Node defines a node in a tree.
type Node interface {
fmt.Stringer
Name() string
String() string
Children() Data
Hidden() bool
}

// StringNode is a node without children.
// StringNode is a node without children and with a string describing it.
type StringNode string

// Children conforms with Node.
// StringNodes have no children.
//
// Always returns no children.
func (StringNode) Children() Data { return nodeData(nil) }

// Name conforms with Node.
//
// Returns the value of the string itself.
func (s StringNode) Name() string { return string(s) }

// Hidden conforms with Node.
//
// Always returns false.
func (s StringNode) Hidden() bool { return false }

// String returns conforms with Stringer.
func (s StringNode) String() string { return s.Name() }

// Tree implements the Node interface with String data.
// Tree implements the Node interface.
// It has a name and, optionally, children.
type Tree struct { //nolint:revive
name string
renderer *defaultRenderer
renderer *renderer
rendererOnce sync.Once
children Data
hide bool
Expand Down Expand Up @@ -69,8 +74,9 @@ func (n *Tree) OffsetEnd(offset int) *Tree {
// Name returns the root name of this node.
func (n *Tree) Name() string { return n.name }

// String conforms with Stringer.
func (n *Tree) String() string {
return n.ensureRenderer().Render(n, true, "")
return n.ensureRenderer().render(n, true, "")
}

// Item appends an item to a list.
Expand Down Expand Up @@ -169,9 +175,10 @@ func ensureParent(nodes Data, item *Tree) (*Tree, int) {
return item, -1
}

func (n *Tree) ensureRenderer() *defaultRenderer {
// Ensure the tree node has a renderer.
func (n *Tree) ensureRenderer() *renderer {
n.rendererOnce.Do(func() {
n.renderer = newDefaultRenderer()
n.renderer = newRenderer()
})
return n.renderer
}
Expand Down Expand Up @@ -209,12 +216,14 @@ func (n *Tree) ItemStyleFunc(fn StyleFunc) *Tree {
}

// Enumerator sets the enumerator implementation.
//
// This can be used to change the way the branches indicators look.
func (n *Tree) Enumerator(enum Enumerator) *Tree {
n.ensureRenderer().enumerator = enum
return n
}

// Children returns the children of a string node.
// Children returns the children of a node.
func (n *Tree) Children() Data {
var data []Node
for i := n.offset[0]; i < n.children.Length()-n.offset[1]; i++ {
Expand Down

0 comments on commit 52d2d64

Please sign in to comment.