h4ck3r31/psalm-issue-filter-plugin

Allows to filter/skip code issues based on code snippets within PsalmPHP

v0.3.0 2022-09-10 11:41 UTC

This package is auto-updated.

Last update: 2024-12-10 16:42:50 UTC


README

Allows to filter/skip code issues based on code snippets. The configuration example below skips PossiblyUndefinedStringArrayOffset or PossiblyUndefinedIntArrayOffset that might occur in project scenarios like:

class Subject
{
    /**
     * @return SomeService
     */
    protected function getSomeService()
    {
        // there's no guarantee this service instance is given
        // however, it particular frameworks it might be like that
        // -> this plugin helps to skip these boilerplate issues
        return $GLOBALS['SOME_SERVICE'];
    }
}

Configuration Directives

  • section used for logical grouping of issue and filter items
  • issue selecting issue class names, filter items shall be applied to
    • class mandatory, using Psalm's issue class name
  • filter defining matching strategies concerning filtering
    • type matching strategy - either str_starts_with or preg_match
    • value the corresponding payload to be matches (adjust for actual strategy)
    • result (default false) which is the same as in Psalm's BeforeAddIssueInterface::beforeAddIssue
      • true stops event handling & keeps issue
      • false stops event handling & ignores issue

Example

in plugin section of psalm.xml

<psalm>
    <!-- ... -->
    <plugins>
        <!-- ... -->
        <pluginClass class="H4ck3r31\PsalmIssueFilterPlugin\Plugin">
            <section>
                <issue class="Psalm\Issue\PossiblyUndefinedStringArrayOffset" />
                <issue class="Psalm\Issue\PossiblyUndefinedIntArrayOffset" />

                <filter type="str_starts_with" value="$GLOBALS" result="false" />
                <!-- same impact, using `preg_match` instead of `str_starts_with` -->
                <filter type="preg_match" value="/^\$GLOBALS/" result="true" />
            </section>
            <section>
                <!-- ... -->
            </section>
        </pluginClass>
    </plugins>
    <!-- ... -->
</psalm>