object: made is() stricter and added extends()

Currently some plugins had/have issues with predicates that check
if active view is a docview to perform certain operations like draw
in the case of minimap or lineguide. Since is() was checking the
entire inheritance tree it was returning true for views that inherit
from the same parent, which caused CommandView to be matched along
DocView, etc... This change does the following to solve the issue:

* Make Object:is() only match the top level parent of the object which
  is more in line with what one would expect from a method named 'is'.
* Introduces Object:extends() which keeps the same functionality that
  Object:is() offered before.
This commit is contained in:
jgmdev 2022-05-12 20:33:01 -04:00
parent 0665da49ae
commit fd0a433f59
1 changed files with 8 additions and 0 deletions

View File

@ -21,6 +21,14 @@ end
function Object:is(T) function Object:is(T)
if getmetatable(self) == T then
return true
end
return false
end
function Object:extends(T)
local mt = getmetatable(self) local mt = getmetatable(self)
while mt do while mt do
if mt == T then if mt == T then