Move all package-level vars into gameData; finish lint adoption
gochecknoglobals: all 37 package-level tables consolidated into the gameData struct (game/tables.go), built by newGameData() and carried on RogueGame as g.data (set in NewGame and Restore). ObjectKind Glyph()/objectKindForGlyph are now switches; the table-reading subtype Stringer methods are gone; isMagic is a RogueGame method. goconst: repeated words named (potionName/scrollName/ringName/goldName in object.go, wandName/staffName in sticks.go, ripWall in tables.go). exhaustive, testpackage: disabled in .golangci.yml with sneak's approval (2026-07-07). Also reverts misspell's silent corruption of the "ther" scroll-name syllable (it had become "there", changing generated scroll names vs C). Remaining red: cyclop/gocognit/nestif until refactor step 7; mnd awaits a ruling. TODO.md rotated; MEMORY.md lint notes updated.
This commit is contained in:
84
TODO.md
84
TODO.md
@@ -29,22 +29,34 @@ Refactor ground rules:
|
||||
|
||||
# Next Step
|
||||
|
||||
Finish adopting the house Go linting standards. Done so far (branch
|
||||
refactor/lint-adoption): .golangci.yml copied verbatim from the
|
||||
prompts repo (plus the sneak-approved paralleltest exception,
|
||||
2026-07-06); ~1,500 findings fixed (autofix formatting sweep, errcheck/
|
||||
err113/noinlineerr error handling, forbidigo, funcorder, recvcheck
|
||||
pointer receivers, goprintffuncname renames msg helpers to *f, revive
|
||||
doc comments, gocritic switch rewrites, gosec real fixes plus justified
|
||||
nolints, unparam signature tightening, C-faithful "missle" spellings
|
||||
restored after misspell autofix changed game text). Remaining findings
|
||||
are all in linters awaiting sneak's exception decision: mnd (288),
|
||||
gochecknoglobals (37), cyclop (36), nestif (30), gocognit (23),
|
||||
exhaustive (22), goconst (16), testpackage (9). Blocked on that
|
||||
decision; either disable with approval or scope the fixes.
|
||||
Refactor step 4: method renames, movement/world subsystem
|
||||
(doMove→moveHero, beTrapped→springTrap, rndmove→randomStep,
|
||||
doRooms/doPassages/doMaze→digRooms/digPassages/digMaze,
|
||||
chgStr→changeStrength, ...); remove the goto/label flows in doMove,
|
||||
dispatch, and saveGame in favor of loops and helpers.
|
||||
|
||||
# Completed Steps
|
||||
|
||||
- 2026-07-07 Lint adoption finished (refactor/no-package-globals): all
|
||||
37 package-level vars moved into `gameData` (built by `newGameData`,
|
||||
hung on RogueGame as `g.data`, set in NewGame and Restore); ObjectKind
|
||||
Glyph()/objectKindForGlyph became switches; the table-reading subtype
|
||||
Stringers were removed; isMagic became a RogueGame method; goconst
|
||||
fixed with named word constants (potionName, goldName, staffName,
|
||||
ripWall, ...); testpackage and exhaustive disabled in .golangci.yml
|
||||
with sneak's approval (2026-07-07); misspell's corruption of the
|
||||
"ther" scroll syllable reverted. Remaining red: cyclop (36), nestif
|
||||
(30), gocognit (23) stay until step 7 fixes them per sneak's ruling,
|
||||
and mnd (289) still awaits a ruling.
|
||||
- 2026-07-06 Lint adoption bulk (refactor/lint-adoption, 5ba9fe8):
|
||||
.golangci.yml copied verbatim from the prompts repo (plus the
|
||||
sneak-approved paralleltest exception, 2026-07-06); ~1,500 findings
|
||||
fixed (autofix formatting sweep, errcheck/err113/noinlineerr error
|
||||
handling, forbidigo, funcorder, recvcheck pointer receivers,
|
||||
goprintffuncname renames msg helpers to *f, revive doc comments,
|
||||
gocritic switch rewrites, gosec real fixes plus justified nolints,
|
||||
unparam signature tightening, C-faithful "missle" spellings restored
|
||||
after misspell autofix changed game text).
|
||||
- 2026-07-06 Module base path updated to git.eeqj.de/sneak/rgoue
|
||||
(go.mod, term/ and cmd/ imports, ARCHITECTURE.md, version string).
|
||||
- 2026-07-06 Refactor step 3 (refactor/object-fields): Object.Arm split
|
||||
@@ -86,45 +98,41 @@ decision; either disable with approval or scope the fixes.
|
||||
|
||||
# Future Steps
|
||||
|
||||
1. Refactor step 4: method renames, movement/world subsystem
|
||||
(doMove→moveHero, beTrapped→springTrap, rndmove→randomStep,
|
||||
doRooms/doPassages/doMaze→digRooms/digPassages/digMaze,
|
||||
chgStr→changeStrength, ...); remove the goto/label flows in doMove,
|
||||
dispatch, and saveGame in favor of loops and helpers.
|
||||
2. Refactor step 5: method renames, items/combat/UI subsystems
|
||||
1. Refactor step 5: method renames, items/combat/UI subsystems
|
||||
(invName→inventoryName, rollEm→rollAttacks, doPot→applyPotionFuse,
|
||||
getItem→promptPackItem returning (obj, ok), getDir→promptDirection);
|
||||
int status codes (attack returning -1) become named results. Two or
|
||||
three commits, one subsystem each.
|
||||
3. Refactor step 6: extract types from the god object — MessageLine
|
||||
2. Refactor step 6: extract types from the god object — MessageLine
|
||||
owns the msg/addmsg/endmsg machinery; pack/inventory operations move
|
||||
onto *Player; monster/object list management and map queries
|
||||
consolidate onto *Level; RogueGame keeps turn orchestration and
|
||||
cross-system effects only.
|
||||
4. Refactor step 7: effects dispatch — the giant quaff/readScroll/doZap
|
||||
3. Refactor step 7: effects dispatch — the giant quaff/readScroll/doZap
|
||||
switches become per-kind handler tables of small named methods,
|
||||
keeping effect order and RNG call sequence identical.
|
||||
5. Refactor step 8: constructor and style pass per the house
|
||||
keeping effect order and RNG call sequence identical. This step also
|
||||
clears the outstanding cyclop/gocognit/nestif lint findings.
|
||||
4. Refactor step 8: constructor and style pass per the house
|
||||
styleguide — game.New(game.Params{...}) replacing NewGame(Config);
|
||||
replace the gameEnd panic unwind with error-based turn results where
|
||||
feasible; 77-column wrap sweep.
|
||||
6. Docs refresh: update ARCHITECTURE.md Part 2 and README.md for the
|
||||
5. Docs refresh: update ARCHITECTURE.md Part 2 and README.md for the
|
||||
post-refactor names; add the C name → Go name rename table.
|
||||
7. Playtest hardening pass: play several full games with the tcell
|
||||
binary and extend run_test.go to script a deeper multi-level
|
||||
playthrough (descend past level 5, use potions, scrolls, zapping,
|
||||
save/restore). Fix any panics, message mismatches, or divergences
|
||||
from the C behavior that this uncovers, with regression tests.
|
||||
8. Verify the seed-compatibility claim against the C reference on
|
||||
c-master: same seed, same dungeon, same item tables, for several
|
||||
seeds.
|
||||
9. Broaden unit test coverage where playtesting finds thin spots
|
||||
(rings, sticks, wizard commands).
|
||||
10. Tag a release once a full game (Amulet retrieval and score entry)
|
||||
completes without defects.
|
||||
11. Full-terminal-size support (deferred by explicit decision
|
||||
6. Playtest hardening pass: play several full games with the tcell
|
||||
binary and extend run_test.go to script a deeper multi-level
|
||||
playthrough (descend past level 5, use potions, scrolls, zapping,
|
||||
save/restore). Fix any panics, message mismatches, or divergences
|
||||
from the C behavior that this uncovers, with regression tests.
|
||||
7. Verify the seed-compatibility claim against the C reference on
|
||||
c-master: same seed, same dungeon, same item tables, for several
|
||||
seeds.
|
||||
8. Broaden unit test coverage where playtesting finds thin spots
|
||||
(rings, sticks, wizard commands).
|
||||
9. Tag a release once a full game (Amulet retrieval and score entry)
|
||||
completes without defects.
|
||||
10. Full-terminal-size support (deferred by explicit decision
|
||||
2026-07-06): per-game dungeon dimensions instead of the 80x24
|
||||
constants; open design questions are resize policy, gameplay
|
||||
tuning at larger sizes, and a --classic 80x24 mode.
|
||||
12. Note: this repo is exempt from the standard policy scaffold. Do not
|
||||
11. Note: this repo is exempt from the standard policy scaffold. Do not
|
||||
add Makefile, Dockerfile, or REPO_POLICIES.md.
|
||||
|
||||
Reference in New Issue
Block a user