* feat(goctl): supports api multi-level importing Resolves: #1744 * fix(goctl): import-cycle, etc. import-cycle will not be allowed e.g., a.api -> b.api -> a.api regular multiple-import will be allowed e.g., a.api -> b.api -> c.api -> c.api * refactor(goctl): adds comments to exported var * fix(goctl): typo in a comment
24 lines
453 B
Go
24 lines
453 B
Go
package ast
|
|
|
|
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 (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]
|
|
}
|