(goctl:) fix circle import in case new parser (#3750)
Co-authored-by: Kevin Wan <wanjunfeng@gmail.com>
This commit is contained in:
31
tools/goctl/pkg/parser/api/importstack/importstack.go
Normal file
31
tools/goctl/pkg/parser/api/importstack/importstack.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package importstack
|
||||
|
||||
import "errors"
|
||||
|
||||
// ErrImportCycleNotAllowed defines an error for circular importing
|
||||
var ErrImportCycleNotAllowed = errors.New("import cycle not allowed")
|
||||
|
||||
// ImportStack a stack of import paths
|
||||
type ImportStack []string
|
||||
|
||||
func New() *ImportStack {
|
||||
return &ImportStack{}
|
||||
}
|
||||
|
||||
func (s *ImportStack) Push(p string) error {
|
||||
for _, x := range *s {
|
||||
if x == p {
|
||||
return ErrImportCycleNotAllowed
|
||||
}
|
||||
}
|
||||
*s = append(*s, p)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *ImportStack) Pop() {
|
||||
*s = (*s)[0 : len(*s)-1]
|
||||
}
|
||||
|
||||
func (s *ImportStack) List() []string {
|
||||
return *s
|
||||
}
|
||||
Reference in New Issue
Block a user