Git Product home page Git Product logo

Comments (7)

edsrzf avatar edsrzf commented on September 26, 2024 1

I think you could argue this either way. Adding the #[Override] attribute is valid in that it doesn't cause a PHP runtime error.

I think the behavior I'd shoot for is:

  • If Test explicitly implements Stringable, then MissingOverrideAttribute is triggered.
  • If Test implicitly implements Stringable, as in the reproducer, then no MissingOverrideAttribute is triggered.

Sound reasonable?

from psalm.

zerkms avatar zerkms commented on September 26, 2024 1

PS: kia ora 🥝 :-D

from psalm.

edsrzf avatar edsrzf commented on September 26, 2024 1

I assume you also mean transitively-extended types? eg

abstract class A implements Stringable
{
}

class B extends A
{
    public function __toString(): string
    {
        return '';
    }
}

I think we should still issue MissingOverrideAttribute in this case, yes?

If so, then I think Stringable is currently the only case in the language where an interface can be implemented implicitly.

from psalm.

weirdan avatar weirdan commented on September 26, 2024 1

It's not reproducible at psalm-dev,

You just need to set one of the checkboxes on the settings screen: https://psalm.dev/r/07b8ed2a92

from psalm.

zerkms avatar zerkms commented on September 26, 2024

I don't think Stringable deserves any special treatment at all, unless the language requires it. All exceptions is a burden to maintain by the core developers team.

My suggestion: ONLY mark a method as MissingOverrideAttribute IF AND ONLY IF there is an EXPLICITLY extended type that declares the method with the same name.

from psalm.

zerkms avatar zerkms commented on September 26, 2024

I assume you also mean transitively-extended types? eg

Yep, as long as a "is a" relationship established via any native type system mechanism (be it implements, extends, directly or transitively).

I think we should still issue MissingOverrideAttribute in this case, yes?

Totally

from psalm.

psalm-github-bot avatar psalm-github-bot commented on September 26, 2024

I found these snippets:

https://psalm.dev/r/07b8ed2a92
<?php
declare(strict_types=1);

namespace Zerkms;

final readonly class Test
{
    public function __toString(): string
    {
        return '';
    }
}
Psalm output (using commit ef3b018):

ERROR: MissingOverrideAttribute - 8:5 - Method __toString should have the "Override" attribute

from psalm.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.