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
Copy file name to clipboardExpand all lines: docs/CHANGELOG.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -47,6 +47,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
47
47
48
48
-**`__get` magic method template resolution.** Property access on a class whose `__get` uses method-level `@template` with `key-of<T>` bounds and `T[K]` return types now infers the concrete type from the property name. For example, `$bag->a` on a `DataBag<array{a: int, b: string}>` resolves to `int`.
49
49
-**`(object)` cast type inference.** Casting a scalar to object now resolves to `object{scalar: <type>}` and casting a typed array shape resolves to an object shape with matching properties.
50
+
-**Interface method return type inheritance.** When a class implements a same-file interface with `@implements Interface<ConcreteType>` and overrides a method without a return type, the interface method's template-substituted return type is now propagated.
51
+
-**Class loader global fallback.** Unqualified class names used in namespaced code without a `use` statement (e.g. `implements IteratorAggregate` in `namespace App`) now fall back to global scope lookup when the namespace-qualified name doesn't exist.
50
52
-**Literal `true`/`false` preserved in template inference.** Passing `true` or `false` to a generic constructor now keeps the precise type as the template argument (e.g. `C<false>`) instead of widening to `bool`.
51
53
-**`@psalm-method` overrides `@method`.** When a class has both `@method int foo()` and `@psalm-method string foo()`, the vendor-prefixed tag now takes priority instead of using whichever appeared first in the docblock.
52
54
-**Multi-namespace class resolution.** In files with multiple `namespace` blocks, short class names now resolve against the correct namespace for the current scope instead of picking the first same-named class in the file.
0 commit comments