php-vim-syntax icon indicating copy to clipboard operation
php-vim-syntax copied to clipboard

Support for psalm/phpstan/phan PHPDoc tags

Open shadowwa opened this issue 1 year ago • 0 comments

In the syntax file, there is a support for phpDocCustomTags but only for tag like @[a-zA-Z]* without dash character.

psalm, phpstan and phan use custom tags prefixed by the name of the program separated with a dash, the tag can even have several dash like:

/**
 * @phpstan-return
 * @phpstan-template-covariant
 * @phan-param
 * @psalm-var
 * @psalm-ignore-variable-property
 */

I have a ~/.vim/syntax/php.vim file containing

syntax match phpDocPhpstanTags "@phpstan-\(import-type\|assert-if-false\|assert-if-true\|assert\|extends\|implements\|import-type\|impure\|method\|param-closure-this\|param-immediately-invoked-callable\|param-later-invoked-callable\|param-out\|param\|property-read\|property-write\|property\|require-extends\|require-implements\|return\|self-out\|template-contravariant\|template-covariant\|template\|this-out\|throws\|type\|use\|var\)\(\s\+\|\n\|\r\)" containedin=phpComment
syntax match phpDocPhpstanIgnoreTags "@phpstan-\(ignore\|ignore-line\|ignore-next-line\)\(\s\+\|\n\|\r\)" containedin=phpComment

syntax match phpDocPhanTags "@phan-\(param\|assert-if-false\|assert-if-true\|assert\|extends\|inherits\|method\|mixin\|property-read\|property-write\|property\|real-return\|return\|template\|type\|var\)\(\s\+\|\n\|\r\)" containedin=phpComment

syntax match phpDocPsalmTags "@psalm-\(allow-private-mutation\|api\|assert\|assert-if-false\|assert-if-true\|check-type\|check-type-exact\|consistent-constructor\|consistent-templates\|external-mutation-free\|if-this-is\|immutable\|import-type\|inheritors\|internal\|method\|mutation-free\|no-seal-methods\|no-seal-properties\|param\|param-out\|property\|property-read\|property-write\|pure\|readonly\|readonly-allow-private-mutation\|require-extends\|require-implements\|return\|seal-methods\|seal-properties\|this-out\|trace\|type\|var\|yield\)\(\s\+\|\n\|\r\)" containedin=phpComment
syntax match phpDocPsalmTags "@psalm-taint-\(source\|sink\|escape\|unescape\|specialize\)\(\s\+\|\n\|\r\)" containedin=phpComment
syntax match phpDocPsalmTags "@\(param-out\|no-named-arguments\|no-seal-methods\|no-seal-properties\|seal-methods\|seal-properties\)\(\s\+\|\n\|\r\)" containedin=phpComment
syntax match phpDocPsalmIgnoreTags "@psalm-\(ignore-falsable-return\|ignore-nullable-return\|ignore-var\|ignore-variable-method\|ignore-variable-property\|suppress\)\(\s\+\|\n\|\r\)" containedin=phpComment

hi def link phpDocPhpstanTags phpDocCustomTags
hi def link phpDocPhpstanIgnoreTags Exception
hi def link phpDocPhanTags phpDocCustomTags
hi def link phpDocPsalmTags phpDocCustomTags
hi def link phpDocPsalmIgnoreTags Exception

do you think these could be added in your syntax file or do you prefer not mix "official" phpdoc tags and tags created by static analyzer?

shadowwa avatar Aug 28 '24 19:08 shadowwa