Repository navigation
Releases: sailantis/phpthunder
Releases · sailantis/phpthunder
Release list
v2026.2.1
Marketplace version: 2026.2.90100
Features and Improvements
- Added PHP 8.6 support. The engine now knows PHP 8.6 as the newest language level: the version picker and the
phpThunder.phpVersionsetting offer8.6— opt-in, since projects keep defaulting to PHP 8.5 until 8.6 is GA. The parser understands partial function application placeholders (f(?),f(name: ?),f(1, ...)),clone $obj with [...]and the(void)cast, and the compatibility checks now cover the missing PHP 8.5 features and the new PHP 8.6 set. - Added PHP 8.6 diagnostics: readonly properties may declare defaults from 8.6,
#[\Override]is validated on class constants and enum cases, an enum that declares a magic method is rejected, and the PHP 8.6 deprecations (returninfinally, returning from a constructor or destructor, a third argument todefine(), and others) are reported through a dedicated diagnostic. - Updated the bundled PHP stubs to the PHP 8.6 set, adding
Time\Duration,Uri\WhatWg\url_percent_encode(), the new GMP and Intl functions,ReflectionParameter::getDocComment()and the deprecations PHP 8.6 introduces. The PHP 8.6 SNMP surface is included as well and was contributed upstream in JetBrains/phpstorm-stubs#1944.
Bug Fixes
- Fixed every dependency in a project that ships a plain
vendor/tree without Composer metadata being reported as an undefined symbol. - Fixed the bogus
Add import for 'Exception' (multiple matches — pick one)quick fix offering an import for a symbol that already resolves in the global namespace. - Fixed built-in functions such as
mb_strtoupper()inferring asmixedbecause avendor/directory next to the stubs'tests/directory shadowed the bundled stubs. - Fixed
function readonly()being reported as a reserved name; it is legal through PHP 8.5 and only deprecated in 8.6.
v2026.1.28
Marketplace version: 2026.1.92800
Bug Fixes
- Fixed false
TypeMismatcherrors when a method returns a property documented with a class-constant PHPDoc type whose constants share a single primitive type such asint. - Fixed method calls and class-constant lookups resolving to the wrong member when the two names differ only by case, which caused false
NonStaticCallStaticdiagnostics and incorrect hover results. - Fixed a full project re-index being triggered by
composer.jsonandcomposer.lockfile-watcher events that did not change any dependency, such as when the window regains focus.
v2026.1.27
Marketplace version: 2026.1.92700
Bug Fixes
- Fixed missing hover documentation for PHP 8 constructor-promoted properties, using inline property comments or the constructor's
@paramdocumentation. - Fixed CodeLens reference lists displaying file names in lowercase on Windows.
- Fixed unreachable-code detection after
if/else,try/catch/finally, andswitchstatements when every possible path terminates. - Fixed the formatter dropping comments in function and method parameter lists, constructor-promoted properties, and call argument lists.
- Fixed class and function brace-position settings overriding one another.
- Fixed switch formatting of empty fall-through labels, preserving comments and blank lines, including comments on
caseanddefaultlabels.
v2026.1.26
Marketplace version: 2026.1.92600
Features and Improvements
- Clarity templates now support the engine's newer access syntax and Twig-style variable tests, PHP code blocks with PHP-aware language features, and raw/verbatim blocks treated as text across diagnostics, indexing, highlighting and formatting.
Bug Fixes
- Fixed the language server becoming very slow because a single edit re-indexed every open document many times.
- Fixed typing becoming slow on workspaces with a large vendor layer.
- Fixed CodeLens warming adding overhead to every keystroke on Windows vendor workspaces.
- Fixed background indexing work continuing after the server shuts down and holding onto the whole project index in memory.
v2026.1.25
Marketplace version: 2026.1.92500
Features and Improvements
- Empty method, function and closure bodies are now compacted to
{}on the declaration line by default. ThephpThunder.formatting.emptyBodyPositionsetting now defaults tosame-line.
Bug Fixes
- Fixed false
UnusedPrivateMemberdiagnostics and0 usagesCodeLens badges for trait members whose only call sites live in a sibling trait. - Fixed inherited members showing
0 usageswhen they are only ever reached throughself::from a subclass. - Fixed
usagesbadges on trait members being inflated by a case-different property declaration in a consuming class. - Fixed inlay hints and semantic tokens being placed on the wrong column when a multi-byte character appears earlier on the same line.
v2026.1.24
Marketplace version: 2026.1.92400
Bug Fixes
- Fixed PhpThunder writing a
"php.validate.enable": falseentry into every opened project folder. The built-in PHP validator is now disabled in the user settings; legacy leftovers are cleaned up on activation. - Fixed empty autocomplete after a dangling
->on a fresh line inside an open argument list. - Fixed the Clarity formatter rewriting the short array-access operator as a ternary.
- Fixed a false
PropertyTypeMismatchthat appeared only after editing a file, when a shaped array literal was inferred in the reduced-cost typing mode. - Fixed a false
TypeMismatchfor a callable signature or array shape written in an inline@vardocblock.
v2026.1.23
Marketplace version: 2026.1.92300
Features and Improvements
- Added the
ConstExprInvaliddiagnostic for expressions PHP cannot compile in a constant-expression context. - Added the
UnhandledMatchdiagnostic for amatchexpression that omits adefaultarm and cannot cover its subject.
Bug Fixes
- Fixed false
PHPDocParamTypeMismatchandUndefinedClassdiagnostics for callable signatures written without a parameter list or with a leading backslash. - Fixed false
UndefinedMethodon a chained call after a method whose return type is a PHPStan/Psalm conditional type. - Fixed a
@templatebound containing a space being truncated at that space, losing the class named in the bound. - Fixed no diagnostic for an undefined static property or class constant accessed through
self::,static::orparent::, and a falseUndefined static propertyfor a property name computed at runtime. - Fixed hover and go-to-definition returning nothing for a static property, constant or method accessed through an absolute class name.
- Fixed hover on an unresolved member access returning nothing when a diagnostic covers the cursor.
- Fixed false
PropertyTypeMismatchdiagnostics for a conditional return type over an array subject. - Fixed false
TypeMismatchdiagnostics for a return value whose conditional return type tests a union subject, and for any conditional type whose subject is a union whose members disagree. - Fixed variadic parameters inferring the element type instead of the array PHP binds inside the body.
- Fixed the usage counter reporting zero usages for calls through
use function … asimports. - Fixed the formatter wrapping a
<comparison inside a template directive onto its own line, and corrupting HTML numeric character references.
v2026.1.22
Marketplace version: 2026.1.92200
Features and Improvements
- Added the
InvalidStringOffsetdiagnostic for string offsets PHP 8 rejects at runtime.
Bug Fixes
- Fixed reading an element of a PHPDoc collection or of a class-based
ArrayAccess/collection receiver inferringmixed. - Fixed reading a character from a string inferring
mixed, and an offset write widening a non-array receiver — a string, anint, or anArrayAccessobject — into an array. - Fixed
@implements/@extends/@uselosing every type argument when the argument list was written with a space after the comma. - Fixed a
value-of<...>docblock being discarded on a property with a nativearraydeclaration. - Fixed false
PropertyTypeMismatchdiagnostics for an associative array literal whose field value the engine cannot type, and for an assigned type that is a supertype of the property's declared type. - Fixed false
UndefinedClassdiagnostics for a use-site variance projection on a generic type argument. - Fixed the formatter collapsing the alternative conditions of a multi-line
matcharm onto the=>line. - Fixed double-clicking a PHP variable selecting only the name, without the leading
$.
v2026.1.21
Marketplace version: 2026.1.92100
Features and Improvements
- Added a Statistics page to the settings panel showing what PhpThunder currently holds in memory for the open workspace.
- Added the
PropertyTypeMismatchdiagnostic for assignments whose inferred value type cannot satisfy the target property's declared type.
Bug Fixes
- Fixed false
PropertyTypeMismatchdiagnostics for associative array literals assigned to properties declaring sealed array shapes, and for declared types mentioningself/static/parentinside a composite type. - Fixed false
GenericBoundsdiagnostics when a class forwards one of its own template parameters into a generic parent that declares the same bound. - Fixed false
UndefinedVariableMaydiagnostics for variables assigned unconditionally inside a do-while loop body. - Fixed formatting being permanently disabled with "file appears to be in an incomplete PHP state" for a valid PHP file when the cached parse diverged from the live buffer.
v2026.1.20
Marketplace version: 2026.1.92000
Features and Improvements
- Added
NewInInitializerdiagnostic fornewexpressions in contexts PHP does not allow them.
Bug Fixes
- Fixed a 100%-CPU / unresponsive-LSP spiral when a batch of edits deletes vendor files: vendor delete events now remove stale index entries, and the expensive open-documents refresh is coalesced per project root through a debounce.
- Fixed an LSP server panic when the class body contained a broken member from a mid-edit state.
- Fixed false
UnusedImportdiagnostics for imports referenced only as property type hints or closure/arrow-function return types. - Fixed false
UnusedParameterdiagnostics for parameters and local variables whose only use is as the receiver of a property write.