package edit

import (
	
	

	
	
	
	
	
)

func ( *cli.AppSpec,  *eval.Evaler) {
	.Highlighter = highlight.NewHighlighter(highlight.Config{
		Check:      func( parse.Tree) error { return check(, ) },
		HasCommand: func( string) bool { return hasCommand(, ) },
	})
}

func ( *eval.Evaler,  parse.Tree) error {
	 := .CheckTree(, nil)
	if  == nil {
		return nil
	}
	return 
}

func ( *eval.Evaler,  string) bool {
	if eval.IsBuiltinSpecial[] {
		return true
	}
	if fsutil.DontSearch() {
		return isDirOrExecutable() || hasExternalCommand()
	}

	,  := eval.SplitSigil()
	if  != "" {
		// The @ sign is only valid when referring to external commands.
		return hasExternalCommand()
	}

	,  := eval.SplitQName()
	switch {
	case  == "":
		// Unqualified name; try builtin and global.
		if hasFn(.Builtin(), ) || hasFn(.Global(), ) {
			return true
		}
	case  == "e:":
		return hasExternalCommand()
	default:
		// Qualified name. Find the top-level module first.
		if hasQualifiedFn(, , ) {
			return true
		}
	}

	// If all failed, it can still be an external command.
	return hasExternalCommand()
}

func ( *eval.Evaler,  string,  string) bool {
	if  == "" {
		return false
	}
	,  := .Global().Index()
	if ! {
		,  = .Builtin().Index()
		if ! {
			return false
		}
	}
	,  := .(*eval.Ns)
	if ! {
		return false
	}
	 := eval.SplitQNameSegs()
	for ,  := range [:len()-1] {
		,  = .Index()
		if ! {
			return false
		}
		,  = .(*eval.Ns)
		if ! {
			return false
		}
	}
	return hasFn(, [len()-1])
}

func ( *eval.Ns,  string) bool {
	,  := .Index( + eval.FnSuffix)
	if ! {
		return false
	}
	_,  = .(eval.Callable)
	return 
}

func ( string) bool {
	,  := os.Stat()
	return  == nil && (.IsDir() || .Mode()&0111 != 0)
}

func ( string) bool {
	,  := exec.LookPath()
	return  == nil
}