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
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -120,6 +120,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
120
120
-**Calls to functions declared in another `namespace` block of the same file resolve their return type.** In a file that declares more than one `namespace`, a call to a function from a later block used to leave the returned value untyped unless the function carried an `@return` docblock. The call and its return type now resolve regardless, so completion, hover, and diagnostics see the value's type.
121
121
-**`@template` bindings resolve correctly when a call uses named arguments.** A generic function or method called with named arguments (for example `process(class: Product::class, flag: true, function ($p) { ... })`) previously bound its template parameter from the wrong argument whenever the named arguments were out of declaration order, leaving closure parameters untyped. Named arguments now route to the parameter they actually target.
122
122
-**Vendor-provided functions and constants no longer rank as project-native in completion.** With the `self`, `full`, and `composer` indexing strategies, functions and constants discovered while scanning vendor packages lost their package origin when merged into the workspace scan, so they sorted ahead of other vendor symbols as if declared in the project itself instead of by their actual dependency tier.
123
+
-**Argument-count and argument-type diagnostics no longer mix up calls that share the same text but resolve differently.** A per-file cache reused the first resolved target for every call site with the same expression text, without accounting for the fact that `self::method()`, `static::method()`, and `parent::method()` resolve differently depending on which class they appear in, and `$var->method()` resolves differently depending on what type `$var` holds at that call site. Two classes each declaring their own `self::make()` with a different required argument count, or two methods each assigning a different type to a same-named variable before calling the same method name on it, could silently report the wrong argument-count or argument-type diagnostic (or miss one) on every call after the first. These forms are now always resolved fresh per call site.
Note that clippy runs twice, once for library code and once including test code. The `php -l` check ensures `examples/demo.php` remains valid PHP. The `php -d zend.assertions=1` run executes `runDemoAssertions()` to verify that scaffolding stubs actually return what their docblocks claim. The final `php -l` and `phpantom_lsp analyze` runs check `examples/laravel/` for syntax errors and diagnostic regressions. The analyze run must report `[OK] No errors`.
25
+
Note that clippy runs twice, once for library code and once including test code. The `php -l` check ensures `examples/demo.php` remains valid PHP. The `php -d zend.assertions=1` run executes `runDemoAssertions()` to verify that scaffolding stubs actually return what their docblocks claim. The final `php -l` and `phpantom_lsp analyze` runs check `examples/laravel/` for syntax errors and diagnostic regressions. `app/Demo.php` intentionally calls `Artisan::call('does:not-exist')` to demonstrate the `invalid_laravel_command` diagnostic, so the analyze run must report exactly `[ERROR] Found 1 error` on that line, not `[OK] No errors`; any other count, or an error on a different line, is a regression.
| B117 |[Per-file callable-target caches are keyed by call-expression text alone](todo/bugs.md#b117-per-file-callable-target-caches-are-keyed-by-call-expression-text-alone)| Medium | Low-Medium |
112
-
| B118 |[`analyze` on `examples/laravel` reports one error, but CI requires none](todo/bugs.md#b118-phpantom_lsp-analyze-on-exampleslaravel-reports-one-error-but-ci-requires-none)| Low | Low |
110
+
||**[Bug Fixes](todo/bugs.md)** — no outstanding items |||
113
111
||**[Code Actions](todo/actions.md)**|||
114
112
| A40 |[Generate method from call](todo/actions.md#a40-generate-method-from-call)| Medium-High | Medium |
115
113
| A41 |[Create class from non-existing name](todo/actions.md#a41-create-class-from-non-existing-name)| Medium | Medium |
0 commit comments