go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

commit 1f46aa0bf2edfd9f2f742081e8721a60b64951e5
parent 10739fb4a8c9c1e73c8f4c90eb62ae97c0dc8938
Author: lash <dev@holbrook.no>
Date:   Tue, 21 Jan 2025 15:39:38 +0000

Gofmt

Diffstat:
Masm/asm.go | 36++++++++++++++++--------------------
Masm/asm_test.go | 14+++++++-------
Masm/flag.go | 30+++++++++++++++---------------
Masm/menu.go | 32++++++++++++++++----------------
Masm/menu_test.go | 2--
Mcache/cache.go | 40++++++++++++++++++++--------------------
Mcache/cache_test.go | 4++--
Mdb/db.go | 57+++++++++++++++++++++++++++++----------------------------
Mdb/dbtest/testutil.go | 68+++++++++++++++++++++++++++++++++-----------------------------------
Mdb/dump.go | 16++++++++--------
Mdb/error.go | 6+++---
Mdb/fs/dump.go | 6+++---
Mdb/fs/fs.go | 33++++++++++++++++-----------------
Mdb/fs/fs_test.go | 2+-
Mdb/gdbm/dump.go | 8++++----
Mdb/gdbm/gdbm.go | 22+++++++++++-----------
Mdb/mem/dump.go | 2+-
Mdb/mem/mem.go | 14+++++++-------
Mdb/postgres/dump.go | 8++++----
Mdb/postgres/dump_test.go | 46+++++++++++++++++++++++-----------------------
Mdb/postgres/live_test.go | 3++-
Mdb/postgres/pg.go | 24++++++++++++------------
Mdb/postgres/pg_test.go | 16++++++++--------
Mdebug/map.go | 8++++----
Mdebug/node.go | 6+++---
Mdebug/parse.go | 15+++++++--------
Mdev/asm/main.go | 49+++++++++++++++++++++++--------------------------
Mdev/dbconvert/main.go | 70+++++++++++++++++++++++++++++++++++-----------------------------------
Mdev/disasm/main.go | 4++--
Mdev/gettext/export/main.go | 53++++++++++++++++++++++++++---------------------------
Mdev/gettext/import/main.go | 67+++++++++++++++++++++++++++++++++----------------------------------
Mdev/interactive/main.go | 6+++---
Mengine/config.go | 2+-
Mengine/db.go | 103+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mengine/db_test.go | 34++++++++++++++++------------------
Mengine/debug.go | 12++++++------
Mengine/engine_test.go | 42+++++++++++++++++++++---------------------
Mengine/loop_test.go | 14+++++++-------
Mengine/persist_test.go | 7+++----
Mexamples/db/main.go | 22+++++++++++-----------
Mexamples/first/main.go | 28++++++++++++++--------------
Mexamples/gdbm/main.go | 14+++++++-------
Mexamples/http/main.go | 44++++++++++++++++++++++----------------------
Mexamples/intro/main.go | 20++++++++++----------
Mexamples/languages/main.go | 24++++++++++++------------
Mexamples/longmenu/main.go | 7++++---
Mexamples/pincheck/main.go | 18+++++++++---------
Mexamples/preprocessor/main.go | 13++++++-------
Mexamples/profile/main.go | 22+++++++++++-----------
Mexamples/quit/main.go | 4++--
Mexamples/reuse/main.go | 8++++----
Mexamples/session/main.go | 16++++++++--------
Mexamples/state/main.go | 19+++++++++----------
Mexamples/state_passive/main.go | 16++++++++--------
Mexamples/static/main.go | 11+++++------
Mexamples/validate/main.go | 14+++++++-------
Minternal/resourcetest/util.go | 22+++++++++++-----------
Minternal/resourcetest/util_test.go | 1-
Mlang/lang.go | 4++--
Mlang/lang_test.go | 2+-
Mlogging/debug.go | 1+
Mlogging/default.go | 1+
Mlogging/error.go | 1+
Mlogging/info.go | 1+
Mlogging/logging.go | 13++++++-------
Mlogging/trace.go | 1+
Mlogging/vanilla.go | 6+++---
Mlogging/vanilla_test.go | 2+-
Mlogging/warn.go | 1+
Mpersist/fs_test.go | 4++--
Mpersist/persist.go | 37++++++++++++++++++-------------------
Mpersist/persist_test.go | 12++++++------
Mrender/menu.go | 76++++++++++++++++++++++++++++++++++++++--------------------------------------
Mrender/page.go | 56++++++++++++++++++++++++++++----------------------------
Mrender/page_test.go | 2--
Mrender/size.go | 38+++++++++++++++++++-------------------
Mrender/size_test.go | 21+++++++++------------
Mrender/split.go | 15++++++++-------
Mrender/split_test.go | 8++++----
Mresource/db.go | 40++++++++++++++++++++--------------------
Mresource/db_test.go | 2+-
Mresource/gettext.go | 24++++++++++++------------
Mresource/gettext_test.go | 3+--
Mresource/resource.go | 37++++++++++++++++++++-----------------
Mresource/resource_test.go | 18++++++++----------
Mstate/debug.go | 12++++++------
Mstate/debug_test.go | 3+--
Mstate/flag.go | 4++--
Mstate/state.go | 109+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mstate/state_test.go | 8++++----
Mtestdata/testdata.go | 11+++++------
Mtestdata/testdata_legacy.go | 3+--
Atestdata/testlocale/eng/x-vise.po | 9+++++++++
Atestdata/testlocale/eng/x-vise_menu.po | 14++++++++++++++
Atestdata/testlocale/nor/default.po | 9+++++++++
Atestdata/testlocale/nor/x-vise.po | 9+++++++++
Mvm/debug.go | 28++++++++++++++--------------
Mvm/debug_test.go | 17++++++++---------
Mvm/input.go | 14+++++++-------
Mvm/input_test.go | 2+-
Mvm/opcodes.go | 77++++++++++++++++++++++++++++++++++++++---------------------------------------
Mvm/runner.go | 122++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mvm/runner_test.go | 39+++++++++++++++++++--------------------
Mvm/vm.go | 21+++++++++++----------
Mvm/vm_test.go | 2+-
105 files changed, 1129 insertions(+), 1114 deletions(-)

