You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This PR resolves static analysis errors when using method chaining.
The Smarty class extends the Data class, but the PHPDoc return types for methods in the Data class (assign(), append(), etc.) were documented as returning Data.
As a result, when using method chaining like the following, static analysis tools would interpret that a Data instance is returned instead of a Smarty instance, and would report errors that Smarty-specific methods (e.g., display()) do not exist.
I changed the PHPDoc return type from Data to $this. By using $this, static analysis tools can correctly recognize that an instance of the actually invoked class (in this case, Smarty) is returned.
This change only modifies PHPDoc comments and has no effect on runtime behavior.
Hi @h-marumoto I see how this fix would work and would probably be fine for most cases, but @return $this doesn't seem to be official phpdoc syntax? In your defense: the codebase already contains 3 instances of @return $this in the Smarty\Smarty class.
Fair point — strictly speaking @return $this was never ratified.
It is, however, officially supported by phpDocumentor, and PHPStan, Psalm, and PhpStorm all recognize it — PHPStan even lists $this as a basic type in its PHPDoc parser, and Psalm internally treats it as a type token equivalent to static.
Ref: https://docs.phpdoc.org/guide/references/phpdoc/tags/return.html#the-this-keyword
I'd prefer to keep $this here since it's the most precise annotation for these methods (the same instance is returned, not just an instance of the called class), and it matches the existing usage in Smarty\Smarty.
Let me know if you'd like any changes!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR fixes #1143
This PR resolves static analysis errors when using method chaining.
The
Smartyclass extends theDataclass, but the PHPDoc return types for methods in theDataclass (assign(),append(), etc.) were documented as returningData.As a result, when using method chaining like the following, static analysis tools would interpret that a
Datainstance is returned instead of aSmartyinstance, and would report errors thatSmarty-specific methods (e.g.,display()) do not exist.I changed the PHPDoc return type from Data to $this. By using $this, static analysis tools can correctly recognize that an instance of the actually invoked class (in this case, Smarty) is returned.
This change only modifies PHPDoc comments and has no effect on runtime behavior.