diff --git a/server/GameServer/Commands.lean b/server/GameServer/Commands.lean index 18022de..99e3fc5 100644 --- a/server/GameServer/Commands.lean +++ b/server/GameServer/Commands.lean @@ -60,12 +60,17 @@ in the first level and get enabled during the game. /-- Checks if `inventoryTemplateExt` contains an entry with `(type, name)` and yields a warning otherwise. If `template` is provided, it will add such an entry instead of yielding a -warning. -/ -def checkInventoryDoc (type : InventoryType) (name : Ident) +warning. + +`ident` is the syntax piece. If `name` is not provided, it will use `ident.getId`. +I used this workaround, because I needed a new name (with correct namespace etc) +to be used, and I don't know how to create a new ident with same position but different name. +-/ +def checkInventoryDoc (type : InventoryType) (ident : Ident) (name : Name := ident.getId) (template : Option String := none) : CommandElabM Unit := do -- note: `name` is an `Ident` (instead of `Name`) for the log messages. let env ← getEnv - let n := name.getId + let n := name -- Find a key with matching `(type, name)`. match (inventoryTemplateExt.getState env).findIdx? (fun x => x.name == n && x.type == type) with @@ -78,18 +83,18 @@ def checkInventoryDoc (type : InventoryType) (name : Ident) -- We just add a dummy entry modifyEnv (inventoryTemplateExt.addEntry · { type := type - name := name.getId + name := name category := if type == .Lemma then s!"{n.getPrefix}" else "" }) - logWarningAt name (m!"Missing {type} Documentation: {name}\nAdd `{type}Doc {name}` " ++ + logWarningAt ident (m!"Missing {type} Documentation: {name}\nAdd `{type}Doc {name}` " ++ m!"somewhere above this statement.") -- Add the default documentation | some s => modifyEnv (inventoryTemplateExt.addEntry · { type := type - name := name.getId + name := name category := if type == .Lemma then s!"{n.getPrefix}" else "" content := s }) - logInfoAt name (m!"Missing {type} Documentation: {name}, used provided default (e.g. " ++ + logInfoAt ident (m!"Missing {type} Documentation: {name}, used provided default (e.g. " ++ m!"statement description) instead. If you want to write your own description, add " ++ m!"`{type}Doc {name}` somewhere above this statement.") @@ -332,13 +337,13 @@ elab "Statement" statementName:ident ? descr:str ? sig:declSig val:declVal : com let thmStatement ← `(theorem $defaultDeclName $sig $val) elabCommand thmStatement -- Check that statement has a docs entry. - checkInventoryDoc .Lemma name (template := descr) + checkInventoryDoc .Lemma name (name := fullName) (template := descr) else let thmStatement ← `( theorem $name $sig $val) elabCommand thmStatement -- Check that statement has a docs entry. - checkInventoryDoc .Lemma name (template := descr) + checkInventoryDoc .Lemma name (name := fullName) (template := descr) | none => let thmStatement ← `(theorem $defaultDeclName $sig $val) @@ -593,7 +598,7 @@ def getTacticDocstring (env : Environment) (name: Name) : CommandElabM (Option S if let some doc ← findDocString? env k then return doc - logWarning <| m!"Could not find a docstring for this tactic, consider adding one " ++ + logWarning <| m!"Could not find a docstring for tactic {name}, consider adding one " ++ m!"using `TacticDoc {name} \"some doc\"`" return none @@ -833,12 +838,20 @@ elab "MakeGame" : command => do let Availability₀ : HashMap Name InventoryTile := HashMap.ofList $ ← allItems.toList.mapM fun item => do - let data := (← getInventoryItem? item inventoryType).get! - -- TODO: BUG, panic at `get!` in vscode - return (item, { - name := item - displayName := data.displayName - category := data.category }) + -- Using a match statement because the error message of `Option.get!` is not helpful. + match (← getInventoryItem? item inventoryType) with + | none => + -- Note: we did have a panic here before because lemma statement and doc entry + -- had mismatching namespaces + logError m!"There is no inventory item ({inventoryType}) for: {item}." + panic s!"Inventory item {item} not found!" + | some data => + return (item, { + name := item + displayName := data.displayName + category := data.category }) + + -- Availability after a given world let mut itemsInWorld : HashMap Name (HashMap Name InventoryTile) := {}