diff --git a/asm/asm.go b/asm/asm.go @@ -16,7 +16,6 @@ import ( "git.defalsify.org/vise.git/vm" ) - // Asm assembles bytecode from the vise assembly mini-language. // // TODO: Conceal from outside use @@ -28,11 +27,11 @@ type Asm struct { // // TODO: Conceal from outside use type Arg struct { - Sym *string `(@Sym Whitespace?)?` - Size *uint32 `(@Size Whitespace?)?` - Flag *uint8 `(@Size Whitespace?)?` + Sym *string `(@Sym Whitespace?)?` + Size *uint32 `(@Size Whitespace?)?` + Flag *uint8 `(@Size Whitespace?)?` Selector *string `(@Sym Whitespace?)?` - Desc *string `(@Sym Whitespace?)?` + Desc *string `(@Sym Whitespace?)?` //Desc *string `(Quote ((@Sym | @Size) @Whitespace?)+ Quote Whitespace?)?` } @@ -63,7 +62,6 @@ func parseTwoSym(b *bytes.Buffer, arg Arg) (int, error) { } } - n, err := writeSym(b, sym) rn += n if err != nil { @@ -82,7 +80,7 @@ func parseTwoSymReverse(b *bytes.Buffer, arg Arg) (int, error) { var rn int sym := *arg.Selector - selector := *arg.Sym + selector := *arg.Sym n, err := writeSym(b, selector) rn += n if err != nil { @@ -163,12 +161,12 @@ func parseOne(op vm.Opcode, instruction *Instruction, w io.Writer) (int, error) a := instruction.OpArg var n_buf int var n_out int - + b := bytes.NewBuffer(nil) n, err := writeOpcode(b, op) n_buf += n - if err != nil { + if err != nil { return n_out, err } @@ -259,8 +257,8 @@ func (a Arg) String() string { // // TODO: Conceal from outside use type Instruction struct { - OpCode string `@Ident` - OpArg Arg `(Whitespace @@)?` + OpCode string `@Ident` + OpArg Arg `(Whitespace @@)?` Comment string `Comment? EOL` } @@ -287,7 +285,7 @@ var ( func numSize(n uint32) int { v := math.Log2(float64(n)) - return int((v / 8) + 1) + return int((v / 8) + 1) } func writeOpcode(w *bytes.Buffer, op vm.Opcode) (int, error) { @@ -317,14 +315,14 @@ func writeSize(w *bytes.Buffer, n uint32) (int, error) { } w.Write([]byte{byte(sz)}) binary.BigEndian.PutUint32(bn[:], n) - c := 4-sz + c := 4 - sz return w.Write(bn[c:]) } // Batcher handles assembly commands that generates multiple instructions, such as menu navigation commands. type Batcher struct { menuProcessor MenuProcessor - inMenu bool + inMenu bool } // NewBatcher creates a new Batcher objcet. @@ -335,7 +333,7 @@ func NewBatcher(mp MenuProcessor) Batcher { } // MenuExit generates the instructions for the batch and writes them to the given io.Writer. -func(bt *Batcher) MenuExit(w io.Writer) (int, error) { +func (bt *Batcher) MenuExit(w io.Writer) (int, error) { if !bt.inMenu { return 0, nil } @@ -345,7 +343,7 @@ func(bt *Batcher) MenuExit(w io.Writer) (int, error) { } // MenuAdd adds a new menu instruction to the batcher. -func(bt *Batcher) MenuAdd(w io.Writer, code string, arg Arg) (int, error) { +func (bt *Batcher) MenuAdd(w io.Writer, code string, arg Arg) (int, error) { bt.inMenu = true var selector string var sym string @@ -370,7 +368,7 @@ func(bt *Batcher) MenuAdd(w io.Writer, code string, arg Arg) (int, error) { } // Exit is a synonym for MenuExit -func(bt *Batcher) Exit(w io.Writer) (int, error) { +func (bt *Batcher) Exit(w io.Writer) (int, error) { return bt.MenuExit(w) } @@ -382,9 +380,7 @@ func Parse(s string, w io.Writer) (int, error) { return 0, err } - batch := Batcher{ - - } + batch := Batcher{} var rn int for _, v := range ast.Instructions { diff --git a/asm/asm_test.go b/asm/asm_test.go @@ -15,7 +15,7 @@ func TestParserRoute(t *testing.T) { Parse(s, b) expect := vm.NewLine(nil, vm.HALT, nil, nil, nil) if !bytes.Equal(b.Bytes(), expect) { - log.Fatalf("expected:\n\t%x\ngot:\n\t%x\n", expect, b) + log.Fatalf("expected:\n\t%x\ngot:\n\t%x\n", expect, b) } b = bytes.NewBuffer(nil) @@ -31,7 +31,7 @@ func TestParserRoute(t *testing.T) { Parse(s, b) expect = vm.NewLine(nil, vm.MAP, []string{"tinkywinky"}, nil, nil) if !bytes.Equal(b.Bytes(), expect) { - log.Fatalf("expected:\n\t%x\ngot:\n\t%x\n", expect, b) + log.Fatalf("expected:\n\t%x\ngot:\n\t%x\n", expect, b) } b = bytes.NewBuffer(nil) @@ -39,7 +39,7 @@ func TestParserRoute(t *testing.T) { Parse(s, b) expect = vm.NewLine(nil, vm.MOVE, []string{"dipsy"}, nil, nil) if !bytes.Equal(b.Bytes(), expect) { - log.Fatalf("expected:\n\t%x\ngot:\n\t%x\n", expect, b) + log.Fatalf("expected:\n\t%x\ngot:\n\t%x\n", expect, b) } b = bytes.NewBuffer(nil) @@ -415,7 +415,7 @@ func TestParserWriteMultiple(t *testing.T) { if n != n_expect { t.Fatalf("expected total %v bytes output, got %v", n_expect, n) } - + rb := r.Bytes() if !bytes.Equal(rb, r_expect) { t.Fatalf("expected result:\n\t%v, got:\n\t%x", r_expect_hex, rb) @@ -429,9 +429,9 @@ func TestParserWriteMultiple(t *testing.T) { func TestParserCapQuote(t *testing.T) { t.Skip("please fix mysterious ignore of initial cap in display sym match") - b := vm.NewLine(nil, vm.MOUT, []string{"a", "foo"}, nil, nil) - b = vm.NewLine(b, vm.MOUT, []string{"b", "Bar"}, nil, nil) - b = vm.NewLine(b, vm.MOUT, []string{"c", "baz"}, nil, nil) + b := vm.NewLine(nil, vm.MOUT, []string{"a", "foo"}, nil, nil) + b = vm.NewLine(b, vm.MOUT, []string{"b", "Bar"}, nil, nil) + b = vm.NewLine(b, vm.MOUT, []string{"c", "baz"}, nil, nil) b = vm.NewLine(b, vm.MSINK, nil, nil, nil) ph := vm.NewParseHandler().WithDefaultHandlers() s, err := ph.ToString(b) diff --git a/asm/flag.go b/asm/flag.go @@ -13,21 +13,21 @@ import ( // FlagParser is used to resolve flag strings to corresponding // flag index integer values. type FlagParser struct { - flag map[string]string + flag map[string]string flagDescription map[uint32]string - hi uint32 - debug bool + hi uint32 + debug bool } // NewFlagParser creates a new FlagParser func NewFlagParser() *FlagParser { return &FlagParser{ - flag: make(map[string]string), + flag: make(map[string]string), flagDescription: make(map[uint32]string), } } -func(pp *FlagParser) WithDebug() *FlagParser { +func (pp *FlagParser) WithDebug() *FlagParser { pp.debug = true return pp } @@ -36,7 +36,7 @@ func(pp *FlagParser) WithDebug() *FlagParser { // as a numeric string. // // If flag string has not been registered, an error is returned. -func(pp *FlagParser) GetAsString(key string) (string, error) { +func (pp *FlagParser) GetAsString(key string) (string, error) { v, ok := pp.flag[key] if !ok { return "", fmt.Errorf("no flag registered under key: %s", key) @@ -48,7 +48,7 @@ func(pp *FlagParser) GetAsString(key string) (string, error) { // flag string // // If flag string has not been registered, an error is returned. -func(pp *FlagParser) GetFlag(key string) (uint32, error) { +func (pp *FlagParser) GetFlag(key string) (uint32, error) { v, err := pp.GetAsString(key) if err != nil { return 0, err @@ -61,7 +61,7 @@ func(pp *FlagParser) GetFlag(key string) (uint32, error) { // if available. // // If no description has been provided, an error is returned. -func(pp *FlagParser) GetDescription(idx uint32) (string, error) { +func (pp *FlagParser) GetDescription(idx uint32) (string, error) { v, ok := pp.flagDescription[idx] if !ok { return "", fmt.Errorf("no description for flag idx: %v", idx) @@ -70,20 +70,20 @@ func(pp *FlagParser) GetDescription(idx uint32) (string, error) { } // Last returns the highest registered flag index value -func(pp *FlagParser) Last() uint32 { - return pp.hi +func (pp *FlagParser) Last() uint32 { + return pp.hi } // Load parses a Comma Seperated Value file under the given filepath // to provide mappings between flag strings and flag indices. // // The expected format is: -// +// // Field 1: The literal string "flag" // Field 2: Flag string // Field 3: Flag index // Field 4: Flag description (optional) -func(pp *FlagParser) Load(fp string) (int, error) { +func (pp *FlagParser) Load(fp string) (int, error) { var i int f, err := os.Open(fp) if err != nil { @@ -116,8 +116,8 @@ func(pp *FlagParser) Load(fp string) (int, error) { if fl > pp.hi { pp.hi = fl } - - if (len(v) > 3) { + + if len(v) > 3 { pp.flagDescription[uint32(fl)] = v[3] logg.Debugf("added flag translation", "from", v[1], "to", v[2], "description", v[3]) } else { @@ -127,7 +127,7 @@ func(pp *FlagParser) Load(fp string) (int, error) { state.FlagDebugger.Register(fl, v[2]) } } - } + } return i, nil } diff --git a/asm/menu.go b/asm/menu.go @@ -10,35 +10,35 @@ import ( type BatchCode uint16 const ( - _MENU_OFFSET = 256 - _MENU_DOWN = _MENU_OFFSET - _MENU_UP = _MENU_OFFSET + 1 - _MENU_NEXT = _MENU_OFFSET + 2 + _MENU_OFFSET = 256 + _MENU_DOWN = _MENU_OFFSET + _MENU_UP = _MENU_OFFSET + 1 + _MENU_NEXT = _MENU_OFFSET + 2 _MENU_PREVIOUS = _MENU_OFFSET + 3 ) var ( batchCode = map[string]BatchCode{ - "DOWN": _MENU_DOWN, - "UP": _MENU_UP, - "NEXT": _MENU_NEXT, + "DOWN": _MENU_DOWN, + "UP": _MENU_UP, + "NEXT": _MENU_NEXT, "PREVIOUS": _MENU_PREVIOUS, } ) type menuItem struct { - code BatchCode - choice string + code BatchCode + choice string display string - target string + target string } // MenuProcessor handles code lines with BatchCode quasi-opcodes that control menu generation. -// +// // It creates vm instructions for display of menu and handling of input on either size of a vm.HALT instruction. type MenuProcessor struct { items []menuItem - size uint32 + size uint32 } // NewMenuProcessor creates a new MenuProcessor object. @@ -49,7 +49,7 @@ func NewMenuProcessor() MenuProcessor { // Add a menu batch instruction to be processed. // // Instructions will be rendered in the order in which they have been added. -func(mp *MenuProcessor) Add(bop string, choice string, display string, target string) error { +func (mp *MenuProcessor) Add(bop string, choice string, display string, target string) error { bopCode := batchCode[bop] if bopCode == 0 { return fmt.Errorf("unknown menu instruction: %v", bop) @@ -58,10 +58,10 @@ func(mp *MenuProcessor) Add(bop string, choice string, display string, target st return fmt.Errorf("target is only valid for DOWN") } m := menuItem{ - code: bopCode, - choice: choice, + code: bopCode, + choice: choice, display: display, - target: target, + target: target, } mp.items = append(mp.items, m) return nil diff --git a/asm/menu_test.go b/asm/menu_test.go @@ -6,7 +6,6 @@ import ( "git.defalsify.org/vise.git/vm" ) - func TestMenuInterpreter(t *testing.T) { m := NewMenuProcessor() ph := vm.NewParseHandler().WithDefaultHandlers() @@ -49,4 +48,3 @@ INCMP _ 99 t.Errorf("expected:\n\t%v\ngot:\n\t%v\n", expect, r) } } - diff --git a/cache/cache.go b/cache/cache.go @@ -17,8 +17,8 @@ type Cache struct { // Size limits for all loaded symbols. Sizes map[string]uint16 // Last inserted value (regardless of scope) - LastValue string - invalid bool + LastValue string + invalid bool } // NewCache creates a new ready-to-use Cache object @@ -31,23 +31,23 @@ func NewCache() *Cache { } // Invalidate implements the Memory interface. -func(ca *Cache) Invalidate() { +func (ca *Cache) Invalidate() { ca.invalid = true } // Invalid implements the Memory interface. -func(ca *Cache) Invalid() bool { +func (ca *Cache) Invalid() bool { return ca.invalid } // WithCacheSize is a chainable method that applies a cumulative cache size limitation for all cached items. -func(ca *Cache) WithCacheSize(cacheSize uint32) *Cache { +func (ca *Cache) WithCacheSize(cacheSize uint32) *Cache { ca.CacheSize = cacheSize return ca } // Add implements the Memory interface. -func(ca *Cache) Add(key string, value string, sizeLimit uint16) error { +func (ca *Cache) Add(key string, value string, sizeLimit uint16) error { if sizeLimit > 0 { l := uint16(len(value)) if l > sizeLimit { @@ -66,7 +66,7 @@ func(ca *Cache) Add(key string, value string, sizeLimit uint16) error { if len(value) > 0 { sz = ca.checkCapacity(value) if sz == 0 { - return fmt.Errorf("Cache capacity exceeded %v of %v", ca.CacheUseSize + sz, ca.CacheSize) + return fmt.Errorf("Cache capacity exceeded %v of %v", ca.CacheUseSize+sz, ca.CacheSize) } } logg.Debugf("Cache add", "key", key, "size", sz, "limit", sizeLimit) @@ -79,7 +79,7 @@ func(ca *Cache) Add(key string, value string, sizeLimit uint16) error { } // ReservedSize implements the Memory interface. -func(ca *Cache) ReservedSize(key string) (uint16, error) { +func (ca *Cache) ReservedSize(key string) (uint16, error) { v, ok := ca.Sizes[key] if !ok { return 0, fmt.Errorf("unknown symbol: %s", key) @@ -88,7 +88,7 @@ func(ca *Cache) ReservedSize(key string) (uint16, error) { } // Update implements the Memory interface. -func(ca *Cache) Update(key string, value string) error { +func (ca *Cache) Update(key string, value string) error { sizeLimit := ca.Sizes[key] if ca.Sizes[key] > 0 { l := uint16(len(value)) @@ -109,7 +109,7 @@ func(ca *Cache) Update(key string, value string) error { baseUseSize := ca.CacheUseSize ca.Cache[checkFrame][key] = r ca.CacheUseSize += l - return fmt.Errorf("Cache capacity exceeded %v of %v", baseUseSize + sz, ca.CacheSize) + return fmt.Errorf("Cache capacity exceeded %v of %v", baseUseSize+sz, ca.CacheSize) } ca.Cache[checkFrame][key] = value ca.CacheUseSize += uint32(len(value)) @@ -117,7 +117,7 @@ func(ca *Cache) Update(key string, value string) error { } // Get implements the Memory interface. -func(ca *Cache) Get(key string) (string, error) { +func (ca *Cache) Get(key string) (string, error) { i := ca.frameOf(key) if i == -1 { return "", fmt.Errorf("key '%s' not found in any frame", key) @@ -130,7 +130,7 @@ func(ca *Cache) Get(key string) (string, error) { } // Reset implements the Memory interface. -func(ca *Cache) Reset() { +func (ca *Cache) Reset() { var v string if len(ca.Cache) == 0 { return @@ -172,14 +172,14 @@ func (ca *Cache) Pop() error { } // Check returns true if a key already exists in the cache. -func(ca *Cache) Check(key string) bool { +func (ca *Cache) Check(key string) bool { return ca.frameOf(key) == -1 } // Last implements the Memory interface. // // TODO: needs to be invalidated when out of scope -func(ca *Cache) Last() string { +func (ca *Cache) Last() string { s := ca.LastValue ca.LastValue = "" return s @@ -187,19 +187,19 @@ func(ca *Cache) Last() string { // bytes that will be added to cache use size for string // returns 0 if capacity would be exceeded -func(ca *Cache) checkCapacity(v string) uint32 { +func (ca *Cache) checkCapacity(v string) uint32 { sz := uint32(len(v)) if ca.CacheSize == 0 { return sz } - if ca.CacheUseSize + sz > ca.CacheSize { - return 0 + if ca.CacheUseSize+sz > ca.CacheSize { + return 0 } return sz } // return 0-indexed frame number where key is defined. -1 if not defined -func(ca *Cache) frameOf(key string) int { +func (ca *Cache) frameOf(key string) int { for i, m := range ca.Cache { for k, _ := range m { if k == key { @@ -211,12 +211,12 @@ func(ca *Cache) frameOf(key string) int { } // Levels implements the Memory interface. -func(ca *Cache) Levels() uint32 { +func (ca *Cache) Levels() uint32 { return uint32(len(ca.Cache)) } // Keys implements the Memory interface. -func(ca *Cache) Keys(level uint32) []string { +func (ca *Cache) Keys(level uint32) []string { var r []string for k := range ca.Cache[level] { r = append(r, k) diff --git a/cache/cache_test.go b/cache/cache_test.go @@ -1,8 +1,8 @@ package cache import ( - "testing" "slices" + "testing" ) func TestNewCache(t *testing.T) { @@ -141,7 +141,7 @@ func TestStateDownUp(t *testing.T) { } l = len(ca.Cache) if l != 1 { - t.Fatalf("expected cache length 1, got %d", l) + t.Fatalf("expected cache length 1, got %d", l) } } diff --git a/db/db.go b/db/db.go @@ -37,7 +37,7 @@ const ( // Db abstracts all data storage and retrieval as a key-value store type Db interface { // Connect prepares the storage backend for use. - // + // // If called more than once, consecutive calls should be ignored. Connect(ctx context.Context, connStr string) error // MUST be called before termination after a Connect(). @@ -47,9 +47,9 @@ type Db interface { // Errors if the key does not exist, or if the retrieval otherwise fails. Get(ctx context.Context, key []byte) ([]byte, error) // Put stores a value under a key. - // + // // Any existing value will be replaced. - // + // // Errors if the value could not be stored. Put(ctx context.Context, key []byte, val []byte) error // SetPrefix sets the storage context prefix to use for consecutive Get and Put operations. @@ -84,7 +84,7 @@ type Db interface { } type LookupKey struct { - Default []byte + Default []byte Translation []byte } @@ -95,8 +95,8 @@ type LookupKey struct { // If language is not nil, and the context does not support language, the language value will silently will be ignored. func ToDbKey(typ uint8, b []byte, l *lang.Language) []byte { k := []byte{typ} - if l != nil && l.Code != "" && typ & (DATATYPE_MENU | DATATYPE_TEMPLATE | DATATYPE_STATICLOAD) > 0 { - b = append(b, []byte("_" + l.Code)...) + if l != nil && l.Code != "" && typ&(DATATYPE_MENU|DATATYPE_TEMPLATE|DATATYPE_STATICLOAD) > 0 { + b = append(b, []byte("_"+l.Code)...) //s += "_" + l.Code } return append(k, b...) @@ -108,7 +108,7 @@ func FromDbKey(b []byte) ([]byte, error) { } typ := b[0] b = b[1:] - if typ & (DATATYPE_MENU | DATATYPE_TEMPLATE | DATATYPE_STATICLOAD) > 0 { + if typ&(DATATYPE_MENU|DATATYPE_TEMPLATE|DATATYPE_STATICLOAD) > 0 { if len(b) > 6 { if b[len(b)-4] == '_' { b = b[:len(b)-4] @@ -120,11 +120,11 @@ func FromDbKey(b []byte) ([]byte, error) { // baseDb is a base class for all Db implementations. type baseDb struct { - pfx uint8 - sid []byte - lock uint8 - lang *lang.Language - seal bool + pfx uint8 + sid []byte + lock uint8 + lang *lang.Language + seal bool connStr string } @@ -145,29 +145,30 @@ func NewDbBase() *DbBase { } // ensures default locking of read-only entries -func(db *baseDb) defaultLock() { +func (db *baseDb) defaultLock() { db.lock |= safeLock } -func(bd *DbBase) Safe() bool { - return bd.baseDb.lock & safeLock == safeLock +func (bd *DbBase) Safe() bool { + return bd.baseDb.lock&safeLock == safeLock } -func(bd *DbBase) Prefix() uint8 { +func (bd *DbBase) Prefix() uint8 { return bd.baseDb.pfx } // SetPrefix implements the Db interface. -func(bd *DbBase) SetPrefix(pfx uint8) { +func (bd *DbBase) SetPrefix(pfx uint8) { bd.baseDb.pfx = pfx } // SetLanguage implements the Db interface. -func(bd *DbBase) SetLanguage(ln *lang.Language) { +func (bd *DbBase) SetLanguage(ln *lang.Language) { bd.baseDb.lang = ln } + // SetSession implements the Db interface. -func(bd *DbBase) SetSession(sessionId string) { +func (bd *DbBase) SetSession(sessionId string) { if sessionId == "" { bd.baseDb.sid = []byte{} } else { @@ -176,7 +177,7 @@ func(bd *DbBase) SetSession(sessionId string) { } // SetLock implements the Db interface. -func(bd *DbBase) SetLock(pfx uint8, lock bool) error { +func (bd *DbBase) SetLock(pfx uint8, lock bool) error { if bd.baseDb.seal { return errors.New("SetLock on sealed db") } @@ -186,7 +187,7 @@ func(bd *DbBase) SetLock(pfx uint8, lock bool) error { return nil } if lock { - bd.baseDb.lock |= pfx + bd.baseDb.lock |= pfx } else { bd.baseDb.lock &= ^pfx } @@ -194,13 +195,13 @@ func(bd *DbBase) SetLock(pfx uint8, lock bool) error { } // CheckPut returns true if the current selected data type can be written to. -func(bd *DbBase) CheckPut() bool { - return bd.baseDb.pfx & bd.baseDb.lock == 0 +func (bd *DbBase) CheckPut() bool { + return bd.baseDb.pfx&bd.baseDb.lock == 0 } func (bd *DbBase) ToSessionKey(pfx uint8, key []byte) []byte { var b []byte - if (pfx > datatype_sessioned_threshold) { + if pfx > datatype_sessioned_threshold { b = append([]byte(bd.sid), key...) } else { b = key @@ -208,7 +209,7 @@ func (bd *DbBase) ToSessionKey(pfx uint8, key []byte) []byte { return b } -func(bd *DbBase) FromSessionKey(key []byte) ([]byte, error) { +func (bd *DbBase) FromSessionKey(key []byte) ([]byte, error) { if len(bd.baseDb.sid) == 0 { return key, nil } @@ -221,7 +222,7 @@ func(bd *DbBase) FromSessionKey(key []byte) ([]byte, error) { // ToKey creates a DbKey within the current session context. // // TODO: hard to read, clean up -func(bd *DbBase) ToKey(ctx context.Context, key []byte) (LookupKey, error) { +func (bd *DbBase) ToKey(ctx context.Context, key []byte) (LookupKey, error) { var ln *lang.Language var lk LookupKey //var b []byte @@ -232,7 +233,7 @@ func(bd *DbBase) ToKey(ctx context.Context, key []byte) (LookupKey, error) { //b := ToSessionKey(db.pfx, db.sid, key) b := bd.ToSessionKey(db.pfx, key) lk.Default = ToDbKey(db.pfx, b, nil) - if db.pfx & (DATATYPE_MENU | DATATYPE_TEMPLATE | DATATYPE_STATICLOAD) > 0 { + if db.pfx&(DATATYPE_MENU|DATATYPE_TEMPLATE|DATATYPE_STATICLOAD) > 0 { if db.lang != nil { ln = db.lang } else { @@ -250,7 +251,7 @@ func(bd *DbBase) ToKey(ctx context.Context, key []byte) (LookupKey, error) { return lk, nil } -func(bd *DbBase) DecodeKey(ctx context.Context, key []byte) ([]byte, error) { +func (bd *DbBase) DecodeKey(ctx context.Context, key []byte) ([]byte, error) { var err error oldKey := key key, err = FromDbKey(key) diff --git a/db/dbtest/testutil.go b/db/dbtest/testutil.go @@ -9,19 +9,18 @@ import ( "path" "testing" - "git.defalsify.org/vise.git/lang" "git.defalsify.org/vise.git/db" + "git.defalsify.org/vise.git/lang" ) - type testCase struct { typ uint8 - s string - k []byte - v []byte - x []byte - l *lang.Language - t string + s string + k []byte + v []byte + x []byte + l *lang.Language + t string } type testVector struct { @@ -42,47 +41,47 @@ var ( generateSessionLanguageTestVectors, } dataTypeDebug = map[uint8]string{ - db.DATATYPE_BIN: "bytecode", - db.DATATYPE_TEMPLATE: "template", - db.DATATYPE_MENU: "menu", + db.DATATYPE_BIN: "bytecode", + db.DATATYPE_TEMPLATE: "template", + db.DATATYPE_MENU: "menu", db.DATATYPE_STATICLOAD: "staticload", - db.DATATYPE_STATE: "state", - db.DATATYPE_USERDATA: "udata", + db.DATATYPE_STATE: "state", + db.DATATYPE_USERDATA: "udata", } ) -func(tc *testCase) Key() []byte { +func (tc *testCase) Key() []byte { return tc.k } -func(tc *testCase) Val() []byte { +func (tc *testCase) Val() []byte { return tc.v } -func(tc *testCase) Typ() uint8 { +func (tc *testCase) Typ() uint8 { return tc.typ } -func(tc *testCase) Session() string { +func (tc *testCase) Session() string { return tc.s } -func(tc *testCase) Lang() string { +func (tc *testCase) Lang() string { if tc.l == nil { return "" } return tc.l.Code } -func(tc *testCase) Expect() []byte { +func (tc *testCase) Expect() []byte { return tc.x } -func(tc *testCase) Label() string { +func (tc *testCase) Label() string { return tc.t } -func(tv *testVector) add(typ uint8, k string, v string, session string, expect string, language string) { +func (tv *testVector) add(typ uint8, k string, v string, session string, expect string, language string) { var b []byte var x []byte var err error @@ -101,7 +100,7 @@ func(tv *testVector) add(typ uint8, k string, v string, session string, expect s b = []byte(v) x = []byte(expect) } - + if language != "" { lo, err := lang.LanguageFromCode(language) if err != nil { @@ -115,14 +114,14 @@ func(tv *testVector) add(typ uint8, k string, v string, session string, expect s if ln != nil { s = path.Join(s, language) } - o := &testCase { + o := &testCase{ typ: typ, - k: []byte(k), - v: b, - s: session, - x: x, - l: ln, - t: s, + k: []byte(k), + v: b, + s: session, + x: x, + l: ln, + t: s, } tv.c[s] = o i := len(tv.v) @@ -130,7 +129,7 @@ func(tv *testVector) add(typ uint8, k string, v string, session string, expect s logg.Tracef("add testcase", "i", i, "s", s, "k", o.k) } -func(tv *testVector) next() (int, *testCase) { +func (tv *testVector) next() (int, *testCase) { i := tv.i if i == len(tv.v) { return -1, nil @@ -139,11 +138,11 @@ func(tv *testVector) next() (int, *testCase) { return i, tv.c[tv.v[i]] } -func(tv *testVector) rewind() { +func (tv *testVector) rewind() { tv.i = 0 } -func(tv *testVector) put(ctx context.Context, db db.Db) error { +func (tv *testVector) put(ctx context.Context, db db.Db) error { var i int var tc *testCase defer tv.rewind() @@ -174,7 +173,7 @@ func(tv *testVector) put(ctx context.Context, db db.Db) error { return nil } -func(tv *testVector) label() string { +func (tv *testVector) label() string { return tv.s } @@ -292,7 +291,6 @@ func runTest(t *testing.T, ctx context.Context, db db.Db, vs testVector) error { } - func runTests(t *testing.T, ctx context.Context, db db.Db) error { for _, fn := range tests { err := runTest(t, ctx, db, fn()) @@ -300,7 +298,7 @@ func runTests(t *testing.T, ctx context.Context, db db.Db) error { return err } } - + return nil } diff --git a/db/dump.go b/db/dump.go @@ -8,10 +8,10 @@ type DumperFunc func(ctx context.Context) ([]byte, []byte) type CloseFunc func() error type Dumper struct { - fn DumperFunc - cfn CloseFunc - k []byte - v []byte + fn DumperFunc + cfn CloseFunc + k []byte + v []byte nexted bool } @@ -21,7 +21,7 @@ func NewDumper(fn DumperFunc) *Dumper { } } -func(d *Dumper) WithFirst(k []byte, v []byte) *Dumper { +func (d *Dumper) WithFirst(k []byte, v []byte) *Dumper { if d.nexted { panic("already started") } @@ -31,12 +31,12 @@ func(d *Dumper) WithFirst(k []byte, v []byte) *Dumper { return d } -func(d *Dumper) WithClose(fn func() error) *Dumper { +func (d *Dumper) WithClose(fn func() error) *Dumper { d.cfn = fn return d } -func(d *Dumper) Next(ctx context.Context) ([]byte, []byte) { +func (d *Dumper) Next(ctx context.Context) ([]byte, []byte) { d.nexted = true k := d.k v := d.v @@ -48,7 +48,7 @@ func(d *Dumper) Next(ctx context.Context) ([]byte, []byte) { return k, v } -func(d *Dumper) Close() error { +func (d *Dumper) Close() error { if d.cfn != nil { return d.cfn() } diff --git a/db/error.go b/db/error.go @@ -11,8 +11,8 @@ const ( ) var ( - ErrTxExist = errors.New("tx already exists") - ErrNoTx = errors.New("tx does not exist") + ErrTxExist = errors.New("tx already exists") + ErrNoTx = errors.New("tx does not exist") ErrSingleTx = errors.New("not a multi-instruction tx") ) @@ -27,7 +27,7 @@ func NewErrNotFound(k []byte) error { } // Error implements Error. -func(e ErrNotFound) Error() string { +func (e ErrNotFound) Error() string { return fmt.Sprintf("%s%x", notFoundPrefix, e.k) } diff --git a/db/fs/dump.go b/db/fs/dump.go @@ -8,7 +8,7 @@ import ( "git.defalsify.org/vise.git/db" ) -func(fdb *fsDb) nextElement() []byte { +func (fdb *fsDb) nextElement() []byte { v := fdb.elements[0] fdb.elements = fdb.elements[1:] s := v.Name() @@ -17,7 +17,7 @@ func(fdb *fsDb) nextElement() []byte { return k } -func(fdb *fsDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { +func (fdb *fsDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { var err error key = append([]byte{fdb.Prefix()}, key...) fdb.matchPrefix = key @@ -61,7 +61,7 @@ func(fdb *fsDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { return nil, db.NewErrNotFound(key) } -func(fdb *fsDb) dumpFunc(ctx context.Context) ([]byte, []byte) { +func (fdb *fsDb) dumpFunc(ctx context.Context) ([]byte, []byte) { if len(fdb.elements) == 0 { return nil, nil } diff --git a/db/fs/fs.go b/db/fs/fs.go @@ -2,8 +2,8 @@ package fs import ( "context" - "errors" "encoding/base64" + "errors" "fmt" "io/fs" "io/ioutil" @@ -15,20 +15,19 @@ import ( // holds string (filepath) versions of LookupKey type fsLookupKey struct { - Default string + Default string Translation string } // pure filesystem backend implementation if the Db interface. type fsDb struct { *db.DbBase - dir string - elements []os.DirEntry + dir string + elements []os.DirEntry matchPrefix []byte - binary bool + binary bool } - // NewFsDb creates a filesystem backed Db implementation. func NewFsDb() *fsDb { db := &fsDb{ @@ -37,18 +36,18 @@ func NewFsDb() *fsDb { return db } -func(fdb *fsDb) WithBinary() *fsDb { +func (fdb *fsDb) WithBinary() *fsDb { fdb.binary = true return fdb } // String implements the string interface. -func(fdb *fsDb) String() string { +func (fdb *fsDb) String() string { return "fsdb: " + fdb.dir } // Connect implements the Db interface. -func(fdb *fsDb) Connect(ctx context.Context, connStr string) error { +func (fdb *fsDb) Connect(ctx context.Context, connStr string) error { if fdb.dir != "" { logg.WarnCtxf(ctx, "already connected", "conn", fdb.dir) return nil @@ -64,7 +63,7 @@ func(fdb *fsDb) Connect(ctx context.Context, connStr string) error { // ToKey overrides the BaseDb implementation, creating a base64 string // if binary keys have been enabled -func(fdb *fsDb) ToKey(ctx context.Context, key []byte) (db.LookupKey, error) { +func (fdb *fsDb) ToKey(ctx context.Context, key []byte) (db.LookupKey, error) { if fdb.binary { s := base64.StdEncoding.EncodeToString(key) key = []byte(s) @@ -72,7 +71,7 @@ func(fdb *fsDb) ToKey(ctx context.Context, key []byte) (db.LookupKey, error) { return fdb.DbBase.ToKey(ctx, key) } -func(fdb *fsDb) DecodeKey(ctx context.Context, key []byte) ([]byte, error) { +func (fdb *fsDb) DecodeKey(ctx context.Context, key []byte) ([]byte, error) { key, err := fdb.DbBase.DecodeKey(ctx, key) if err != nil { return nil, err @@ -90,7 +89,7 @@ func(fdb *fsDb) DecodeKey(ctx context.Context, key []byte) ([]byte, error) { } // Get implements the Db interface. -func(fdb *fsDb) Get(ctx context.Context, key []byte) ([]byte, error) { +func (fdb *fsDb) Get(ctx context.Context, key []byte) ([]byte, error) { var f *os.File lk, err := fdb.ToKey(ctx, key) if err != nil { @@ -104,7 +103,7 @@ func(fdb *fsDb) Get(ctx context.Context, key []byte) ([]byte, error) { if err != nil { return nil, err } - for i, fp := range([]string{flk.Translation, flka.Translation, flk.Default, flka.Default}) { + for i, fp := range []string{flk.Translation, flka.Translation, flk.Default, flka.Default} { if fp == "" { logg.TraceCtxf(ctx, "fs get skip missing", "i", i) continue @@ -130,7 +129,7 @@ func(fdb *fsDb) Get(ctx context.Context, key []byte) ([]byte, error) { } // Put implements the Db interface. -func(fdb *fsDb) Put(ctx context.Context, key []byte, val []byte) error { +func (fdb *fsDb) Put(ctx context.Context, key []byte, val []byte) error { if !fdb.CheckPut() { return errors.New("unsafe put and safety set") } @@ -154,12 +153,12 @@ func(fdb *fsDb) Put(ctx context.Context, key []byte, val []byte) error { } // Close implements the Db interface. -func(fdb *fsDb) Close(ctx context.Context) error { +func (fdb *fsDb) Close(ctx context.Context) error { return nil } // create a key safe for the filesystem. -func(fdb *fsDb) pathFor(ctx context.Context, lk *db.LookupKey) (fsLookupKey, error) { +func (fdb *fsDb) pathFor(ctx context.Context, lk *db.LookupKey) (fsLookupKey, error) { var flk fsLookupKey lk.Default[0] += 0x30 flk.Default = path.Join(fdb.dir, string(lk.Default)) @@ -171,7 +170,7 @@ func(fdb *fsDb) pathFor(ctx context.Context, lk *db.LookupKey) (fsLookupKey, err } // create a key safe for the filesystem, matching legacy resource.FsResource name. -func(fdb *fsDb) altPathFor(ctx context.Context, lk *db.LookupKey) (fsLookupKey, error) { +func (fdb *fsDb) altPathFor(ctx context.Context, lk *db.LookupKey) (fsLookupKey, error) { var flk fsLookupKey fb := string(lk.Default[1:]) if fdb.Prefix() == db.DATATYPE_BIN { diff --git a/db/fs/fs_test.go b/db/fs/fs_test.go @@ -91,7 +91,7 @@ func TestPutGetFsAlt(t *testing.T) { if err != nil { t.Fatal(err) } - + v, err := store.Get(ctx, []byte("inky")) if err != nil { t.Fatal(err) diff --git a/db/gdbm/dump.go b/db/gdbm/dump.go @@ -6,18 +6,18 @@ import ( "errors" gdbm "github.com/graygnuorg/go-gdbm" - + "git.defalsify.org/vise.git/db" ) -func(gdb *gdbmDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { +func (gdb *gdbmDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { gdb.SetLanguage(nil) lk, err := gdb.ToKey(ctx, key) if err != nil { return nil, err } key = lk.Default - + gdb.it = gdb.conn.Iterator() for true { k, err := gdb.it() @@ -47,7 +47,7 @@ func(gdb *gdbmDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { return nil, db.NewErrNotFound(key) } -func(gdb *gdbmDb) dumpFunc(ctx context.Context) ([]byte, []byte) { +func (gdb *gdbmDb) dumpFunc(ctx context.Context) ([]byte, []byte) { var k []byte var match bool var err error diff --git a/db/gdbm/gdbm.go b/db/gdbm/gdbm.go @@ -14,11 +14,11 @@ import ( // gdbmDb is a gdbm backend implementation of the Db interface. type gdbmDb struct { *db.DbBase - conn *gdbm.Database + conn *gdbm.Database readOnly bool - prefix uint8 - it gdbm.DatabaseIterator - itBase []byte + prefix uint8 + it gdbm.DatabaseIterator + itBase []byte } // Creates a new gdbm backed Db implementation. @@ -36,13 +36,13 @@ func NewGdbmDb() *gdbmDb { // However, only one single write database. // // Readonly cannot be set when creating a new database. -func(gdb *gdbmDb) WithReadOnly() *gdbmDb { +func (gdb *gdbmDb) WithReadOnly() *gdbmDb { gdb.readOnly = true return gdb } // String implements the string interface. -func(gdb *gdbmDb) String() string { +func (gdb *gdbmDb) String() string { fn, err := gdb.conn.FileName() if err != nil { fn = "??" @@ -51,7 +51,7 @@ func(gdb *gdbmDb) String() string { } // Connect implements Db -func(gdb *gdbmDb) Connect(ctx context.Context, connStr string) error { +func (gdb *gdbmDb) Connect(ctx context.Context, connStr string) error { if gdb.conn != nil { logg.WarnCtxf(ctx, "already connected", "conn", gdb.conn) return nil @@ -59,7 +59,7 @@ func(gdb *gdbmDb) Connect(ctx context.Context, connStr string) error { var db *gdbm.Database cfg := gdbm.DatabaseConfig{ FileName: connStr, - Flags: gdbm.OF_NOLOCK | gdbm.OF_PREREAD, + Flags: gdbm.OF_NOLOCK | gdbm.OF_PREREAD, FileMode: 0600, } @@ -89,7 +89,7 @@ func(gdb *gdbmDb) Connect(ctx context.Context, connStr string) error { } // Put implements Db -func(gdb *gdbmDb) Put(ctx context.Context, key []byte, val []byte) error { +func (gdb *gdbmDb) Put(ctx context.Context, key []byte, val []byte) error { if !gdb.CheckPut() { return errors.New("unsafe put and safety set") } @@ -105,7 +105,7 @@ func(gdb *gdbmDb) Put(ctx context.Context, key []byte, val []byte) error { } // Get implements Db -func(gdb *gdbmDb) Get(ctx context.Context, key []byte) ([]byte, error) { +func (gdb *gdbmDb) Get(ctx context.Context, key []byte) ([]byte, error) { var v []byte lk, err := gdb.ToKey(ctx, key) if err != nil { @@ -133,7 +133,7 @@ func(gdb *gdbmDb) Get(ctx context.Context, key []byte) ([]byte, error) { } // Close implements Db -func(gdb *gdbmDb) Close(ctx context.Context) error { +func (gdb *gdbmDb) Close(ctx context.Context) error { logg.TraceCtxf(ctx, "closing gdbm", "path", gdb.conn) return gdb.conn.Close() } diff --git a/db/mem/dump.go b/db/mem/dump.go @@ -7,6 +7,6 @@ import ( "git.defalsify.org/vise.git/db" ) -func(mdb *memDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { +func (mdb *memDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { return nil, errors.New("unimplemented") } diff --git a/db/mem/mem.go b/db/mem/mem.go @@ -10,7 +10,7 @@ import ( // holds string (hex) versions of lookupKey type memLookupKey struct { - Default string + Default string Translation string } @@ -29,12 +29,12 @@ func NewMemDb() *memDb { } // String implements the string interface. -func(mdb *memDb) String() string { +func (mdb *memDb) String() string { return "memdb" } // Connect implements Db -func(mdb *memDb) Connect(ctx context.Context, connStr string) error { +func (mdb *memDb) Connect(ctx context.Context, connStr string) error { if mdb.store != nil { logg.WarnCtxf(ctx, "already connected") return nil @@ -44,7 +44,7 @@ func(mdb *memDb) Connect(ctx context.Context, connStr string) error { } // convert to a supported map key type -func(mdb *memDb) toHexKey(ctx context.Context, key []byte) (memLookupKey, error) { +func (mdb *memDb) toHexKey(ctx context.Context, key []byte) (memLookupKey, error) { var mk memLookupKey lk, err := mdb.ToKey(ctx, key) mk.Default = hex.EncodeToString(lk.Default) @@ -56,7 +56,7 @@ func(mdb *memDb) toHexKey(ctx context.Context, key []byte) (memLookupKey, error) } // Get implements Db -func(mdb *memDb) Get(ctx context.Context, key []byte) ([]byte, error) { +func (mdb *memDb) Get(ctx context.Context, key []byte) ([]byte, error) { var v []byte var ok bool mk, err := mdb.toHexKey(ctx, key) @@ -79,7 +79,7 @@ func(mdb *memDb) Get(ctx context.Context, key []byte) ([]byte, error) { } // Put implements Db -func(mdb *memDb) Put(ctx context.Context, key []byte, val []byte) error { +func (mdb *memDb) Put(ctx context.Context, key []byte, val []byte) error { var k string if !mdb.CheckPut() { return errors.New("unsafe put and safety set") @@ -99,6 +99,6 @@ func(mdb *memDb) Put(ctx context.Context, key []byte, val []byte) error { } // Close implements Db -func(mdb *memDb) Close(ctx context.Context) error { +func (mdb *memDb) Close(ctx context.Context) error { return nil } diff --git a/db/postgres/dump.go b/db/postgres/dump.go @@ -1,13 +1,13 @@ package postgres import ( - "fmt" "context" + "fmt" "git.defalsify.org/vise.git/db" ) -func(pdb *pgDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { +func (pdb *pgDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { tx, err := pdb.conn.BeginTx(ctx, defaultTxOptions) if err != nil { return nil, err @@ -48,7 +48,7 @@ func(pdb *pgDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) { return nil, db.NewErrNotFound(k) } -func(pdb *pgDb) dumpFunc(ctx context.Context) ([]byte, []byte) { +func (pdb *pgDb) dumpFunc(ctx context.Context) ([]byte, []byte) { var kk []byte var vv []byte if !pdb.it.Next() { @@ -68,7 +68,7 @@ func(pdb *pgDb) dumpFunc(ctx context.Context) ([]byte, []byte) { return k, vv } -func(pdb *pgDb) closeFunc() error { +func (pdb *pgDb) closeFunc() error { if pdb.it != nil { pdb.it.Close() pdb.it = nil diff --git a/db/postgres/dump_test.go b/db/postgres/dump_test.go @@ -5,9 +5,9 @@ import ( "context" "testing" - pgxmock "github.com/pashagolub/pgxmock/v4" - "github.com/jackc/pgx/v5/pgtype" "github.com/jackc/pgx/v5/pgconn" + "github.com/jackc/pgx/v5/pgtype" + pgxmock "github.com/pashagolub/pgxmock/v4" "git.defalsify.org/vise.git/db" ) @@ -26,35 +26,35 @@ func TestDumpPg(t *testing.T) { store.SetSession(ses) ctx := context.Background() -// store.SetPrefix(db.DATATYPE_USERDATA) -// err = store.Put(ctx, []byte("bar"), []byte("inky")) -// if err != nil { -// t.Fatal(err) -// } -// err = store.Put(ctx, []byte("foobar"), []byte("pinky")) -// if err != nil { -// t.Fatal(err) -// } -// err = store.Put(ctx, []byte("foobarbaz"), []byte("blinky")) -// if err != nil { -// t.Fatal(err) -// } -// err = store.Put(ctx, []byte("xyzzy"), []byte("clyde")) -// if err != nil { -// t.Fatal(err) -// } + // store.SetPrefix(db.DATATYPE_USERDATA) + // err = store.Put(ctx, []byte("bar"), []byte("inky")) + // if err != nil { + // t.Fatal(err) + // } + // err = store.Put(ctx, []byte("foobar"), []byte("pinky")) + // if err != nil { + // t.Fatal(err) + // } + // err = store.Put(ctx, []byte("foobarbaz"), []byte("blinky")) + // if err != nil { + // t.Fatal(err) + // } + // err = store.Put(ctx, []byte("xyzzy"), []byte("clyde")) + // if err != nil { + // t.Fatal(err) + // } typMap := pgtype.NewMap() k := []byte("xyzzy.foo") mockVfd := pgconn.FieldDescription{ - Name: "value", + Name: "value", DataTypeOID: pgtype.ByteaOID, - Format: typMap.FormatCodeForOID(pgtype.ByteaOID), + Format: typMap.FormatCodeForOID(pgtype.ByteaOID), } mockKfd := pgconn.FieldDescription{ - Name: "key", + Name: "key", DataTypeOID: pgtype.ByteaOID, - Format: typMap.FormatCodeForOID(pgtype.ByteaOID), + Format: typMap.FormatCodeForOID(pgtype.ByteaOID), } rows := pgxmock.NewRowsWithColumnDefinition(mockKfd, mockVfd) //rows = rows.AddRow([]byte("bar"), []byte("inky")) diff --git a/db/postgres/live_test.go b/db/postgres/live_test.go @@ -1,4 +1,5 @@ //go:build testlive + package postgres import ( @@ -34,7 +35,7 @@ func TestLivePutGetPg(t *testing.T) { store.SetSession(ses) ctx := context.Background() - dbi = store + dbi = store _ = dbi err := store.Connect(ctx, "postgres://vise:esiv@localhost:5432/visedb") diff --git a/db/postgres/pg.go b/db/postgres/pg.go @@ -5,8 +5,8 @@ import ( "errors" "fmt" - "github.com/jackc/pgx/v5/pgxpool" pgx "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" "git.defalsify.org/vise.git/db" ) @@ -23,14 +23,14 @@ type PgInterface interface { // pgDb is a Postgres backend implementation of the Db interface. type pgDb struct { *db.DbBase - conn PgInterface + conn PgInterface schema string prefix uint8 - prepd bool - it pgx.Rows + prepd bool + it pgx.Rows itBase []byte - tx pgx.Tx - multi bool + tx pgx.Tx + multi bool } // NewpgDb creates a new Postgres backed Db implementation. @@ -43,18 +43,18 @@ func NewPgDb() *pgDb { } // WithSchema sets the Postgres schema to use for the storage table. -func(pdb *pgDb) WithSchema(schema string) *pgDb { +func (pdb *pgDb) WithSchema(schema string) *pgDb { pdb.schema = schema return pdb } -func(pdb *pgDb) WithConnection(pi PgInterface) *pgDb { +func (pdb *pgDb) WithConnection(pi PgInterface) *pgDb { pdb.conn = pi return pdb } // Connect implements Db. -func(pdb *pgDb) Connect(ctx context.Context, connStr string) error { +func (pdb *pgDb) Connect(ctx context.Context, connStr string) error { if pdb.conn != nil { logg.WarnCtxf(ctx, "Pg already connected") return nil @@ -132,7 +132,7 @@ func (pdb *pgDb) Abort(ctx context.Context) { } // Put implements Db. -func(pdb *pgDb) Put(ctx context.Context, key []byte, val []byte) error { +func (pdb *pgDb) Put(ctx context.Context, key []byte, val []byte) error { if !pdb.CheckPut() { return errors.New("unsafe put and safety set") } @@ -221,7 +221,7 @@ func (pdb *pgDb) Get(ctx context.Context, key []byte) ([]byte, error) { } // Close implements Db. -func(pdb *pgDb) Close(ctx context.Context) error { +func (pdb *pgDb) Close(ctx context.Context) error { err := pdb.Stop(ctx) if err == db.ErrNoTx { err = nil @@ -231,7 +231,7 @@ func(pdb *pgDb) Close(ctx context.Context) error { } // set up table -func(pdb *pgDb) ensureTable(ctx context.Context) error { +func (pdb *pgDb) ensureTable(ctx context.Context) error { if pdb.prepd { logg.WarnCtxf(ctx, "ensureTable called more than once") return nil diff --git a/db/postgres/pg_test.go b/db/postgres/pg_test.go @@ -5,9 +5,9 @@ import ( "context" "testing" - pgxmock "github.com/pashagolub/pgxmock/v4" - "github.com/jackc/pgx/v5/pgtype" "github.com/jackc/pgx/v5/pgconn" + "github.com/jackc/pgx/v5/pgtype" + pgxmock "github.com/pashagolub/pgxmock/v4" "git.defalsify.org/vise.git/db" "git.defalsify.org/vise.git/db/dbtest" @@ -17,9 +17,9 @@ var ( typMap = pgtype.NewMap() mockVfd = pgconn.FieldDescription{ - Name: "value", + Name: "value", DataTypeOID: pgtype.ByteaOID, - Format: typMap.FormatCodeForOID(pgtype.ByteaOID), + Format: typMap.FormatCodeForOID(pgtype.ByteaOID), } ) @@ -57,7 +57,7 @@ func TestPutGetPg(t *testing.T) { store.SetSession(ses) ctx := context.Background() - dbi = store + dbi = store _ = dbi k := []byte("foo") @@ -137,7 +137,7 @@ func TestPostgresTxAbort(t *testing.T) { store.SetSession(ses) ctx := context.Background() - dbi = store + dbi = store _ = dbi resInsert := pgxmock.NewResult("UPDATE", 1) @@ -176,7 +176,7 @@ func TestPostgresTxCommitOnClose(t *testing.T) { store.SetSession(ses) ctx := context.Background() - dbi = store + dbi = store _ = dbi resInsert := pgxmock.NewResult("UPDATE", 1) @@ -257,7 +257,7 @@ func TestPostgresTxStartStop(t *testing.T) { store.SetSession(ses) ctx := context.Background() - dbi = store + dbi = store _ = dbi resInsert := pgxmock.NewResult("UPDATE", 1) diff --git a/debug/map.go b/debug/map.go @@ -9,7 +9,7 @@ import ( ) type NodeMap struct { - st *state.State + st *state.State root Node outs []string } @@ -22,7 +22,7 @@ func NewNodeMap(root string) *NodeMap { return n } -func(nm *NodeMap) Run(ctx context.Context, rs resource.Resource) error { +func (nm *NodeMap) Run(ctx context.Context, rs resource.Resource) error { ph := NewNodeParseHandler(&nm.root) b, err := rs.GetCode(ctx, nm.root.Name) if err != nil { @@ -36,8 +36,8 @@ func(nm *NodeMap) Run(ctx context.Context, rs resource.Resource) error { return nm.processNode(ctx, &nm.root, rs) } -func(nm *NodeMap) processNode(ctx context.Context, node *Node, rs resource.Resource) error { - for i, v := range(nm.st.ExecPath) { +func (nm *NodeMap) processNode(ctx context.Context, node *Node, rs resource.Resource) error { + for i, v := range nm.st.ExecPath { if v == node.Name { logg.InfoCtxf(ctx, "loop detected", "pos", i, "node", node.Name, "path", nm.st.ExecPath) return nil diff --git a/debug/node.go b/debug/node.go @@ -1,9 +1,9 @@ package debug type Node struct { - Name string + Name string Description string - conn []string + conn []string } var ( @@ -13,7 +13,7 @@ var ( func (n *Node) haveConn(peer string) bool { var v string - for _, v = range(n.conn) { + for _, v = range n.conn { if peer == v { return true } diff --git a/debug/parse.go b/debug/parse.go @@ -1,8 +1,8 @@ package debug import ( - "git.defalsify.org/vise.git/vm" "git.defalsify.org/vise.git/logging" + "git.defalsify.org/vise.git/vm" ) var ( @@ -11,9 +11,9 @@ var ( type NodeParseHandler struct { *vm.ParseHandler - node *Node - parentMOutFunc func(string, string) error - parentMoveFunc func(string) error + node *Node + parentMOutFunc func(string, string) error + parentMoveFunc func(string) error parentInCmpFunc func(string, string) error parentCatchFunc func(string, uint32, bool) error } @@ -44,7 +44,7 @@ func (np *NodeParseHandler) mout(sym string, sel string) error { func (np *NodeParseHandler) move(sym string) error { var node Node - if (sym == "<" || sym == ">" || sym == "^" || sym == "_" || sym == ".") { + if sym == "<" || sym == ">" || sym == "^" || sym == "_" || sym == "." { logg.Debugf("skip lateral move") return np.parentMoveFunc(sym) } @@ -58,12 +58,11 @@ func (np *NodeParseHandler) move(sym string) error { func (np *NodeParseHandler) incmp(sym string, sel string) error { var node Node - if (sym == "<" || sym == ">" || sym == "^" || sym == "_" || sym == ".") { + if sym == "<" || sym == ">" || sym == "^" || sym == "_" || sym == "." { logg.Debugf("skip relative move") return np.parentInCmpFunc(sym, sel) } - node.Name = sym np.node.Connect(node) logg.Debugf("connect INCMP", "src", np.node.Name, "dst", node.Name) @@ -73,7 +72,7 @@ func (np *NodeParseHandler) incmp(sym string, sel string) error { func (np *NodeParseHandler) catch(sym string, flag uint32, inv bool) error { var node Node - if (sym == "<" || sym == ">" || sym == "^" || sym == "_" || sym == ".") { + if sym == "<" || sym == ">" || sym == "^" || sym == "_" || sym == "." { logg.Debugf("skip relative move") return np.parentMoveFunc(sym) } diff --git a/dev/asm/main.go b/dev/asm/main.go @@ -15,16 +15,15 @@ import ( "git.defalsify.org/vise.git/asm" ) - type arg struct { - One *string `(@Sym | @NumFirst)` - Two *string `((@Sym | @NumFirst) Whitespace?)?` + One *string `(@Sym | @NumFirst)` + Two *string `((@Sym | @NumFirst) Whitespace?)?` Three *string `((@Sym | @NumFirst) Whitespace?)?` } type instruction struct { - OpCode string `@Ident` - OpArg arg `(Whitespace @@)?` + OpCode string `@Ident` + OpArg arg `(Whitespace @@)?` Comment string `Comment? EOL` } @@ -34,8 +33,7 @@ type asmAsm struct { type processor struct { *asm.FlagParser - -} +} func newProcessor(fp string) (*processor, error) { o := &processor{ @@ -45,8 +43,7 @@ func newProcessor(fp string) (*processor, error) { return o, err } - -func(p *processor) processFlag(s []string, one *string, two *string) ([]string, error) { +func (p *processor) processFlag(s []string, one *string, two *string) ([]string, error) { _, err := strconv.Atoi(*one) if err != nil { r, err := p.GetAsString(*one) @@ -61,7 +58,7 @@ func(p *processor) processFlag(s []string, one *string, two *string) ([]string, return append(s, *two), nil } -func(p *processor) pass(s []string, a arg) []string { +func (p *processor) pass(s []string, a arg) []string { for _, r := range []*string{a.One, a.Two, a.Three} { if r == nil { break @@ -71,7 +68,7 @@ func(p *processor) pass(s []string, a arg) []string { return s } -func(pp *processor) run(b []byte) ([]byte, error) { +func (pp *processor) run(b []byte) ([]byte, error) { asmLexer := lexer.MustSimple([]lexer.SimpleRule{ {"Comment", `(?:#)[^\n]*`}, {"Ident", `^[A-Z]+`}, @@ -89,25 +86,25 @@ func(pp *processor) run(b []byte) ([]byte, error) { if err != nil { return nil, err } - + b = []byte{} for _, v := range ast.Instructions { s := []string{v.OpCode} if v.OpArg.One != nil { switch v.OpCode { - case "CATCH": - s = append(s, *v.OpArg.One) - s, err = pp.processFlag(s, v.OpArg.Two, v.OpArg.Three) - if err != nil { - return nil, err - } - case "CROAK": - s, err = pp.processFlag(s, v.OpArg.One, v.OpArg.Two) - if err != nil { - return nil, err - } - default: - s = pp.pass(s, v.OpArg) + case "CATCH": + s = append(s, *v.OpArg.One) + s, err = pp.processFlag(s, v.OpArg.Two, v.OpArg.Three) + if err != nil { + return nil, err + } + case "CROAK": + s, err = pp.processFlag(s, v.OpArg.One, v.OpArg.Two) + if err != nil { + return nil, err + } + default: + s = pp.pass(s, v.OpArg) } } b = append(b, []byte(strings.Join(s, " "))...) @@ -121,7 +118,7 @@ func main() { var ppfp string flag.StringVar(&ppfp, "f", "", "preprocessor data to load") flag.Parse() - if (len(flag.Args()) < 1) { + if len(flag.Args()) < 1 { os.Exit(1) } fp := flag.Arg(0) diff --git a/dev/dbconvert/main.go b/dev/dbconvert/main.go @@ -9,8 +9,8 @@ import ( "io/fs" "log" "os" - "path/filepath" "path" + "path/filepath" "strings" "git.defalsify.org/vise.git/db" @@ -20,37 +20,37 @@ import ( ) var ( - binaryPrefix = ".bin" - menuPrefix = "menu" + binaryPrefix = ".bin" + menuPrefix = "menu" staticloadPrefix = ".txt" - templatePrefix = "" - scan = make(map[string]string) - logg = logging.NewVanilla() - dbg = map[uint8]string{ - db.DATATYPE_BIN: "BIN", - db.DATATYPE_TEMPLATE: "TEMPLATE", - db.DATATYPE_MENU: "MENU", + templatePrefix = "" + scan = make(map[string]string) + logg = logging.NewVanilla() + dbg = map[uint8]string{ + db.DATATYPE_BIN: "BIN", + db.DATATYPE_TEMPLATE: "TEMPLATE", + db.DATATYPE_MENU: "MENU", db.DATATYPE_STATICLOAD: "STATICLOAD", } ) type scanner struct { ctx context.Context - db db.Db + db db.Db } func newScanner(ctx context.Context, db db.Db) (*scanner, error) { return &scanner{ ctx: ctx, - db: db, + db: db, }, nil } -func(sc *scanner) Close() error { +func (sc *scanner) Close() error { return sc.db.Close(sc.ctx) } -func(sc *scanner) Scan(fp string, d fs.DirEntry, err error) error { +func (sc *scanner) Scan(fp string, d fs.DirEntry, err error) error { if err != nil { return err } @@ -59,38 +59,38 @@ func(sc *scanner) Scan(fp string, d fs.DirEntry, err error) error { } fx := path.Ext(fp) fb := path.Base(fp) - if (len(fb) == 0) { + if len(fb) == 0 { return nil } - if (fb[0] < 0x61 || fb[0] > 0x7A) { + if fb[0] < 0x61 || fb[0] > 0x7A { return nil } sc.db.SetPrefix(db.DATATYPE_UNKNOWN) switch fx { - case binaryPrefix: - sc.db.SetPrefix(db.DATATYPE_BIN) - //typ = db.DATATYPE_BIN - case templatePrefix: - if strings.Contains(fb, "_menu") { - sc.db.SetPrefix(db.DATATYPE_TEMPLATE) - //typ = db.DATATYPE_TEMPLATE - } else { - sc.db.SetPrefix(db.DATATYPE_MENU) - //typ = db.DATATYPE_MENU - } - case staticloadPrefix: - sc.db.SetPrefix(db.DATATYPE_STATICLOAD) - default: - log.Printf("skip foreign file: %s", fp) - return nil + case binaryPrefix: + sc.db.SetPrefix(db.DATATYPE_BIN) + //typ = db.DATATYPE_BIN + case templatePrefix: + if strings.Contains(fb, "_menu") { + sc.db.SetPrefix(db.DATATYPE_TEMPLATE) + //typ = db.DATATYPE_TEMPLATE + } else { + sc.db.SetPrefix(db.DATATYPE_MENU) + //typ = db.DATATYPE_MENU + } + case staticloadPrefix: + sc.db.SetPrefix(db.DATATYPE_STATICLOAD) + default: + log.Printf("skip foreign file: %s", fp) + return nil } f, err := os.Open(fp) defer f.Close() - if err != nil{ + if err != nil { return err } v, err := io.ReadAll(f) - if err != nil{ + if err != nil { return err } @@ -151,7 +151,7 @@ func main() { fmt.Fprintf(os.Stderr, "failed to connect to output db: %s", err) os.Exit(1) } - + store.SetLock(db.DATATYPE_BIN, false) store.SetLock(db.DATATYPE_TEMPLATE, false) store.SetLock(db.DATATYPE_MENU, false) diff --git a/dev/disasm/main.go b/dev/disasm/main.go @@ -2,14 +2,14 @@ package main import ( "fmt" - "os" "io/ioutil" + "os" "git.defalsify.org/vise.git/vm" ) func main() { - if (len(os.Args) < 2) { + if len(os.Args) < 2 { os.Exit(1) } fp := os.Args[1] diff --git a/dev/gettext/export/main.go b/dev/gettext/export/main.go @@ -8,12 +8,11 @@ import ( "path" "strings" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/debug" "git.defalsify.org/vise.git/lang" - "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/logging" - fsdb "git.defalsify.org/vise.git/db/fs" - + "git.defalsify.org/vise.git/resource" ) var ( @@ -21,27 +20,27 @@ var ( ) type translator struct { - langs []lang.Language + langs []lang.Language haveLang map[string]bool - ctx context.Context - rs *resource.PoResource - outPath string + ctx context.Context + rs *resource.PoResource + outPath string madePath bool } func newTranslator(ctx context.Context, defaultLanguage lang.Language, inPath string, outPath string) *translator { tr := &translator{ - langs: []lang.Language{defaultLanguage}, + langs: []lang.Language{defaultLanguage}, haveLang: make(map[string]bool), - ctx: ctx, - rs: resource.NewPoResource(defaultLanguage, inPath), - outPath: outPath, + ctx: ctx, + rs: resource.NewPoResource(defaultLanguage, inPath), + outPath: outPath, } tr.haveLang[defaultLanguage.Code] = true return tr } -func(tr *translator) AddLang(ln lang.Language) error { +func (tr *translator) AddLang(ln lang.Language) error { var ok bool _, ok = tr.haveLang[ln.Code] if !ok { @@ -52,9 +51,9 @@ func(tr *translator) AddLang(ln lang.Language) error { return nil } -func(tr *translator) nodeFunc(node *debug.Node) error { +func (tr *translator) nodeFunc(node *debug.Node) error { sym := node.Name - for i, ln := range(tr.langs) { + for i, ln := range tr.langs { ctx := context.WithValue(tr.ctx, "Language", ln) s, err := tr.rs.GetTemplate(ctx, sym) if err != nil { @@ -73,7 +72,7 @@ func(tr *translator) nodeFunc(node *debug.Node) error { fb += "_" + ln.Code } fp := path.Join(tr.outPath, fb) - w, err := os.OpenFile(fp, os.O_WRONLY | os.O_CREATE, 0644) + w, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE, 0644) if err != nil { return err } @@ -88,8 +87,8 @@ func(tr *translator) nodeFunc(node *debug.Node) error { return nil } -func(tr *translator) menuFunc(sym string) error { - for i, ln := range(tr.langs) { +func (tr *translator) menuFunc(sym string) error { + for i, ln := range tr.langs { ctx := context.WithValue(tr.ctx, "Language", ln) s, err := tr.rs.GetMenu(ctx, sym) if err != nil { @@ -110,7 +109,7 @@ func(tr *translator) menuFunc(sym string) error { } // TODO: use lang filename generator func instead fp := path.Join(tr.outPath, fb) - w, err := os.OpenFile(fp, os.O_WRONLY | os.O_CREATE, 0644) + w, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE, 0644) if err != nil { return err } @@ -125,7 +124,7 @@ func(tr *translator) menuFunc(sym string) error { return nil } -func(tr *translator) Close() error { +func (tr *translator) Close() error { return nil } @@ -133,7 +132,7 @@ type langVar struct { v []lang.Language } -func(lv *langVar) Set(s string) error { +func (lv *langVar) Set(s string) error { v, err := lang.LanguageFromCode(s) if err != nil { return err @@ -142,15 +141,15 @@ func(lv *langVar) Set(s string) error { return err } -func(lv *langVar) String() string { +func (lv *langVar) String() string { var s []string - for _, v := range(lv.v) { + for _, v := range lv.v { s = append(s, v.Code) } return strings.Join(s, ",") } -func(lv *langVar) Langs() []lang.Language { +func (lv *langVar) Langs() []lang.Language { return lv.v } @@ -195,7 +194,7 @@ func main() { } tr := newTranslator(ctx, ln, inDir, outDir) defer tr.Close() - for _, ln := range(langs.Langs()) { + for _, ln := range langs.Langs() { logg.DebugCtxf(ctx, "lang", "lang", ln) err = tr.AddLang(ln) if err != nil { @@ -210,8 +209,8 @@ func main() { fmt.Fprintf(os.Stderr, "node tree process fail: %v", err) os.Exit(1) } - - for k, v := range(debug.NodeIndex) { + + for k, v := range debug.NodeIndex { logg.Tracef("processing node", "sym", k) err = tr.nodeFunc(&v) if err != nil { @@ -220,7 +219,7 @@ func main() { } } - for k, _ := range(debug.MenuIndex) { + for k, _ := range debug.MenuIndex { logg.Tracef("processing menu", "sym", k) err = tr.menuFunc(k) if err != nil { diff --git a/dev/gettext/import/main.go b/dev/gettext/import/main.go @@ -9,16 +9,15 @@ import ( "path" "strings" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/debug" "git.defalsify.org/vise.git/lang" - "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/logging" - fsdb "git.defalsify.org/vise.git/db/fs" - + "git.defalsify.org/vise.git/resource" ) var ( - logg = logging.NewVanilla() + logg = logging.NewVanilla() writeDomains = []string{ resource.PoDomain, resource.TemplateKeyPoDomain, @@ -28,23 +27,23 @@ var ( ) type translator struct { - langs []lang.Language - ctx context.Context - rs resource.Resource + langs []lang.Language + ctx context.Context + rs resource.Resource newline bool - d string + d string } func newTranslator(ctx context.Context, rs resource.Resource, outPath string, newline bool) *translator { return &translator{ - ctx: ctx, - rs: rs, - d: outPath, + ctx: ctx, + rs: rs, + d: outPath, newline: newline, } } -func(tr *translator) ensureFileNameFor(ln lang.Language, domain string) (string, error) { +func (tr *translator) ensureFileNameFor(ln lang.Language, domain string) (string, error) { fileName := domain + ".po" p := path.Join(tr.d, ln.Code) err := os.MkdirAll(p, 0700) @@ -55,16 +54,16 @@ func(tr *translator) ensureFileNameFor(ln lang.Language, domain string) (string, } // skip default*.po for translations other than default -func(tr *translator) writersFor(ln lang.Language) ([]io.WriteCloser, error) { +func (tr *translator) writersFor(ln lang.Language) ([]io.WriteCloser, error) { var r []io.WriteCloser _, ready := writeDomainReady[ln.Code] - for _, v := range(writeDomains) { + for _, v := range writeDomains { fp, err := tr.ensureFileNameFor(ln, v) if err != nil { return r, err } if !ready { - w, err := os.OpenFile(fp, os.O_WRONLY | os.O_CREATE | os.O_TRUNC, 0644) + w, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { return r, err } @@ -80,7 +79,7 @@ msgstr "" } w.Close() } - w, err := os.OpenFile(fp, os.O_WRONLY | os.O_APPEND, 0644) + w, err := os.OpenFile(fp, os.O_WRONLY|os.O_APPEND, 0644) logg.DebugCtxf(tr.ctx, "writer", "fp", fp) if err != nil { return r, err @@ -91,7 +90,7 @@ msgstr "" return r, nil } -func(tr *translator) writeTranslation(w io.Writer, sym string, msgid string, msgstr string) error { +func (tr *translator) writeTranslation(w io.Writer, sym string, msgid string, msgstr string) error { s := fmt.Sprintf(`#: vise_node.%s msgid "" %s @@ -106,16 +105,16 @@ msgstr "" return nil } -func(tr *translator) closeWriters(writers []io.WriteCloser) { - for _, w := range(writers) { +func (tr *translator) closeWriters(writers []io.WriteCloser) { + for _, w := range writers { w.Close() } } // TODO: DRY; merge with menuFunc -func(tr *translator) nodeFunc(node *debug.Node) error { +func (tr *translator) nodeFunc(node *debug.Node) error { var def string - for i, ln := range(tr.langs) { + for i, ln := range tr.langs { var s string ww, err := tr.writersFor(ln) defer tr.closeWriters(ww) @@ -126,7 +125,7 @@ func(tr *translator) nodeFunc(node *debug.Node) error { r, err := tr.rs.GetTemplate(ctx, node.Name) if err == nil { logg.TraceCtxf(tr.ctx, "template found", "lang", ln, "node", node.Name) - for i, v := range(strings.Split(r, "\n")) { + for i, v := range strings.Split(r, "\n") { if i > 0 { if tr.newline { s += fmt.Sprintf("\t\"\\n\"\n") @@ -153,9 +152,9 @@ func(tr *translator) nodeFunc(node *debug.Node) error { } // TODO: drop the multiline gen -func(tr *translator) menuFunc(sym string) error { +func (tr *translator) menuFunc(sym string) error { var def string - for i, ln := range(tr.langs) { + for i, ln := range tr.langs { var s string ww, err := tr.writersFor(ln) defer tr.closeWriters(ww) @@ -166,7 +165,7 @@ func(tr *translator) menuFunc(sym string) error { r, err := tr.rs.GetMenu(ctx, sym) if err == nil { logg.TraceCtxf(tr.ctx, "menu found", "lang", ln, "menu", sym) - for i, v := range(strings.Split(r, "\n")) { + for i, v := range strings.Split(r, "\n") { if i > 0 { if tr.newline { s += fmt.Sprintf("\t\"\\n\"\n") @@ -192,7 +191,7 @@ func(tr *translator) menuFunc(sym string) error { return nil } -func(tr *translator) AddLang(ln lang.Language) error { +func (tr *translator) AddLang(ln lang.Language) error { var err error tr.langs = append(tr.langs, ln) return err @@ -202,7 +201,7 @@ type langVar struct { v []lang.Language } -func(lv *langVar) Set(s string) error { +func (lv *langVar) Set(s string) error { v, err := lang.LanguageFromCode(s) if err != nil { return err @@ -211,15 +210,15 @@ func(lv *langVar) Set(s string) error { return err } -func(lv *langVar) String() string { +func (lv *langVar) String() string { var s []string - for _, v := range(lv.v) { + for _, v := range lv.v { s = append(s, v.Code) } return strings.Join(s, ",") } -func(lv *langVar) Langs() []lang.Language { +func (lv *langVar) Langs() []lang.Language { return lv.v } @@ -256,7 +255,7 @@ func main() { rs := resource.NewDbResource(rsStore) tr := newTranslator(ctx, rs, outDir, newline) - for _, ln := range(langs.Langs()) { + for _, ln := range langs.Langs() { logg.DebugCtxf(ctx, "lang", "lang", ln) err = tr.AddLang(ln) if err != nil { @@ -271,8 +270,8 @@ func main() { fmt.Fprintf(os.Stderr, "node tree process fail: %v", err) os.Exit(1) } - - for k, v := range(debug.NodeIndex) { + + for k, v := range debug.NodeIndex { err = tr.nodeFunc(&v) if err != nil { fmt.Fprintf(os.Stderr, "translate process error for node %s: %v", k, err) @@ -280,7 +279,7 @@ func main() { } } - for k, _ := range(debug.MenuIndex) { + for k, _ := range debug.MenuIndex { logg.Tracef("processing menu", "sym", k) err = tr.menuFunc(k) if err != nil { diff --git a/dev/interactive/main.go b/dev/interactive/main.go @@ -6,11 +6,11 @@ import ( "fmt" "os" + "git.defalsify.org/vise.git/db" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" - "git.defalsify.org/vise.git/db" - fsdb "git.defalsify.org/vise.git/db/fs" ) func main() { @@ -32,7 +32,7 @@ func main() { ctx := context.Background() cfg := engine.Config{ OutputSize: uint32(size), - SessionId: sessionId, + SessionId: sessionId, } rsStore := fsdb.NewFsDb() diff --git a/engine/config.go b/engine/config.go @@ -27,6 +27,6 @@ type Config struct { } // String implements the string interface. -func(c Config) String() string { +func (c Config) String() string { return fmt.Sprintf("sessionid '%s', rootpath '%s', flagcount %d, language '%s'", c.SessionId, c.Root, c.FlagCount, c.Language) } diff --git a/engine/db.go b/engine/db.go @@ -10,8 +10,8 @@ import ( "git.defalsify.org/vise.git/cache" "git.defalsify.org/vise.git/persist" - "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/render" + "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" "git.defalsify.org/vise.git/vm" ) @@ -21,28 +21,28 @@ var ( ) type DefaultEngine struct { - st *state.State - ca cache.Memory - vm *vm.Vm - rs resource.Resource - pe *persist.Persister - cfg Config - dbg Debug - first resource.EntryFunc - initd bool - exit string - exiting bool - execd bool + st *state.State + ca cache.Memory + vm *vm.Vm + rs resource.Resource + pe *persist.Persister + cfg Config + dbg Debug + first resource.EntryFunc + initd bool + exit string + exiting bool + execd bool regexCount int } // NewEngine instantiates the default Engine implementation. func NewEngine(cfg Config, rs resource.Resource) *DefaultEngine { if rs == nil { - panic("resource cannot be nil") + panic("resource cannot be nil") } en := &DefaultEngine{ - rs: rs, + rs: rs, cfg: cfg, } if en.cfg.Root == "" { @@ -58,7 +58,7 @@ func NewEngine(cfg Config, rs resource.Resource) *DefaultEngine { // // Note that engine.Init will fail if state is set both explicitly // and in a provided persist.Persister. -func(en *DefaultEngine) WithState(st *state.State) *DefaultEngine { +func (en *DefaultEngine) WithState(st *state.State) *DefaultEngine { if en.st != nil { panic("state already set") } @@ -76,7 +76,7 @@ func(en *DefaultEngine) WithState(st *state.State) *DefaultEngine { // // Note that engine.Init will fail if memory is set both explicitly // and in a provided persist.Persister. -func(en *DefaultEngine) WithMemory(ca cache.Memory) *DefaultEngine { +func (en *DefaultEngine) WithMemory(ca cache.Memory) *DefaultEngine { if en.ca != nil { panic("cache already set") } @@ -90,21 +90,21 @@ func(en *DefaultEngine) WithMemory(ca cache.Memory) *DefaultEngine { // WithPersister is a chainable method that sets the persister to use with the engine. // // If the persister is missing state, memory or both, it will inherit them from the engine. -func(en *DefaultEngine) WithPersister(pe *persist.Persister) *DefaultEngine { +func (en *DefaultEngine) WithPersister(pe *persist.Persister) *DefaultEngine { if en.pe != nil { panic("persister already set") } if pe == nil { panic("persister argument is nil") } - en.pe = pe + en.pe = pe return en } // WithDebug is a chainable method that sets the debugger to use for the engine. // // If the argument is nil, the default debugger will be used. -func(en *DefaultEngine) WithDebug(dbg Debug) *DefaultEngine { +func (en *DefaultEngine) WithDebug(dbg Debug) *DefaultEngine { if en.dbg != nil { panic("debugger already set") } @@ -120,7 +120,7 @@ func(en *DefaultEngine) WithDebug(dbg Debug) *DefaultEngine { // control is handed over to the VM bytecode from the current state. // // If this function returns an error, execution will be aborted in engine.Init. -func(en *DefaultEngine) WithFirst(fn resource.EntryFunc) *DefaultEngine { +func (en *DefaultEngine) WithFirst(fn resource.EntryFunc) *DefaultEngine { if en.first != nil { panic("firstfunc already set") } @@ -135,19 +135,19 @@ func(en *DefaultEngine) WithFirst(fn resource.EntryFunc) *DefaultEngine { // // The added regular expression will be evaluated after the builtin match (see // vm/input.go for the actual string details). -// +// // The function may be called more than once. Input will be validated against each // in the sequence they were added. // // When a match is found, remaining regular expressions will be skipped. -func(en *DefaultEngine) AddValidInput(re string) error { +func (en *DefaultEngine) AddValidInput(re string) error { err := vm.RegisterInputValidator(en.regexCount, re) en.regexCount += 1 return err } // ensure state is present in engine. -func(en *DefaultEngine) ensureState() { +func (en *DefaultEngine) ensureState() { if en.st == nil { st := state.NewState(en.cfg.FlagCount) en.st = st @@ -157,19 +157,19 @@ func(en *DefaultEngine) ensureState() { } logg.Debugf("new engine state added", "state", en.st) } else { - if (en.cfg.Language != "") { + if en.cfg.Language != "" { if en.st.Language == nil { en.st.SetLanguage(en.cfg.Language) en.st.SetFlag(state.FLAG_LANG) } else { - logg.Warnf("language '%s'set in config, but will be ignored because state language has already been set.", ) + logg.Warnf("language '%s'set in config, but will be ignored because state language has already been set.") } } } } // ensure memory is present in engine. -func(en *DefaultEngine) ensureMemory() error { +func (en *DefaultEngine) ensureMemory() error { cac, ok := en.ca.(*cache.Cache) if cac == nil { ca := cache.NewCache() @@ -186,7 +186,7 @@ func(en *DefaultEngine) ensureMemory() error { } // retrieve state and memory from perister if present. -func(en *DefaultEngine) preparePersist() error { +func (en *DefaultEngine) preparePersist() error { if en.pe == nil { return nil } @@ -222,7 +222,7 @@ func(en *DefaultEngine) preparePersist() error { } // synchronize state and memory between engine and persister. -func(en *DefaultEngine) ensurePersist() error { +func (en *DefaultEngine) ensurePersist() error { if en.pe == nil { return nil } @@ -263,7 +263,7 @@ func(en *DefaultEngine) ensurePersist() error { } // create vm instance. -func(en *DefaultEngine) setupVm() { +func (en *DefaultEngine) setupVm() { var szr *render.Sizer if en.cfg.OutputSize > 0 { szr = render.NewSizer(en.cfg.OutputSize) @@ -274,7 +274,7 @@ func(en *DefaultEngine) setupVm() { } } -func(en *DefaultEngine) empty(ctx context.Context) error { +func (en *DefaultEngine) empty(ctx context.Context) error { var err error b := bytes.NewBuffer(nil) _, err = en.Flush(ctx, b) @@ -287,7 +287,7 @@ func(en *DefaultEngine) empty(ctx context.Context) error { } // prepare engine for Init run. -func(en *DefaultEngine) prepare(ctx context.Context) error { +func (en *DefaultEngine) prepare(ctx context.Context) error { if en.execd { err := en.empty(ctx) if err != nil { @@ -318,7 +318,7 @@ func(en *DefaultEngine) prepare(ctx context.Context) error { } // execute the first function, if set. -func(en *DefaultEngine) runFirst(ctx context.Context) (bool, error) { +func (en *DefaultEngine) runFirst(ctx context.Context) (bool, error) { var err error var r bool if en.first == nil { @@ -365,9 +365,9 @@ func(en *DefaultEngine) runFirst(ctx context.Context) (bool, error) { // If persister is set, this call will save the state and memory. // // An error will be logged and returned if: -// * persistence was attempted and failed (takes precedence) -// * resource backend did not close cleanly. -func(en *DefaultEngine) Finish(ctx context.Context) error { +// - persistence was attempted and failed (takes precedence) +// - resource backend did not close cleanly. +func (en *DefaultEngine) Finish(ctx context.Context) error { var perr error if !en.initd { return nil @@ -381,7 +381,7 @@ func(en *DefaultEngine) Finish(ctx context.Context) error { } if perr != nil { logg.Errorf("persistence failed!", "err", perr) - err = perr + err = perr } if err == nil { logg.Tracef("that's a wrap", "engine", en) @@ -389,9 +389,9 @@ func(en *DefaultEngine) Finish(ctx context.Context) error { return err } -func(en *DefaultEngine) setCode(ctx context.Context, code []byte) (bool, error) { +func (en *DefaultEngine) setCode(ctx context.Context, code []byte) (bool, error) { var err error - + cont := true en.st.SetCode(code) if len(code) == 0 { @@ -409,7 +409,7 @@ func(en *DefaultEngine) setCode(ctx context.Context, code []byte) (bool, error) // Init implements the Engine interface. // // It loads and executes code for the start node. -func(en *DefaultEngine) init(ctx context.Context, input []byte) (bool, error) { +func (en *DefaultEngine) init(ctx context.Context, input []byte) (bool, error) { cont := true err := en.prepare(ctx) if err != nil { @@ -425,7 +425,7 @@ func(en *DefaultEngine) init(ctx context.Context, input []byte) (bool, error) { logg.DebugCtxf(ctx, "already initialized") return true, nil } - + sym := en.cfg.Root if sym == "" { return false, fmt.Errorf("start sym empty") @@ -466,13 +466,13 @@ func(en *DefaultEngine) init(ctx context.Context, input []byte) (bool, error) { // It processes user input against the current state of the virtual machine environment. // // If successfully executed, output of the last execution is available using the Flush call. -// +// // A bool return valus of false indicates that execution should be terminated. Calling Exec again has undefined effects. // // Fails if: -// * input is formally invalid (too long etc) -// * no current bytecode is available -// * input processing against bytcode failed +// - input is formally invalid (too long etc) +// - no current bytecode is available +// - input processing against bytcode failed func (en *DefaultEngine) Exec(ctx context.Context, input []byte) (bool, error) { var err error @@ -506,7 +506,7 @@ func (en *DefaultEngine) Exec(ctx context.Context, input []byte) (bool, error) { } // backend for Exec, after the input validity check -func(en *DefaultEngine) exec(ctx context.Context, input []byte) (bool, error) { +func (en *DefaultEngine) exec(ctx context.Context, input []byte) (bool, error) { logg.InfoCtxf(ctx, "new VM execution with input", "input", string(input)) code, err := en.st.GetCode() if err != nil { @@ -543,10 +543,10 @@ func(en *DefaultEngine) exec(ctx context.Context, input []byte) (bool, error) { // The method writes the output of the last vm execution to the given writer. // // Fails if -// * required data inputs to the template are not available. -// * the template for the given node point is note available for retrieval using the resource.Resource implementer. -// * the supplied writer fails to process the writes. -func(en *DefaultEngine) Flush(ctx context.Context, w io.Writer) (int, error) { +// - required data inputs to the template are not available. +// - the template for the given node point is note available for retrieval using the resource.Resource implementer. +// - the supplied writer fails to process the writes. +func (en *DefaultEngine) Flush(ctx context.Context, w io.Writer) (int, error) { var l int if !en.execd { return 0, ErrFlushNoExec @@ -585,7 +585,7 @@ func(en *DefaultEngine) Flush(ctx context.Context, w io.Writer) (int, error) { } // start execution over at top node while keeping current state of client error flags. -func(en *DefaultEngine) reset(ctx context.Context) (bool, error) { +func (en *DefaultEngine) reset(ctx context.Context) (bool, error) { var err error var isTop bool for !isTop { @@ -604,4 +604,3 @@ func(en *DefaultEngine) reset(ctx context.Context) (bool, error) { en.st.ResetFlag(state.FLAG_DIRTY) return false, nil } - diff --git a/engine/db_test.go b/engine/db_test.go @@ -9,12 +9,12 @@ import ( "strings" "testing" - "git.defalsify.org/vise.git/resource" + "git.defalsify.org/vise.git/cache" + memdb "git.defalsify.org/vise.git/db/mem" "git.defalsify.org/vise.git/persist" + "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/cache" "git.defalsify.org/vise.git/vm" - memdb "git.defalsify.org/vise.git/db/mem" ) func getNull() io.WriteCloser { @@ -29,17 +29,17 @@ func codeGet(ctx context.Context, s string) ([]byte, error) { var b []byte var err error switch s { - case "root": - b = vm.NewLine(nil, vm.HALT, nil, nil, nil) - b = vm.NewLine(b, vm.LOAD, []string{"foo"}, []byte{0x0}, nil) - case "tinkywinky": - b = vm.NewLine(nil, vm.MOVE, []string{"dipsy"}, nil, nil) - b = vm.NewLine(b, vm.LOAD, []string{"foo"}, []byte{0x0}, nil) - case "dipsy": - b = vm.NewLine(nil, vm.HALT, nil, nil, nil) - b = vm.NewLine(b, vm.LOAD, []string{"foo"}, []byte{0x0}, nil) - default: - err = fmt.Errorf("unknown code symbol '%s'", s) + case "root": + b = vm.NewLine(nil, vm.HALT, nil, nil, nil) + b = vm.NewLine(b, vm.LOAD, []string{"foo"}, []byte{0x0}, nil) + case "tinkywinky": + b = vm.NewLine(nil, vm.MOVE, []string{"dipsy"}, nil, nil) + b = vm.NewLine(b, vm.LOAD, []string{"foo"}, []byte{0x0}, nil) + case "dipsy": + b = vm.NewLine(nil, vm.HALT, nil, nil, nil) + b = vm.NewLine(b, vm.LOAD, []string{"foo"}, []byte{0x0}, nil) + default: + err = fmt.Errorf("unknown code symbol '%s'", s) } return b, err } @@ -137,7 +137,6 @@ func TestDbEngineStateDup(t *testing.T) { en.WithState(st) } - func TestDbEngineCacheDup(t *testing.T) { cfg := Config{} rs := resource.NewMenuResource() @@ -241,7 +240,7 @@ func TestDbEnginePersist(t *testing.T) { t.Fatal(err) } - _, err = en.Flush(ctx, nul) + _, err = en.Flush(ctx, nul) if err != nil { t.Fatal(err) } @@ -268,7 +267,7 @@ func TestDbEngineDebug(t *testing.T) { w := bytes.NewBuffer(nil) ctx := context.Background() cfg := Config{ - Root: "tinkywinky", + Root: "tinkywinky", FlagCount: 1, } rs := resource.NewMenuResource() @@ -403,4 +402,3 @@ func TestDbFirst(t *testing.T) { t.Fatal("expected flag set") } } - diff --git a/engine/debug.go b/engine/debug.go @@ -18,27 +18,27 @@ type Debug interface { // SimpleDebug is a vanilla implementation of the Debug interface. type SimpleDebug struct { pfx string - w io.Writer + w io.Writer } // NewSimpleDebug instantiates a new SimpleDebug object. func NewSimpleDebug(w io.Writer) Debug { if w == nil { - w = os.Stderr - } + w = os.Stderr + } return &SimpleDebug{ - w: w, + w: w, pfx: "DUMP>", } } // Break implements the Debug interface. -func (dbg* SimpleDebug) Break(st *state.State, ca cache.Memory) { +func (dbg *SimpleDebug) Break(st *state.State, ca cache.Memory) { fmt.Fprintf(dbg.w, "%s State:\n", dbg.pfx) node, lvl := st.Where() fmt.Fprintf(dbg.w, "%s\tPath: %s (%d)\n", dbg.pfx, node, lvl) fmt.Fprintf(dbg.w, "%s\tFlags:\n", dbg.pfx) - for _, s := range state.FlagDebugger.AsList(st.Flags, st.BitSize - 8) { + for _, s := range state.FlagDebugger.AsList(st.Flags, st.BitSize-8) { fmt.Fprintf(dbg.w, "%s\t\t%s\n", dbg.pfx, s) } for i := uint32(0); i < ca.Levels(); i++ { diff --git a/engine/engine_test.go b/engine/engine_test.go @@ -4,24 +4,25 @@ import ( "bytes" "context" "fmt" -// "io/ioutil" + + // "io/ioutil" "log" -// "path" + // "path" "testing" "git.defalsify.org/vise.git/cache" + "git.defalsify.org/vise.git/db" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/lang" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" "git.defalsify.org/vise.git/testdata" "git.defalsify.org/vise.git/vm" - "git.defalsify.org/vise.git/db" - fsdb "git.defalsify.org/vise.git/db/fs" ) var ( - dataGenerated bool = false - dataDir string = testdata.DataDir + dataGenerated bool = false + dataDir string = testdata.DataDir ) type testWrapper struct { @@ -33,11 +34,11 @@ type testWrapper struct { func newTestWrapper(path string, st *state.State) testWrapper { ctx := context.Background() store := fsdb.NewFsDb() - store.Connect(ctx, path) + store.Connect(ctx, path) rs := resource.NewDbResource(store) rs.With(db.DATATYPE_STATICLOAD) - wr := testWrapper { - rs, + wr := testWrapper{ + rs, st, store, } @@ -50,30 +51,30 @@ func newTestWrapper(path string, st *state.State) testWrapper { return wr } -func(fs testWrapper) getStore() db.Db { +func (fs testWrapper) getStore() db.Db { return fs.db } -func(fs testWrapper) one(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (fs testWrapper) one(ctx context.Context, sym string, input []byte) (resource.Result, error) { return resource.Result{ Content: "one", }, nil } -func(fs testWrapper) inky(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (fs testWrapper) inky(ctx context.Context, sym string, input []byte) (resource.Result, error) { return resource.Result{ Content: "tinkywinky", }, nil } -func(fs testWrapper) pinky(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (fs testWrapper) pinky(ctx context.Context, sym string, input []byte) (resource.Result, error) { r := fmt.Sprintf("xyzzy: %x", input) return resource.Result{ Content: r, }, nil } -func(fs testWrapper) translate(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (fs testWrapper) translate(ctx context.Context, sym string, input []byte) (resource.Result, error) { r := "cool" v := ctx.Value("Language") code := "" @@ -89,7 +90,7 @@ func(fs testWrapper) translate(ctx context.Context, sym string, input []byte) (r }, nil } -func(fs testWrapper) set_lang(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (fs testWrapper) set_lang(ctx context.Context, sym string, input []byte) (resource.Result, error) { return resource.Result{ Content: string(input), FlagSet: []uint32{state.FLAG_LANG}, @@ -191,7 +192,7 @@ func TestEngineExecInvalidInput(t *testing.T) { cfg := Config{ Root: "root", - } + } en := NewEngine(cfg, &rs) en = en.WithState(st) en = en.WithMemory(ca) @@ -213,7 +214,7 @@ func TestEngineResumeTerminated(t *testing.T) { st := state.NewState(17) rs := newTestWrapper(dataDir, st) ca := cache.NewCache().WithCacheSize(1024) - + cfg := Config{ Root: "root", } @@ -284,7 +285,6 @@ func TestLanguageSet(t *testing.T) { t.Fatalf("expected 'cool', got '%s'", r) } - b = vm.NewLine(nil, vm.RELOAD, []string{"translate"}, nil, nil) b = vm.NewLine(b, vm.MOVE, []string{"."}, nil, nil) st.SetCode(b) @@ -331,7 +331,7 @@ func TestLanguageRender(t *testing.T) { if err != nil { t.Fatal(err) } - + br := bytes.NewBuffer(nil) _, err = en.Flush(ctx, br) if err != nil { @@ -353,7 +353,7 @@ func TestConfigLanguageRender(t *testing.T) { ca := cache.NewCache() cfg := Config{ - Root: "root", + Root: "root", Language: "nor", } en := NewEngine(cfg, &rs) @@ -380,7 +380,7 @@ func TestConfigLanguageRender(t *testing.T) { if err != nil { t.Fatal(err) } - + expect := `dette endrer med språket tinkywinky 0:tilbake` r := br.String() diff --git a/engine/loop_test.go b/engine/loop_test.go @@ -37,7 +37,7 @@ func TestLoopTop(t *testing.T) { "2", "j", "1", - } + } inputStr := strings.Join(input, "\n") inputBuf := bytes.NewBuffer(append([]byte(inputStr), 0x0a)) outputBuf := bytes.NewBuffer(nil) @@ -59,9 +59,9 @@ func TestLoopBackForth(t *testing.T) { ctx := context.Background() st := state.NewState(0) rs := newTestWrapper(dataDir, st) - + cfg := Config{ - Root: "root", + Root: "root", CacheSize: 1024, } en := NewEngine(cfg, rs) @@ -78,7 +78,7 @@ func TestLoopBackForth(t *testing.T) { "0", "1", "0", - } + } inputStr := strings.Join(input, "\n") inputBuf := bytes.NewBuffer(append([]byte(inputStr), 0x0a)) outputBuf := bytes.NewBuffer(nil) @@ -99,8 +99,8 @@ func TestLoopBrowse(t *testing.T) { cfg := Config{ OutputSize: 68, - Root: "root", - CacheSize: 1024, + Root: "root", + CacheSize: 1024, } en := NewEngine(cfg, rs) en = en.WithState(st) @@ -115,7 +115,7 @@ func TestLoopBrowse(t *testing.T) { "00", "11", "00", - } + } inputStr := strings.Join(input, "\n") inputBuf := bytes.NewBuffer(append([]byte(inputStr), 0x0a)) outputBuf := bytes.NewBuffer(nil) diff --git a/engine/persist_test.go b/engine/persist_test.go @@ -6,12 +6,11 @@ import ( "testing" "git.defalsify.org/vise.git/cache" + memdb "git.defalsify.org/vise.git/db/mem" "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/state" - memdb "git.defalsify.org/vise.git/db/mem" ) - func TestPersistNewAcrossEngine(t *testing.T) { var err error var cfg Config @@ -72,7 +71,7 @@ func TestPersistNewAcrossEngine(t *testing.T) { } location, _ := st.Where() if location != "foo" { - t.Errorf("expected location 'foo', got '%s", location) + t.Errorf("expected location 'foo', got '%s", location) } } @@ -136,6 +135,6 @@ func TestPersistSameAcrossEngine(t *testing.T) { } location, _ := st.Where() if location != "foo" { - t.Errorf("expected location 'foo', got '%s", location) + t.Errorf("expected location 'foo', got '%s", location) } } diff --git a/examples/db/main.go b/examples/db/main.go @@ -13,21 +13,21 @@ import ( testdataloader "github.com/peteole/testdata-loader" "git.defalsify.org/vise.git/asm" + "git.defalsify.org/vise.git/db" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" + "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/db" - fsdb "git.defalsify.org/vise.git/db/fs" - "git.defalsify.org/vise.git/logging" ) var ( - logg = logging.NewVanilla() - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "examples", "db") - store = fsdb.NewFsDb() - pr = persist.NewPersister(store) + logg = logging.NewVanilla() + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "examples", "db") + store = fsdb.NewFsDb() + pr = persist.NewPersister(store) data_selector = []byte("my_data") ) @@ -109,7 +109,7 @@ func main() { panic(err) } store.SetSession("xyzzy") - store.SetLock(db.DATATYPE_TEMPLATE | db.DATATYPE_MENU | db.DATATYPE_BIN, false) + store.SetLock(db.DATATYPE_TEMPLATE|db.DATATYPE_MENU|db.DATATYPE_BIN, false) err = genCode(ctx, store) if err != nil { panic(err) @@ -124,7 +124,7 @@ func main() { if err != nil { panic(err) } - store.SetLock(db.DATATYPE_TEMPLATE | db.DATATYPE_MENU | db.DATATYPE_BIN, true) + store.SetLock(db.DATATYPE_TEMPLATE|db.DATATYPE_MENU|db.DATATYPE_BIN, true) tg := resource.NewDbResource(store) rs := resource.NewMenuResource() @@ -134,7 +134,7 @@ func main() { rs.AddLocalFunc("say", say) cfg := engine.Config{ - Root: "root", + Root: "root", FlagCount: 1, } diff --git a/examples/first/main.go b/examples/first/main.go @@ -3,24 +3,24 @@ package main import ( "context" + "crypto/rand" + "crypto/sha256" "encoding/hex" "errors" "flag" "fmt" "os" "path" - "crypto/rand" - "crypto/sha256" testdataloader "github.com/peteole/testdata-loader" "git.defalsify.org/vise.git/db" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" + "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/logging" - fsdb "git.defalsify.org/vise.git/db/fs" ) const ( @@ -30,19 +30,19 @@ const ( ) var ( - logg = logging.NewVanilla() - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "examples", "first") - storeDir = path.Join(scriptDir, ".state") + logg = logging.NewVanilla() + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "examples", "first") + storeDir = path.Join(scriptDir, ".state") authStoreDir = path.Join(scriptDir, ".auth") ) type firstAuthResource struct { - st *state.State + st *state.State store db.Db } -func(f *firstAuthResource) challenge(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (f *firstAuthResource) challenge(ctx context.Context, sym string, input []byte) (resource.Result, error) { var err error var r resource.Result @@ -62,7 +62,7 @@ func(f *firstAuthResource) challenge(ctx context.Context, sym string, input []by succeed := f.st.GetFlag(USER_SUCCEEDED) failed := f.st.GetFlag(USER_FAILED) if succeed { - return r, nil + return r, nil } else { if failed { r.FlagReset = append(r.FlagReset, USER_FAILED) @@ -106,7 +106,7 @@ func(f *firstAuthResource) challenge(ctx context.Context, sym string, input []by } return r, nil } - + func main() { var cont bool var sessionId string @@ -141,12 +141,12 @@ func main() { rs := resource.NewDbResource(store) cfg := engine.Config{ - Root: "root", + Root: "root", SessionId: sessionId, } aux := &firstAuthResource{ - st: st, + st: st, store: authStore, } diff --git a/examples/gdbm/main.go b/examples/gdbm/main.go @@ -9,17 +9,17 @@ import ( testdataloader "github.com/peteole/testdata-loader" - "git.defalsify.org/vise.git/engine" - "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/db" - gdbmdb "git.defalsify.org/vise.git/db/gdbm" fsdb "git.defalsify.org/vise.git/db/fs" + gdbmdb "git.defalsify.org/vise.git/db/gdbm" + "git.defalsify.org/vise.git/engine" + "git.defalsify.org/vise.git/resource" ) var ( - baseDir = testdataloader.GetBasePath() + baseDir = testdataloader.GetBasePath() scriptDir = path.Join(baseDir, "examples", "gdbm") - dbFile = path.Join(scriptDir, "vise.gdbm") + dbFile = path.Join(scriptDir, "vise.gdbm") ) func do(ctx context.Context, sym string, input []byte) (resource.Result, error) { @@ -27,7 +27,7 @@ func do(ctx context.Context, sym string, input []byte) (resource.Result, error) Content: "bye", }, nil } - + func main() { ctx := context.Background() root := "root" @@ -54,7 +54,7 @@ func main() { rs.WithEntryFuncGetter(rsf.FuncFor) cfg := engine.Config{ - Root: "root", + Root: "root", Language: "nor", } en := engine.NewEngine(cfg, rs) diff --git a/examples/http/main.go b/examples/http/main.go @@ -10,11 +10,11 @@ import ( "os" "path" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" + "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" - "git.defalsify.org/vise.git/logging" - fsdb "git.defalsify.org/vise.git/db/fs" ) var ( @@ -23,7 +23,7 @@ var ( type LocalHandler struct { sessionId string -} +} func NewLocalHandler() *LocalHandler { return &LocalHandler{ @@ -31,11 +31,11 @@ func NewLocalHandler() *LocalHandler { } } -func(h* LocalHandler) SetSession(sessionId string) { +func (h *LocalHandler) SetSession(sessionId string) { h.sessionId = sessionId } -func(h* LocalHandler) AddSession(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (h *LocalHandler) AddSession(ctx context.Context, sym string, input []byte) (resource.Result, error) { return resource.Result{ Content: h.sessionId + ":" + string(input), }, nil @@ -49,7 +49,7 @@ type RequestParser interface { type DefaultRequestParser struct { } -func(rp *DefaultRequestParser) GetSessionId(rq *http.Request) (string, error) { +func (rp *DefaultRequestParser) GetSessionId(rq *http.Request) (string, error) { v := rq.Header.Get("X-Vise-Session") if v == "" { return "", fmt.Errorf("no session found") @@ -57,7 +57,7 @@ func(rp *DefaultRequestParser) GetSessionId(rq *http.Request) (string, error) { return v, nil } -func(rp *DefaultRequestParser) GetInput(rq *http.Request) ([]byte, error) { +func (rp *DefaultRequestParser) GetInput(rq *http.Request) ([]byte, error) { defer rq.Body.Close() v, err := ioutil.ReadAll(rq.Body) if err != nil { @@ -68,10 +68,10 @@ func(rp *DefaultRequestParser) GetInput(rq *http.Request) ([]byte, error) { type DefaultSessionHandler struct { cfgTemplate engine.Config - rp RequestParser - rs resource.Resource - rh *LocalHandler - peBase string + rp RequestParser + rs resource.Resource + rh *LocalHandler + peBase string } func NewDefaultSessionHandler(ctx context.Context, persistBase string, resourceBase string, rp RequestParser, outputSize uint32, cacheSize uint32, flagCount uint32) *DefaultSessionHandler { @@ -86,9 +86,9 @@ func NewDefaultSessionHandler(ctx context.Context, persistBase string, resourceB return &DefaultSessionHandler{ cfgTemplate: engine.Config{ OutputSize: outputSize, - Root: "root", - FlagCount: flagCount, - CacheSize: cacheSize, + Root: "root", + FlagCount: flagCount, + CacheSize: cacheSize, }, rs: rs, rh: rh, @@ -96,10 +96,10 @@ func NewDefaultSessionHandler(ctx context.Context, persistBase string, resourceB } } -func(f *DefaultSessionHandler) GetEngine(ctx context.Context, sessionId string) (engine.Engine, error) { +func (f *DefaultSessionHandler) GetEngine(ctx context.Context, sessionId string) (engine.Engine, error) { cfg := f.cfgTemplate cfg.SessionId = sessionId - + //persistPath := path.Join(f.peBase, sessionId) persistPath := path.Join(f.peBase) if persistPath == "" { @@ -120,8 +120,8 @@ func(f *DefaultSessionHandler) GetEngine(ctx context.Context, sessionId string) return en, err } -func(f *DefaultSessionHandler) writeError(w http.ResponseWriter, code int, msg string, err error) { - w.Header().Set("X-Vise", msg + ": " + err.Error()) +func (f *DefaultSessionHandler) writeError(w http.ResponseWriter, code int, msg string, err error) { + w.Header().Set("X-Vise", msg+": "+err.Error()) w.Header().Set("Content-Length", "0") w.WriteHeader(code) _, err = w.Write([]byte{}) @@ -129,10 +129,10 @@ func(f *DefaultSessionHandler) writeError(w http.ResponseWriter, code int, msg s w.WriteHeader(500) w.Header().Set("X-Vise", err.Error()) } - return + return } -func(f *DefaultSessionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { +func (f *DefaultSessionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { var r bool sessionId, err := f.rp.GetSessionId(req) if err != nil { @@ -188,7 +188,7 @@ func main() { flag.StringVar(&port, "p", "7123", "http port") flag.StringVar(&peDir, "d", ".state", "persistance dir") flag.UintVar(&flagCount, "f", 0, "flag count") - flag.UintVar(&cacheSize, "c", 1024 * 1024, "cache size") + flag.UintVar(&cacheSize, "c", 1024*1024, "cache size") flag.UintVar(&outSize, "s", 160, "max size of output") flag.Parse() fmt.Fprintf(os.Stderr, "starting server:\n\tpersistence dir: %s\n\tresource dir: %s\n", rsDir, peDir) @@ -197,7 +197,7 @@ func main() { rp := &DefaultRequestParser{} h := NewDefaultSessionHandler(ctx, peDir, rsDir, rp, uint32(outSize), uint32(cacheSize), uint32(flagCount)) s := &http.Server{ - Addr: fmt.Sprintf("%s:%s", host, port), + Addr: fmt.Sprintf("%s:%s", host, port), Handler: h, } err := s.ListenAndServe() diff --git a/examples/intro/main.go b/examples/intro/main.go @@ -12,10 +12,10 @@ import ( testdataloader "github.com/peteole/testdata-loader" "git.defalsify.org/vise.git/cache" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - fsdb "git.defalsify.org/vise.git/db/fs" ) const ( @@ -23,7 +23,7 @@ const ( ) var ( - baseDir = testdataloader.GetBasePath() + baseDir = testdataloader.GetBasePath() scriptDir = path.Join(baseDir, "examples", "intro") ) @@ -35,7 +35,7 @@ type introResource struct { func newintroResource(ctx context.Context) introResource { store := fsdb.NewFsDb() - err := store.Connect(ctx, scriptDir) + err := store.Connect(ctx, scriptDir) if err != nil { panic(err) } @@ -45,7 +45,7 @@ func newintroResource(ctx context.Context) introResource { // increment counter. // return a string representing the current value of the counter. -func(c *introResource) count(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (c *introResource) count(ctx context.Context, sym string, input []byte) (resource.Result, error) { s := "%v time" if c.c != 1 { s += "s" @@ -53,13 +53,13 @@ func(c *introResource) count(ctx context.Context, sym string, input []byte) (res r := resource.Result{ Content: fmt.Sprintf(s, c.c), } - c.c += 1 - return r, nil + c.c += 1 + return r, nil } // if input is suppled, append it to the stored string vector and set the HAVESOMETHING flag. // return the stored string vector value, one string per line. -func(c *introResource) something(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (c *introResource) something(ctx context.Context, sym string, input []byte) (resource.Result, error) { c.v = append(c.v, string(input)) r := resource.Result{ Content: strings.Join(c.v, "\n"), @@ -81,7 +81,7 @@ func main() { flag.StringVar(&sessionId, "session-id", "default", "session id") flag.Parse() fmt.Fprintf(os.Stderr, "starting session at symbol '%s' using resource dir: %s\n", root, dir) - + ctx := context.Background() st := state.NewState(3) rs := newintroResource(ctx) @@ -89,8 +89,8 @@ func main() { rs.AddLocalFunc("something", rs.something) ca := cache.NewCache() cfg := engine.Config{ - Root: "root", - SessionId: sessionId, + Root: "root", + SessionId: sessionId, OutputSize: uint32(size), } en := engine.NewEngine(cfg, rs) diff --git a/examples/languages/main.go b/examples/languages/main.go @@ -10,13 +10,13 @@ import ( testdataloader "github.com/peteole/testdata-loader" gotext "gopkg.in/leonelquinteros/gotext.v1" + fsdb "git.defalsify.org/vise.git/db/fs" + "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/lang" + "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/persist" - "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - fsdb "git.defalsify.org/vise.git/db/fs" - "git.defalsify.org/vise.git/logging" ) const ( @@ -24,9 +24,9 @@ const ( ) var ( - logg = logging.NewVanilla() - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "examples", "languages") + logg = logging.NewVanilla() + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "examples", "languages") translationDir = path.Join(scriptDir, "locale") ) @@ -42,10 +42,10 @@ func codeFromCtx(ctx context.Context) string { type langController struct { translations map[string]gotext.Locale - State *state.State + State *state.State } -func(l *langController) lang(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (l *langController) lang(ctx context.Context, sym string, input []byte) (resource.Result, error) { lang := "nor" var rs resource.Result if l.State.MatchFlag(USERFLAG_FLIP, true) { @@ -61,7 +61,7 @@ func(l *langController) lang(ctx context.Context, sym string, input []byte) (res func msg(ctx context.Context, sym string, input []byte) (resource.Result, error) { var r resource.Result - switch codeFromCtx(ctx) { + switch codeFromCtx(ctx) { case "nor": r.Content = "Denne meldingen er fra en ekstern funksjon" default: @@ -70,11 +70,11 @@ func msg(ctx context.Context, sym string, input []byte) (resource.Result, error) return r, nil } -func(l *langController) moMsg(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (l *langController) moMsg(ctx context.Context, sym string, input []byte) (resource.Result, error) { var r resource.Result code := codeFromCtx(ctx) o := gotext.NewLocale(translationDir, code) - o.AddDomain("default") + o.AddDomain("default") r.Content = o.Get("This message is translated using gettext") logg.DebugCtxf(ctx, "lang", "code", code, "translateor", o) return r, nil @@ -96,7 +96,7 @@ func main() { rs := resource.NewDbResource(rsStore) cfg := engine.Config{ - Root: "root", + Root: "root", SessionId: "default", } diff --git a/examples/longmenu/main.go b/examples/longmenu/main.go @@ -10,12 +10,13 @@ import ( testdataloader "github.com/peteole/testdata-loader" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" - fsdb "git.defalsify.org/vise.git/db/fs" ) + var ( - baseDir = testdataloader.GetBasePath() + baseDir = testdataloader.GetBasePath() scriptDir = path.Join(baseDir, "examples", "longmenu") ) @@ -33,7 +34,7 @@ func main() { } rs := resource.NewDbResource(store) defer rs.Close(ctx) - cfg := engine.Config { + cfg := engine.Config{ OutputSize: uint32(size), } en := engine.NewEngine(cfg, rs) diff --git a/examples/pincheck/main.go b/examples/pincheck/main.go @@ -12,11 +12,11 @@ import ( testdataloader "github.com/peteole/testdata-loader" "git.defalsify.org/vise.git/cache" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" + "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/logging" - fsdb "git.defalsify.org/vise.git/db/fs" ) const ( @@ -25,13 +25,13 @@ const ( ) var ( - logg = logging.NewVanilla() - baseDir = testdataloader.GetBasePath() + logg = logging.NewVanilla() + baseDir = testdataloader.GetBasePath() scriptDir = path.Join(baseDir, "examples", "pincheck") - pin = []byte("1234") + pin = []byte("1234") ) -type pinResource struct{ +type pinResource struct { resource.Resource st *state.State } @@ -43,7 +43,7 @@ func newPinResource(resource resource.Resource, state *state.State) *pinResource } } -func(rs *pinResource) pinCheck(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (rs *pinResource) pinCheck(ctx context.Context, sym string, input []byte) (resource.Result, error) { var r resource.Result if rs.st.MatchFlag(USERFLAG_QUERYPIN, false) { @@ -61,7 +61,7 @@ func(rs *pinResource) pinCheck(ctx context.Context, sym string, input []byte) (r return r, nil } -func(rs *pinResource) pinClear(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (rs *pinResource) pinClear(ctx context.Context, sym string, input []byte) (resource.Result, error) { var r resource.Result r.FlagReset = []uint32{USERFLAG_VALIDPIN, USERFLAG_QUERYPIN} return r, nil @@ -88,7 +88,7 @@ func main() { rsf.AddLocalFunc("pinclear", rs.pinClear) ca := cache.NewCache() cfg := engine.Config{ - Root: "root", + Root: "root", StateDebug: true, } en := engine.NewEngine(cfg, rs) diff --git a/examples/preprocessor/main.go b/examples/preprocessor/main.go @@ -12,21 +12,20 @@ import ( "git.defalsify.org/vise.git/asm" "git.defalsify.org/vise.git/cache" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - fsdb "git.defalsify.org/vise.git/db/fs" ) - var ( - baseDir = testdataloader.GetBasePath() + baseDir = testdataloader.GetBasePath() scriptDir = path.Join(baseDir, "examples", "preprocessor") ) type countResource struct { parser *asm.FlagParser - count int + count int } func newCountResource(fp string) (*countResource, error) { @@ -38,12 +37,12 @@ func newCountResource(fp string) (*countResource, error) { return nil, err } return &countResource{ - count: 0, + count: 0, parser: parser, }, nil } -func(rsc* countResource) poke(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (rsc *countResource) poke(ctx context.Context, sym string, input []byte) (resource.Result, error) { var r resource.Result ss := strings.Split(sym, "_") @@ -58,7 +57,7 @@ func(rsc* countResource) poke(ctx context.Context, sym string, input []byte) (re r.FlagSet = []uint32{uint32(v)} s, err := rsc.parser.GetDescription(v) if err == nil { - r.Content = s + r.Content = s } rsc.count++ diff --git a/examples/profile/main.go b/examples/profile/main.go @@ -13,28 +13,28 @@ import ( testdataloader "github.com/peteole/testdata-loader" "git.defalsify.org/vise.git/cache" + "git.defalsify.org/vise.git/db" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/db" - fsdb "git.defalsify.org/vise.git/db/fs" ) const ( USERFLAG_IDENTIFIED = iota + state.FLAG_USERSTART - USERFLAG_HAVENAME + USERFLAG_HAVENAME USERFLAG_HAVEEMAIL ) var ( - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "examples", "profile") + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "examples", "profile") emptyResult = resource.Result{} ) type profileResource struct { *resource.DbResource - st *state.State + st *state.State haveEntered bool } @@ -46,7 +46,7 @@ func newProfileResource(st *state.State, rs *resource.DbResource) resource.Resou } } -func(pr *profileResource) checkEntry() error { +func (pr *profileResource) checkEntry() error { log.Printf("%v %v", USERFLAG_IDENTIFIED, USERFLAG_HAVENAME) if pr.haveEntered { return nil @@ -60,7 +60,7 @@ func(pr *profileResource) checkEntry() error { return nil } -func(pr profileResource) nameSave(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (pr profileResource) nameSave(ctx context.Context, sym string, input []byte) (resource.Result, error) { log.Printf("writing name to file") fp := path.Join(scriptDir, "myname.txt") err := ioutil.WriteFile(fp, input, 0600) @@ -74,7 +74,7 @@ func(pr profileResource) nameSave(ctx context.Context, sym string, input []byte) return emptyResult, err } -func(pr profileResource) emailSave(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (pr profileResource) emailSave(ctx context.Context, sym string, input []byte) (resource.Result, error) { log.Printf("writing email to file") fp := path.Join(scriptDir, "myemail.txt") err := ioutil.WriteFile(fp, input, 0600) @@ -116,8 +116,8 @@ func main() { rs.AddLocalFunc("do_email_save", rs.emailSave) ca := cache.NewCache() cfg := engine.Config{ - Root: "root", - SessionId: sessionId, + Root: "root", + SessionId: sessionId, OutputSize: uint32(size), } en := engine.NewEngine(cfg, rs) diff --git a/examples/quit/main.go b/examples/quit/main.go @@ -9,13 +9,13 @@ import ( testdataloader "github.com/peteole/testdata-loader" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" - fsdb "git.defalsify.org/vise.git/db/fs" ) var ( - baseDir = testdataloader.GetBasePath() + baseDir = testdataloader.GetBasePath() scriptDir = path.Join(baseDir, "examples", "quit") ) diff --git a/examples/reuse/main.go b/examples/reuse/main.go @@ -9,14 +9,14 @@ import ( testdataloader "github.com/peteole/testdata-loader" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" - fsdb "git.defalsify.org/vise.git/db/fs" ) var ( - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "examples", "reuse") + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "examples", "reuse") emptyResult = resource.Result{} ) @@ -37,7 +37,7 @@ func main() { panic(err) } rs := resource.NewDbResource(store) - + rs.AddLocalFunc("do_foo", same) rs.AddLocalFunc("do_bar", same) cfg := engine.Config{ diff --git a/examples/session/main.go b/examples/session/main.go @@ -11,16 +11,16 @@ import ( testdataloader "github.com/peteole/testdata-loader" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" - "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/logging" - fsdb "git.defalsify.org/vise.git/db/fs" + "git.defalsify.org/vise.git/resource" ) var ( - logg = logging.NewVanilla() - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "examples", "session") + logg = logging.NewVanilla() + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "examples", "session") emptyResult = resource.Result{} ) @@ -47,7 +47,7 @@ func save(ctx context.Context, sym string, input []byte) (resource.Result, error } } return resource.Result{ - Content: string(r), + Content: string(r), }, nil } @@ -70,8 +70,8 @@ func main() { rs := resource.NewDbResource(store) rs.AddLocalFunc("do_save", save) cfg := engine.Config{ - Root: "root", - SessionId: sessionId, + Root: "root", + SessionId: sessionId, OutputSize: uint32(size), StateDebug: true, } diff --git a/examples/state/main.go b/examples/state/main.go @@ -9,11 +9,11 @@ import ( testdataloader "github.com/peteole/testdata-loader" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" + "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/logging" - fsdb "git.defalsify.org/vise.git/db/fs" ) const ( @@ -23,8 +23,8 @@ const ( ) var ( - logg = logging.NewVanilla() - baseDir = testdataloader.GetBasePath() + logg = logging.NewVanilla() + baseDir = testdataloader.GetBasePath() scriptDir = path.Join(baseDir, "examples", "state") ) @@ -32,19 +32,18 @@ type flagResource struct { st *state.State } -func(f *flagResource) get(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (f *flagResource) get(ctx context.Context, sym string, input []byte) (resource.Result, error) { return resource.Result{ Content: state.FlagDebugger.AsString(f.st.Flags, 3), - }, nil + }, nil } - -func(f *flagResource) do(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (f *flagResource) do(ctx context.Context, sym string, input []byte) (resource.Result, error) { var r resource.Result logg.DebugCtxf(ctx, "in do", "sym", sym) - switch(sym) { + switch sym { case "do_foo": if f.st.MatchFlag(USER_FOO, false) { r.FlagSet = append(r.FlagSet, USER_FOO) @@ -66,7 +65,7 @@ func(f *flagResource) do(ctx context.Context, sym string, input []byte) (resourc } return r, nil } - + func main() { root := "root" fmt.Fprintf(os.Stderr, "starting session at symbol '%s' using resource dir: %s\n", root, scriptDir) diff --git a/examples/state_passive/main.go b/examples/state_passive/main.go @@ -11,12 +11,12 @@ import ( "os" "path" - "git.defalsify.org/vise.git/resource" - "git.defalsify.org/vise.git/state" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" - "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/logging" - fsdb "git.defalsify.org/vise.git/db/fs" + "git.defalsify.org/vise.git/persist" + "git.defalsify.org/vise.git/resource" + "git.defalsify.org/vise.git/state" ) const ( @@ -31,7 +31,7 @@ var ( ) type fsData struct { - path string + path string persister *persist.Persister } @@ -67,7 +67,7 @@ func (fsd *fsData) poke(ctx context.Context, sym string, input []byte) (resource if st.MatchFlag(v, true) { logg.DebugCtxf(ctx, "match on flag", "flag", v) res.FlagReset = append(res.FlagReset, v) - res.FlagSet = append(res.FlagSet, v + 1) + res.FlagSet = append(res.FlagSet, v+1) break } } @@ -97,7 +97,7 @@ func main() { } rs := resource.NewDbResource(rsStore) cfg := engine.Config{ - Root: "root", + Root: "root", SessionId: sessionId, FlagCount: 4, } @@ -116,7 +116,7 @@ func main() { fp := path.Join(dp, sessionId) aux := &fsData{ - path: fp, + path: fp, persister: pr, } rs.AddLocalFunc("poke", aux.poke) diff --git a/examples/static/main.go b/examples/static/main.go @@ -11,26 +11,25 @@ import ( testdataloader "github.com/peteole/testdata-loader" "git.defalsify.org/vise.git/cache" + "git.defalsify.org/vise.git/db" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/db" - fsdb "git.defalsify.org/vise.git/db/fs" ) var ( - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "examples", "static") + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "examples", "static") emptyResult = resource.Result{} ) func out(ctx context.Context, sym string, input []byte) (resource.Result, error) { return resource.Result{ - Content: "foo", + Content: "foo", }, nil } - func main() { var useInternal bool root := "root" diff --git a/examples/validate/main.go b/examples/validate/main.go @@ -10,15 +10,15 @@ import ( testdataloader "github.com/peteole/testdata-loader" + fsdb "git.defalsify.org/vise.git/db/fs" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - fsdb "git.defalsify.org/vise.git/db/fs" ) var ( - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "examples", "validate") + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "examples", "validate") emptyResult = resource.Result{} ) @@ -31,7 +31,7 @@ type verifyResource struct { st *state.State } -func(vr *verifyResource) verify(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (vr *verifyResource) verify(ctx context.Context, sym string, input []byte) (resource.Result, error) { var err error if string(input) == "something" { vr.st.SetFlag(USERFLAG_HAVESOMETHING) @@ -41,7 +41,7 @@ func(vr *verifyResource) verify(ctx context.Context, sym string, input []byte) ( }, err } -func(vr *verifyResource) again(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (vr *verifyResource) again(ctx context.Context, sym string, input []byte) (resource.Result, error) { vr.st.ResetFlag(USERFLAG_HAVESOMETHING) return resource.Result{}, nil } @@ -70,8 +70,8 @@ func main() { rs.AddLocalFunc("again", rs.again) cfg := engine.Config{ - Root: "root", - SessionId: sessionId, + Root: "root", + SessionId: sessionId, OutputSize: uint32(size), } diff --git a/internal/resourcetest/util.go b/internal/resourcetest/util.go @@ -3,14 +3,14 @@ package resourcetest import ( "context" - "git.defalsify.org/vise.git/resource" - "git.defalsify.org/vise.git/db/mem" "git.defalsify.org/vise.git/db" + "git.defalsify.org/vise.git/db/mem" + "git.defalsify.org/vise.git/resource" ) type TestResource struct { *resource.DbResource - db db.Db + db db.Db ctx context.Context } @@ -47,36 +47,36 @@ func newTestResource(path string) *TestResource { rsd := resource.NewDbResource(store) rs := &TestResource{ DbResource: rsd, - ctx: ctx, - db: store, + ctx: ctx, + db: store, } return rs } -func(tr *TestResource) AddTemplate(ctx context.Context, key string, val string) error { +func (tr *TestResource) AddTemplate(ctx context.Context, key string, val string) error { tr.db.SetPrefix(db.DATATYPE_TEMPLATE) return tr.db.Put(ctx, []byte(key), []byte(val)) } -func(tr *TestResource) AddBytecode(ctx context.Context, key string, val []byte) error { +func (tr *TestResource) AddBytecode(ctx context.Context, key string, val []byte) error { tr.db.SetPrefix(db.DATATYPE_BIN) return tr.db.Put(ctx, []byte(key), val) } -func(tr *TestResource) AddMenu(ctx context.Context, key string, val string) error { +func (tr *TestResource) AddMenu(ctx context.Context, key string, val string) error { tr.db.SetPrefix(db.DATATYPE_MENU) return tr.db.Put(ctx, []byte(key), []byte(val)) } -func(tr *TestResource) AddFunc(ctx context.Context, key string, fn resource.EntryFunc) { +func (tr *TestResource) AddFunc(ctx context.Context, key string, fn resource.EntryFunc) { tr.AddLocalFunc(key, fn) } -func(tr *TestResource) AddStatic(ctx context.Context, key string, val string) error { +func (tr *TestResource) AddStatic(ctx context.Context, key string, val string) error { tr.db.SetPrefix(db.DATATYPE_STATICLOAD) return tr.db.Put(ctx, []byte(key), []byte(val)) } -func(tr *TestResource) Lock() { +func (tr *TestResource) Lock() { tr.db.SetLock(0, true) } diff --git a/internal/resourcetest/util_test.go b/internal/resourcetest/util_test.go @@ -8,7 +8,6 @@ package resourcetest // "git.defalsify.org/vise.git/resource" //) - //type TestSizeResource struct { // *DbResource //} diff --git a/lang/lang.go b/lang/lang.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/barbashov/iso639-3" + iso639_3 "github.com/barbashov/iso639-3" ) var ( @@ -35,7 +35,7 @@ func LanguageFromCode(code string) (Language, error) { // String implements the String interface. // // Returns a representation of the Language fit for debugging. -func(l Language) String() string { +func (l Language) String() string { return fmt.Sprintf("%s (%s)", l.Code, l.Name) } diff --git a/lang/lang_test.go b/lang/lang_test.go @@ -8,7 +8,7 @@ func TestLang(t *testing.T) { var err error _, err = LanguageFromCode("xxx") if err == nil { - t.Fatalf("expected error") + t.Fatalf("expected error") } l, err := LanguageFromCode("en") if err != nil { diff --git a/logging/debug.go b/logging/debug.go @@ -1,3 +1,4 @@ +//go:build logdebug // +build logdebug package logging diff --git a/logging/default.go b/logging/default.go @@ -1,3 +1,4 @@ +//go:build !logwarn && !logdebug && !loginfo && !logtrace && !logerror // +build !logwarn,!logdebug,!loginfo,!logtrace,!logerror package logging diff --git a/logging/error.go b/logging/error.go @@ -1,3 +1,4 @@ +//go:build logerror // +build logerror package logging diff --git a/logging/info.go b/logging/info.go @@ -1,3 +1,4 @@ +//go:build loginfo // +build loginfo package logging diff --git a/logging/logging.go b/logging/logging.go @@ -22,17 +22,17 @@ const ( var ( levelStr = map[int]string{ - LVL_ERROR: "E", - LVL_WARN: "W", - LVL_INFO: "I", - LVL_DEBUG: "D", - LVL_TRACE: "T", + LVL_ERROR: "E", + LVL_WARN: "W", + LVL_INFO: "I", + LVL_DEBUG: "D", + LVL_TRACE: "T", } ) // AsString returns the string representation used in logging output for the given log level. func AsString(level int) string { - return levelStr[level] + return levelStr[level] } type Logger interface { @@ -65,4 +65,3 @@ type Logger interface { // ErrorCtxf logs a line with context to the default writer the ERROR loglevel. ErrorCtxf(ctx context.Context, msg string, args ...any) } - diff --git a/logging/trace.go b/logging/trace.go @@ -1,3 +1,4 @@ +//go:build logtrace // +build logtrace package logging diff --git a/logging/vanilla.go b/logging/vanilla.go @@ -18,7 +18,7 @@ var ( type Vanilla struct { domain string levelFilter int - ctxkey []string + ctxkey []string } // NewVanilla creates a new Vanilla logger. @@ -163,12 +163,12 @@ func (v Vanilla) argsToString(ctx context.Context, args []any) string { var s string if ctx != nil { - for _, k := range(v.ctxkey) { + for _, k := range v.ctxkey { v := ctx.Value(k) if v != nil { v, ok := v.(string) if ok { - args = append(args, "x-" + k, v) + args = append(args, "x-"+k, v) } } } diff --git a/logging/vanilla_test.go b/logging/vanilla_test.go @@ -23,7 +23,7 @@ func TestVanilla(t *testing.T) { func TestVanillaCtx(t *testing.T) { logg := NewVanilla().WithDomain("test").WithLevel(LVL_DEBUG).WithContextKey("foo") - ctx := context.WithValue(context.Background(), "foo", "bar") + ctx := context.WithValue(context.Background(), "foo", "bar") w := bytes.NewBuffer(nil) LogWriter = w diff --git a/logging/warn.go b/logging/warn.go @@ -1,3 +1,4 @@ +//go:build logwarn // +build logwarn package logging diff --git a/persist/fs_test.go b/persist/fs_test.go @@ -7,9 +7,9 @@ import ( "testing" "git.defalsify.org/vise.git/cache" + "git.defalsify.org/vise.git/db/mem" "git.defalsify.org/vise.git/state" "git.defalsify.org/vise.git/vm" - "git.defalsify.org/vise.git/db/mem" ) func TestSerializeState(t *testing.T) { @@ -131,7 +131,7 @@ func TestSaveLoadFlags(t *testing.T) { } prnew := NewPersister(store) - + err = prnew.Load("xyzzy") if err != nil { t.Fatal(err) diff --git a/persist/persist.go b/persist/persist.go @@ -6,45 +6,44 @@ import ( "github.com/fxamacker/cbor/v2" + "git.defalsify.org/vise.git/cache" "git.defalsify.org/vise.git/db" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/cache" ) // Persister abstracts storage and retrieval of state and cache. type Persister struct { - State *state.State + State *state.State Memory *cache.Cache - ctx context.Context - db db.Db - flush bool + ctx context.Context + db db.Db + flush bool } // NewPersister creates a new Persister instance. func NewPersister(db db.Db) *Persister { return &Persister{ - db: db, + db: db, ctx: context.Background(), } } // WithSession is a chainable function that sets the current golang context of the persister. -func(p *Persister) WithContext(ctx context.Context) *Persister { +func (p *Persister) WithContext(ctx context.Context) *Persister { p.ctx = ctx return p } // WithSession is a chainable function that sets the current session context of the persister. -func(p *Persister) WithSession(sessionId string) *Persister { +func (p *Persister) WithSession(sessionId string) *Persister { p.db.SetSession(sessionId) return p } - // WithContent is a chainable function that sets a current State and Cache object. // // This method is normally called before Serialize / Save. -func(p *Persister) WithContent(st *state.State, ca *cache.Cache) *Persister { +func (p *Persister) WithContent(st *state.State, ca *cache.Cache) *Persister { p.State = st p.Memory = ca return p @@ -52,7 +51,7 @@ func(p *Persister) WithContent(st *state.State, ca *cache.Cache) *Persister { // WithFlush is a chainable function that instructs the persister to flush its memory and state // after successful Save. -func(p *Persister) WithFlush() *Persister { +func (p *Persister) WithFlush() *Persister { p.flush = true return p } @@ -60,27 +59,27 @@ func(p *Persister) WithFlush() *Persister { // Invalid checks if the underlying state has been invalidated. // // An invalid state will cause Save to panic. -func(p *Persister) Invalid() bool { +func (p *Persister) Invalid() bool { return p.GetState().Invalid() || p.GetMemory().Invalid() } // GetState returns the state enclosed by the Persister. -func(p *Persister) GetState() *state.State { +func (p *Persister) GetState() *state.State { return p.State } // GetMemory returns the cache (memory) enclosed by the Persister. -func(p *Persister) GetMemory() cache.Memory { +func (p *Persister) GetMemory() cache.Memory { return p.Memory } // Serialize encodes the state and cache into byte form for storage. -func(p *Persister) Serialize() ([]byte, error) { +func (p *Persister) Serialize() ([]byte, error) { return cbor.Marshal(p) } // Deserialize decodes the state and cache from storage, and applies them to the persister. -func(p *Persister) Deserialize(b []byte) error { +func (p *Persister) Deserialize(b []byte) error { err := cbor.Unmarshal(b, p) return err } @@ -89,7 +88,7 @@ func(p *Persister) Deserialize(b []byte) error { // // If save is successful and WithFlush() has been called, the state and memory // will be empty when the method returns. -func(p *Persister) Save(key string) error { +func (p *Persister) Save(key string) error { if p.Invalid() { panic("persister has been invalidated") } @@ -114,7 +113,7 @@ func(p *Persister) Save(key string) error { } // Load retrieves state and cache from the db.Db backend. -func(p *Persister) Load(key string) error { +func (p *Persister) Load(key string) error { p.db.SetPrefix(db.DATATYPE_STATE) b, err := p.db.Get(p.ctx, []byte(key)) if err != nil { @@ -130,6 +129,6 @@ func(p *Persister) Load(key string) error { } // String implements the String interface -func(p *Persister) String() string { +func (p *Persister) String() string { return fmt.Sprintf("perister @%p state:%p cache:%p", p, p.State, p.Memory) } diff --git a/persist/persist_test.go b/persist/persist_test.go @@ -4,9 +4,9 @@ import ( "context" "testing" + "git.defalsify.org/vise.git/cache" "git.defalsify.org/vise.git/db/mem" "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/cache" ) func TestCreateCache(t *testing.T) { @@ -64,7 +64,7 @@ func TestInvalidateState(t *testing.T) { st.Invalidate() defer func() { if r := recover(); r == nil { - t.Fatal("expected panic") + t.Fatal("expected panic") } }() _ = pr.Save("foo") @@ -86,7 +86,7 @@ func TestInvalidateCache(t *testing.T) { ca.Invalidate() defer func() { if r := recover(); r == nil { - t.Fatal("expected panic") + t.Fatal("expected panic") } }() _ = pr.Save("foo") @@ -109,7 +109,7 @@ func TestInvalidateAll(t *testing.T) { st.Invalidate() defer func() { if r := recover(); r == nil { - t.Fatal("expected panic") + t.Fatal("expected panic") } }() _ = pr.Save("foo") @@ -128,7 +128,7 @@ func TestFlush(t *testing.T) { ca.Push() ca.Add("blinky", "clyde", 13) ca.WithCacheSize(666) - + st.Down("xyzzy") st.Down("plugh") st.SetFlag(3) @@ -145,7 +145,7 @@ func TestFlush(t *testing.T) { t.Fatalf("expected bitsize %d, got %d", expectBitSize, st.FlagBitSize()) } st = pe.GetState() - node, lvl := st.Where() + node, lvl := st.Where() if lvl != 0 { t.Fatalf("expected level 0, got: %d", lvl) } diff --git a/render/menu.go b/render/menu.go @@ -16,7 +16,7 @@ type BrowseError struct { } // Error implements the Error interface. -func(err *BrowseError) Error() string { +func (err *BrowseError) Error() string { return fmt.Sprintf("index is out of bounds: %v", err.Idx) } @@ -39,12 +39,12 @@ type BrowseConfig struct { // Create a BrowseConfig with default values. func DefaultBrowseConfig() BrowseConfig { return BrowseConfig{ - NextAvailable: true, - NextSelector: "11", - NextTitle: "next", + NextAvailable: true, + NextSelector: "11", + NextTitle: "next", PreviousAvailable: true, - PreviousSelector: "22", - PreviousTitle: "previous", + PreviousSelector: "22", + PreviousTitle: "previous", } } @@ -52,22 +52,22 @@ func DefaultBrowseConfig() BrowseConfig { // // May be included in a Page object to render menus for pages. type Menu struct { - rs resource.Resource - menu [][2]string // selector and title for menu items. - browse BrowseConfig // browse definitions. - pageCount uint16 // number of pages the menu should represent. - canNext bool // availability flag for the "next" browse option. - canPrevious bool // availability flag for the "previous" browse option. + rs resource.Resource + menu [][2]string // selector and title for menu items. + browse BrowseConfig // browse definitions. + pageCount uint16 // number of pages the menu should represent. + canNext bool // availability flag for the "next" browse option. + canPrevious bool // availability flag for the "previous" browse option. //outputSize uint16 // maximum size constraint for the menu. sink bool keep bool - sep string + sep string } // String implements the String interface. // // It returns debug representation of menu. -func(m Menu) String() string { +func (m Menu) String() string { return fmt.Sprintf("pagecount: %v menusink: %v next: %v prev: %v", m.pageCount, m.sink, m.canNext, m.canPrevious) } @@ -75,18 +75,18 @@ func(m Menu) String() string { func NewMenu() *Menu { return &Menu{ keep: true, - sep: ":", + sep: ":", } } // WithPageCount is a chainable function that defines the number of allowed pages for browsing. -func(m *Menu) WithSeparator(sep string) *Menu { +func (m *Menu) WithSeparator(sep string) *Menu { m.sep = sep return m } // WithPageCount is a chainable function that defines the number of allowed pages for browsing. -func(m *Menu) WithPageCount(pageCount uint16) *Menu { +func (m *Menu) WithPageCount(pageCount uint16) *Menu { m.pageCount = pageCount return m } @@ -94,7 +94,7 @@ func(m *Menu) WithPageCount(pageCount uint16) *Menu { // WithPages is a chainable function which activates pagination in the menu. // // It is equivalent to WithPageCount(1) -func(m *Menu) WithPages() *Menu { +func (m *Menu) WithPages() *Menu { if m.pageCount == 0 { m.pageCount = 1 } @@ -104,7 +104,7 @@ func(m *Menu) WithPages() *Menu { // WithSink is a chainable function that informs the menu that a content sink exists in the render. // // A content sink receives priority to consume all remaining space after all non-sink items have been rendered. -func(m *Menu) WithSink() *Menu { +func (m *Menu) WithSink() *Menu { m.sink = true return m } @@ -112,17 +112,17 @@ func(m *Menu) WithSink() *Menu { // WithDispose is a chainable function that preserves the menu after render is complete. // // It is used for multi-page content. -func(m *Menu) WithDispose() *Menu { +func (m *Menu) WithDispose() *Menu { m.keep = false return m } -func(m *Menu) WithResource(rs resource.Resource) *Menu { +func (m *Menu) WithResource(rs resource.Resource) *Menu { m.rs = rs return m } -func(m Menu) IsSink() bool { +func (m Menu) IsSink() bool { return m.sink } @@ -138,18 +138,18 @@ func(m Menu) IsSink() bool { //} // WithBrowseConfig defines the criteria for page browsing. -func(m *Menu) WithBrowseConfig(cfg BrowseConfig) *Menu { +func (m *Menu) WithBrowseConfig(cfg BrowseConfig) *Menu { m.browse = cfg return m } // GetBrowseConfig returns a copy of the current state of the browse configuration. -func(m *Menu) GetBrowseConfig() BrowseConfig { +func (m *Menu) GetBrowseConfig() BrowseConfig { return m.browse } // Put adds a menu option to the menu rendering. -func(m *Menu) Put(selector string, title string) error { +func (m *Menu) Put(selector string, title string) error { m.menu = append(m.menu, [2]string{selector, title}) return nil } @@ -160,11 +160,11 @@ func(m *Menu) Put(selector string, title string) error { //} // Sizes returns the size limitations for each part of the render, as a four-element array: -// 1. mainSize -// 2. prevsize -// 3. nextsize -// 4. nextsize + prevsize -func(m *Menu) Sizes(ctx context.Context) ([4]uint32, error) { +// 1. mainSize +// 2. prevsize +// 3. nextsize +// 4. nextsize + prevsize +func (m *Menu) Sizes(ctx context.Context) ([4]uint32, error) { var menuSizes [4]uint32 cfg := m.GetBrowseConfig() tmpm := NewMenu().WithBrowseConfig(cfg) @@ -189,7 +189,7 @@ func(m *Menu) Sizes(ctx context.Context) ([4]uint32, error) { } // title corresponding to the menu symbol. -func(m *Menu) titleFor(ctx context.Context, title string) (string, error) { +func (m *Menu) titleFor(ctx context.Context, title string) (string, error) { if m.rs == nil { return title, nil } @@ -203,7 +203,7 @@ func(m *Menu) titleFor(ctx context.Context, title string) (string, error) { // Render returns the full current state of the menu as a string. // // After this has been executed, the state of the menu will be empty. -func(m *Menu) Render(ctx context.Context, idx uint16) (string, error) { +func (m *Menu) Render(ctx context.Context, idx uint16) (string, error) { var menuCopy [][2]string if m.keep { for _, v := range m.menu { @@ -239,7 +239,7 @@ func(m *Menu) Render(ctx context.Context, idx uint16) (string, error) { } // add available browse options. -func(m *Menu) applyPage(idx uint16) error { +func (m *Menu) applyPage(idx uint16) error { if m.pageCount == 0 { if idx > 0 { return fmt.Errorf("index %v > 0 for non-paged menu", idx) @@ -249,10 +249,10 @@ func(m *Menu) applyPage(idx uint16) error { return &BrowseError{Idx: idx, PageCount: m.pageCount} //return fmt.Errorf("index %v out of bounds (%v)", idx, m.pageCount) } - + m.reset() - if idx == m.pageCount - 1 { + if idx == m.pageCount-1 { m.canNext = false } if idx == 0 { @@ -277,7 +277,7 @@ func(m *Menu) applyPage(idx uint16) error { // removes and returns the first of remaining menu options. // fails if menu is empty. -func(m *Menu) shiftMenu() (string, string, error) { +func (m *Menu) shiftMenu() (string, string, error) { if len(m.menu) == 0 { return "", "", fmt.Errorf("menu is empty") } @@ -287,7 +287,7 @@ func(m *Menu) shiftMenu() (string, string, error) { } // prepare menu object for re-use. -func(m *Menu) reset() { +func (m *Menu) reset() { if m.browse.NextAvailable { m.canNext = true } @@ -297,7 +297,7 @@ func(m *Menu) reset() { } // Reset clears all current state from the menu object, making it ready for re-use in a new render. -func(m *Menu) Reset() { +func (m *Menu) Reset() { m.menu = [][2]string{} m.sink = false m.reset() diff --git a/render/page.go b/render/page.go @@ -14,26 +14,26 @@ import ( // Page executes output rendering into pages constrained by size. type Page struct { cacheMap map[string]string // Mapped content symbols - cache cache.Memory // Content store. + cache cache.Memory // Content store. resource resource.Resource // Symbol resolver. - menu *Menu // Menu rendererer. - sink *string // Content symbol rendered by dynamic size. - sizer *Sizer // Process size constraints. - err error // Error state to prepend to output. - extra string // Extra content to append to received template + menu *Menu // Menu rendererer. + sink *string // Content symbol rendered by dynamic size. + sizer *Sizer // Process size constraints. + err error // Error state to prepend to output. + extra string // Extra content to append to received template } // NewPage creates a new Page object. func NewPage(cache cache.Memory, rs resource.Resource) *Page { return &Page{ - cache: cache, + cache: cache, cacheMap: make(map[string]string), resource: rs, } } // WithMenu sets a menu renderer for the page. -func(pg *Page) WithMenu(menu *Menu) *Page { +func (pg *Page) WithMenu(menu *Menu) *Page { pg.menu = menu.WithResource(pg.resource) //if pg.sizer != nil { // pg.sizer = pg.sizer.WithMenuSize(pg.menu.ReservedSize()) @@ -42,22 +42,22 @@ func(pg *Page) WithMenu(menu *Menu) *Page { } // WithSizer sets a size constraints definition for the page. -func(pg *Page) WithSizer(sizer *Sizer) *Page { +func (pg *Page) WithSizer(sizer *Sizer) *Page { pg.sizer = sizer //if pg.menu != nil { - //pg.sizer = pg.sizer.WithMenuSize(pg.menu.ReservedSize()) + //pg.sizer = pg.sizer.WithMenuSize(pg.menu.ReservedSize()) //} return pg } // WithError adds an error to prepend to the page output. -func(pg *Page) WithError(err error) *Page { +func (pg *Page) WithError(err error) *Page { pg.err = err return pg } // Error implements the Error interface. -func(pg *Page) Error() string { +func (pg *Page) Error() string { if pg.err != nil { return pg.err.Error() } @@ -65,7 +65,7 @@ func(pg *Page) Error() string { } // Usage returns size used by values and menu, and remaining size available -func(pg *Page) Usage() (uint32, uint32, error) { +func (pg *Page) Usage() (uint32, uint32, error) { var l int var c uint16 for k, v := range pg.cacheMap { @@ -79,7 +79,7 @@ func(pg *Page) Usage() (uint32, uint32, error) { r := uint32(l) rsv := uint32(0) if uint32(c) > r { - rsv = uint32(c)-r + rsv = uint32(c) - r } //if pg.menu != nil { // r += uint32(pg.menu.ReservedSize()) @@ -92,7 +92,7 @@ func(pg *Page) Usage() (uint32, uint32, error) { // After this, Val() will return the value for the key, and Size() will include the value size and limitations in its calculations. // // Only one symbol with no size limitation may be mapped at the current level. -func(pg *Page) Map(key string) error { +func (pg *Page) Map(key string) error { v, err := pg.cache.Get(key) if err != nil { return err @@ -121,7 +121,7 @@ func(pg *Page) Map(key string) error { // Val gets the mapped content for the given symbol. // // Fails if key is not mapped. -func(pg *Page) Val(key string) (string, error) { +func (pg *Page) Val(key string) (string, error) { r := pg.cacheMap[key] if len(r) == 0 { return "", fmt.Errorf("key %v not mapped", key) @@ -130,7 +130,7 @@ func(pg *Page) Val(key string) (string, error) { } // Sizes returned the actual used bytes by each mapped symbol. -func(pg *Page) Sizes() (map[string]uint16, error) { +func (pg *Page) Sizes() (map[string]uint16, error) { sizes := make(map[string]uint16) var haveSink bool for k, _ := range pg.cacheMap { @@ -149,7 +149,7 @@ func(pg *Page) Sizes() (map[string]uint16, error) { } // RenderTemplate is an adapter to implement the builtin golang text template renderer as resource.RenderTemplate. -func(pg *Page) RenderTemplate(ctx context.Context, sym string, values map[string]string, idx uint16) (string, error) { +func (pg *Page) RenderTemplate(ctx context.Context, sym string, values map[string]string, idx uint16) (string, error) { tpl, err := pg.resource.GetTemplate(ctx, sym) if err != nil { return "", err @@ -173,7 +173,7 @@ func(pg *Page) RenderTemplate(ctx context.Context, sym string, values map[string return "", fmt.Errorf("sizer needed for indexed render") } logg.Debugf("render for", "index", idx) - + tp, err := template.New("tester").Option("missingkey=error").Parse(tpl) if err != nil { return "", err @@ -188,7 +188,7 @@ func(pg *Page) RenderTemplate(ctx context.Context, sym string, values map[string } // Render renders the current mapped content and menu state against the template associated with the symbol. -func(pg *Page) Render(ctx context.Context, sym string, idx uint16) (string, error) { +func (pg *Page) Render(ctx context.Context, sym string, idx uint16) (string, error) { var err error values, err := pg.prepare(ctx, sym, pg.cacheMap, idx) @@ -202,7 +202,7 @@ func(pg *Page) Render(ctx context.Context, sym string, idx uint16) (string, erro // Reset prepared the Page object for re-use. // // It clears mappings and removes the sink definition. -func(pg *Page) Reset() { +func (pg *Page) Reset() { pg.sink = nil pg.extra = "" pg.cacheMap = make(map[string]string) @@ -217,7 +217,7 @@ func(pg *Page) Reset() { // extract sink values to separate array, and set the content of sink in values map to zero-length string. // // this allows render of page with emptry content the sink symbol to discover remaining capacity. -func(pg *Page) split(sym string, values map[string]string) (map[string]string, string, []string, error) { +func (pg *Page) split(sym string, values map[string]string) (map[string]string, string, []string, error) { var sink string var sinkValues []string noSinkValues := make(map[string]string) @@ -235,7 +235,7 @@ func(pg *Page) split(sym string, values map[string]string) (map[string]string, s } noSinkValues[k] = v } - + if sink == "" { logg.Tracef("no sink found", "sym", sym) return values, "", nil, nil @@ -248,7 +248,7 @@ func(pg *Page) split(sym string, values map[string]string) (map[string]string, s // newlines (within the same page) render are defined by NUL (0x00). // // pages are separated by LF (0x0a). -func(pg *Page) joinSink(sinkValues []string, remaining uint32, menuSizes [4]uint32) (string, uint16, error) { +func (pg *Page) joinSink(sinkValues []string, remaining uint32, menuSizes [4]uint32) (string, uint16, error) { l := 0 var count uint16 tb := strings.Builder{} @@ -265,7 +265,7 @@ func(pg *Page) joinSink(sinkValues []string, remaining uint32, menuSizes [4]uint for i, v := range sinkValues { l += len(v) logg.Tracef("processing sink", "idx", i, "value", v, "netremaining", netRemaining, "l", l) - if uint32(l) > netRemaining - 1 { + if uint32(l) > netRemaining-1 { if tb.Len() == 0 { return "", 0, fmt.Errorf("capacity insufficient for sink field %v", i) } @@ -297,7 +297,7 @@ func(pg *Page) joinSink(sinkValues []string, remaining uint32, menuSizes [4]uint return r, count, nil } -func(pg *Page) applyMenuSink(ctx context.Context) ([]string, error) { +func (pg *Page) applyMenuSink(ctx context.Context) ([]string, error) { s, err := pg.menu.WithDispose().WithPages().Render(ctx, 0) if err != nil { return nil, err @@ -307,7 +307,7 @@ func(pg *Page) applyMenuSink(ctx context.Context) ([]string, error) { } // render menu and all syms except sink, split sink into display chunks -func(pg *Page) prepare(ctx context.Context, sym string, values map[string]string, idx uint16) (map[string]string, error) { +func (pg *Page) prepare(ctx context.Context, sym string, values map[string]string, idx uint16) (map[string]string, error) { if pg.sizer == nil { return values, nil } @@ -381,7 +381,7 @@ func(pg *Page) prepare(ctx context.Context, sym string, values map[string]string } // render template, menu (if it exists), and audit size constraint (if it exists). -func(pg *Page) render(ctx context.Context, sym string, values map[string]string, idx uint16) (string, error) { +func (pg *Page) render(ctx context.Context, sym string, values map[string]string, idx uint16) (string, error) { var ok bool r := "" s, err := pg.RenderTemplate(ctx, sym, values, idx) diff --git a/render/page_test.go b/render/page_test.go @@ -9,7 +9,6 @@ import ( "git.defalsify.org/vise.git/internal/resourcetest" ) - func TestPageCurrentSize(t *testing.T) { t.Skip("usage is not in use, and it is unclear how it should be calculated") ca := cache.NewCache() @@ -145,4 +144,3 @@ bar t.Fatalf("expected:\n\t%s\ngot:\n\t%s", expect, r) } } - diff --git a/render/size.go b/render/size.go @@ -9,17 +9,17 @@ import ( // Sizer splits dynamic contents into individual segments for browseable pages. type Sizer struct { outputSize uint32 // maximum output for a single page. -// menuSize uint16 // actual menu size for the dynamic page being sized - memberSizes map[string]uint16 // individual byte sizes of all content to be rendered by template. - totalMemberSize uint32 // total byte size of all content to be rendered by template (sum of memberSizes) - crsrs []uint32 // byte offsets in the sink content for browseable pages indices. - sink string // sink symbol. + // menuSize uint16 // actual menu size for the dynamic page being sized + memberSizes map[string]uint16 // individual byte sizes of all content to be rendered by template. + totalMemberSize uint32 // total byte size of all content to be rendered by template (sum of memberSizes) + crsrs []uint32 // byte offsets in the sink content for browseable pages indices. + sink string // sink symbol. } // NewSizer creates a new Sizer object with the given output size constraint. func NewSizer(outputSize uint32) *Sizer { return &Sizer{ - outputSize: outputSize, + outputSize: outputSize, memberSizes: make(map[string]uint16), } } @@ -31,7 +31,7 @@ func NewSizer(outputSize uint32) *Sizer { //} // Set adds a content symbol in the state it will be used by the renderer. -func(szr *Sizer) Set(key string, size uint16) error { +func (szr *Sizer) Set(key string, size uint16) error { szr.memberSizes[key] = size if size == 0 { szr.sink = key @@ -41,7 +41,7 @@ func(szr *Sizer) Set(key string, size uint16) error { } // Check audits whether the rendered string is within the output size constraint of the sizer. -func(szr *Sizer) Check(s string) (uint32, bool) { +func (szr *Sizer) Check(s string) (uint32, bool) { l := uint32(len(s)) if szr.outputSize > 0 { if l > szr.outputSize { @@ -57,19 +57,19 @@ func(szr *Sizer) Check(s string) (uint32, bool) { // String implements the String interface. // // It outputs a representation of the Sizer fit for debug output. -func(szr *Sizer) String() string { -// var diff uint32 -// if szr.outputSize > 0 { -// diff = szr.outputSize - szr.totalMemberSize - uint32(szr.menuSize) -// } -// return fmt.Sprintf("output: %v, member: %v, menu: %v, diff: %v", szr.outputSize, szr.totalMemberSize, szr.menuSize, diff) +func (szr *Sizer) String() string { + // var diff uint32 + // if szr.outputSize > 0 { + // diff = szr.outputSize - szr.totalMemberSize - uint32(szr.menuSize) + // } + // return fmt.Sprintf("output: %v, member: %v, menu: %v, diff: %v", szr.outputSize, szr.totalMemberSize, szr.menuSize, diff) return fmt.Sprintf("output: %v, member: %v", szr.outputSize, szr.totalMemberSize) } // Size gives the byte size of content for a single symbol. // // Fails if the symbol has not been registered using Set -func(szr *Sizer) Size(s string) (uint16, error) { +func (szr *Sizer) Size(s string) (uint16, error) { r, ok := szr.memberSizes[s] if !ok { return 0, fmt.Errorf("unknown member: %s", s) @@ -83,7 +83,7 @@ func(szr *Sizer) Size(s string) (uint16, error) { //} // AddCursor adds a pagination cursor for the paged sink content. -func(szr *Sizer) AddCursor(c uint32) { +func (szr *Sizer) AddCursor(c uint32) { logg.Debugf("Added cursor", "offset", c) szr.crsrs = append(szr.crsrs, c) } @@ -91,7 +91,7 @@ func(szr *Sizer) AddCursor(c uint32) { // GetAt the paged symbols for the current page index. // // Fails if index requested is out of range. -func(szr *Sizer) GetAt(values map[string]string, idx uint16) (map[string]string, error) { +func (szr *Sizer) GetAt(values map[string]string, idx uint16) (map[string]string, error) { if szr.sink == "" { return values, nil } @@ -100,7 +100,7 @@ func(szr *Sizer) GetAt(values map[string]string, idx uint16) (map[string]string, logg.Tracef("check values", "k", k, "v", v, "idx", idx, "cursors", szr.crsrs) if szr.sink == k { if idx >= uint16(len(szr.crsrs)) { - return nil, fmt.Errorf("no more values in index") + return nil, fmt.Errorf("no more values in index") } c := szr.crsrs[idx] v = v[c:] @@ -117,6 +117,6 @@ func(szr *Sizer) GetAt(values map[string]string, idx uint16) (map[string]string, } // Reset flushes all size measurements, making the sizer available for reuse. -func(szr *Sizer) Reset() { +func (szr *Sizer) Reset() { szr.crsrs = []uint32{} } diff --git a/render/size_test.go b/render/size_test.go @@ -6,10 +6,10 @@ import ( "math/rand" "testing" - "git.defalsify.org/vise.git/state" - "git.defalsify.org/vise.git/resource" - "git.defalsify.org/vise.git/internal/resourcetest" "git.defalsify.org/vise.git/cache" + "git.defalsify.org/vise.git/internal/resourcetest" + "git.defalsify.org/vise.git/resource" + "git.defalsify.org/vise.git/state" ) type testSizeResource struct { @@ -150,7 +150,7 @@ func TestSizePages(t *testing.T) { mn.Put("2", "go to bar") ctx := context.Background() - r, err := pg.Render(ctx, "pages", 0) + r, err := pg.Render(ctx, "pages", 0) if err != nil { t.Fatal(err) } @@ -163,7 +163,6 @@ lala poo 1:foo the foo 2:go to bar` - if r != expect { t.Fatalf("expected:\n\t%x\ngot:\n\t%x\n", expect, r) } @@ -188,11 +187,11 @@ func TestManySizes(t *testing.T) { for i := 60; i < 160; i++ { st := state.NewState(0) ca := cache.NewCache() - mn := NewMenu() //.WithOutputSize(32) + mn := NewMenu() //.WithOutputSize(32) rs := newTestSizeResource() //.WithEntryFuncGetter(funcFor).WithTemplateGetter(getTemplate) rs.Lock() //rs := TestSizeResource{ - // mrs, + // mrs, //} szr := NewSizer(uint32(i)) pg := NewPage(ca, rs).WithSizer(szr).WithMenu(mn) @@ -258,7 +257,7 @@ func TestMenuCollideSink(t *testing.T) { ca.Add("inky", "pinky", 5) ca.Add("blinky", "clyde", 0) pg.Map("inky") - + mn := NewMenu().WithSink() pg = pg.WithMenu(mn) @@ -267,7 +266,7 @@ func TestMenuCollideSink(t *testing.T) { if err != nil { t.Fatal(err) } - + mn = NewMenu().WithSink() pg = pg.WithMenu(mn) pg.Map("blinky") @@ -351,7 +350,6 @@ func TestMenuSink(t *testing.T) { ca.Add("baz", "xyzzy", 5) pg.Map("baz") - r, err = pg.Render(ctx, "foo", 2) if err != nil { t.Fatal(err) @@ -372,7 +370,7 @@ func TestMiddlePage(t *testing.T) { mn := NewMenu().WithBrowseConfig(DefaultBrowseConfig()) rs := newTestSizeResource() rs.Lock() - content := "" + content := "" for i := 0; i < 42; i++ { v := rand.Intn(26) b := make([]byte, 3+(v%3)) @@ -401,4 +399,3 @@ func TestMiddlePage(t *testing.T) { } fmt.Printf("%s\n", r) } - diff --git a/render/split.go b/render/split.go @@ -15,6 +15,7 @@ func bookmark(values []string) []uint32 { } return bookmarks } + // //func paginate(bookmarks []uint32, capacity uint32) ([][]uint32, error) { // if len(bookmarks) == 0 { @@ -23,7 +24,7 @@ func bookmark(values []string) []uint32 { // var c uint32 // var pages [][]uint32 // var prev uint32 -// +// // pages = append(pages, []uint32{}) // currentPage := 0 // lookAhead := bookmarks[1:] @@ -79,7 +80,7 @@ func paginate(bookmarks []uint32, capacity uint32, nextSize uint32, prevSize uin remaining -= int(prevSize) } if remaining < 0 { - return nil, fmt.Errorf("underrun in item %v:%v (%v) index %v prevsize %v remain %v cap %v", bookmarks[i], lookAhead[i], lookAhead[i] - bookmarks[i], i, prevSize, remaining, capacity) + return nil, fmt.Errorf("underrun in item %v:%v (%v) index %v prevsize %v remain %v cap %v", bookmarks[i], lookAhead[i], lookAhead[i]-bookmarks[i], i, prevSize, remaining, capacity) } if isLast(c, last, uint32(remaining)) { haveMore = false @@ -87,13 +88,13 @@ func paginate(bookmarks []uint32, capacity uint32, nextSize uint32, prevSize uin remaining -= int(nextSize) } if remaining < 0 { - return nil, fmt.Errorf("underrun in item %v:%v (%v) index %v prevsize %v nextsize %v remain %v cap %v", bookmarks[i], lookAhead[i], lookAhead[i] - bookmarks[i], i, prevSize, nextSize, remaining, capacity) + return nil, fmt.Errorf("underrun in item %v:%v (%v) index %v prevsize %v nextsize %v remain %v cap %v", bookmarks[i], lookAhead[i], lookAhead[i]-bookmarks[i], i, prevSize, nextSize, remaining, capacity) } var z int currentPage := len(pages) - 1 for i < lastIndex { - logg.Tracef("have render", "bookmark", bookmarks[i], "lookahead", lookAhead[i], "diff", lookAhead[i] - bookmarks[i], "index", i, "prevsize", prevSize, "nextsize", nextSize, "remain", remaining, "capacity", capacity) + logg.Tracef("have render", "bookmark", bookmarks[i], "lookahead", lookAhead[i], "diff", lookAhead[i]-bookmarks[i], "index", i, "prevsize", prevSize, "nextsize", nextSize, "remain", remaining, "capacity", capacity) v := lookAhead[i] delta := int((v - c) + 1) @@ -117,7 +118,7 @@ func paginate(bookmarks []uint32, capacity uint32, nextSize uint32, prevSize uin } } - l := len(pages)-1 + l := len(pages) - 1 pages[l] = append(pages[l], last) return pages, nil } @@ -160,7 +161,7 @@ func explode(values []string, pages [][]uint32) string { // return pages, nil // } // -// var flatPages [][]uint32 +// var flatPages [][]uint32 // // pages = append(pages, []uint32{}) // for _, v := range bookmarks { @@ -171,7 +172,7 @@ func explode(values []string, pages [][]uint32) string { // // var c uint32 // var prev uint32 -// currentPage := 0 +// currentPage := 0 // // for i, page := range pages { // var delta uint32 diff --git a/render/split_test.go b/render/split_test.go @@ -1,8 +1,8 @@ package render import ( -// "bytes" -// "log" + // "bytes" + // "log" "testing" ) @@ -52,7 +52,7 @@ func TestSplitPaginate(t *testing.T) { // menu := NewMenu().WithBrowseConfig(menuCfg) // menu.Put("0", "foo") // menu.Put("1", "bar") -// +// // vals := []string{"inky", "pinky", "blinky", "clyde", "tinkywinky", "dipsy", "lala", "pu"} // v := bookmark(vals) //// vv, err := paginate(v, 15, 0, 0) @@ -102,7 +102,7 @@ func TestSplitPaginate(t *testing.T) { // expectBytes = append(expectBytes, []byte("lala")...) // expectBytes = append(expectBytes, byte(0x00)) // expectBytes = append(expectBytes, []byte("pu")...) -// +// // if !bytes.Equal([]byte(s), expectBytes) { // t.Fatalf("expected:\n\t%s\ngot:\n\t%x\n", expectBytes, s) // } diff --git a/resource/db.go b/resource/db.go @@ -19,7 +19,7 @@ const ( type DbResource struct { *MenuResource typs uint8 - db db.Db + db db.Db } // NewDbResource instantiates a new DbResource @@ -31,8 +31,8 @@ func NewDbResource(store db.Db) *DbResource { } rs := &DbResource{ MenuResource: NewMenuResource(), - db: store, - typs: db.DATATYPE_TEMPLATE | db.DATATYPE_MENU | db.DATATYPE_BIN, + db: store, + typs: db.DATATYPE_TEMPLATE | db.DATATYPE_MENU | db.DATATYPE_BIN, } rs.WithMenuGetter(rs.DbGetMenu) rs.WithCodeGetter(rs.DbGetCode) @@ -42,37 +42,37 @@ func NewDbResource(store db.Db) *DbResource { } // Without is a chainable function that disables handling of the given data type. -func(g *DbResource) Without(typ uint8) *DbResource { +func (g *DbResource) Without(typ uint8) *DbResource { g.typs &= ^typ return g } // Without is a chainable function that enables handling of the given data type. -func(g *DbResource) With(typ uint8) *DbResource { +func (g *DbResource) With(typ uint8) *DbResource { g.typs |= typ return g } // WithOnly is a chainable convenience function that disables handling of all except the given data type. -func(g *DbResource) WithOnly(typ uint8) *DbResource { +func (g *DbResource) WithOnly(typ uint8) *DbResource { g.typs = typ return g } -func(g *DbResource) mustSafe() { +func (g *DbResource) mustSafe() { if !g.db.Safe() { panic("db unsafe for resource (db.Db.Safe() == false)") } } // retrieve from underlying db. -func(g *DbResource) fn(ctx context.Context, sym string) ([]byte, error) { +func (g *DbResource) fn(ctx context.Context, sym string) ([]byte, error) { g.mustSafe() return g.db.Get(ctx, []byte(sym)) } // retrieve from underlying db using a string key. -func(g *DbResource) sfn(ctx context.Context, sym string) (string, error) { +func (g *DbResource) sfn(ctx context.Context, sym string) (string, error) { b, err := g.fn(ctx, sym) if err != nil { return "", err @@ -83,8 +83,8 @@ func(g *DbResource) sfn(ctx context.Context, sym string) (string, error) { // Will fail if support for db.DATATYPE_TEMPLATE has been disabled. // // By default bound to GetTemplate. Can be replaced with WithTemplateGetter. -func(g *DbResource) DbGetTemplate(ctx context.Context, sym string) (string, error) { - if g.typs & db.DATATYPE_TEMPLATE == 0 { +func (g *DbResource) DbGetTemplate(ctx context.Context, sym string) (string, error) { + if g.typs&db.DATATYPE_TEMPLATE == 0 { return "", errors.New("not a template getter") } g.db.SetPrefix(db.DATATYPE_TEMPLATE) @@ -94,8 +94,8 @@ func(g *DbResource) DbGetTemplate(ctx context.Context, sym string) (string, erro // Will fail if support for db.DATATYPE_MENU has been disabled. // // By default bound to GetMenu. Can be replaced with WithMenuGetter. -func(g *DbResource) DbGetMenu(ctx context.Context, sym string) (string, error) { - if g.typs & db.DATATYPE_MENU == 0{ +func (g *DbResource) DbGetMenu(ctx context.Context, sym string) (string, error) { + if g.typs&db.DATATYPE_MENU == 0 { return "", errors.New("not a menu getter") } g.db.SetPrefix(db.DATATYPE_MENU) @@ -113,9 +113,9 @@ func(g *DbResource) DbGetMenu(ctx context.Context, sym string) (string, error) { // Will fail if support for db.DATATYPE_BIN has been disabled. // // By default bound to GetCode. Can be replaced with WithCodeGetter. -func(g *DbResource) DbGetCode(ctx context.Context, sym string) ([]byte, error) { +func (g *DbResource) DbGetCode(ctx context.Context, sym string) ([]byte, error) { logg.TraceCtxf(ctx, "getcode", "sym", sym) - if g.typs & db.DATATYPE_BIN == 0 { + if g.typs&db.DATATYPE_BIN == 0 { return nil, errors.New("not a code getter") } g.db.SetPrefix(db.DATATYPE_BIN) @@ -124,17 +124,17 @@ func(g *DbResource) DbGetCode(ctx context.Context, sym string) ([]byte, error) { // The method will first attempt to resolve using the function registered // with the MenuResource parent class. -// +// // If no match is found, and if support for db.DATATYPE_STATICLOAD has been enabled, // an additional lookup will be performed using the underlying db. // // By default bound to FuncFor. Can be replaced with WithEntryFuncGetter. -func(g *DbResource) DbFuncFor(ctx context.Context, sym string) (EntryFunc, error) { +func (g *DbResource) DbFuncFor(ctx context.Context, sym string) (EntryFunc, error) { fn, err := g.MenuResource.FallbackFunc(ctx, sym) if err == nil { return fn, nil } - if g.typs & db.DATATYPE_STATICLOAD == 0 { + if g.typs&db.DATATYPE_STATICLOAD == 0 { return nil, errors.New("not a staticload getter") } g.db.SetPrefix(db.DATATYPE_STATICLOAD) @@ -143,7 +143,7 @@ func(g *DbResource) DbFuncFor(ctx context.Context, sym string) (EntryFunc, error if !db.IsNotFound(err) { return nil, err } - b, err = g.fn(ctx, sym + ".txt") + b, err = g.fn(ctx, sym+".txt") if err != nil { return nil, err } @@ -156,6 +156,6 @@ func(g *DbResource) DbFuncFor(ctx context.Context, sym string) (EntryFunc, error } // Close implements the Resource interface. -func(g *DbResource) Close(ctx context.Context) error { +func (g *DbResource) Close(ctx context.Context) error { return g.db.Close(ctx) } diff --git a/resource/db_test.go b/resource/db_test.go @@ -127,7 +127,7 @@ func TestDbGetterDirect(t *testing.T) { t.Fatal(err) } r, err := fn(ctx, "", nil) -if err != nil { + if err != nil { t.Fatal(err) } if r.Content != "blinky" { diff --git a/resource/gettext.go b/resource/gettext.go @@ -9,29 +9,29 @@ import ( ) const ( - PoDomain = "default" + PoDomain = "default" TemplateKeyPoDomain = "x-vise" - MenuKeyPoDomain = "x-vise_menu" + MenuKeyPoDomain = "x-vise_menu" ) type PoResource struct { *MenuResource - path string + path string defaultLanguage lang.Language - tr map[string]*gotext.Locale + tr map[string]*gotext.Locale } func NewPoResource(defaultLanguage lang.Language, path string) *PoResource { - o := &PoResource { - MenuResource: NewMenuResource(), - path: path, + o := &PoResource{ + MenuResource: NewMenuResource(), + path: path, defaultLanguage: defaultLanguage, - tr: make(map[string]*gotext.Locale), + tr: make(map[string]*gotext.Locale), } return o.WithLanguage(defaultLanguage) } -func(p *PoResource) WithLanguage(ln lang.Language) *PoResource { +func (p *PoResource) WithLanguage(ln lang.Language) *PoResource { o := gotext.NewLocale(p.path, ln.Code) o.AddDomain(PoDomain) if ln.Code == p.defaultLanguage.Code { @@ -42,7 +42,7 @@ func(p *PoResource) WithLanguage(ln lang.Language) *PoResource { return p } -func(p *PoResource) get(ctx context.Context, sym string, domain string, menu bool) (string, error) { +func (p *PoResource) get(ctx context.Context, sym string, domain string, menu bool) (string, error) { s := sym ln, ok := lang.LanguageFromContext(ctx) if !ok { @@ -63,10 +63,10 @@ func(p *PoResource) get(ctx context.Context, sym string, domain string, menu boo return s, nil } -func(p *PoResource) GetMenu(ctx context.Context, sym string) (string, error) { +func (p *PoResource) GetMenu(ctx context.Context, sym string) (string, error) { return p.get(ctx, sym, PoDomain, true) } -func(p *PoResource) GetTemplate(ctx context.Context, sym string) (string, error) { +func (p *PoResource) GetTemplate(ctx context.Context, sym string) (string, error) { return p.get(ctx, sym, PoDomain, false) } diff --git a/resource/gettext_test.go b/resource/gettext_test.go @@ -4,8 +4,8 @@ import ( "context" "testing" - "git.defalsify.org/vise.git/testdata/testlocale" "git.defalsify.org/vise.git/lang" + "git.defalsify.org/vise.git/testdata/testlocale" ) func TestPoGetNotExist(t *testing.T) { @@ -64,7 +64,6 @@ func TestPoGet(t *testing.T) { t.Fatalf("expected 'foo', got '%s'", s) } - // eng now ctx = context.WithValue(context.Background(), "Language", ln) diff --git a/resource/resource.go b/resource/resource.go @@ -5,7 +5,6 @@ import ( "fmt" ) - // Result contains the results of an external code operation. type Result struct { // content value for symbol after execution. @@ -24,12 +23,16 @@ type Result struct { // // The implementer MUST NOT modify state flags or cache inside the function. The resource.Result object MUST be used instead. type EntryFunc func(ctx context.Context, nodeSym string, input []byte) (Result, error) + // CodeFunc is the function signature for retrieving bytecode for a given symbol. type CodeFunc func(ctx context.Context, nodeSym string) ([]byte, error) + // MenuFunc is the function signature for retrieving menu symbol resolution. type MenuFunc func(ctx context.Context, menuSym string) (string, error) + // TemplateFunc is the function signature for retrieving a render template for a given symbol. type TemplateFunc func(ctx context.Context, nodeSym string) (string, error) + // FuncForFunc is a function that returns an EntryFunc associated with a LOAD instruction symbol. type FuncForFunc func(ctx context.Context, loadSym string) (EntryFunc, error) @@ -51,12 +54,12 @@ type Resource interface { // MenuResource contains the base definition for building Resource implementations. type MenuResource struct { - sinkValues []string - codeFunc CodeFunc + sinkValues []string + codeFunc CodeFunc templateFunc TemplateFunc - menuFunc MenuFunc - funcFunc FuncForFunc - fns map[string]EntryFunc + menuFunc MenuFunc + funcFunc FuncForFunc + fns map[string]EntryFunc } var ( @@ -81,51 +84,51 @@ func NewMenuResource() *MenuResource { } // WithCodeGetter sets the code symbol resolver method. -func(m *MenuResource) WithCodeGetter(codeGetter CodeFunc) *MenuResource { +func (m *MenuResource) WithCodeGetter(codeGetter CodeFunc) *MenuResource { m.codeFunc = codeGetter return m } // WithEntryGetter sets the content symbol resolver getter method. -func(m *MenuResource) WithEntryFuncGetter(entryFuncGetter FuncForFunc) *MenuResource { +func (m *MenuResource) WithEntryFuncGetter(entryFuncGetter FuncForFunc) *MenuResource { m.funcFunc = entryFuncGetter return m } // WithTemplateGetter sets the template symbol resolver method. -func(m *MenuResource) WithTemplateGetter(templateGetter TemplateFunc) *MenuResource { +func (m *MenuResource) WithTemplateGetter(templateGetter TemplateFunc) *MenuResource { m.templateFunc = templateGetter return m } // WithMenuGetter sets the menu symbol resolver method. -func(m *MenuResource) WithMenuGetter(menuGetter MenuFunc) *MenuResource { +func (m *MenuResource) WithMenuGetter(menuGetter MenuFunc) *MenuResource { m.menuFunc = menuGetter return m } // FuncFor implements Resource interface. -func(m *MenuResource) FuncFor(ctx context.Context, sym string) (EntryFunc, error) { +func (m *MenuResource) FuncFor(ctx context.Context, sym string) (EntryFunc, error) { return m.funcFunc(ctx, sym) } // GetCode implements Resource interface. -func(m *MenuResource) GetCode(ctx context.Context, sym string) ([]byte, error) { +func (m *MenuResource) GetCode(ctx context.Context, sym string) ([]byte, error) { return m.codeFunc(ctx, sym) } // GetTemplate implements Resource interface. -func(m *MenuResource) GetTemplate(ctx context.Context, sym string) (string, error) { +func (m *MenuResource) GetTemplate(ctx context.Context, sym string) (string, error) { return m.templateFunc(ctx, sym) } // GetMenu implements Resource interface. -func(m *MenuResource) GetMenu(ctx context.Context, sym string) (string, error) { +func (m *MenuResource) GetMenu(ctx context.Context, sym string) (string, error) { return m.menuFunc(ctx, sym) } // AddLocalFunc associates a handler function with a external function symbol to be returned by FallbackFunc. -func(m *MenuResource) AddLocalFunc(sym string, fn EntryFunc) { +func (m *MenuResource) AddLocalFunc(sym string, fn EntryFunc) { if m.fns == nil { m.fns = make(map[string]EntryFunc) } @@ -133,7 +136,7 @@ func(m *MenuResource) AddLocalFunc(sym string, fn EntryFunc) { } // FallbackFunc returns the default handler function for a given external function symbol. -func(m *MenuResource) FallbackFunc(ctx context.Context, sym string) (EntryFunc, error) { +func (m *MenuResource) FallbackFunc(ctx context.Context, sym string) (EntryFunc, error) { fn, ok := m.fns[sym] if !ok { return nil, fmt.Errorf("unknown function: %s", sym) @@ -142,6 +145,6 @@ func(m *MenuResource) FallbackFunc(ctx context.Context, sym string) (EntryFunc, } // Close implements the Resource interface. -func(m *MenuResource) Close(ctx context.Context) error { +func (m *MenuResource) Close(ctx context.Context) error { return nil } diff --git a/resource/resource_test.go b/resource/resource_test.go @@ -8,16 +8,16 @@ import ( func codeGet(ctx context.Context, nodeSym string) ([]byte, error) { switch nodeSym { - case "bar": - return []byte("deafbeef"), nil + case "bar": + return []byte("deafbeef"), nil } return nil, errors.New("unknown code") } func menuGet(ctx context.Context, menuSym string) (string, error) { switch menuSym { - case "baz": - return "xyzzy", nil + case "baz": + return "xyzzy", nil } return "", errors.New("unknown code") @@ -25,8 +25,8 @@ func menuGet(ctx context.Context, menuSym string) (string, error) { func templateGet(ctx context.Context, nodeSym string) (string, error) { switch nodeSym { - case "tinkywinky": - return "inky pinky {{.foo}} blinky clyde", nil + case "tinkywinky": + return "inky pinky {{.foo}} blinky clyde", nil } return "", errors.New("unknown code") } @@ -39,14 +39,12 @@ func entryFunc(ctx context.Context, nodeSym string, input []byte) (Result, error func funcGet(ctx context.Context, loadSym string) (EntryFunc, error) { switch loadSym { - case "dipsy": - return entryFunc, nil + case "dipsy": + return entryFunc, nil } return nil, errors.New("unknown code") } - - func TestMenuResourceSetters(t *testing.T) { var err error ctx := context.Background() diff --git a/state/debug.go b/state/debug.go @@ -27,26 +27,26 @@ func newFlagDebugger() flagDebugger { return fd } -func(fd *flagDebugger) register(flag uint32, name string) { +func (fd *flagDebugger) register(flag uint32, name string) { fd.flagStrings[flag] = name } -func(fd *flagDebugger) Register(flag uint32, name string) error { - if (flag < 8) { +func (fd *flagDebugger) Register(flag uint32, name string) error { + if flag < 8 { return fmt.Errorf("flag %v is not definable by user", flag) } fd.register(flag, name) return nil } -func(fd *flagDebugger) AsString(flags []byte, length uint32) string { +func (fd *flagDebugger) AsString(flags []byte, length uint32) string { return strings.Join(fd.AsList(flags, length), ",") } -func(fd *flagDebugger) AsList(flags []byte, length uint32) []string { +func (fd *flagDebugger) AsList(flags []byte, length uint32) []string { var r []string var i uint32 - for i = 0; i < length + 8; i++ { + for i = 0; i < length+8; i++ { if getFlag(i, flags) { v, ok := fd.flagStrings[i] if !ok { diff --git a/state/debug_test.go b/state/debug_test.go @@ -28,7 +28,7 @@ func TestDebugFlagString(t *testing.T) { } flags := []byte{0x06, 0x19} r := FlagDebugger.AsString(flags, 5) - expect := "INTERNAL_INMATCH(1),INTERNAL_WAIT(2),FOO(8),BAZ(11),?unreg?(12)" + expect := "INTERNAL_INMATCH(1),INTERNAL_WAIT(2),FOO(8),BAZ(11),?unreg?(12)" if r != expect { t.Fatalf("expected '%s', got '%s'", expect, r) } @@ -51,4 +51,3 @@ func TestDebugState(t *testing.T) { t.Fatalf("expected '%s', got '%s'", expect, r) } } - diff --git a/state/flag.go b/state/flag.go @@ -4,7 +4,7 @@ const ( // Currently reading input. Set by first INCMP instruction encontered. FLAG_READIN = iota // Input matched a selector. Set by first INCMP matching input. - FLAG_INMATCH + FLAG_INMATCH // The instruction HALT has been encountered. FLAG_WAIT // The last LOAD or RELOAD executed returneded an error. @@ -14,7 +14,7 @@ const ( // Not currently in use. FLAG_RESERVED // VM execution is blocked. - FLAG_TERMINATE + FLAG_TERMINATE // The return value from a LOAD or RELOAD is a new language selection. FLAG_LANG // User-defined flags start here. diff --git a/state/state.go b/state/state.go @@ -13,7 +13,7 @@ const ( var ( IndexError = fmt.Errorf("already at first index") - MaxLevel = 128 + MaxLevel = 128 ) // State holds the command stack, error condition of a unique execution session. @@ -32,16 +32,16 @@ var ( // // 8 first flags are reserved. type State struct { - Code []byte // Pending bytecode to execute - ExecPath []string // Command symbols stack - BitSize uint32 // Size of (32-bit capacity) bit flag byte array - SizeIdx uint16 // Lateral page browse index in current frame - Flags []byte // Error state - Moves uint32 // Number of times navigation has been performed + Code []byte // Pending bytecode to execute + ExecPath []string // Command symbols stack + BitSize uint32 // Size of (32-bit capacity) bit flag byte array + SizeIdx uint16 // Lateral page browse index in current frame + Flags []byte // Error state + Moves uint32 // Number of times navigation has been performed Language *lang.Language // Language selector for rendering - input []byte // Last input - debug bool // Make string representation more human friendly - invalid bool + input []byte // Last input + debug bool // Make string representation more human friendly + invalid bool lastMove uint8 } @@ -60,14 +60,14 @@ func toByteSize(BitSize uint32) uint8 { // Invalidate marks a state as invalid. // // An invalid state should not be persisted or propagated -func(st *State) Invalidate() { +func (st *State) Invalidate() { st.invalid = true } // Invalid returns true if state is invalid. // // An invalid state should not be persisted or propagated -func(st *State) Invalid() bool { +func (st *State) Invalid() bool { return st.invalid } @@ -86,7 +86,7 @@ func NewState(BitSize uint32) *State { } byteSize := toByteSize(BitSize + 8) if byteSize > 0 { - st.Flags = make([]byte, byteSize) + st.Flags = make([]byte, byteSize) } else { st.Flags = []byte{} } @@ -94,7 +94,7 @@ func NewState(BitSize uint32) *State { } // UseDebug enables rendering of registered string values of state flags in the string representation. -func(st *State) UseDebug() { +func (st *State) UseDebug() { st.debug = true } @@ -103,8 +103,8 @@ func(st *State) UseDebug() { // Returns true if bit state was changed. // // Fails if bitindex is out of range. -func(st *State) SetFlag(bitIndex uint32) bool { - if bitIndex + 1 > st.BitSize { +func (st *State) SetFlag(bitIndex uint32) bool { + if bitIndex+1 > st.BitSize { panic(fmt.Sprintf("bit index %v is out of range of bitfield size %v", bitIndex, st.BitSize)) } r := getFlag(bitIndex, st.Flags) @@ -113,19 +113,18 @@ func(st *State) SetFlag(bitIndex uint32) bool { } byteIndex := bitIndex / 8 localBitIndex := bitIndex % 8 - b := st.Flags[byteIndex] + b := st.Flags[byteIndex] st.Flags[byteIndex] = b | (1 << localBitIndex) return true } - // ResetFlag resets the flag at the given bit field index. // // Returns true if bit state was changed. // // Fails if bitindex is out of range. -func(st *State) ResetFlag(bitIndex uint32) bool { - if bitIndex + 1 > st.BitSize { +func (st *State) ResetFlag(bitIndex uint32) bool { + if bitIndex+1 > st.BitSize { panic(fmt.Sprintf("bit index %v is out of range of bitfield size %v", bitIndex, st.BitSize)) } r := getFlag(bitIndex, st.Flags) @@ -134,7 +133,7 @@ func(st *State) ResetFlag(bitIndex uint32) bool { } byteIndex := bitIndex / 8 localBitIndex := bitIndex % 8 - b := st.Flags[byteIndex] + b := st.Flags[byteIndex] st.Flags[byteIndex] = b & (^(1 << localBitIndex)) return true } @@ -142,20 +141,20 @@ func(st *State) ResetFlag(bitIndex uint32) bool { // GetFlag returns the state of the flag at the given bit field index. // // Fails if bit field index is out of range. -func(st *State) GetFlag(bitIndex uint32) bool { - if bitIndex + 1 > st.BitSize { +func (st *State) GetFlag(bitIndex uint32) bool { + if bitIndex+1 > st.BitSize { panic(fmt.Sprintf("bit index %v is out of range of bitfield size %v", bitIndex, st.BitSize)) } return getFlag(bitIndex, st.Flags) } // FlagBitSize reports the amount of bits available in the bit field index. -func(st *State) FlagBitSize() uint32 { +func (st *State) FlagBitSize() uint32 { return st.BitSize } // FlagBitSize reports the amount of bits available in the bit field index. -func(st *State) FlagByteSize() uint8 { +func (st *State) FlagByteSize() uint8 { return uint8(len(st.Flags)) } @@ -164,7 +163,7 @@ func(st *State) FlagByteSize() uint8 { // The flag is specified given its bit index in the bit field. // // If matchSet is set, a positive result will be returned if the flag is set. -func(st *State) MatchFlag(sig uint32, matchSet bool) bool { +func (st *State) MatchFlag(sig uint32, matchSet bool) bool { r := st.GetFlag(sig) return matchSet == r } @@ -172,7 +171,7 @@ func(st *State) MatchFlag(sig uint32, matchSet bool) bool { // GetIndex scans a byte slice in same order as in storage, and returns the index of the first set bit. // // If the given byte slice is too small for the bit field bitsize, the check will terminate at end-of-data without error. -func(st *State) GetIndex(flags []byte) bool { +func (st *State) GetIndex(flags []byte) bool { var globalIndex uint32 if st.BitSize == 0 { return false @@ -190,11 +189,11 @@ func(st *State) GetIndex(flags []byte) bool { return true } globalIndex += 1 - if globalIndex % 8 == 0 { + if globalIndex%8 == 0 { byteIndex += 1 localIndex = 0 if byteIndex > (l - 1) { - return false + return false } } else { localIndex += 1 @@ -204,7 +203,7 @@ func(st *State) GetIndex(flags []byte) bool { } // Where returns the current active rendering symbol. -func(st *State) Where() (string, uint16) { +func (st *State) Where() (string, uint16) { if len(st.ExecPath) == 0 { return "", 0 } @@ -213,17 +212,17 @@ func(st *State) Where() (string, uint16) { } // Lateral returns true if the last state move was Next() or Previous() -func(st *State) Lateral() bool { - return st.lastMove & 6 > 0 +func (st *State) Lateral() bool { + return st.lastMove&6 > 0 } // Back returns true if the last state move was Up() -func(st *State) Back() bool { - return st.lastMove & 1 > 0 +func (st *State) Back() bool { + return st.lastMove&1 > 0 } // Next moves to the next sink page index. -func(st *State) Next() (uint16, error) { +func (st *State) Next() (uint16, error) { if len(st.ExecPath) == 0 { return 0, fmt.Errorf("state root node not yet defined") } @@ -235,14 +234,14 @@ func(st *State) Next() (uint16, error) { return st.SizeIdx, nil } -func(st *State) Same() { +func (st *State) Same() { st.Moves += 1 } // Previous moves to the next sink page index. // // Fails if try to move beyond index 0. -func(st *State) Previous() (uint16, error) { +func (st *State) Previous() (uint16, error) { if len(st.ExecPath) == 0 { return 0, fmt.Errorf("state root node not yet defined") } @@ -260,14 +259,14 @@ func(st *State) Previous() (uint16, error) { // Sides informs the caller which index page options will currently succeed. // // Two values are returned, for the "next" and "previous" options in that order. A false value means the option is not available in the current state. -func(st *State) Sides() (bool, bool) { +func (st *State) Sides() (bool, bool) { if len(st.ExecPath) == 0 { return false, false } next := true logg.Tracef("sides", "index", st.SizeIdx) if st.SizeIdx == 0 { - return next, false + return next, false } return next, true } @@ -275,7 +274,7 @@ func(st *State) Sides() (bool, bool) { // Top returns true if currently at topmode node. // // Fails if first Down() was never called. -func(st *State) Top() (bool, error) { +func (st *State) Top() (bool, error) { if len(st.ExecPath) == 0 { return false, fmt.Errorf("state root node not yet defined") } @@ -285,7 +284,7 @@ func(st *State) Top() (bool, error) { // Down adds the given symbol to the command stack. // // Clears mapping and sink. -func(st *State) Down(input string) error { +func (st *State) Down(input string) error { var n uint16 l := len(st.ExecPath) if l > MaxLevel { @@ -312,7 +311,7 @@ func(st *State) Down(input string) error { // Clears mapping and sink. // // Fails if called at top frame. -func(st *State) Up() (string, error) { +func (st *State) Up() (string, error) { l := len(st.ExecPath) if l == 0 { return "", fmt.Errorf("exit called beyond top frame") @@ -331,32 +330,32 @@ func(st *State) Up() (string, error) { } // Depth returns the current call stack depth. -func(st *State) Depth() int { - return len(st.ExecPath)-1 +func (st *State) Depth() int { + return len(st.ExecPath) - 1 } // Appendcode adds the given bytecode to the end of the existing code. -func(st *State) AppendCode(b []byte) error { +func (st *State) AppendCode(b []byte) error { st.Code = append(st.Code, b...) logg.Debugf("code changed (append)", "code", b) return nil } // SetCode replaces the current bytecode with the given bytecode. -func(st *State) SetCode(b []byte) { +func (st *State) SetCode(b []byte) { logg.Debugf("code changed (set)", "code", b) st.Code = b } // Get the remaning cached bytecode -func(st *State) GetCode() ([]byte, error) { +func (st *State) GetCode() ([]byte, error) { b := st.Code st.Code = []byte{} return b, nil } // GetInput gets the most recent client input. -func(st *State) GetInput() ([]byte, error) { +func (st *State) GetInput() ([]byte, error) { if st.input == nil { return nil, fmt.Errorf("no input has been set") } @@ -364,7 +363,7 @@ func(st *State) GetInput() ([]byte, error) { } // SetInput is used to record the latest client input. -func(st *State) SetInput(input []byte) error { +func (st *State) SetInput(input []byte) error { l := len(input) if l > INPUT_LIMIT { return fmt.Errorf("input size %v too large (limit %v)", l, 255) @@ -374,7 +373,7 @@ func(st *State) SetInput(input []byte) error { } // Reset re-initializes the state to run from top node with accumulated client state. -func(st *State) Restart() error { +func (st *State) Restart() error { var err error if len(st.ExecPath) == 0 { return fmt.Errorf("Restart called but no root set") @@ -389,7 +388,7 @@ func(st *State) Restart() error { } // SetLanguage validates and sets language according to the given ISO639 language code. -func(st *State) SetLanguage(code string) error { +func (st *State) SetLanguage(code string) error { if code == "" { st.Language = nil } @@ -402,16 +401,16 @@ func(st *State) SetLanguage(code string) error { return nil } -func(st *State) CloneEmpty() *State { +func (st *State) CloneEmpty() *State { flagCount := st.BitSize - 8 return NewState(flagCount) } // String implements String interface -func(st *State) String() string { +func (st *State) String() string { var flags string if st.debug { - flags = FlagDebugger.AsString(st.Flags, st.BitSize - 8) + flags = FlagDebugger.AsString(st.Flags, st.BitSize-8) } else { flags = fmt.Sprintf("0x%x", st.Flags) } @@ -425,6 +424,6 @@ func(st *State) String() string { } // initializes all flags not in control of client. -func(st *State) resetBaseFlags() { +func (st *State) resetBaseFlags() { st.Flags[0] = 0 } diff --git a/state/state_test.go b/state/state_test.go @@ -5,7 +5,7 @@ import ( "testing" ) -// Check creation +// Check creation func TestNewState(t *testing.T) { st := NewState(5) if len(st.Flags) != 2 { @@ -20,7 +20,7 @@ func TestNewState(t *testing.T) { t.Fatalf("invalid state flag length: %v", len(st.Flags)) } v := st.FlagBitSize() - x := uint32(17+8) + x := uint32(17 + 8) if v != x { t.Fatalf("expected %d, get %d", x, v) } @@ -406,8 +406,8 @@ func TestStateMovement(t *testing.T) { func TestStateMaxMovement(t *testing.T) { MaxLevel = 3 st := NewState(0) - st.Down("inky") - st.Down("pinky") + st.Down("inky") + st.Down("pinky") st.Down("blinky") st.Down("clyde") defer func() { diff --git a/testdata/testdata.go b/testdata/testdata.go @@ -8,22 +8,22 @@ import ( "git.defalsify.org/vise.git/db" fsdb "git.defalsify.org/vise.git/db/fs" - "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/logging" + "git.defalsify.org/vise.git/resource" ) var ( - ctx = context.Background() + ctx = context.Background() store = fsdb.NewFsDb() - out = outNew - logg = logging.NewVanilla().WithDomain("testdata") + out = outNew + logg = logging.NewVanilla().WithDomain("testdata") ) type echoFunc struct { v string } -func(e *echoFunc) get(ctx context.Context, nodeSym string, input []byte) (resource.Result, error) { +func (e *echoFunc) get(ctx context.Context, nodeSym string, input []byte) (resource.Result, error) { return resource.Result{ Content: e.v, }, nil @@ -88,7 +88,6 @@ func Generate() (string, error) { return dir, err } - // Generate outputs bytecode, templates and content symbols to a specified directory. // // The directory must exist, and must not have been used already in the same code execution. diff --git a/testdata/testdata_legacy.go b/testdata/testdata_legacy.go @@ -16,7 +16,7 @@ type genFunc func() error var ( BaseDir = testdataloader.GetBasePath() DataDir = "" - dirLock = false + dirLock = false ) func outLegacy(sym string, b []byte, tpl string, data map[string]string) error { @@ -223,7 +223,6 @@ func GenerateLegacy() (string, error) { return dir, err } - // Generate outputs bytecode, templates and content symbols to a specified directory. // // The directory must exist, and must not have been used already in the same code execution. diff --git a/testdata/testlocale/eng/x-vise.po b/testdata/testlocale/eng/x-vise.po @@ -0,0 +1,9 @@ +msgid "" +msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Language: eng\n" + +msgid "" + "bar" +msgstr "" + "baz" diff --git a/testdata/testlocale/eng/x-vise_menu.po b/testdata/testlocale/eng/x-vise_menu.po @@ -0,0 +1,14 @@ +msgid "" +msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Language: eng\n" + +msgid "" + "inky" +msgstr "" + "pinky" + +msgid "" + "foo" +msgstr "" + "foobar" diff --git a/testdata/testlocale/nor/default.po b/testdata/testlocale/nor/default.po @@ -0,0 +1,9 @@ +msgid "" +msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Language: nor\n" + +msgid "" + "foobar" +msgstr "" + "fu" diff --git a/testdata/testlocale/nor/x-vise.po b/testdata/testlocale/nor/x-vise.po @@ -0,0 +1,9 @@ +msgid "" +msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Language: eng\n" + +msgid "" + "baz" +msgstr "" + "bass" diff --git a/vm/debug.go b/vm/debug.go @@ -7,21 +7,21 @@ import ( ) type ParseHandler struct { - Catch func(string, uint32, bool) error - Croak func(uint32, bool) error - Load func(string, uint32) error + Catch func(string, uint32, bool) error + Croak func(uint32, bool) error + Load func(string, uint32) error Reload func(string) error - Map func(string) error - Move func(string) error - Halt func() error - InCmp func(string, string) error - MOut func(string, string) error - MSink func() error - MNext func(string, string) error - MPrev func(string, string) error - cur string - n int - w io.Writer + Map func(string) error + Move func(string) error + Halt func() error + InCmp func(string, string) error + MOut func(string, string) error + MSink func() error + MNext func(string, string) error + MPrev func(string, string) error + cur string + n int + w io.Writer } func NewParseHandler() *ParseHandler { diff --git a/vm/debug_test.go b/vm/debug_test.go @@ -4,7 +4,6 @@ import ( "testing" ) - func TestToString(t *testing.T) { var b []byte var r string @@ -52,7 +51,7 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } - b = NewLine(nil, MAP, []string{"inky_pinky"}, nil, nil) + b = NewLine(nil, MAP, []string{"inky_pinky"}, nil, nil) r, err = ph.ToString(b) if err != nil { t.Fatal(err) @@ -62,7 +61,7 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } - b = NewLine(nil, MOVE, []string{"blinky_clyde"}, nil, nil) + b = NewLine(nil, MOVE, []string{"blinky_clyde"}, nil, nil) r, err = ph.ToString(b) if err != nil { t.Fatal(err) @@ -72,7 +71,7 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } - b = NewLine(nil, HALT, nil, nil, nil) + b = NewLine(nil, HALT, nil, nil, nil) r, err = ph.ToString(b) if err != nil { t.Fatal(err) @@ -82,7 +81,7 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } - b = NewLine(nil, INCMP, []string{"13", "baz"}, nil, nil) + b = NewLine(nil, INCMP, []string{"13", "baz"}, nil, nil) r, err = ph.ToString(b) if err != nil { t.Fatal(err) @@ -92,7 +91,7 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } - b = NewLine(nil, MNEXT, []string{"11", "nextmenu"}, nil, nil) + b = NewLine(nil, MNEXT, []string{"11", "nextmenu"}, nil, nil) r, err = ph.ToString(b) if err != nil { t.Fatal(err) @@ -103,7 +102,7 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } - b = NewLine(nil, MPREV, []string{"222", "previous menu item"}, nil, nil) + b = NewLine(nil, MPREV, []string{"222", "previous menu item"}, nil, nil) r, err = ph.ToString(b) if err != nil { t.Fatal(err) @@ -114,7 +113,7 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } - b = NewLine(nil, MOUT, []string{"1", "foo"}, nil, nil) + b = NewLine(nil, MOUT, []string{"1", "foo"}, nil, nil) r, err = ph.ToString(b) if err != nil { t.Fatal(err) @@ -125,7 +124,7 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } - b = NewLine(nil, MSINK, nil, nil, nil) //[]uint8{0x42, 0x2a}) + b = NewLine(nil, MSINK, nil, nil, nil) //[]uint8{0x42, 0x2a}) r, err = ph.ToString(b) if err != nil { t.Fatal(err) diff --git a/vm/input.go b/vm/input.go @@ -12,11 +12,11 @@ import ( var ( inputRegexStr = "^\\+?[a-zA-Z0-9].*$" - inputRegex = regexp.MustCompile(inputRegexStr) - ctrlRegexStr = "^[><_^.]$" - ctrlRegex = regexp.MustCompile(ctrlRegexStr) - symRegexStr = "^[a-zA-Z0-9][a-zA-Z0-9_]+$" - symRegex = regexp.MustCompile(symRegexStr) + inputRegex = regexp.MustCompile(inputRegexStr) + ctrlRegexStr = "^[><_^.]$" + ctrlRegex = regexp.MustCompile(ctrlRegexStr) + symRegexStr = "^[a-zA-Z0-9][a-zA-Z0-9_]+$" + symRegex = regexp.MustCompile(symRegexStr) ) var ( @@ -34,7 +34,7 @@ func NewInvalidInputError(input string) error { } // Error implements the Error interface. -func(e InvalidInputError) Error() string { +func (e InvalidInputError) Error() string { return fmt.Sprintf("invalid input: '%s'", e.input) } @@ -102,7 +102,7 @@ func valid(target []byte) bool { ok = true } } - return ok + return ok } // CheckTarget tests whether the navigation state transition is available in the current state. diff --git a/vm/input_test.go b/vm/input_test.go @@ -4,8 +4,8 @@ import ( "context" "testing" - "git.defalsify.org/vise.git/state" "git.defalsify.org/vise.git/cache" + "git.defalsify.org/vise.git/state" ) func TestPhoneInput(t *testing.T) { diff --git a/vm/opcodes.go b/vm/opcodes.go @@ -6,53 +6,52 @@ type Opcode uint16 // VM Opcodes const ( - NOOP = 0 - CATCH = 1 - CROAK = 2 - LOAD = 3 + NOOP = 0 + CATCH = 1 + CROAK = 2 + LOAD = 3 RELOAD = 4 - MAP = 5 - MOVE = 6 - HALT = 7 - INCMP = 8 - MSINK = 9 - MOUT = 10 - MNEXT = 11 - MPREV = 12 - _MAX = 12 + MAP = 5 + MOVE = 6 + HALT = 7 + INCMP = 8 + MSINK = 9 + MOUT = 10 + MNEXT = 11 + MPREV = 12 + _MAX = 12 ) var ( OpcodeString = map[Opcode]string{ - NOOP: "NOOP", - CATCH: "CATCH", - CROAK: "CROAK", - LOAD: "LOAD", + NOOP: "NOOP", + CATCH: "CATCH", + CROAK: "CROAK", + LOAD: "LOAD", RELOAD: "RELOAD", - MAP: "MAP", - MOVE: "MOVE", - HALT: "HALT", - INCMP: "INCMP", - MSINK: "MSINK", - MOUT: "MOUT", - MNEXT: "MNEXT", - MPREV: "MPREV", + MAP: "MAP", + MOVE: "MOVE", + HALT: "HALT", + INCMP: "INCMP", + MSINK: "MSINK", + MOUT: "MOUT", + MNEXT: "MNEXT", + MPREV: "MPREV", } - OpcodeIndex = map[string]Opcode { - "NOOP": NOOP, - "CATCH": CATCH, - "CROAK": CROAK, - "LOAD": LOAD, + OpcodeIndex = map[string]Opcode{ + "NOOP": NOOP, + "CATCH": CATCH, + "CROAK": CROAK, + "LOAD": LOAD, "RELOAD": RELOAD, - "MAP": MAP, - "MOVE": MOVE, - "HALT": HALT, - "INCMP": INCMP, - "MSINK": MSINK, - "MOUT": MOUT, - "MNEXT": MNEXT, - "MPREV": MPREV, + "MAP": MAP, + "MOVE": MOVE, + "HALT": HALT, + "INCMP": INCMP, + "MSINK": MSINK, + "MOUT": MOUT, + "MNEXT": MNEXT, + "MPREV": MPREV, } - ) diff --git a/vm/runner.go b/vm/runner.go @@ -13,9 +13,9 @@ import ( // ExternalCodeError indicates an error that occurred when resolving an external code symbol (LOAD, RELOAD). type ExternalCodeError struct { - sym string + sym string code int - err error + err error } // NewExternalCodeError creates a new ExternalCodeError. @@ -26,13 +26,13 @@ func NewExternalCodeError(sym string, err error) *ExternalCodeError { } } -func(e *ExternalCodeError) WithCode(code int) *ExternalCodeError { +func (e *ExternalCodeError) WithCode(code int) *ExternalCodeError { e.code = code return e } // Error implements the Error interface. -func(e ExternalCodeError) Error() string { +func (e ExternalCodeError) Error() string { logg.Errorf("external code error: %v", e.err) return fmt.Sprintf("error %v:%v", e.sym, e.code) } @@ -40,22 +40,22 @@ func(e ExternalCodeError) Error() string { // Vm holds sub-components mutated by the vm execution. // TODO: Renderer should be passed to avoid proxy methods not strictly related to vm operation type Vm struct { - st *state.State // Navigation and error states. - rs resource.Resource // Retrieves content, code, and templates for symbols. - ca cache.Memory // Loaded content. - mn *render.Menu // Menu component of page. - sizer *render.Sizer // Apply size constraints to output. - pg *render.Page // Render outputs with menues to size constraints - menuSeparator string // Passed to Menu.WithSeparator if not empty + st *state.State // Navigation and error states. + rs resource.Resource // Retrieves content, code, and templates for symbols. + ca cache.Memory // Loaded content. + mn *render.Menu // Menu component of page. + sizer *render.Sizer // Apply size constraints to output. + pg *render.Page // Render outputs with menues to size constraints + menuSeparator string // Passed to Menu.WithSeparator if not empty } // NewVm creates a new Vm. func NewVm(st *state.State, rs resource.Resource, ca cache.Memory, sizer *render.Sizer) *Vm { vmi := &Vm{ - st: st, - rs: rs, - ca: ca, - pg: render.NewPage(ca, rs), + st: st, + rs: rs, + ca: ca, + pg: render.NewPage(ca, rs), sizer: sizer, } vmi.Reset() @@ -65,13 +65,13 @@ func NewVm(st *state.State, rs resource.Resource, ca cache.Memory, sizer *render // WithMenuSeparator is a chainable function that sets the separator string to use // in the menu renderer. -func(vmi *Vm) WithMenuSeparator(sep string) *Vm { +func (vmi *Vm) WithMenuSeparator(sep string) *Vm { vmi.menuSeparator = sep return vmi } // Reset re-initializes sub-components for output rendering. -func(vmi *Vm) Reset() { +func (vmi *Vm) Reset() { vmi.mn = render.NewMenu() if vmi.menuSeparator != "" { vmi.mn = vmi.mn.WithSeparator(vmi.menuSeparator) @@ -79,7 +79,7 @@ func(vmi *Vm) Reset() { vmi.pg.Reset() vmi.pg = vmi.pg.WithMenu(vmi.mn) if vmi.sizer != nil { - vmi.pg = vmi.pg.WithSizer(vmi.sizer) + vmi.pg = vmi.pg.WithSizer(vmi.sizer) } } @@ -107,7 +107,7 @@ func Rewind(sym string, st *state.State, ca cache.Memory) (string, error) { // Each step may update the state. // // On error, the remaining instructions will be returned. State will not be rolled back. -func(vm *Vm) Run(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) Run(ctx context.Context, b []byte) ([]byte, error) { logg.Tracef("new vm run") running := true for running { @@ -188,7 +188,7 @@ func(vm *Vm) Run(ctx context.Context, b []byte) ([]byte, error) { } // handles errors that should not be deferred to the client. -func(vm *Vm) runErrCheck(ctx context.Context, b []byte, err error) ([]byte, error) { +func (vm *Vm) runErrCheck(ctx context.Context, b []byte, err error) ([]byte, error) { if err == nil { return b, err } @@ -208,9 +208,9 @@ func(vm *Vm) runErrCheck(ctx context.Context, b []byte, err error) ([]byte, erro // If there is remaining bytecode, this method is a noop. // // If input has not been matched, a default invalid input page should be generated aswell as a possiblity of return to last screen (or exit). -// +// // If the termination flag has been set but not yet handled, execution is allowed to terminate. -func(vm *Vm) runDeadCheck(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runDeadCheck(ctx context.Context, b []byte) ([]byte, error) { if len(b) > 0 { return b, nil } @@ -245,14 +245,14 @@ func(vm *Vm) runDeadCheck(ctx context.Context, b []byte) ([]byte, error) { } // executes the MAP opcode -func(vm *Vm) runMap(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runMap(ctx context.Context, b []byte) ([]byte, error) { sym, b, err := ParseMap(b) err = vm.pg.Map(sym) return b, err } // executes the CATCH opcode -func(vm *Vm) runCatch(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runCatch(ctx context.Context, b []byte) ([]byte, error) { sym, sig, mode, b, err := ParseCatch(b) if err != nil { return b, err @@ -275,7 +275,7 @@ func(vm *Vm) runCatch(ctx context.Context, b []byte) ([]byte, error) { } // executes the CROAK opcode -func(vm *Vm) runCroak(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runCroak(ctx context.Context, b []byte) ([]byte, error) { sig, mode, b, err := ParseCroak(b) if err != nil { return b, err @@ -291,7 +291,7 @@ func(vm *Vm) runCroak(ctx context.Context, b []byte) ([]byte, error) { } // executes the LOAD opcode -func(vm *Vm) runLoad(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runLoad(ctx context.Context, b []byte) ([]byte, error) { sym, sz, b, err := ParseLoad(b) if err != nil { return b, err @@ -309,14 +309,14 @@ func(vm *Vm) runLoad(ctx context.Context, b []byte) ([]byte, error) { if err != nil { if err == cache.ErrDup { logg.DebugCtxf(ctx, "Ignoring load request on frame that has symbol already loaded", "sym", sym) - err = nil + err = nil } } return b, err } // executes the RELOAD opcode -func(vm *Vm) runReload(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runReload(ctx context.Context, b []byte) ([]byte, error) { sym, b, err := ParseReload(b) if err != nil { return b, err @@ -337,7 +337,7 @@ func(vm *Vm) runReload(ctx context.Context, b []byte) ([]byte, error) { } // executes the MOVE opcode -func(vm *Vm) runMove(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runMove(ctx context.Context, b []byte) ([]byte, error) { sym, b, err := ParseMove(b) if err != nil { return b, err @@ -358,7 +358,7 @@ func(vm *Vm) runMove(ctx context.Context, b []byte) ([]byte, error) { // executes the INCMP opcode // TODO: document state transition table and simplify flow -func(vm *Vm) runInCmp(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runInCmp(ctx context.Context, b []byte) ([]byte, error) { sym, target, b, err := ParseInCmp(b) if err != nil { return b, err @@ -388,7 +388,7 @@ func(vm *Vm) runInCmp(ctx context.Context, b []byte) ([]byte, error) { } else { if target != string(input) { return b, nil - } + } logg.InfoCtxf(ctx, "input match", "input", input, "next", sym) } vm.st.SetFlag(state.FLAG_INMATCH) @@ -419,20 +419,20 @@ func(vm *Vm) runInCmp(ctx context.Context, b []byte) ([]byte, error) { } // executes the HALT opcode -func(vm *Vm) runHalt(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runHalt(ctx context.Context, b []byte) ([]byte, error) { var err error b, err = ParseHalt(b) if err != nil { return b, err } logg.DebugCtxf(ctx, "found HALT, stopping") - + vm.st.SetFlag(state.FLAG_WAIT) return b, nil } // executes the MSIZE opcode -func(vm *Vm) runMSink(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runMSink(ctx context.Context, b []byte) ([]byte, error) { b, err := ParseMSink(b) mcfg := vm.mn.GetBrowseConfig() vm.mn = vm.mn.WithSink().WithBrowseConfig(mcfg).WithPages() @@ -441,7 +441,7 @@ func(vm *Vm) runMSink(ctx context.Context, b []byte) ([]byte, error) { } // executes the MOUT opcode -func(vm *Vm) runMOut(ctx context.Context, b []byte) ([]byte, error) { +func (vm *Vm) runMOut(ctx context.Context, b []byte) ([]byte, error) { title, choice, b, err := ParseMOut(b) if err != nil { return b, err @@ -451,35 +451,35 @@ func(vm *Vm) runMOut(ctx context.Context, b []byte) ([]byte, error) { } // executes the MNEXT opcode -func(vm *Vm) runMNext(ctx context.Context, b []byte) ([]byte, error) { - display, selector, b, err := ParseMNext(b) - if err != nil { - return b, err - } - cfg := vm.mn.GetBrowseConfig() - cfg.NextSelector = selector - cfg.NextTitle = display - cfg.NextAvailable = true - vm.mn = vm.mn.WithBrowseConfig(cfg) - return b, nil +func (vm *Vm) runMNext(ctx context.Context, b []byte) ([]byte, error) { + display, selector, b, err := ParseMNext(b) + if err != nil { + return b, err + } + cfg := vm.mn.GetBrowseConfig() + cfg.NextSelector = selector + cfg.NextTitle = display + cfg.NextAvailable = true + vm.mn = vm.mn.WithBrowseConfig(cfg) + return b, nil } - + // executes the MPREV opcode -func(vm *Vm) runMPrev(ctx context.Context, b []byte) ([]byte, error) { - display, selector, b, err := ParseMPrev(b) - if err != nil { - return b, err - } - cfg := vm.mn.GetBrowseConfig() - cfg.PreviousSelector = selector - cfg.PreviousTitle = display - cfg.PreviousAvailable = true - vm.mn = vm.mn.WithBrowseConfig(cfg) - return b, nil +func (vm *Vm) runMPrev(ctx context.Context, b []byte) ([]byte, error) { + display, selector, b, err := ParseMPrev(b) + if err != nil { + return b, err + } + cfg := vm.mn.GetBrowseConfig() + cfg.PreviousSelector = selector + cfg.PreviousTitle = display + cfg.PreviousAvailable = true + vm.mn = vm.mn.WithBrowseConfig(cfg) + return b, nil } // Render wraps output rendering, and handles error when attempting to browse beyond the rendered page count. -func(vm *Vm) Render(ctx context.Context) (string, error) { +func (vm *Vm) Render(ctx context.Context) (string, error) { changed := vm.st.ResetFlag(state.FLAG_DIRTY) if !changed { return "", nil @@ -505,9 +505,9 @@ func(vm *Vm) Render(ctx context.Context) (string, error) { } // retrieve and cache data for key -func(vm *Vm) refresh(key string, rs resource.Resource, ctx context.Context) (string, error) { +func (vm *Vm) refresh(key string, rs resource.Resource, ctx context.Context) (string, error) { var err error - + fn, err := rs.FuncFor(ctx, key) if err != nil { return "", err diff --git a/vm/runner_test.go b/vm/runner_test.go @@ -6,23 +6,23 @@ import ( "fmt" "log" "testing" - + "git.defalsify.org/vise.git/cache" + "git.defalsify.org/vise.git/internal/resourcetest" "git.defalsify.org/vise.git/render" "git.defalsify.org/vise.git/resource" - "git.defalsify.org/vise.git/internal/resourcetest" "git.defalsify.org/vise.git/state" ) var ( - ctx = context.Background() + ctx = context.Background() dynVal = "three" ) type testResource struct { *resourcetest.TestResource - state *state.State - RootCode []byte + state *state.State + RootCode []byte CatchContent string } @@ -30,7 +30,7 @@ func newTestResource(st *state.State) testResource { rs := resourcetest.NewTestResource() tr := testResource{ TestResource: rs, - state: st, + state: st, } rs.AddTemplate(ctx, "foo", "inky pinky blinky clyde") rs.AddTemplate(ctx, "bar", "inky pinky {{.one}} blinky {{.two}} clyde") @@ -66,7 +66,7 @@ func newTestResource(st *state.State) testResource { b = NewLine(nil, MOUT, []string{"oo", "1"}, nil, nil) b = NewLine(b, HALT, nil, nil, nil) rs.AddBytecode(ctx, "ouf", b) - + rs.AddBytecode(ctx, "root", tr.RootCode) return tr @@ -97,7 +97,6 @@ func getEcho(ctx context.Context, sym string, input []byte) (resource.Result, er }, nil } - func uhOh(ctx context.Context, sym string, input []byte) (resource.Result, error) { return resource.Result{}, fmt.Errorf("uh-oh spaghetti'ohs") } @@ -114,7 +113,7 @@ func setFlag(ctx context.Context, sym string, input []byte) (resource.Result, er r.FlagReset = append(r.FlagReset, uint32(input[1])) } log.Printf("setflag %v", r) - return r, nil + return r, nil } @@ -124,6 +123,7 @@ func set_lang(ctx context.Context, sym string, input []byte) (resource.Result, e FlagSet: []uint32{state.FLAG_LANG}, }, nil } + // //type TestStatefulResolver struct { // state *state.State @@ -151,14 +151,14 @@ func (r testResource) FuncFor(ctx context.Context, sym string) (resource.EntryFu return nil, fmt.Errorf("invalid function: '%s'", sym) } -func(r testResource) getInput(ctx context.Context, sym string, input []byte) (resource.Result, error) { +func (r testResource) getInput(ctx context.Context, sym string, input []byte) (resource.Result, error) { v, err := r.state.GetInput() return resource.Result{ Content: string(v), }, err } -func(r testResource) getCode(sym string) ([]byte, error) { +func (r testResource) getCode(sym string) ([]byte, error) { var b []byte switch sym { case "_catch": @@ -196,7 +196,7 @@ func TestRun(t *testing.T) { b = []byte{0x01, 0x02} _, err = vm.Run(ctx, b) if err == nil { - t.Fatalf("no error on invalid opcode") + t.Fatalf("no error on invalid opcode") } } @@ -398,14 +398,14 @@ func TestRunArgInvalid(t *testing.T) { _ = st.SetInput([]byte("foo")) var err error - + st.Down("root") b := NewLine(nil, INCMP, []string{"baz", "bar"}, nil, nil) ctx := context.Background() b, err = vm.Run(ctx, b) if err != nil { - t.Fatal(err) + t.Fatal(err) } location, _ := st.Where() if location != "_catch" { @@ -414,7 +414,7 @@ func TestRunArgInvalid(t *testing.T) { r, err := vm.Render(ctx) if err != nil { - t.Fatal(err) + t.Fatal(err) } expect := `invalid input: 'foo' 0:repent` @@ -442,13 +442,13 @@ func TestRunMenu(t *testing.T) { b, err = vm.Run(ctx, b) if err != nil { - t.Error(err) + t.Error(err) } l := len(b) if l != 0 { t.Errorf("expected empty remainder, got length %v: %v", l, b) } - + r, err := vm.Render(ctx) if err != nil { t.Fatal(err) @@ -479,13 +479,13 @@ func TestRunMenuBrowse(t *testing.T) { b, err = vm.Run(ctx, b) if err != nil { - t.Error(err) + t.Error(err) } l := len(b) if l != 0 { t.Errorf("expected empty remainder, got length %v: %v", l, b) } - + r, err := vm.Render(ctx) if err != nil { t.Fatal(err) @@ -532,7 +532,6 @@ func TestRunReturn(t *testing.T) { } } - func TestRunLoadInput(t *testing.T) { st := state.NewState(5) rs := newTestResource(st) diff --git a/vm/vm.go b/vm/vm.go @@ -88,13 +88,14 @@ func ParseMNext(b []byte) (string, string, []byte, error) { // ParseMSink parses and extracts the expected argument portion of a MSINK instruction func ParseMSink(b []byte) ([]byte, error) { return parseNoArg(b) -// if len(b) < 2 { -// return 0, 0, b, fmt.Errorf("argument too short") -// } -// r := uint32(b[0]) -// rr := uint32(b[1]) -// b = b[2:] -// return b, nil + // if len(b) < 2 { + // return 0, 0, b, fmt.Errorf("argument too short") + // } + // + // r := uint32(b[0]) + // rr := uint32(b[1]) + // b = b[2:] + // return b, nil } // ParseMOut parses and extracts the expected argument portion of a MOUT instruction @@ -157,7 +158,7 @@ func parseSymSig(b []byte) (string, uint32, bool, []byte, error) { } matchmode := b[0] > 0 b = b[1:] - + return sym, sig, matchmode, b, nil } @@ -172,7 +173,7 @@ func parseSig(b []byte) (uint32, bool, []byte, error) { } matchmode := b[0] > 0 b = b[1:] - + return sig, matchmode, b, nil } @@ -211,7 +212,7 @@ func instructionSplit(b []byte) (string, []byte, error) { if bSz < int(sz) { return "", nil, fmt.Errorf("corrupt instruction, len %v less than symbol length: %v", bSz, sz) } - r := string(b[1:1+sz]) + r := string(b[1 : 1+sz]) return r, b[1+sz:], nil } diff --git a/vm/vm_test.go b/vm/vm_test.go @@ -10,7 +10,7 @@ func TestParseOp(t *testing.T) { if err != nil { t.Fatal(err) } - if (op != LOAD) { + if op != LOAD { t.Fatalf("expected %d, got %d", LOAD, op) } x := append([]byte{0x03}, []byte("foo")...)