feat: node refactor (#1316)

* refactor: node reader interface

* refactor: rewrite Taskfile() as anon recursive func

* chore: NewNodeFromIncludedTaskfile

* chore: changelog
This commit is contained in:
Pete Davison
2023-09-02 15:24:01 -05:00
committed by GitHub
parent b2e6c93b4b
commit afe8a618fe
7 changed files with 286 additions and 194 deletions

35
taskfile/read/node.go Normal file
View File

@@ -0,0 +1,35 @@
package read
import (
"strings"
"github.com/go-task/task/v3/taskfile"
)
type Node interface {
Read() (*taskfile.Taskfile, error)
Parent() Node
Optional() bool
Location() string
}
func NewNodeFromIncludedTaskfile(parent Node, includedTaskfile taskfile.IncludedTaskfile) (Node, error) {
switch getScheme(includedTaskfile.Taskfile) {
// TODO: Add support for other schemes.
// If no other scheme matches, we assume it's a file.
// This also allows users to explicitly set a file:// scheme.
default:
path, err := includedTaskfile.FullTaskfilePath()
if err != nil {
return nil, err
}
return NewFileNode(parent, path, includedTaskfile.Optional)
}
}
func getScheme(uri string) string {
if i := strings.Index(uri, "://"); i != -1 {
return uri[:i]
}
return ""
}