phpstan.neon.dist

Summary

Maintainability
Test Coverage
includes:
    - phar://phpstan.phar/conf/bleedingEdge.neon

parameters:
    level: 6
    checkMissingOverrideMethodAttribute: true
    paths:
        - .
    excludePaths:
        - vendor
        - js

    ignoreErrors:
        - '~^(Property .+ has|Method .+\(\) (has parameter \$.+ with|return type has)) no value type specified in iterable type .+\.$~'

        # relax strict rules
        - '~^Only booleans are allowed in .+, .+ given( on the (left|right) side)?\.$~'
        - '~^Variable (static )?(property access|method call) on .+\.$~'

        # https://github.com/phpstan/phpstan/issues/10337
        -
            path: 'src/App.php'
            message: '~^Call to method Atk4\\Ui\\App::callExit\(\) with true will always evaluate to true\.$~'
            count: 2

        # assign to generic callable property is broken https://github.com/phpstan/phpstan/issues/8964
        -
            message: '~^Property Atk4\\Data\\Model\\UserAction::\$(callback|enabled) .*Closure<.+ does not accept .*Closure\(.+\.$~'
            path: '*'
            count: 2

        # TODO these rules are generated, this ignores should be fixed in the code
        # for level = 2
        -
            path: 'demos/collection/grid.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView&Atk4\\Ui\\UserAction\\ExecutorInterface::onHook\(\)\.$~'
        -
            path: 'demos/collection/multitable.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\Jquery::remove\(\)\.$~'
        -
            path: 'demos/collection/tablefilter.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Demos\\Country::expr\(\)\.$~'
        -
            path: 'demos/data-action/jsactions.php'
            message: '~^Call to an undefined method Atk4\\Ui\\View::addFields\(\)\.$~'
        -
            path: 'demos/form-control/calendar.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::addAction\(\)\.$~'
        -
            path: 'demos/form-control/calendar.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::getJsInstance\(\)\.$~'
        -
            path: 'demos/form-control/input2.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::onDelete\(\)\.$~'
        -
            path: 'demos/form-control/input2.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::onUpload\(\)\.$~'
        -
            path: 'demos/form-control/multiline.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Layout::addColumn\(\)\.$~'
        -
            path: 'demos/form-control/upload.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::onDelete\(\)\.$~'
        -
            path: 'demos/form-control/tree-item-selector.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::onItem\(\)\.$~'
        -
            path: 'demos/form-control/upload.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::clearThumbnail\(\)\.$~'
        -
            path: 'demos/form-control/upload.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::onUpload\(\)\.$~'
        -
            path: 'demos/form-control/upload.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::setThumbnailSrc\(\)\.$~'
        -
            path: 'demos/form-control/upload.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::setFileId\(\)\.$~'
        -
            path: 'demos/form/form-section-accordion.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Layout::addSection\(\)\.$~'
        -
            path: 'demos/form/form-section-accordion.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Layout::activate\(\)\.$~'
        -
            path: 'demos/form/form-section.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Layout::addColumn\(\)\.$~'
        -
            path: 'demos/form/form-section.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Layout::addSection\(\)\.$~'
        -
            path: 'demos/form/form-section.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Layout::addTab\(\)\.$~'
        -
            path: 'demos/form/form2.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Control::addAction\(\)\.$~'
        -
            path: 'demos/form/form2.php'
            message: '~^Access to an undefined property Atk4\\Ui\\Form\\Control::\$iconLeft\.$~'
        -
            path: 'demos/form/jscondform.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Layout::activate\(\)\.$~'
        -
            path: 'demos/form/jscondform.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Form\\Layout::addSection\(\)\.$~'
        -
            path: 'demos/init-app.php'
            message: '~^Access to an undefined property Atk4\\Ui\\Layout&Atk4\\Ui\\Layout\\NavigableInterface::\$menu\.$~'
        -
            path: 'demos/init-db.php'
            message: '~^Call to an undefined method Atk4\\Data\\Reference\\HasOne::addField\(\)\.$~'
        -
            path: 'demos/init-db.php'
            message: '~^Call to an undefined method Atk4\\Data\\Persistence::expr\(\)\.$~'
        -
            path: 'demos/init-db.php'
            message: '~^Call to an undefined method Atk4\\Data\\Reference\\HasOne::addTitle\(\)\.$~'
        -
            path: 'demos/interactive/jssortable.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Table\\Column::onReorder\(\)\.$~'
        -
            path: 'demos/interactive/popup.php'
            message: '~^Call to an undefined method Atk4\\Ui\\View::addItem\(\)\.$~'
        -
            path: 'demos/interactive/tabs.php'
            message: '~^Call to an undefined method Atk4\\Ui\\View::setActive\(\)\.$~'
        -
            path: 'demos/interactive/wizard.php'
            message: '~^Access to an undefined property Atk4\\Ui\\Form\\Control::\$placeholder\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Access to an undefined property Atk4\\Ui\\AbstractView::\$reload\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Access to an undefined property Atk4\\Ui\\AbstractView::\$queryArg\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Access to an undefined property Atk4\\Ui\\AbstractView&Atk4\\Ui\\UserAction\\ExecutorInterface::\$jsSuccess\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView&Atk4\\Ui\\UserAction\\ExecutorInterface::onHook\(\)\.$~'
        -
            path: 'src/Console.php'
            message: '~^Parameter #1 \$level \(''alert''\|''critical''\|''debug''\|''emergency''\|''error''\|''info''\|''notice''\|''warning''\) of method Atk4\\Ui\\Console::log\(\) should be contravariant with parameter \$level \(mixed\) of method Psr\\Log\\LoggerInterface::log\(\)$~'
        -
            path: 'src/Crud.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView&Atk4\\Ui\\UserAction\\JsExecutorInterface::stickyGet\(\)\.$~'
        -
            path: 'src/Crud.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView&Atk4\\Ui\\UserAction\\ExecutorInterface::onHook\(\)\.$~'
        -
            path: 'src/Form.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::preventFormLeave\(\)\.$~'
        -
            path: 'src/Form/Control/Calendar.php'
            message: '~^Access to an undefined property Atk4\\Ui\\Js\\JsChain::\$_flatpickr\.$~'
        -
            path: 'src/Form/Control/Checkbox.php'
            message: '~^Access to an undefined property Atk4\\Ui\\Js\\JsChain::\$checked\.$~'
        -
            path: 'src/Form/Control/Multiline.php'
            message: '~^Call to an undefined method Atk4\\Data\\Model::expr\(\)\.$~'
        -
            path: 'src/Js/JsVueService.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::createAtkVue\(\)\.$~'
        -
            path: 'src/Js/JsVueService.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::createVue\(\)\.$~'
        -
            path: 'src/Menu.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView::addClass\(\)\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::openPanel\(\)\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::reloadPanel\(\)\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::closePanel\(\)\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView::addButtonAction\(\)\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView::notClosable\(\)\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Panel\\LoadableContent::getClearSelector\(\)\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::addPanel\(\)\.$~'
        -
            path: 'src/SessionTrait.php'
            count: 4
            message: '~^Access to an undefined property Atk4\\Ui\\Tests\\SessionAbstractMock::\$name\.$~'
        -
            path: 'src/Table/Column.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView::setHoverable\(\)\.$~'
        -
            path: 'src/Table/Column/Checkbox.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::join\(\)\.$~'
        -
            path: 'src/Table/Column/FilterModel/TypeDate.php'
            message: '~^Call to an undefined method Atk4\\Data\\Model::expr\(\)\.$~'
        -
            path: 'src/Table/Column/FilterModel/TypeDatetime.php'
            message: '~^Call to an undefined method Atk4\\Data\\Model::expr\(\)\.$~'
        -
            path: 'src/Table/Column/FilterModel/TypeNumber.php'
            message: '~^Call to an undefined method Atk4\\Data\\Model::expr\(\)\.$~'
        -
            path: 'src/Table/Column/FilterModel/TypeTime.php'
            message: '~^Call to an undefined method Atk4\\Data\\Model::expr\(\)\.$~'
        -
            path: 'src/Table/Column/FilterPopup.php'
            message: '~^Call to an undefined method Atk4\\Data\\Model::recallData\(\)\.$~'
        -
            path: 'src/Table/Column/FilterPopup.php'
            message: '~^Call to an undefined method Atk4\\Data\\Model::setConditionForModel\(\)\.$~'
        -
            path: 'src/Tabs.php'
            message: '~^Call to an undefined method Atk4\\Ui\\View::setPath\(\)\.$~'
        -
            path: 'src/Tabs.php'
            message: '~^Call to an undefined method Atk4\\Ui\\AbstractView::setAttr\(\)\.$~'
        -
            path: 'src/UserAction/VpExecutor.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::redirect\(\)\.$~'
        -
            path: 'src/View.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::emit\(\)\.$~'
        -
            path: 'src/View.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::clearData\(\)\.$~'
        -
            path: 'src/View.php'
            message: '~^Call to an undefined method Atk4\\Ui\\Js\\JsChain::addJsonData\(\)\.$~'

        # TODO fix contravariance for View::set() method
        -
            path: 'src/Console.php'
            message: '~^Parameter #1 \$fx \(Closure\(\$this\): void\) of method Atk4\\Ui\\Console::set\(\) should be compatible with parameter \$content \(string\) of method Atk4\\Ui\\View::set\(\)$~'
        -
            path: 'src/Form/Control/Calendar.php'
            message: '~^Parameter #1 \$expr \(Atk4\\Ui\\Js\\JsExpressionable\) of method Atk4\\Ui\\Form\\Control\\Calendar::onChange\(\) should be contravariant with parameter \$expr \(array\{Closure\(Atk4\\Ui\\Js\\Jquery, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed\): \(Atk4\\Ui\\Js\\JsExpressionable\|Atk4\\Ui\\View\|string\|void\)\}\|Atk4\\Ui\\Js\\JsExpressionable\|\(Closure\(Atk4\\Ui\\Js\\Jquery, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed\): \(Atk4\\Ui\\Js\\JsExpressionable\|Atk4\\Ui\\View\|string\|void\)\)\) of method Atk4\\Ui\\Form\\Control::onChange\(\)$~'
        -
            path: 'src/Form/Control/Upload.php'
            message: '~^Parameter #1 \$fileId \(string\) of method Atk4\\Ui\\Form\\Control\\Upload::set\(\) should be contravariant with parameter \$value \(mixed\) of method Atk4\\Ui\\Form\\Control::set\(\)$~'
        -
            path: 'src/JsCallback.php'
            message: '~^Parameter #1 \$fx \(Closure\(Atk4\\Ui\\Js\\Jquery, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed\): \(Atk4\\Ui\\Js\\JsExpressionable\|Atk4\\Ui\\View\|string\|void\)\) of method Atk4\\Ui\\JsCallback::set\(\) should be contravariant with parameter \$fx \(Closure\(mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed\): mixed\) of method Atk4\\Ui\\Callback::set\(\)$~'
        -
            path: 'src/Loader.php'
            message: '~^Parameter #1 \$fx \(Closure\(\$this\): void\) of method Atk4\\Ui\\Loader::set\(\) should be compatible with parameter \$content \(string\) of method Atk4\\Ui\\View::set\(\)$~'
        -
            path: 'src/Modal.php'
            message: '~^Parameter #1 \$fx \(Closure\(Atk4\\Ui\\View\): void\) of method Atk4\\Ui\\Modal::set\(\) should be compatible with parameter \$content \(string\) of method Atk4\\Ui\\View::set\(\)$~'
        -
            path: 'src/Popup.php'
            message: '~^Parameter #1 \$fx \(Closure\(Atk4\\Ui\\View\): void\) of method Atk4\\Ui\\Popup::set\(\) should be compatible with parameter \$content \(string\) of method Atk4\\Ui\\View::set\(\)$~'
        -
            path: 'src/VirtualPage.php'
            message: '~^Parameter #1 \$fx \(Closure\(\$this, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed\): void\) of method Atk4\\Ui\\VirtualPage::set\(\) should be compatible with parameter \$content \(string\) of method Atk4\\Ui\\View::set\(\)$~'
        -
            path: 'src/VirtualPage.php'
            message: '~^Parameter #1 \$fx of method Atk4\\Ui\\Callback::set\(\) expects \(Closure\(mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed\): void\)\|null, Closure\(\$this, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed, mixed\): void given\.$~'

        # TODO these rules are generated, this ignores should be fixed in the code
        # for level = 3
        -
            path: 'src/Card.php'
            message: '~^Method Atk4\\Ui\\Card::addButton\(\) should return Atk4\\Ui\\View\ but returns Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$container \(Atk4\\Ui\\View\|null\) does not accept default value of type array<int\|string, string>\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$sharedExecutorsContainer \(Atk4\\Ui\\UserAction\\SharedExecutorsContainer\|null\) does not accept default value of type array<int, string>\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$cardHolder \(Atk4\\Ui\\View\) does not accept default value of type array<int\|string, string>\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$paginator \(Atk4\\Ui\\Paginator\|false\|null\) does not accept default value of type array\{''Atk4\\\\Ui\\\\Paginator''\}\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$sharedExecutorsContainer \(Atk4\\Ui\\UserAction\\SharedExecutorsContainer\|null\) does not accept Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$container \(Atk4\\Ui\\View\|null\) does not accept Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$menu \(array\|Atk4\\Ui\\Menu\|false\) does not accept Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$search \(array\|Atk4\\Ui\\VueComponent\\ItemSearch\|false\) does not accept Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/CardDeck.php'
            message: '~^Property Atk4\\Ui\\CardDeck::\$paginator \(Atk4\\Ui\\Paginator\|false\|null\) does not accept Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/Form/Control/Input.php'
            message: '~^Method Atk4\\Ui\\Form\\Control\\Input::prepareRenderButton\(\) should return Atk4\\Ui\\Button but returns \(Atk4\\Ui\\AbstractView&Atk4\\Ui\\UserAction\\ExecutorInterface\)\|Atk4\\Ui\\View\.$~'
        -
            path: 'src/Form/AbstractLayout.php'
            message: '~^Method Atk4\\Ui\\Form\\AbstractLayout::_addControl\(\) should return Atk4\\Ui\\Form\\Control but returns Atk4\\Ui\\View\.$~'
        -
            path: 'src/Form/Layout.php'
            message: '~^Method Atk4\\Ui\\Form\\Layout::addButton\(\) should return Atk4\\Ui\\Button but returns Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/Form/Layout.php'
            message: '~^Method Atk4\\Ui\\Form\\Layout::_addControl\(\) should return Atk4\\Ui\\Form\\Control but returns Atk4\\Ui\\View\.$~'
        -
            path: 'src/Form/Layout.php'
            message: '~^Method Atk4\\Ui\\Form\\Layout::addSubLayout\(\) should return Atk4\\Ui\\Form\\Layout but returns Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/Form/Layout/Custom.php'
            message: '~^Method Atk4\\Ui\\Form\\Layout\\Custom::addButton\(\) should return Atk4\\Ui\\Button but returns Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/Form/Layout/Section.php'
            message: '~^Method Atk4\\Ui\\Form\\Layout\\Section::addSection\(\) should return Atk4\\Ui\\Form\\Layout but returns static\(Atk4\\Ui\\Form\\Layout\\Section\)\.$~'
        -
            path: 'src/Form/Layout/Section/Accordion.php'
            message: '~^Return type \(Atk4\\Ui\\Form\\Layout\) of method Atk4\\Ui\\Form\\Layout\\Section\\Accordion::addSection\(\) should be compatible with return type \(Atk4\\Ui\\AccordionSection\) of method Atk4\\Ui\\Accordion::addSection\(\)$~'
        -
            path: 'src/Form/Layout/Section/Accordion.php'
            message: '~^Method Atk4\\Ui\\Form\\Layout\\Section\\Accordion::addSection\(\) should return Atk4\\Ui\\Form\\Layout but returns static\(Atk4\\Ui\\Form\\Layout\\Section\\Accordion\)\.$~'
        -
            path: 'src/Form/Layout/Section/Columns.php'
            message: '~^Method Atk4\\Ui\\Form\\Layout\\Section\\Columns::addColumn\(\) should return Atk4\\Ui\\Form\\Layout but returns static\(Atk4\\Ui\\Form\\Layout\\Section\\Columns\)\.$~'
        -
            path: 'src/Form/Layout/Section/Tabs.php'
            message: '~^Method Atk4\\Ui\\Form\\Layout\\Section\\Tabs::addTab\(\) should return Atk4\\Ui\\Form\\Layout but returns static\(Atk4\\Ui\\Form\\Layout\\Section\\Tabs\)\.$~'
        -
            path: 'src/Grid.php'
            message: '~^Property Atk4\\Ui\\Grid::\$menu \(array\|Atk4\\Ui\\Menu\|false\) does not accept Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/Grid.php'
            message: '~^Property Atk4\\Ui\\Grid::\$paginator \(Atk4\\Ui\\Paginator\|false\) does not accept Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/Grid.php'
            message: '~^Property Atk4\\Ui\\Grid::\$paginator \(Atk4\\Ui\\Paginator\|false\) does not accept null\.$~'
        -
            path: 'src/Grid.php'
            message: '~^Property Atk4\\Ui\\Grid::\$actionButtons \(Atk4\\Ui\\Table\\Column\\ActionButtons\|null\) does not accept Atk4\\Ui\\Table\\Column\.$~'
        -
            path: 'src/Grid.php'
            message: '~^Property Atk4\\Ui\\Grid::\$selection \(Atk4\\Ui\\Table\\Column\\Checkbox\) does not accept Atk4\\Ui\\Table\\Column\.$~'
        -
            path: 'src/Grid.php'
            message: '~^Method Atk4\\Ui\\Grid::addSelection\(\) should return Atk4\\Ui\\Table\\Column\\Checkbox but returns Atk4\\Ui\\Table\\Column\.$~'
        -
            path: 'src/Header.php'
            message: '~^Property Atk4\\Ui\\Header::\$icon \(string\) does not accept Atk4\\Ui\\Icon\.$~'
        -
            path: 'src/Header.php'
            message: '~^Property Atk4\\Ui\\Header::\$image \(string\) does not accept Atk4\\Ui\\Image\.$~'
        -
            path: 'src/Header.php'
            message: '~^Property Atk4\\Ui\\Header::\$subHeader \(string\) does not accept \$this\(Atk4\\Ui\\Header\)\.$~'
        -
            path: 'src/Label.php'
            message: '~^Property Atk4\\Ui\\Label::\$detail \(string\|false\|null\) does not accept \$this\(Atk4\\Ui\\Label\)\.$~'
        -
            path: 'src/Menu.php'
            message: '~^Method Atk4\\Ui\\Menu::addDivider\(\) should return Atk4\\Ui\\View but returns Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Method Atk4\\Ui\\Panel\\Right::getDynamicContent\(\) should return Atk4\\Ui\\Panel\\LoadableContent but returns Atk4\\Ui\\View\|null\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Property Atk4\\Ui\\Panel\\Right::\$closeModal \(Atk4\\Ui\\Modal\|null\) does not accept Atk4\\Ui\\AbstractView\.$~'
        -
            path: 'src/Table/Column/FilterModel/TypeEnum.php'
            message: '~^Property Atk4\\Ui\\Table\\Column\\FilterModel::\$op \(Atk4\\Data\\Field\) does not accept null\.$~'
        -
            path: 'src/Wizard.php'
            message: '~^Property Atk4\\Ui\\Form::\$buttonSave \(array\|Atk4\\Ui\\Button\|false\) does not accept null\.$~'
        -
            path: 'src/Wizard.php'
            message: '~^Property Atk4\\Ui\\Wizard::\$steps \(array<int, Atk4\\Ui\\WizardStep>\) does not accept array<int, Atk4\\Ui\\AbstractView>\.$~'

        # TODO these rules are generated, this ignores should be fixed in the code
        # for level = 5
        -
            path: 'src/Grid.php'
            message: '~^Parameter #2 \$defaults of static method Atk4\\Core\\Factory::factory\(\) expects array, Atk4\\Ui\\Paginator given\.$~'
        -
            path: 'src/Grid.php'
            message: '~^Parameter #2 \$defaults of static method Atk4\\Core\\Factory::factory\(\) expects array, Atk4\\Ui\\Table\|false given\.$~'
        -
            path: 'src/Menu.php'
            message: '~^Parameter #1 \$object of method Atk4\\Ui\\View::add\(\) expects Atk4\\Ui\\AbstractView, array<int\|string, array<int, string>\|string> given\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Parameter #1 \$object of method Atk4\\Ui\\AbstractView::add\(\) expects Atk4\\Ui\\AbstractView, array<int\|string, string> given\.$~'
        -
            path: 'src/Panel/Right.php'
            message: '~^Parameter #1 \$object of method Atk4\\Ui\\App::add\(\) expects Atk4\\Ui\\AbstractView, array given\.$~'
        -
            path: 'src/Popup.php'
            message: '~^Parameter #1 \$ of closure expects Atk4\\Ui\\View, Atk4\\Ui\\AbstractView given\.$~'
        -
            path: 'src/Popup.php'
            message: '~^Parameter #1 \$view of method Atk4\\Ui\\Callback::terminateJsonIfCanTerminate\(\) expects Atk4\\Ui\\View, Atk4\\Ui\\AbstractView given\.$~'