123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package edit
- import (
- "strings"
- "src.elv.sh/pkg/eval"
- "src.elv.sh/pkg/eval/errs"
- "src.elv.sh/pkg/eval/vals"
- "src.elv.sh/pkg/eval/vars"
- )
- func initVarsAPI(ed *Editor, nb eval.NsBuilder) {
- nb.AddGoFns(map[string]any{
- "add-var": addVar,
- "add-vars": addVars,
- })
- }
- func addVar(fm *eval.Frame, name string, val any) error {
- if !isUnqualified(name) {
- return errs.BadValue{
- What: "name argument to edit:add-var",
- Valid: "unqualified variable name", Actual: name}
- }
- variable := eval.MakeVarFromName(name)
- err := variable.Set(val)
- if err != nil {
- return err
- }
- fm.Evaler.ExtendGlobal(eval.BuildNs().AddVar(name, vars.FromInit(val)))
- return nil
- }
- func addVars(fm *eval.Frame, m vals.Map) error {
- nb := eval.BuildNs()
- for it := m.Iterator(); it.HasElem(); it.Next() {
- k, val := it.Elem()
- name, ok := k.(string)
- if !ok {
- return errs.BadValue{
- What: "key of argument to edit:add-vars",
- Valid: "string", Actual: vals.Kind(k)}
- }
- if !isUnqualified(name) {
- return errs.BadValue{
- What: "key of argument to edit:add-vars",
- Valid: "unqualified variable name", Actual: name}
- }
- variable := eval.MakeVarFromName(name)
- err := variable.Set(val)
- if err != nil {
- return err
- }
- nb.AddVar(name, variable)
- }
- fm.Evaler.ExtendGlobal(nb)
- return nil
- }
- func isUnqualified(name string) bool {
- i := strings.IndexByte(name, ':')
- return i == -1 || i == len(name)-1
- }
|