mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2026-08-13 00:45:11 +09:00
Defer need-check-nil and clean up stale suppressions
emmylua deserialises an unknown diagnostic code to a catch all that matches no checker, so every `invisible`, `nil-check` and `global-element` suppression was silently doing nothing. Renamed to the emmylua codes. `name-style-check` has no equivalent and is dropped, it was already disabled under luals. The `get_tile` suppressions referenced an api typedef bug from 2024 which no longer reproduces. need-check-nil is deferred rather than disabled on merit: a third of the 407 findings come from MapPosition and BoundingBox being aliased as `struct|[double, double]`, so every `entity.position.x` reads as possibly nil. The rest need per site knowledge of runtime invariants. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
},
|
||||
"$comment-disable": "Carried over from the luals config, which had these as editor only rather than checked in ci",
|
||||
"$comment-unnecessary-if": "Disabled by the config fmtk generates for itself, the api union types make it unreliable",
|
||||
"$comment-need-check-nil": "To be enabled once the backlog is cleared, a third of it is MapPosition and BoundingBox being aliased as struct|[double, double]",
|
||||
"diagnostics": {
|
||||
"globals": [ "__DebugAdapter", "__Profiler" ],
|
||||
"disable": [
|
||||
@@ -26,6 +27,7 @@
|
||||
"invert-if",
|
||||
"missing-parameter",
|
||||
"missing-return-value",
|
||||
"need-check-nil",
|
||||
"param-type-mismatch",
|
||||
"preferred-local-alias",
|
||||
"redefined-local",
|
||||
|
||||
@@ -21,12 +21,10 @@ setmetatable(rcon_static, { __index = _G })
|
||||
setmetatable(rcon_env, { __index = rcon_static })
|
||||
|
||||
--- Some common static values which can be added now
|
||||
--- @diagnostic disable: name-style-check
|
||||
rcon_static.Async = Async
|
||||
rcon_static.ExpUtil = ExpUtil
|
||||
rcon_static.Commands = Commands
|
||||
rcon_static.print = Commands.print
|
||||
--- @diagnostic enable: name-style-check
|
||||
|
||||
--- Some common callback values which are useful when a player uses the command
|
||||
--- @alias ExpCommand.RconDynamic fun(player: LuaPlayer?): any
|
||||
|
||||
@@ -19,7 +19,7 @@ Commands.new("_sudo", { "exp-commands_sudo.description" })
|
||||
--- @cast command ExpCommand
|
||||
--- @cast parameter string
|
||||
|
||||
--- @diagnostic disable-next-line: invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
return Commands._event_handler{
|
||||
name = command.name,
|
||||
tick = game.tick,
|
||||
|
||||
@@ -5,7 +5,7 @@ Therefore, we advise that this should be the only file in your module to expose
|
||||
Typically this would be your control file as shown in the example below
|
||||
]]
|
||||
|
||||
--- @diagnostic disable: global-element
|
||||
--- @diagnostic disable: global-in-non-module
|
||||
|
||||
-- Access using `/sc exp_groups.foo()`
|
||||
exp_groups = require("modules/exp_groups/control")
|
||||
|
||||
@@ -188,9 +188,9 @@ function Gui._ensure_consistency(event)
|
||||
|
||||
-- This check isn't needed, but allows the toolbar file to be deleted without modifying any lib code
|
||||
if Gui.toolbar then
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
Gui.toolbar._create_elements(player)
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
Gui.toolbar._ensure_consistency(player)
|
||||
end
|
||||
end
|
||||
@@ -211,7 +211,7 @@ local function on_gui_opened(event)
|
||||
|
||||
if visible then
|
||||
event.element = element
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
define:raise_event(event)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -29,7 +29,7 @@ Toolbar.on_gui_button_toggled = script.generate_event_name()
|
||||
--- @class _ExpElement._prototype
|
||||
--- @field on_button_toggled ExpElement.OnEventAdder<EventData.on_gui_button_toggled>
|
||||
|
||||
--- @diagnostic disable-next-line: invisible, inject-field
|
||||
--- @diagnostic disable-next-line: access-invisible, inject-field
|
||||
function ExpElement._prototype.on_button_toggled(self, handler)
|
||||
return self:on_event(Toolbar.on_gui_button_toggled, handler)
|
||||
end
|
||||
|
||||
@@ -2,6 +2,6 @@ local Gui = require("modules/exp_gui")
|
||||
local Roles = require("modules.exp_legacy.expcore.roles")
|
||||
local Event = require("modules/exp_legacy/utils/event")
|
||||
|
||||
--- @diagnostic disable invisible
|
||||
--- @diagnostic disable: access-invisible
|
||||
Event.add(Roles.events.on_role_assigned, Gui._ensure_consistency)
|
||||
Event.add(Roles.events.on_role_unassigned, Gui._ensure_consistency)
|
||||
|
||||
@@ -4,7 +4,7 @@ However, sometimes you need globals, for example to access functions within rcon
|
||||
Therefore, we advise that this should be the only file in your module to expose globals
|
||||
]]
|
||||
|
||||
--- @diagnostic disable: global-element
|
||||
--- @diagnostic disable: global-in-non-module
|
||||
|
||||
-- Access using `/sc exp_roles.foo()`
|
||||
exp_roles = require("modules/exp_roles/control")
|
||||
|
||||
@@ -55,7 +55,7 @@ Commands.new("get-roles", { "exp-commands_roles.description-get" })
|
||||
end
|
||||
|
||||
local last = #roles_formatted
|
||||
--- @diagnostic disable-next-line nil-check
|
||||
--- @diagnostic disable-next-line: need-check-nil
|
||||
roles_formatted[last] = roles_formatted[last][2]
|
||||
|
||||
return Commands.status.success(response)
|
||||
|
||||
@@ -18,7 +18,6 @@ end
|
||||
--- @param surface LuaSurface
|
||||
--- @param position MapPosition
|
||||
local function degrade_tile(surface, position)
|
||||
--- @diagnostic disable-next-line Incorrect Api Type: https://forums.factorio.com/viewtopic.php?f=233&t=109145&p=593761&hilit=get_tile#p593761
|
||||
local tile = surface.get_tile(position)
|
||||
local tile_name = tile.name
|
||||
local degrade_tile_name = config.degrade_order[tile_name]
|
||||
@@ -61,7 +60,6 @@ end
|
||||
--- @param position MapPosition
|
||||
--- @return number?
|
||||
local function get_tile_strength(surface, position)
|
||||
--- @diagnostic disable-next-line Incorrect Api Type: https://forums.factorio.com/viewtopic.php?f=233&t=109145&p=593761&hilit=get_tile#p593761
|
||||
local tile = surface.get_tile(position)
|
||||
local tile_name = tile.name
|
||||
local strength = config.strengths[tile_name]
|
||||
|
||||
@@ -164,7 +164,6 @@ local function clear_spawn_area(surface, offset)
|
||||
local get_tile = surface.get_tile
|
||||
|
||||
-- Make sure a non water tile is used for filling
|
||||
--- @diagnostic disable-next-line Incorrect Api Type: https://forums.factorio.com/viewtopic.php?f=233&t=109145&p=593761&hilit=get_tile#p593761
|
||||
local starting_tile = get_tile(offset)
|
||||
local fill_tile = starting_tile.collides_with("player") and "landfill" or starting_tile.name
|
||||
local fill_radius = config.spawn_area.landfill_radius
|
||||
@@ -185,7 +184,6 @@ local function clear_spawn_area(surface, offset)
|
||||
if dst < tile_radius_sqr then
|
||||
-- If it is inside the decon radius always set the tile
|
||||
tiles_to_make[#tiles_to_make + 1] = { name = decon_tile, position = pos }
|
||||
--- @diagnostic disable-next-line Incorrect Api Type: https://forums.factorio.com/viewtopic.php?f=233&t=109145&p=593761&hilit=get_tile#p593761
|
||||
elseif dst < fill_radius_sqr and get_tile(pos).collides_with("player") then
|
||||
-- If it is inside the fill radius only set the tile if it is water
|
||||
tiles_to_make[#tiles_to_make + 1] = { name = fill_tile, position = pos }
|
||||
|
||||
@@ -27,7 +27,7 @@ function Public.show(container)
|
||||
local left_panel_style = left_panel.style
|
||||
left_panel_style.width = 300
|
||||
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
for element_name in pairs(ExpElement._elements) do
|
||||
local header = left_panel.add{ type = "flow" }.add{ type = "label", name = header_name, caption = element_name }
|
||||
Gui.set_data(header, element_name)
|
||||
@@ -92,18 +92,18 @@ Gui.on_click(
|
||||
input_text_box.text = concat{ "ExpElement._elements[\"", element_name, "\"]" }
|
||||
input_text_box.style.font_color = Color.black
|
||||
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
local define = ExpElement._elements[element_name]
|
||||
local content = dump({
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
debug = define._debug,
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
has_handlers = define._has_handlers,
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
track_elements = define._track_elements,
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
elements = ExpIter._scopes[element_name],
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
data = ExpData._scopes[element_name]._raw,
|
||||
}) or "nil"
|
||||
right_panel.text = content
|
||||
|
||||
@@ -24,7 +24,7 @@ function Public.show(container)
|
||||
local left_panel_style = left_panel.style
|
||||
left_panel_style.width = 300
|
||||
|
||||
--- @diagnostic disable-next-line invisible
|
||||
--- @diagnostic disable-next-line: access-invisible
|
||||
for token_id in pairs(Storage._registered) do
|
||||
local header = left_panel.add{ type = "flow" }.add{ type = "label", name = header_name, caption = token_id }
|
||||
Gui.set_data(header, token_id)
|
||||
|
||||
Reference in New Issue
Block a user