func goodFormHead(head string, ed *Editor) bool { if isBuiltinSpecial[head] { return true } else if util.DontSearch(head) { // XXX don't stat twice return util.IsExecutable(head) || isDir(head) } else { explode, ns, name := eval.ParseVariable(head) if !explode { switch ns { case "": if eval.Builtin()[eval.FnPrefix+name] != nil || ed.evaler.Global[eval.FnPrefix+name] != nil { return true } case "e": if ed.isExternal[name] { return true } default: if ed.evaler.Modules[ns] != nil && ed.evaler.Modules[ns][eval.FnPrefix+name] != nil { return true } } } return ed.isExternal[head] } }
func iterateVariables(ev *eval.Evaler, ns string, f func(string)) { if ns == "" { for varname := range eval.Builtin() { f(varname) } for varname := range ev.Global { f(varname) } // TODO Include local names as well. } else { for varname := range ev.Modules[ns] { f(varname) } } }
func goodFormHead(head string, ed *Editor) bool { if isBuiltinSpecial[head] { return true } else if util.DontSearch(head) { // XXX don't stat twice return util.IsExecutable(head) || isDir(head) } else { _, ns, head := eval.ParseVariable(head) if ns == "" { return ed.isExternal[head] || eval.Builtin()[eval.FnPrefix+head] != nil || ed.evaler.Global[eval.FnPrefix+head] != nil } else { return ed.evaler.Modules[ns] != nil && ed.evaler.Modules[ns][eval.FnPrefix+head] != nil } } }
func iterateVariables(ev *eval.Evaler, ns string, f func(string)) { switch ns { case "": for varname := range eval.Builtin() { f(varname) } for varname := range ev.Global { f(varname) } // TODO Include local names as well. case "E": for _, s := range os.Environ() { f(s[:strings.IndexByte(s, '=')]) } default: // TODO Support non-module namespaces. for varname := range ev.Modules[ns] { f(varname) } } }