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
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
12
12
-**Find References.** "Find All References" locates every usage of a symbol across the project. Supports classes, interfaces, traits, enums, methods, properties, constants, functions, and variables. Variable references are scoped to the enclosing function or closure. Cross-file scanning lazily indexes user files on demand (vendor and stub files are excluded, matching PhpStorm's behaviour). The workspace walk respects `.gitignore` rules, so generated/cached directories (blade cache, Symfony `var/cache/`, `node_modules/`, etc.) are automatically skipped.
13
13
-**`#[Deprecated]` attribute support.** PHPantom now reads the `#[Deprecated]` attribute used by phpstorm-stubs (~362 elements) in addition to docblock `@deprecated` tags. The `reason` and `since` fields appear in hover, completion strikethrough, and deprecation diagnostics. When both a docblock tag and an attribute are present, the docblock message takes priority. Works on classes, interfaces, traits, enums, methods, properties, constants, and standalone functions.
14
14
-**Deprecation diagnostics for variable member access.** Calling a deprecated method or accessing a deprecated property through a variable (e.g. `$svc->oldMethod()`) now produces a strikethrough diagnostic. Previously only `self::`, `static::`, `$this->`, and explicit class name accesses were checked.
15
+
-**Unknown class diagnostics.** Class references that PHPantom cannot resolve through any phase (use-map, local classes, same-namespace, class_index, classmap, PSR-4, stubs) are underlined with a warning. The diagnostic pairs with the "Import Class" code action so pressing the quick-fix shortcut on the warning offers to add the missing `use` statement in one step. Template parameters, type aliases (`@phpstan-type`, `@phpstan-import-type`), and attribute classes are excluded to avoid false positives.
15
16
-**Document highlighting.** Placing the cursor on a symbol highlights all other occurrences in the current file. Variables are scoped to their enclosing function or closure. Assignment targets, parameters, foreach bindings, and catch variables are marked as writes; all other occurrences are reads. Class names, members, functions, and constants highlight file-wide.
16
17
17
18
### Changed
@@ -45,6 +46,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
45
46
-**`(new Canvas())->easel` property access.** Parenthesized `new` expressions on the left side of `->` now resolve correctly for variable type inference.
46
47
-**Array function resolution.**`array_pop`, `array_filter`, `array_values`, `end`, and `array_map` now resolve element types correctly when the array comes from a method call chain or property access.
47
48
-**Hover on variable definition sites.** Hovering a parameter, foreach binding, or catch variable no longer shows a redundant popup when the type is already visible in the signature. Assignment variables still show their resolved type.
49
+
-**Inline `@var` annotations no longer leak across scopes.** A `/** @var Type $var */` annotation in one method no longer affects hover or completion for a same-named variable in a different method or class.
50
+
-**Docblock tag parsing in description text.** Tags like `@throws` appearing mid-sentence in docblock descriptions (e.g. `"filtered out of @throws suggestions."`) are no longer mistakenly parsed as tags. Only `@` at a valid tag position (after the `* ` line prefix) is recognized.
Copy file name to clipboardExpand all lines: docs/todo/diagnostics.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ within the same impact tier.
11
11
---
12
12
13
13
## 2. Resolution-failure diagnostics
14
-
**Impact: Medium · Effort: Medium**
14
+
**Impact: Medium · Effort: Medium***(partially done — unresolved class/interface implemented)*
15
15
16
16
Report diagnostics only for symbols and types that PHPantom's own engine
17
17
failed to resolve. This is **not** a general PHP linter — we don't check
@@ -34,7 +34,7 @@ unresolved types (the code may still run fine) and **Hint** or
34
34
35
35
| Diagnostic | Trigger | Severity | Example |
36
36
|---|---|---|---|
37
-
| Unresolved class/interface | A type hint, `extends`, `implements`, `new`, or `::` reference that `find_or_load_class` cannot resolve after all phases (ast_map → classmap → PSR-4 → stubs) | Warning |`Class 'App\Foo' not found`|
37
+
|✅ Unresolved class/interface | A type hint, `extends`, `implements`, `new`, or `::` reference that `find_or_load_class` cannot resolve after all phases (ast_map → classmap → PSR-4 → stubs) | Warning |`Class 'App\Foo' not found`|*Done — `diagnostics::unknown_classes` module*|
38
38
| Unresolved function | A function call that `find_or_load_function` cannot resolve (global functions, namespaced functions, stubs) | Warning |`Function 'do_thing' not found`|
39
39
| Unresolved member access |`->method()` or `->property` on a type we *did* resolve, but the member doesn't exist after full resolution (inheritance + virtual providers) | Warning |`Method 'frobnicate' not found on class 'App\Bar'`|
40
40
| Unresolved type in PHPDoc | A `@return`, `@param`, `@var`, `@throws`, `@mixin`, or `@extends` tag references a class that cannot be resolved | Information |`Type 'SomeAlias' in @return could not be resolved`|
0 commit comments