Functions created from within class methods should be allowed to access protected (and private) members of that class.
Essentially, any functions inside a class method should inheret that method's access- this is a simple pattern that maintains encapsulation of exactly those private/protected fields, as the code is still clearly "owned" by the encapsulating class.
Actual Behaviour
In some scenarios, functions within class methods that access protected members of that class are being marked with the 'Field _field is protected' warning. See Repro Steps for code sample.
Reproduction steps
---@class DynamicDude
---@field _field string?
local DynamicDude = {}
function DynamicDude:demo()
self:setup(function(self)
-- This disable shouldn't be necessary
---@diagnostic disable-next-line: invisible
self._field = 'test'
end)
---@param self DynamicDude
local function closure(self)
-- This disable shouldn't be necessary
---@diagnostic disable-next-line: invisible
self._field = 'test'
end
self.dynamic_fn = function(self)
self._field = 'test'
end
end
---@param fn fun(self:DynamicDude)
function DynamicDude:setup(fn)
self.dynamic_fn = fn
end
Additional Notes
FEATURE REQUEST: I'd actually love to have a setting that just said "all variables named self are assumed to indicate valid access to private/protected members", to cover all my bases. Happy to dig up some examples / explain myself more if that's useful.
How are you using the lua-language-server?
Visual Studio Code Extension (sumneko.lua)
Which OS are you using?
Windows
What is the issue affecting?
Diagnostics/Syntax Checking
Expected Behaviour
Functions created from within class methods should be allowed to access protected (and private) members of that class.
Essentially, any functions inside a class method should inheret that method's access- this is a simple pattern that maintains encapsulation of exactly those private/protected fields, as the code is still clearly "owned" by the encapsulating class.
Actual Behaviour
In some scenarios, functions within class methods that access protected members of that class are being marked with the 'Field
_field
is protected' warning. See Repro Steps for code sample.Reproduction steps
Additional Notes
FEATURE REQUEST: I'd actually love to have a setting that just said "all variables named
self
are assumed to indicate valid access to private/protected members", to cover all my bases. Happy to dig up some examples / explain myself more if that's useful.Log File
No response