requiredocument links not working when the expression is a simple string literal.
- Indexing now uses LSP work done
$/progressnotifications instead of custom notifications. - Indexer file queue processing debounce increased to 500ms.
- On-type diagnostics debounce reduced to 1000ms.
- Empty array shapes showing parse error.
- Should not narrow variable type when using
is_aandis_subclass_ofwith$allow_stringvalue oftrueand variable type ofstring. - Editing a file causing promoted properties to become undefined.
- Editing a file causing definition location inaccuracies.
- Duplicate/unecessary indexing when responding to file change events.
- Editing a file causing anonymous class type hierarchy bug.
throwDepthsetting to control maximum call depth when analysingthrowexpressions. Defaults to0(current call declaration body only). Max10. Higher values may impact performance.
- Methods declared with
@methodwith no return type are given return type ofvoidinstead ofmixed. @paramtype is now optional.- Tweaked suggestion order.
- False no type information available diagnostic when property/parameter inherits documented type.
- False method compatibility error when a trait method and interface method return
self. boolsubject type not expanded totrue|falsewhen comparing totruein conditional type.- No import quickfix for undefined PHPDoc types.
- Incorrect method description shown in hover when multiple methods of same name are declared using
@method. - Array access type inferred as
mixedwhen subject is a template type with array shape constraint. - False undefined phpdoc type in constant unions.
- More diagnostics.
- Setting
intelephense.diagnostics.suspectCodeto control whether suspected problems in the code should be reported. Diagnostics grouped under this setting include duplicate array keys, duplicate switch/match cases, loop variable overwriting,voidassignment, assignments in control expressions. - Find all references and rename now works for variable references listed in
compactarguments. - Setting to control if method override/implementation suggestions should include a placeholder method body --
intelephense.completion.withMethodBody. Defaults totrue. - Partial support for custom assertions.
@assert,@psalm-assert,@phpstan-assertand*-if-falseand*-if-truevariants supported. Only type assertion of simple variable arguments is currently supported. For example@assert string $paramand passing$varas the argument. Multiple assertions targeting the same parameter are not supported, ie, adding both an*-if-trueAND*-if-falseannotation.
- Method override/implementation suggestions now include
#[Override]attribute when PHP target version is 8.3+. To disable adding this attribute setintelephense.completion.withOverrideAttributetofalse. - Improved how unused variable reporting works when
compactis encountered. - Improved type inference of array elements when key is a simple variable.
- Improved template type resolution for templates that appear in constraints of other templates.
- Find all implementations now works for all methods, previously it was restricted to abstract or interface declared methods.
- Find all declarations will now get the root declaration(s) in a type hierarchy regardless of whether it is an interface or abstract declaration.
- Crash telemetry now defaults to disabled.
- False method compatibility error with abstract trait method and base class with final method implementation.
- Highlight not working when origin is variadic parameter in PHPDoc.
- Added back auto prefix
$to variable renames if applicable. - Reference/rename not working for variables in anonymous class declaration argument list.
- Setting
intelephense.diagnostics.suppressUndefinedMembersWhenMagicMethodDeclaredto configure if undefined method and property diagnostics should be suppressed if magic methods are declared. Defaults totrue. - Setting
intelephense.diagnostics.severityto configure the severity of each diagnostic. - Setting
intelephense.diagnostics.strictTypesto configure type checks to be performed as ifdeclare(strict_types=1)has been declared in every file. Defaults tofalse. - Setting
intelephense.diagnostics.excludeto disable some or all diagnostics on a per file basis.
- Various control flow analysis and type inference issues.
- PHPDoc completion missing
@throwsor showing@throws mixed.
- More diagnostics.
- PHP 8.5
(void)cast.
- Updated stubs.
- False namespace declaration must be first statement when doc block preceedes declaration.
- False ctor cannot declare return type error for anon function.
class_aliasaliases not recognised ifclassconstant used to declare alias name.- Templates in
@param-closure-thisnot resolved. - False possible undefined variable after try-catch-finally block.
- More diagnostics.
- Various diagnostic fixes.
- Implement all abstract methods not working for anonymous classes.
- Incorrect array creation type inference when one or more elements is a union type.
- Constant values not being computed when declared using an expression rather than a literal value.
- Inline values provider for better synergy with xdebug extension.
- Support for
@mixinwith an intersection type. - Support for
value-of<T>type. - Support for default template type arguments eg
@template T of bool = false. - More diagnostics.
- Signature help now uses short type names instead of fully qualified type names to increase legibility.
- Variables can be now renamed to expressions, for example
$value=>$this->value. - When not provided by the client, default storage will be the following:
- *nix
- storagePath -
$XDG_CONFIG_HOME/intelephense/workspace/or$HOME/.config/intelephense/workspace/ - globalStoragePath -
$XDG_CONFIG_HOME/intelephense/global/or$HOME/.config/intelephense/global/ - licenceKey -
$globalStoragePath/licence.txtor$globalStoragePath/license.txt
- storagePath -
- Windows
- storagePath -
%AppData%/intelephense/workspace/or%UserProfile%/intelephense/workspace/ - globalStoragePath -
%AppData%/intelephense/global/or%UserProfile%/intelephense/global/ - licenceKey -
$globalStoragePath/licence.txtor$globalStoragePath/license.txt
- storagePath -
- *nix
- Conditional type where a parameter template type is the subject yielding unexpected type when argument is a union.
- Closure
staticreturn type resolved too early. - False type error when comparing an array shape to a typed array.
- Various diagnostics issues.
CodeActionContext.onlybeing ignored for some code actions.- Global function and constant suggestions prefixed with
\when not configured to. - Implementations code lens not working for hooked properties.
- Document highlight not working when origin is within phpdoc.
- Abstract hooked properties not reported as not implemented.
- PHPDoc immediately following another PHPDoc being ignored in class member lists.
- Bad parsing of
@paramunion type when followed by by-reference parameter. - Template types not resolving to boolean literals.
xorbreaking language intelligence in subsequent code.- Anonymous class methods being added as object shape properties.
- Variable hover contains
@varinformation for other variables when using array destructure syntax. - Index access types not resolved in some contexts.
- Property type being lost when there is both an annotated and declared property of the same name.
- Type alias that references another type alias not resolved fully.
- Variable types reported as
neverincatchblocks if there are no assignment expressions intryblock. - Type hinting
$thisas a union type ignored. - Function FQSEN in
@seenot recognised. - Dot files not being excluded even though they match an exclude glob.
- PHPDoc optional closure parameters not parsed correctly.
- Hover not showing for methods named using a PHP reserved name or keyword.
- Type aliases not expanded after the first reference when appearing multiple times in a type.
- Global namespaced symbol suggestions not fully qualified in non-global namespace context when
insertUseDeclarationisfalse. - False type error when an array shape tuple is compared to a typed array.
- Template type not resolving when constraint is
key-ofanother template type. - Incorrect
ldap-Set_optionstub. - PHPDoc that follows a trait use clause not parsed.
- Type aliases not expanded in foreach when used as type arguments for iterators.
- Global scoped definitions showing as undefined.
- Shorthand nullable parse error in
@methodtags. - Undefined variable when defined in previous call of call chain.
- Undefined variable when defined in
ifexpression. - Templated closure parameter showing as mixed even if a type has been declared when type arguments not supplied for scope.
- Type narrowing
$thisin traits not working. - When both an annotated member and a declared member share the same name, visibility should be checked to select the most appropriate definition for context.
- Type constants not expanded if in type argument of another type.
- Stack overflow when determining return type of dynamic call.
- PHPDoc with
$thisas a type not recognised. - False cannot access member from scope diagnostics when
__calland__getcould be used to access non public members. - Only the first class constant shown as completion suggestion when using comma separated declarations and PHPDoc.
- Variables declared in an array element showing as undefined in subsequent elements.
- Promoted property with setter hook showing
$valueparameter as undefined.
- Initial support for PHP 8.5.
- Default PHP version now 8.5.
- Settings now uses
markdownDescriptionproperty. Thanks @rchl .
- False undefined variables when declared in a
forloop initialser and referenced in the followingforloop initialser. - False undefined variables when declared in an argument list and referenced in the following argument.
- Modifying a variable array type after a loop can affect the variable array element type within the loop.
@param-outand@param-closure-thisdetails not showing in hover.- Hover links not wrapped in
<>and therefore not clickable. - Document links not working for URI in
@seeand@link. - Symbol outline failing if
@propertyproperty names are missing$prefix. - False type errors when assigning a generic type to a declared type which does not have type arguments.
- Omitting template type arguments causing type errors because of unresolved template.
- Template constraints not resolving properly if constraint contains reference to another template.
- Template types not resolving properly in conditional types.
- Undefined superglobals after indexing with files open.
array_mapcallback parameters inferred asmixedif they have a type declaration.- PHPDoc leaking to subsequent statements.
- Anonymous class properties showing as undefined.
[]as an@methodparameter default value not parsed.voidbeing included as part of union in inlay hint return type.- Return types from duplicate methods/functions being reduced to minimal type when unioned instead of previous version behaviour of non-minimal unions.
- Property types not being inferred from constructor as a fallback when no type is declared/annotated.
- HTML/JS/CSS language features not working until edits made to the HTML/JS/CSS.
$thistype narrowing not working.- Go to definition from a callable array using
__CLASS__as the scope not working. - Removed space at end of
<?phpsuggestion.
- Several cannot read prop of undefined and range errors.
- Incorrect suggestion for function when class of same name has been imported.
- Incorrect indentation when accepting override/implementation suggestion.
- Incorrect type inference when iterating ArrayIterator and subclasses.
- False type error, wrong type inlay hint and bad anon function suggestion when expected signature has a variadic parameter.
- Formatting broken for mixed PHP/HTML when PHPDoc used.
- Undefined variables in functions and methods when preceeding code edited to add/remove new lines.
class_alias()not working if class name argument is a string literal instead of::classconstant.@methodparsing broken forstaticmethods.- PHPDoc that follows an abstract method being ignored (causing CI4 Builder undefined methods).
global $argvdeclaration showing undefined variable.- Function reported as undefined when defined in an encapsulating function.
- False not all paths return value diagnostic when a custom
neverfunction is called.
- Support for LSP
CompletionItemLabelDetails. - Support parsing inline comments in array shapes.
- Diagnostic when accessing members that are not visible from scope. Previously they were reported as undefined members.
- Completion suggestions for outer scope variables, with additional use clause edits, when inside anonymous functions.
- Suggestions for anonymous function signature is call argument context.
- Fallback to an appropriate type for
non-empty-mixed. - Support conditional types for parameters.
is_subclass_oftype narrowing.- Suggestions when comparing to a variable with literal union type in switch, match, equality contexts.
- Array key suggestions when assigning sub-array to array shape.
- Setting to control font case for parameter and property name suggestions.
intelephense.completion.parameterCase(defaultcamel) andintelephense.completion.propertyCase(defaultsnake). - Support for
@param-closure-this. - Support for
@param-out. - Support relative links in PHPDoc. Relative URIs wil be resolved to an absolute URI relative to the current file. URIs without any
.or..prefix will be resolved relative to the workspace folder. - Added completion suggestions relative to existing partial use declarations. Must be enabled with
intelephense.completion.suggestRelativeToPartialUseDeclaration. The setting value is the maximum number of namespace segments which can appear in the suggested edit. Defaults to0(disabled). - Support for
MyClass::*wildcard and non-wildcard syntax for class constant union types in PHPDoc. - Support for constants in PHPDoc union types. Constants must be UPPERCASE and must be fully qualified to avoid name resolution ambiguities with object types.
- Auto-closing of short tag echo (
<?=). Can be turned off withintelephense.shortOpenEchoAutoClose. VSCode only. - Support for inlay hints. Hints are shown for call declaration return types, anonymous function parameter types, and call argument parameter names. Can be turned off with
intelephense.inlayHint.returnTypes,intelephense.inlayHint.parameterTypes, andintelephense.inlayHint.parameterNamesrespectively. Premium - Visiblity modifiers are now shown in outline.
- Support for
SignatureHelp.activeSignature. - Suggest variable names in
compact. - Support for
class_alias. - Added a document link provider to navigate on click to required/included files. Premium
- Removed workspace file limitation. Larger workspaces will consume more resources.
- Suggest trait names in all contexts not just in
useclauses. - Type, function, constant suggestions now use contiguous substring searching.
- Modified suggestion sort order via sortText property to improve suggestion order 🤞.
- Now more tolerant of FQSENs that aren't fully qualified in
@see,@uses. - Override suggestions are now shown without having to first qualify the context with a visibility modifier or
function. - Improved Workspace symbol search. Search now uses contiguous substring matching. For example
mfcwould findmy_function. Searching can also be done using the fully qualified structural element name (FQSEN) (or part there-of) of the symbol. This can narrow down the type of symbol as well. For examplemc:f(would find the methodMyClass::foo(). - Updated and improved various stubs.
- For performance reasons, only named function call expressions will be analysed for
neverreturn types (egdd()). Previously, all call expressions were analysed. A workaround for this limitation is to use the patternsreturn $foo->never();or$test || throw $foo->never()to declare that the path exits. ! BREAKING ! - Method override/implementation suggestions now include a parent call and not implemented throw respectively.
- Renaming a constant reference not renaming the declaration.
- Type suggestions following
@method static. - Template with union type restriction not inferred properly.
- Type aliases not resolved in some contexts.
- Inline
@seenot hiding url when description provided. - Statement keyword suggestions not appearing for control structures without braces.
- PHPDoc not formatted correctly above enum cases.
- Type inference inconsistent with
ArrayAccessand subtypes. - Keyword suggestions missing in switch expression.
readonlyon anonymous class causing parse error.- Array key suggestions not showing in constructor calls.
- False method signature not compatible diagnostics.
- Various control flow analysis issues within loops.
- Not warning on unused private promoted properties.
- Incorrect Generator type arguments when exiting before yield.
- Incorrect diagnostic message when
readonlyused with property hook. - Using
selfin call signature in traits doesn't resolve to exhibiting class. - Intersected object types not producing intersected type for property.
- False type errors for PHP math extensions that have operator overloading.
- Magic method implementation suggestions produce invalid code if abstract modifier is present.
- Smart select bugged if selecting at end of a file that doesn't end in an empty line.
- Some stub symbols being excluded, resulting in undefined symbol errors, when the symbol has a phpdoc with no tags.
- Completion suggestions not showing in phpdoc.
- False not all paths return value error when returning result of void returning function call.
- False calling non-static method statically for parent property hook calls.
- String literals where the value is a namespaced class not resolved to class when passed to
class-string<T>. - Trait
selfnot resolved to exhibiting class when used as a type argument for templated class. - False return type error when using templates and returning
static. - DocBlock indent should be inline with following switch case/default statement.
- False unused import when used in typedef annotation.
- No
$thissuggestion inside anonymous function defined within a type definition. - Typedef types not expanded when appearing in passed by-ref parameters.
- Spurious undefined method/function diagnostics appearing after indexing workspace.
- Spurious parser errors when editing adjacent to
ifortryblocks.
- Spurious parser errors when editing mixed html/php containing short echo tags.
- False not all paths return a value with try/finally.
- False method compatibility error when overriding a method with optional parameters with a method with a variadic parameter.
- RangeError invalid array length.
- Templated definitions for
array_find,array_find_key,array_any,array_all,uasort,uksort,array_walk,array_walk_recursive. - Array shape key completion suggestions in return statement, function/method argument, destructuring contexts.
defaultadded to keyword completion suggestions in match expr.- Property declaration name suggestions generated from type declaration and from base class.
- Support insert and replace completion suggestion ranges.
- Completion suggestion for type definition name based on file name.
- Completion suggestion for namespace based on file and composer.json.
- Updated stubs
- PHPDoc for variadic params where the ellipsis (
...) has been omitted and the type is an array are now considered to describe the type of the parameter within the function body, not the type being passed to the function. - Passing names of PHP non-object built-in types (eg
string,int) to a function that expectsclass-string<T>now resolvesTto that built-in type instead of a user class with that name. - Expanded variety of parameter declaration name suggestions to include snake case and shorter name variations.
- Cannot
@disregarddiagnostics on property declarations. - Return type diagnostics in traits.
- False return type error in generator.
- Property type inference when redundant
SubClass|SuperClassscope types encountered. - Type narrowing with null coalesce assignment in conditional expression.
- False type error when assigning
$thisto property. - Array type lost when assigning empty array to multidimensional array element.
- False unused method diagnostic when method called in
$this instanceofconditional block. list<>key should beintnotint|string.- False method compatibility error when override declares variadic parameter.
- Range format provider should format token and leading trivia if only leading trivia falls in range.
- Named argument completion suggestions should not be case sensitive.
- Should consider composer.json autoload-dev when generating file renames.
- False parse errors when editing open tags and
intelephense.environment.shortOpenTagis enabled. - Default PHP version should be 8.4.
- Missing
frakenphpfrom stubs enum. - False implicit nullable parameter diagnostic when type is
mixed. - False abstract not allowed error for PHP8.4 abstract properties.
- Union of
Traversableand empty array losing traversable template type.
- PHP 8.4 class member access on instantiation without parentheses.
- PHP 8.4 property hooks.
- PHP 8.4 asymmetric visibility.
- PHP 8.4 deprecated diagnostic for implict nullable parameters.
- Support
@mixintemplate types. This improves type inference when using Laravel 11. intelephense.diagnostics.memberAccesssetting that controls whether to show diagnostics relating to member access. Defaults totrue.
- Default PHP version now 8.4.
- Updated stubs.
- Parent and Overrides code lens no longer shown above methods that have no parent or overrides to reduce clutter.
- Crash when parsing phpdoc with conditional type containing newlines.
Traversablenot treated as covariant toiterable.- Incorrect types for some
$_SERVERelements. - Enums not recognised as implementations of interfaces.
- Incorrect parse error for empty heredoc.
- Type not narrowed when using nullsafe operator.
- Template types not resolved for
__invoke. - Go to type definition not working for foreach value.
- Incorrect formatting of comments above
defaultin match expression. - False method signature diagnostics when using older versions of PHP.
- Variable type incorrectly inferred as
neverinside while loops with logical conditional expression. - False readonly property error when initialising trait declared property in exhibiting class.
- Bad range formatting when selecting part of a multiline call chain.
- Template types not resolved when passing
Iteratortoiterableconstraint.
- Template types incorrect when implementing
Iterator. Traverabletemplate types lost.assertnot working when fully qualified.- False
unsetvariables after logical expression when usingoroperator. - No completion suggestions for variables declared in array destructure.
- Don't reduce function return types to minimal type as eagerly.
- False unused symbol diagnostic for promoted property with no visibility modifier.
- Performance issue with large arrays. Array shapes are now only generated internally on arrays with 20 or less elements.
- Go to type definition not working when origin is an assignment expression.
- Type lost when built in constants
true,false, andnullare prefixed with backslash. staticas a template type argument resolving to wrong type.- False method signature compatibility errors for built-in PHP symbols when targeting PHP versions < 8.1.
- Incorrect and cut-off completion suggestions when triggered by
useinside a top level anonymous function. - Don't eagerly reduce unions when substituting templated types.
- False return type error diagnostics when calling templated parent methods.
- Parameter type showing
unsetfor anonymous functions declared within an unpacked array. - Callable signatures with
statictyped parameter losing template type args. - Parameter type showing
unsetfor anonymous functions declared within an anonymous class header. - Licence key not syncing across machines in VSCode.
- Hover, go to definition not working on phpdoc
@seeFQSEN. - Callable signatures with
statictyped parameter resolving to incorrect type. - Type inference within
forstatements with no control expression. - Should not do additional type checks on variables that have
unsettype. - Variables with type
nullnot taking on by ref parameter type when passed as argument. - Anonymous function parameters showing as undefined when function declared inside array.
- Variables assigned to in
tryblock have typeunsetincatchclause.
- Added missing code lens middleware
- TypeError: Cannot read properties of undefined (reading 'scopeTypeDefinition')
- Added missing code lens settings.
See 1.11.x Pre-Release
- Code lens for references, abstract/interface implementations, trait usages, method overrides, method parent. Code lenses are disabled by default and can be enabled by setting the
intelephense.codeLens.references.enable,intelephense.codeLens.implementations.enable,intelephense.codeLens.usages.enable,intelephense.codeLens.overrides.enable,intelephense.codeLens.parent.enablesettings totruerespectively. Premium - Find all references for
__construct. - Object shape property hover.
- Built in array function stubs now have templated definitions.
- Improved DOMNodeList::getIterator stub
- Comparing class-string in conditional return yielding incorrect type when subject is subtype of test type.
- No type inference and false undefined property when accessing property of intersection type with object shape component.
@internalannotation missing description in hover.
- Lost variable types after
xorexpr;
- Reducing to minimal union types is now less eager.
- False undefined class constant in unreachable code.
- Cannot read properties of undefined (reading 'length') intelephense.js:2:2322561
- Handle phpstan call site variance syntax.
- Template types and metadata return types will no longer resolve to an argument type of
neverin order to prevent code being unintentionally marked unreachable following function/method calls. - Undefined property diagnostic now suppressed in
isset,empty,unset, LHS of null coalesce to match PHP behaviour. - Type check of LHS of property access expression suppressed in
isset,empty,unset, LHS of null coalesce to match PHP behaviour.
floatparameter should permitintas argument.- Type inference with
nullequality comparison. - Undefined variables not diagnosed inside closure.
- False undefined method diagnostics with templated parameters.
- Auto import function adding unnecessary
functionkeyword when in group use list. - Variable type becoming mixed when passed by ref in closure use clause.
- Circular reference problem when trait has
@mixinof the same class that exhibits it. - False argument count error when trait provides implementation for an interface and gives params default args.
- Unable to override variable type with
@varif RHS of assignment contains closure.
- Various control flow analysis issues.
- Performance and type inference issues with array read/writes.
- Type inference following
yieldexpression. - False type error when unpacking templated type.
- Invalid Argument Error e.toLspSymbolKind lib/intelephense.js:2:3058335
- Laravel eloquent builder queries losing model type.
- Template mapping between class with a base class method.
- Cannot read properties of undefined (reading 'length') when encountering attributed property declared with
var.
- Type inference for properties with default initialisers.
- Performance degradation in code with many array read and writes.
- False undefined variable after
whileloop with condition expression that resolves totrueliteral type. - Stack overflow when applying large text edits.
- When a trait has an annotated or abstract method and the real method definition is supplied by a base class, then go to definition will now go to the base class definition instead of the trait method declaration.
- Go to implementations now includes implementations provided by a trait where a class both uses the trait and implements the interface.
- False diagnostic when type
class-stringpassed tostringconstraint. - Setting
completion.suggestObjectOperatorStaticMethodsshould beintelephense.completion.suggestObjectOperatorStaticMethods. - Crash when parsing incomplete phpdoc type with template type args.
- Crash when encountering
trigger_errorcall withE_USER_ERRORas argument. - Conditional return types with default parameter argument.
- Type Hierarchy. Premium
- Support for
key-of<Type>utility type. - Support for
T[K]index access utility types. - Completion suggestions for
$_SERVERarray keys. unset()now set variable type tounset.- Phpdoc unsealed array shape syntax -
array{foo: 'bar', ...<int, object>}. - Support PHP 8.3 enum and class constant dynamic access syntax.
- Ability to turn formatter off/on with comments. Within PHP -
// @formatter:off,// @formatter:on. Within HTML -<!-- @formatter:off -->. Within js/CSS -/* @formatter:off */. - New setting to prefer
@psalm-,@phpstan-prefixed annotations when determining symbol type. Defaults tofalse.intelephense.compatibility.preferPsalmPhpstanPrefixedAnnotations. - Support for
@psalm-typeand@psalm-import-typetype aliases. Setintelephense.compatibility.preferPsalmPhpstanPrefixedAnnotationstotrueto enable. - Support
@see,@uses,@linkannotations and inline variants. - Static member access completion/hover/references when scope is variable of type
class-string<Foo>. - Hover on array shape string keys.
- New
intelephense.diagnostics.relaxedTypeChecksetting. Defaults totrue(previous version behaviour). This setting makes type checking less thorough by allowing contravariant (wider) types to also satisfy a type constraint. This is useful for projects that may have incomplete or innacurate typings. Set tofalsefor more thorough type checks. When this setting istrue, thenoMixedTypeChecksetting is ignored. - New
intelephense.diagnostics.noMixedTypeChecksetting. Defaults totrue(previous version behaviour). This setting turns off type checking for themixedtype. This is useful for projects that may have incomplete or innacurate typings. Set tofalseto make type checking more thorough by not allowingmixedto satisy any type constraint. This setting has no effect whenrelaxedTypeCheckistrue. - New
completion.suggestObjectOperatorStaticMethodssetting. PHP permits the calling of static methods using the object operator eg$obj->myStaticMethod();. If you would prefer not to have static methods suggested in this context then set this value tofalse. Defaults totrue. - Parameter types are now injected into inline closure arguments to functions from the corresponding parameter annotated callable type. For example declaring
function doCallback($myCallback) {}with annotation/** @param \Closure(Foo $param): void $myCallback **/will result in type hints for$paraminsidedoCallback(function ($param) { /* $param type is known */ }); - Support
@varannotated type abovedefineconstants.
- Minimum VSCode version 1.82.
- Recommended nodejs version 20.
- Literal types and array shapes are now used for constants. eg the type of
const FOO = 'bar';is now'bar'instead ofstring,const ARR = ['foo' => true]is nowarray{foo: true}instead ofarray. $argvis now typestring[].$http_response_headeris now typearray|unset.$php_errmsgis now typestring|unset.- Updated stubs.
- Formatter now aims to be PER-CS compliant. As such,
psr12setting inintelephense.format.braceshas been removed andperadded. - Formatter now allows a single space or no space in unary logical negation.
- Empty class, trait, interface, enum, function, method bodies are formatted to
{}with a single space preceeding{. - Short anonymous functions are now formatted to have no space between
fnand(. - Improved multiline
foreachexpression formatting. - Formatter now allows a single space or no space before colon in alternate control statements.
- Formatter now allows a single space or newline + indent before opening brace in anonymous class.
- Formatter now allows semicolon to be placed on a separate line in multiline chained expression statements.
- Multiline arrays are now formatted to a single element per line.
- Formatter will preserve wrapped attibutes in HTML.
- When multiple method/function candidates are found for a call expression, the result will be a union of the return types of the functions/methods.
- Template type resolution from args when arg is subtype of param type.
- Various control flow fixes and improvements.
- Missing or poorly displayed code blocks in hover/completion documentation for some built-in symbols.
- Array destructure with skipped elements.
- Shorthand ternary type inference.
- Incorrect import folding range.
- Param with optional array shape element not indicating element is optional when hovering.
- Hover on named arg of closure showing incorrect type
unset. - Incorrect type inferred for dynamic object creation expression when dynamic type is union.
- Hover showing non php fenced codeblocks incorrectly.
- Stack overflow with deeply nested string concatenation (TYPO3 PackageArtifact.php).
- Incorrect return type for symbols with metadata and null default parameter value (Laravel
app()); - Incorrect type when generating phpdoc for variadic params.
- Declare statement should accept comma separated directive list.
- Incorrect
$matchestype afterpreg_match_allcall. - Promoted property highlight.
- Code actions not showing when narrow or zero length range provided.
- Unable to
@disregarderrors in method header. - Unnecessary match expr format when operand of binary expr.
- Incorrect file rename if
composer.jsoncontains autoload paths without trailing/. static::classresolving to parent class name rather than child class name.- Trait method
selfreturn type not resolving to consuming class when used as implementation for interface method. - Don't show
iterableas interface. - Variables typed as
iterable<Foo>not working with array access notation. - Array destructure with
ArrayAccess.
- Cannot read properties of undefined (reading kind) with
forloops which have parse errors.
- Incorrect return type when using null safe operator.
- False undefined variable error in 3rd
forcontrol expression. - Incorrect return type for traits with method templates.
- False return type error when method returns method or class template type.
- Subclass constructor should not inherit phpdoc from superclass constructor.
- Conditional return types when testing parameter in namespaced file.
- False unknown named argument diagnostic with closures.
- Formatter adding extra space in method call where method named
catch. - Nested heredoc parsing.
- False unknown named argument diagnostic with trait method aliases.
- Metadata overrides when named args are used.
- Various version dependent stub type problems.
- Array callback references not being found.
- Type inference for const symbols with
newobject initialisers. - Type inference in switch/match with instanceof.
- Trait template mapping when phpdoc provided above trait use declaration.
- Object creation expression with variable returning
objectwhen more specific type could be inferred. - False method compatibility diagnostic with base class that has a trait method alias.
- False method not implemented diagnostics when enum implements interface that extends BackedEnum.
- Crash when
selfnot used inside class. - False cannot use parent in class with no parent diagnostics.
- Undefined class not reported when using
ClassName::class. - Type inference when destructuring array shape with numeric or no keys.
- Return types of some stubs
- False error when array or object shape passed to function expecting array or object.
- Array destructure of numeric indexed array shape.
- False error when using argument unpacking.
- False error when using array unpack on an array shape.
- Crash when parsing malformed or unsupported conditional return type syntax.
- Format only providing edit to remove closing tag even though other edits are applicable.
- Method template resolution when method comes from
@mixinclass. - Expected pattern to be a non-empty string crash.
- Declare correct min vscode version - 1.79
- PHP 8.3 support
- Array/Object shapes via annotations. For example -
/** @param array{foo:string, bar:int} $arrayShape */,/** @return object{foo:string, bar:int} */. - Improved type inference for
new $classNameexpressions where$classNameis of typeclass-string. - Annotation to ignore diagnostics/problems on statement level:
/** @disregard [OPTIONAL CODE] [OPTIONAL DESCRIPTION] */. For example/** @disregard P1013 method exists on runtime type */. - Conditional return types. Must be encapsulated in parentheses. For example -
/** @return ($param is string ? string : object) */,/** @return (T is string ? string : object) */
- Updated stubs.
- Updated dependencies.
- Problem/diagnostic codes are now strings, with the previous codes prefixed with 'P'.
- Properties with a declared or annotated type are now only narrowed on assignment to a subset of the declared/annotated type.
- Auto indexing on composer install/update
- Signature help showing no parameters when there are multiple definitions in workspace.
- Type lost when null coalescing with empty array.
- Wrong type when bitwise expr operands are both strings.
- PhpDoc being applied to consecutive symbol declarations when used with enum case.
- Property attributes not suggested on constructor promoted properties.
class-string<T>|Ttype resolution.- Method definitions not found for method string in callable array function arguments when multiple definitions of class/method are in workspace.
- Methods marked as undefined when packages provide ide helper stubs for other packages.
- Enums not suggested in namespace use declarations.
- Renaming the namespace of an enum not working correctly.
- Renaming a namespace will affect unrelated namespaces with a similar name.
- Rename symbol of variable will impact named parameter.
- Type inference when iterating over
$thisin foreach. - Symbols being given Global* alias on autocomplete when multiple definitions exist in workspace including in the current file.
- Missing
isIncompleteflag on suggestion response in some contexts. - Usage of
selfin trait not resolving to class that trait used in. - Removal of line breaks when formatting nested parenthesised logical expressions.
- Document symbol ranges when
SymbolInformationis returned instead ofDocumentSymbol(fixes sticky scroll). - Docblock types inherited too eagerly causing various param and return type issues.
- Templating issues when trait provides implementation of templated interface.
- Exclude globs working incorrectly.
- Template inheritance.
- Suggestions when
$thiscall chaining. statictype resolution when used as template type argument.- Nullable types showing incorrectly in hover.
- Not all suggestions showing from types with multiple definitions.
- False cannot modify readonly property errors.
- Property hover when type is a union of intersection and null.
- Method level
@templatePhpDoc inheritance. - Template resolution when user has provided overrides for non templated vendor definitions.
- False write to readonly property in
__get. - False undefined property for types that inherit
__get,__setfrom super type or traits. intelephense.compatibility.correctForArrayAccessArrayAndTraversableArrayUnionTypesnot working for properties.- False readonly write error for writes to array/ArrayAccess element.
- Namespace rename creating file renames containing backslashes.
- Missing
randomstubs. - Missing
xdiffstubs. - Handle non-standard
non-empty-string,lowercase-string,non-empty-lowercase-stringPHPDOC types. - False error when assigning to readonly property within constructor.
- Remove template/generics licence requirement.
- Undefined methods showing where users may have multiple type definitions of same name in workspace folder.
- Various template issues.
- PHP 8.2 support.
- PHPDOC
@templatesupport. - Handle non-standard PHPDOC types like
list. Internallylist<Foo>is treated asFoo[]. - PHPDOC
callable(Foo $foo): Bar,\Closure(Foo): Barsupport. Variadic and default args are not supported in the short form. - Added undefined property diagnostics. Can be disabled via the
intelephense.diagnostics.undefinedPropertiessetting.
- Updated dependencies.
- Updated stubs.
- Signature help provider now returns null instead of empty signatures array as per LSP recommendations.
- composer.json
autoload.psr-4settings used if available for file renames when renaming namespace. - Added templated
array_mapstub in order to better infer return type.
- Performance issue when workspace contains multiple symbols with same name.
- Various issues when
__halt_compilerappears in file. - False
neverreturn type whendieused in logical expression. - False undefined method when static used in union return type.
- Completion item documentation showing multiple times for namespace suggestions.
- Type inference for return type of closures.
- False unknown arg name when calling closure with named args.
- False unused imports with enum implements.
- False method compatibility error when overriding base method return type of self with static.
- False method compatibility errors when overriding core methods when targeting PHP versions < 8.1 .
- False undefined variable when variable declared as reference in anon function use clause where anon function is argument.
- Incorrect type inferred when variable appears in nested logical expressions.
- Type resolution when using
parentkeyword andstaticreturn types. - Unused private methods not detected if they call self.
- False return type error when using
yieldinforexpr. - False duplicate symbol when importing same symbol in different namespace blocks of same name.
- Undefined symbol not reported when import exists in other namespace block of same name.
- False duplicate symbol when defined in match expr.
- Local rename of excluded/stub definition should be allowed.
- Incorrect completion suggestions for variables.
- False undefined variables in do loop.
- Completion resolve not working.
- couchbase_v3 stub removed.
- False undefined variable when declared inside expression in conditional statement.
- False non static method should not be called statically for
self::. - Enums getting imported repeatedly.
- Enums not suggested for completion in argument lists.
- Type
stringlost from$varin conditional when using!is_numeric($var). - Parsing of
@return Typewhen following description starts with html tag. - Return types for some built in functions/methods incorrect.
- Type inference problems with
breakandcontinue. - Type inference problems with unary not expr and properties.
- Parameter attributes not analysed for usage.
- Wrong parameter highlighted in signature help when first arg is a named arg.
- Properties and promoted properties when declared with
readonlyand no visibility keyword. - Don't use > 31 bit numbers in
CompletionItem.data. - Variable references within
@varnot getting renamed. - False diagnostic: Expected type
SimpleXMLElement. Found$1. - Comment folding in array lists.
- Various smart select issues.
- Method override parameter hover not showing inherited doc.
- Default php version.
- PHP 8.1 support
- Redundant unions are not reduced to minimal type as eagerly.
- Added additional logging when indexing.
- Diagnostics limited to parse errors only for non-file URIs.
- PHP 8.1 is now the default version.
- Updated stubs.
- Iterator|Foo[] not corrected to Iterator<mixed, Foo> in some instances.
- Auto import not working in namespace body when class imported in previous namespace.
- Auto import indent in namespace body.
- False parse error on null-safe object operator and keyword member name.
- File rename incorrect when renaming namespace.
- False undefined variable diagnostic when using named arg and param is by ref.
- Encapsulated expr closing parenthesis format.
- False method not compatible diagnostic when override has an addition parameter that is variadic.
- False undefined variable on LHS of null coalesce compound assignment expr.
- Expected type 'object|array'. Found 'iterable'.
- Anonymous function parameter renaming.
- False method not implement diagnostic when trait provides implementation required by another trait.
implementsnot suggested when extends class name contains backslash.- Parsing of nested generic array phpdoc syntax.
- Updated stubs
- phpdoc
doublenormalised tofloat. - Crash on fetching embedded language folding ranges.
- False duplicate function name.
- Concrete class method is allowed to have different signature to trait abstract method.
- Doc block formatting.
- Excluded files getting indexed on
workspace/didChangeWatchedFilesnotifications. - False type diagnostics for some built-in symbols.
@mixinsupport. Premium- Signature help offset label support.
SymbolTag.Deprecatedsupport for workspace and document symbol requests.- Added new setting
intelephense.rename.namespaceModethat can be eithersingle(default) orall. When set tosinglea rename of a namespace will only affect the symbols defined in that single file. This is the equivalent of a single 'move class' operation. Previously renaming a namespace would affect all symbols that shared that namespace across multiple files. Setting to the value toallwill produce the old behaviour. Premium
- Updated stubs.
- Upgraded vscode-languageserver to 7.1 beta.
intelephense.files.excludeglobs without path separators are no longer prefixed with**/. BREAKING- URIs are now normalised to vscode-uri format.
- Rename requests that fail now return
ResponseErrorwith appropriate code and message rather than returning null and sending a separate notification. intelephense.environment.shortOpenTagnow defaults to true. BREAKING- Tolerate property annotations with missing
$in property name.
- Parser failing on alternate switch syntax.
- False
parentstatic call warning in anon class. - Division returning
intinstead ofint|float. - Refs not found when inside encapsulated expression used as member name.
- Formatting of immediately invoked function expr following phpdoc.
- Completion item detail showing
namespace ...instead ofuse ...for existing imports. - Completion item not including additional import edit when symbol shares current namespace but symbol short name is already used.
- Nested regions not folding.
- Property doc inheritance.
- Inline
{@inheritdoc}. - Files that are excluded but have textDocument/didOpen sent are now ignored.
- protected visibility when accessing subtype method from supertype.
intelephense.phpdoc.useFullyQualifiedNamesnot overridingintelephense.completion.insertUseDeclaration.- False not in object context error in arrow function.
- Multiline
unsetformatting. - Goto definition from callable arrays using
MyClass::classexpression. - Wrong
json_encodeparameter name. - PHPUnit metadata causing
createMockto returnstring. - Indexing not working on Apple M1.
- False diagnostics for some built in functions that have multiple signatures.
- Format bug with shebang and
__halt_compiler. - Intellisense breaks with doc blocked class inside namespace body.
$/cancelRequestnot working.- Wrong range reported for duplicate symbol diagnostics with attributes.
- Various cannot read prop of undefined.
- Incorrect method compatibility diagnostics with union types.
- User function named
stringnot found. - Wrong type resolved for
static[]return type inIteratorAggregate::getIterator. - Incorrect argument count diagnostics when required parameters follows optional.
matchformatting.
- Deeper code diagnostics will only be run if file is free of parse errors.
- Endless parse loop when encountering parse error in argument lists in some contexts.
- Named parameters not suggested in method, constructor, attribute calls.
- Attribute formatting.
false,null,mixedreported as undefined types.- Attributes on methods breaks code intelligence.
- False type error when return type is
static. implementsname list always formatted on next line.
- PHP 8 support.
- Rename functionality in embedded HTML/JS. Premium
intelephense.environment.includePathscan now be relative to workspace folder.- PHP 8 is now the default PHP version.
- Updated stubs.
- Updated to recent vscode html lang server.
- Updated to jsbeautify 1.3.
- Updated to node-language-server 7 and LSP 3.16.
- Find all implementations fails after closing and reopening window.
- User types named
Boolean,Integer,Resourcebeing confused with phpdoc lowercase types of same name. - Laravel
Strnot showing in suggestions. - False implementation diagnostic for method overrides with default params.
- Declaring
$argvin function scope always gives undefined variable. - If/else formatting where if/else do not have braces but nested statement does.
- Wrong formatting when
defaultis used as name of const, method etc. - Incorrect heredoc formatting error msg.
- No folding for alternate if/else statements.
- Incompatible method not diagnosed when base method param has default arg.
- False static call of non static method when call scope is in type heirarchy.
- No hover/goto/rename on static protect variables.
- Protected static functions not found when in type heirarchy.
- Trait methods not found when using
insteadof. - Magic constants should be case insensitve.
- False implementation error with multiple traits with same function where one is abstract.
- Short ternary expr always resolving to the falsey type.
- HTML/CSS path completion always relative to workspace folder.
- Magic methods not suggested when visibility modifier is private.
- Parse error with prefix increment array dereference expressions which caused false undefined variable errors.
- Intellisense fails when '@return self` used for interface methods.
- Formatting errors with goto labels.
- Signature diagnostics incorrectly checking against base annotated methods.
- Crash when using reference array destructure eg
[&$var] = [$num];. - False implementation errors when trait uses trait containing abstract method.
@varannotations and function static variables.- False undefined method when calling parent method that has
__calldefined egparent::magic(). - False undefined global variable errors.
- False type error when passing
$thisto a function call inside trait.
- User symbols declared with annotations not overriding vendor definitions.
- Return type of anon function passed as argument is
Closure. - Duplicate private method names not showing error.
- Incorrect type assigned to variables passed to function with variadic by ref parameter.
@varignored when declaring function static variable.- False undefined var/param when multiple methods declared with same name.
- Fix issue with included files getting forgotten on close.
- Undefined symbols being shown when project first opened and indexing is in progress.
} elseformatting problem.- rename/references not working.
- Folders can now be included from outside the workspace using the
intelephense.environment.includePathssetting. - Class does not implement all abstract methods diagnostic.
- Type check diagnostic on unpack operand.
- Method override/implementation signature check diagnostic.
- Import symbol code action Premium
- Implement all abstract methods code action Premium
- Add PHPDoc code action (in addition to existing
/**trigger) Premium
- Updated stubs.
- BREAKING Workspace folders are now considered isolated from each other. Use the
intelephense.environment.includePathsto allow sharing of symbols across workspace folders. - Improved handling of methods with multiple signatures defined by
@method. - Where symbol names clash then definitions that are NOT vendor definitions are preferred. Previously a union of all definition types was used. This permits user overriding of vendor symbols through the use of helper stubs in the workspace.
intelephense.environment.documentRootandintelephense.environment.includePathsare now resource (folder) scoped settings.- Method override/implementation completion will now add use declarations (if configured) instead of always using FQN for parameter and return type declarations.
- Type FQN can be used in workspace symbol search.
- Formatter no longer enforces single space between cast operator and operand as this is not specified by PSR12.
- Region and comment code folding now folds to a single line.
- no definition/hover for private and protected methods in some contexts with
selfor$this. - False unexpected heredoc indentation diagnostics.
@varannotations failing in consecutive foreach loops using same variable name.- Fomatting problem for
if/elsewithout braces. - False deprecated nested ternary when nested short ternary expressions are used.
- False undefined variable for for subscript expressions in
isset. - False return type error when return
$thisfrom trait. - Last region in a block cannot be folded.
if,elseformatting withallmanbrace setting.- Fixed index state becoming corrupted during some add and remove operations.
- False undefined method on interfaces when method call follows property access expression.
- Method header completion missing ampersand and elipsis for reference and variadic params.
- Incorrect type for annotated variadic parameters.
- Diagnostics not clearing when files outside of workspace are closed.
- Signature help failing when call inside of an array element list.
- Variables not being suggested when declared using annotations.
- Variables not being suggested in subsequent branch when declared in sibling branch.
- Type inferrence with loose null equality.
- Initialise problem with short tags.
- Function return type incorrect when contains switch.
- False undefined var for additional params in method override.
- False undefined type err when using NAMESPACE::class.
- Static member completion failing when php version cant be parsed.
- Format inserting stray whitespace at beginning of file.
- False error on foreach arg when type is
iterable. @vartypehint failing if preceeded byifstatement.
-
Compatibility settings to enable working with some common type annotations that may not accurately reflect intended type.
intelephense.compatibility.correctForBaseClassStaticUnionTypesresolvesBaseClass|statictostaticinstead ofBaseClass.intelephense.compatibility.correctForArrayAccessArrayAndTraversableArrayUnionTypesresolvesArrayAccessOrTraversable|ElementType[]toArrayAccessOrTraversable<mixed, ElementType>.
-
Added settings to control formatting of braces. Options are
psr12,allman,k&r. -
Go to definition and references for callable strings.
-
Completion suggestions marked with deprecated tag where appropriate.
-
Language constraint and version dependent (5.3+) diagnostics. Can be controlled with
intelephense.diagnostics.languageConstraints. -
Short open tag setting
intelephense.environment.shortOpenTag. Defaults tofalse. -
Added wordpress globals to built-in stubs.
-
Added
intelephense.references.excludesetting to excluded files/folders from reference search. Defaults to**/vendor/**. -
Added type diagnostics for LHS of member access expressions and foreach argument.
-
Implemented smart select -
textDocument/SelectionRange. PREMIUM
- Unions with
mixedresolve tomixed. Previously the other types in the union were preserved. - Updated stubs.
- Added
**/.history/**tointelephense.files.excludedefault. - Upgraded to node language server 6.
- No space after
usewhen formatting. - Division expressions not returning correct type.
- Function static variables not suggested.
- Unused try/catch variable.
- False unused property when used in null coalesce assignment.
- Array type inferrence incorrect and causing performance issues.
- False undefined variable in ternary expressions.
- Boolean addition should return integer.
- Variables being included in auto generated function phpdoc.
- Visibility not checked when determining member access.
- Various
Generatortype inference issues. - Type inferrence problems when using
$thisin instanceof or as a pass by ref argument. - Method override completion not considering
static. - False unused variables when using
func_get_argsandget_defined_vars. - Negative constants showing as 'expr' in hover.
- Parser/rename bug for property access expressions inside double quoted strings.
- Updated stubs.
- Crash when reading state from cache.
- Variable assignments in type guards.
- Instanceof typeguard should preserve existing type where appropriate.
- isIncomplete flag not getting set for member completions.
- Files getting closed prematurely when deleted from disk but still open in editor.
- Cannot read
nameof undefined.
- Bottom type
exit
- Updated stubs.
- Imports no longer shown in outline or document symbol search.
- Problem with
$thisandstaticreturn types and inheritance. - Completion call chaining with
__invoke. - Incorrect variable types in completions
- Logical
&&type guards with negated operand. - Metadata override map types parsed incorrectly.
- Variables of type
boolbecomevoidafter type guard. - False type error for functions that throw exception or exit.
- Element of
arrayshould bemixed. - Array of
arrayshould bearraynotarray[]. - Removed phpstorm stubs helper symbols.
- Auto phpdoc using type template instead of property template.
- Private method used in callable array marked as unused.
- Wrong type when using array access on variable with type
static. - Auto phpdoc useFullyQualifiedNames not producing correct short names when false.
- Auto phpdoc for constructors.
- Updated stubs
- Switch statements not folding
- False undefined symbol for dynamic static function call
- No hover for methods named
toString. - Go to def when there are multiple class and methods with same name.
- False unused variable when passed by ref.
- Show diagnostic for all instances of an unused variable.
- Show parse errors for use declarations, namespace definitons and const not in top statment list. And function, trait, class, interface declarations not in inner statement list.
- Handle overloaded methods.
- Read prop of undefined error when indexing metadata.
- De-dupe member completion suggestions.
- Suppress false embedded language diagnostics.
- Licence activation with proxy.
- Set default stubs to match current bundled php 7.4 extensions.
- Some more hover/completion documentation polish.
- Memory leak where large strings were retained.
- Html/php formatting incorrectly adding large indents.
- Functions imported using group clause syntax being marked as undefined.
- Multiple
@not being replaced in phpstorm metadata maps. - Variable hover/completion sometimes showing doc from wrong variable.
- Overloaded functions getting lost when restoring from cache.
defined constants now showdefine(NAME, VALUE);in hover signature instead ofconst.- Constants now have
@varannotation noting type. - Short names now used in documentation signatures.
- Documentation function/methods signatures only wrap when they have more than 3 parameters.
- Added activation event on enter licence key command.
- Regression with type inference giving void type after last update.
- Fixed problem when lexing double quoted strings that start with curly open.
- Only first clode block highlighted on hover.
- Undefined type when referencing parent in trait.
- Use http proxy when activating licence.
- Function overloads lost when restoring from cache.
- phpdoc generation showing
@throws mixed - PSR-12 formatting fixes.
- Mixed php/html formatting fixes.
- Unsued symbol not showing when there is a class and function with same name.
- constructor hover param types different to method hover param types.
- Invalid return type shown for nullable types in method documentation signature.
- Trailing comma in
issetandunset.
- Parser is now backwards compatible regarding PHP 7.4 fn keyword.
- Type hinting
/** @var Foo */above variable and property assignments now works without variable name as well.
- Stray backslash breaking type inference when using phpstorm metadata overrides.
- Variables declared in conditional blocks missing from completion suggestions.
- Don't assign unset type to variables and properties from unset vars. Assign mixed instead.
- Argument type check not working at times for functions with multiple signatures.
- Ctrl hover on phpdoc reference underlines whole doc block.
- Don't type check undefined variables. Fixes issue when using extract.
- Performance issue when running diagnostics on open files.
- various read prop of undefined errors.
- Config to enable/disable each of undefined types, functions, constants, methods, class constants, properties.
- Config to enable/disable embedded language diagnostics.
- Wordpress stubs which can be activated by adding
wordpresstointelephense.stubs.
- Relaxed undefined method diagnostics when calling methods from within traits.
- Relaxed undefined method diagnostics when mixed or object forms part of a union type.
- Relaxed import undefined symbol diagnostics.
- Duplicate type, function, constant completion suggestions when multiple symbol definitions are found in workspace
- Signature help and argument type checking for built in function that have multiple signatures eg session_set_save_handler.
- Variable has void type after used in ternary expression.
- Variables losing original type after instanceof expr in conditions.
- False unused variable when used in short form closure.
- Variable type not inferred when it is an arg of a function call inside a short form closure.
- Relaxed type checking so that it behaves as in 1.2.
- Moved licence key storage from config to global memento.
- Unused catch clause variable diagnostic suppressed.
- removed interbase, wddx, recode from default stubs.
- Changed default file exclude pattern to
**/vendor/**/{Tests,tests}/**to not exclude frmaework test classes.
- False undefined var in arrow functions.
- phpstorm meta not working when map contains empty string key.
- variable type lost when in single if statements.
- False type error expected type callable. Found callable.
- Types not assigned in short array destructure syntax.
- Type inference breaking in logical and/or expression type guards.
- Type inference breaking in yoda conditions.
- Flashing diagnostics in problem tab.
- HTML/JS/CSS language intelligence not working in some files.
- Phpdoc completion above variable creating function docblock.
- False undefined methods when
__calland/or__callStaticis implemented. - Arrow functions failing to parse correctly when defined in argument lists.
- Arrow function return type always void.
- Javascript completion not working.
- Union type comparison always failing.
- unary + and - expr should return specific type if possible.
- PHP 7.4 support.
- Config to enable/disable diagnostics and diagnostic categories.
- Config to set target PHP version.
- Undefined Type, function, constant, member diagnostic errors.
- Deprecated diagnostic hints.
- Support for running diagnostics
onSave. - Auto phpdoc creation. Triggered by
/**. PREMIUM
- HTML/JS/CSS language service moved to server.
@globalannotation support removed.- Improved sorting of suggestions.
- Namespace now shows in completion suggestion label in cases where there are similarly named items.
falseandtrueno longer generalised tobool.- Improved type inference. Expressions like
($a),($a === null),($a === false)now supported. - Global or script level variables must be explicitly
included or imported withglobal. Previously, attempts were made to look up types of script scoped variables always leading to many irrelevant lookups in view files. - Undeclared variables are now given a type of
unsetinstead ofmixed. - Improved merging of declared types and phpdoc types so as to not lose more specific type information.
- Definition requests now use
LocationLink. - Updated stubs.
- Type checking is more strict for union types. Previously any type could match, now all types must match.
- Extra parentheses added when accepting completion suggestion within existing invocation.
- False scalar type errors when
strict_type=1is not declared in file. - False type error when object has
_toStringimplementation. - No variables imported from
includewhen inside function/method body. - Variable type lost if assigned in a control expression.
- False undefined variable diagnostic for self referencing anonymous functions.
- False undefined variable diagnostic on left hand side of
??. - No completion suggestions when chaining
ArrayAccess. - Types getting lost when assigning array elements.
- Empty type when hovering property declaration.
- Completion suggestion types not accurate and different to type seen in hover.
- Type narrowing now considers
die,throw,exitas terminating. - Namespace definition breaking type inference.
- Abstract methods being inferred as
void. - Autocomplete adds
\tovoid - Heredoc not recognised as string.
- Premium features not accessible on remotes because outbound https cant be made. Activating on a local php project now also activates for remotes.
- Code folding for arrays,
- Hover for anonymous use variables.
- find all references/rename not working for trait/interface methods.
- max file size.
- Removed upgrade notification that showed every day. Replaced with a notification that appears once per update that reads "Intelephense updated to X.X.X. Click 'Open' to read about the latest features and fixes."
- added upper case __HALT_COMPILER completion as required by phar.
- __HALT_COMPILER is no longer lowercased on format as required by phar.
- trait adaptation list format indent
- maxSize not respected
- overriden method params with default args losing typing of base method
- mixed html/php format indentation
- __halt_compiler has space inserted between keyword and opening parentheses
- code folding in mixed php/html/js/css not working
- additional command palette command to enter licence key.
- Server start notification will show at most once every 24 hours.
- Rename not detecting anonymous function use variables.
- Rename. PREMIUM
- Find implementations. PREMIUM
- Folding. PREMIUM
- Go to declaration. PREMIUM
- Go to type definition. PREMIUM
- Various cannot read prop of undefined errors
- Mixed PHP/HTML if else blocks not indenting correctly on format
- declare directive completion
- completion suggestion order of symbols with same name changed to local > project > builtin/stub > vendor
- use declarations now added in alphabetical order and after any top level comment, script level doc block, or declare directive.
- signature help no longer shows if inside a deep multiline argument. eg inside a closure that is a function argument.
- various cannot read prop of undefined errors
- formatter repeatedly adding spaces to some sections of html/js
- auto complete prefixing array type declaration with \
- documentation sometimes shows raw html instead of markdown table
- features stop working for files/folders containing a
. - group use declaration list trailing comma
- false unused var/param when used in a member name expression.
- some control structure keywords not being suggested - eg endif, endforeach.
- format enable setting beng ignored.
- false unused use declarations when use declaration is a namespace only.
- auto use decl not creating alias when there is a name clash with a declared class.
- doc block type completion when using union/intersection types
- completion suggestion documentation not showing full documentation of symbol if it is imported.
- Telemetry to report anonymous usage and crash data. Use
intelephense.telemetry.enabledto configure. Inherits fromtelemetry.enableTelemetry.
- jsbeautify 1.10.1
- Diagnostics now refresh after indexing completed and when referenced files are edited.
- Format now aborts if a parse error is encountered.
- compiled with strictNullChecks.
- updated stubs.
- Trait property member completion.
- Type inferrence when a conditional block with type guard has return statement.
- Type inferrence for properties when used in type guards.
- Bad formatting when HTML embedded in methods.
- Formatter repeatedly indents commented html.
- Preserve indentation on phpdoc markdown code blocks.
- $this shouldnt be suggested when in static context.
- Various read prop of undefined errors.
- Formatter adding spaces before variables in double quoted string.
- Formatter inserting spaces in else keyword if no if statement provided.
returnnot showing in completion suggestions.
- On enter rules for doc blocks.
- Updated stubs.
- vscode-uri 2.0.3
- Bad formatting in mixed JS/PHP script block -- again.
- Use declaration clause completion not working when typing fully qualified names.
- Single level namespaces not indexing.
- Global var hover sometimes shows multiple identical tag annotations.
- Updated stubs.
- Updated stubs.
- Bad formatting in mixed JS/PHP script block.
- Copy and paste argument inserts a space in front of it.
- False undefined variable for anon. use variables when anon function is in script scope.
- Path intellisense for windows paths.
- Cannot read property codePointAt of undefined.
- False unused variable diagnostics when assigning to array.
- Updated stubs.
- Support for PhpDoc intersection types, generic collections, variadic notation, default param args
- File path completion
- Support PHPStorm metadata
- Support .jsbeautifyrc file in project root
- Setting to enable/disable triggering param hints on completion
intelephense.completion.triggerParameterHints - Setting to run server with alternate node runtime
intelephense.runtime - Setting to control server memory usage
intelephense.maxMemory - Setting to declare document root
intelephense.environment.documentRoot - Setting to declare include paths
intelephense.environment.includePaths - Global scoped variable completion/hover/definition
- Client now webpacked.
- Plain text documentation support.
- updated stubs
- fast-glob 3
- Improved type inferrence when using asserts, instanceof (negation too), and built in function type guards
- improved keyword completion
- x2+ increase in indexing speed
- Group use declaration formatting
- Range formatting with mixed php/html files
- Formatting removing comments
- False undefined var diagnostics in closures
- Completion not working in anon class argument lists
- Wrong closure signature when inspecting closures that return closures.
- Error when indexing workspace with NTFS junctions
- Auto add group use declaration adding name with backslash
- Unused method diagnostics not considering traits
- Obey LSP client capabilities
- Index workspace now guaranteed to clear cache.
- Various read prop of undefined errors.
- Diagnostics/signature help using overidden base constructor signature.
- Removed mysql from default stubs (can be reenabled by adding
mysqltointelephense.stubssetting). - Updated stubs.
- didChangeWatchedFiles and didChangeConfiguration now dynamically registered if client has support.
- bundle extension with webpack.
- micromatch 4
- if statement formatting.
- multi line method header formatting.
- Variable variable false positive diagnostic.
- Diagnose undefined self referencing variables.
- False positive duplicate identifier diagnostics when symbol conditionally declared.
- Various cannot read property of undefined erros.
- Nullable types not displaying correctly in documentation.
- Constant values not showing in documentation.
- Various formatting fixes
- Various false diagnostic fixes.
- cant read property type of undefined with variable variable function calls
- ternary expr formatting
- no completion for magic members
- cant read property values of undefined with built in variables
- doc block formatting
- Removed console.log
- updated stubs
- improved extension activation time and size by using turndown with minidom instead of jsdom
- jsbeautify 1.9.1
- vscode-languageserver 5.2.1
- various false diagnostics.
- various get/set of undefined errors.
- not indexing hidden directories.
- bad method declaration completion when nullable types are used.
- extra / inserted on html end tag completion.
- bad type inferrence on array addition
- should not lowercase keywords that are used as class const and methods
- type changes to properties not being tracked.
- classes with __invoke are valid callable args
- overlapping format ranges
- soft reserved names being treated as reserved.
- preserve comment position when inserting use declaration
- handle nullable types in phpdoc
- dont treat downcasting as type error
- allow $this to be typehinted again
- failed to apply changes errors from open doc being prematurely closed
- member modifiers sometimes not showing as completion suggestions
- range formatting adding random spaces in code
- html request forwarding failing for urls with encoded characters
- mixed html/php indentation.
- defined constants not indexed if define is fully qualified.
- dont grey out method body when identifying unused methods.
- infinite loop when searching for references.
- regression where property types were not inferred from constructor assignment.
- $this type hint being ignored when inferring types.
- fixed $this type resolution when type checking.
- get property of undefined error on closure array dereference call.
- fixed compilation routine skipping object creation arg list.
- js-beautifier 1.9
- various false diagnostics.
- obey tab format options.
- formatting breaks code when close bracket follows a comment.
- crash when attempting to save server state to disk.
- chained function call completion.
- dont store stub references.
- late static binding type inference.
- variable typings lost after assignment in conditional statements.
- intelephense command pallet commands should only be available when language is php.
- updated stub files
- various false diagnostics
- various set/read of undefined errors
- array dereferencing union type arrays.
- freeze/crash when inferring type of global vars
- global function/constant refs not found when not fully qualified in namespaced code
- maximum file size
- correct spaceship operator return type
- parse error when phpdoc immediately follows else
- empty type when iterating over object in foreach
- use cancellation tokens for long running async functions.
- various read/set property of undefined errors.
- various false diagnostics.
- infinite recursion on circular refs.
- parse bug with dollar curly open ${v}.
- completions with dollar curly open.
- parse error on use decl with backslash prefix causing incorrect symbol data to be sent.
- default exlude globs
- various read/set property of undefined errors
- fixed Index workspace cmd causing corrupted open document state
- fixed cancel indexing cmd causing crash
- reference transform recursion limit
- uri/path conversion failing on windows
- Undefined vars, unused symbols, type checking, arg count, duplicate definitions diagnostics.
- Go to, completion, highlight, hover, references inside doc blocks.
- HTML/js/CSS formatting in php template files via js-beautify.
- Detailed hover documentation.
- PHP 7.3 support.
- Trait alias and precedence support.
- Compile time constant values.
globaland@globalsupport.ArrayAccessandIteratorsupport.- Added associations and exclude files config.
- Added stub config.
- Added completion resolve provider
- Improved/refactored compilation and type inference.
- Improved/refactored highlight.
- Improved built-in symbol documentation.
- Improved/refactored caching of symbols and indexes.
- Improved/refactored response to file change events.
- Completions now use
TextEditinterface. - Document symbols now use
DocumentSymbolinterface. - Changed licence.
- Anon functions now have more concise name.
- Goto on object creation will send location of constructor and class.
- Format now preserves horizontal whitespace where PSR2 allows.
- Various format changes to match extended PSR2.
- Changed names of several config settings.
- Moved indexing to server.
- Nested signature help.
- Various parser fixes.
- Variable variables causing outline and symbol search to not work.
- Buggy completions when name starts with keyword.
__CLASS__getting lowercased on format.- Various PSR2 formatting fixes.
- Variable completion adding extra
$.
- Add use declaration command (can use tigger suggestions keybinding to auto add use decl).
- Clear cache and reload (cmd is now
Index workspace).
- Signature help showing ouside of ()
- Dynamic variable formatting
- Improvements to completion suggestions when typing FQNs
- Signature help not returning a result when in method
- Incorrect parse error with <?= expression lists
- Constructor completion
- Handle undefined range in TextDocumentContentChangeEvent
- lowercase true, false, null
- -> static methods
- Removed debug option in favour of trace
- !== format bug
- crash on merge conflict marker
- workspace activation event
- @method static support
- Dont use snippet or trigger param hints in completion if function/method/constructor has no params
- Use DocumentHighlightKind.read for highlights
- Make private members workspace searchable
- Allow utf8 names
- Backslash prefix default is now false
*.phpalways included when finding php files.
- Various PSR2 formatting fixes
- Various keyword completions in class header and body
- Completion item sortText
- Crash relating to anon functions used without assignment
- Import symbol edits existing use decl
- Completions for trait names in use trait clauses.
- Case where private and protected members not suggested inside last function in class
- Crash when no storagePath available
- References not found after first call to reference provider.
- Incorrect symbol kind for built in class constants causing completion crash.
- Fix member completions inside instanceof type guard.
- Improved error handling when reading and writing to cache
- use JSONStream for reading/writing large arrays
- completions for static members with static keyword.
- default public members
- global inbuilt variable completions
- crash when forwarding to html server
- Reference provider
- hover provider
- highlight provider
- Auto add use declarations on completion and associated config option
- Config to enable/disable formatting
- Config to enable/disable backslash prefix of global functions and constants
- Invoke param hints on method/function completion
- phpdoc inheritance
- multi root workspace support
- html request forwarding
- Up to 4 fold improvement in parsing speeds
- Return multiple locations for go to defintion when applicable
- Improved type resolution for phpdoc static and $this
- Caching moved from client to server
- Extra lines and spaces repeatedly added when formatting
- Various PSR2 format fixes
- Completions within closures
- Go to defintion for defines
- Intelephense 0.8.0
- Error on signature help for function with no params
- Format weirdness after comments
- Parse error on unset cast
- Workspace discover errors when textDocument is undefined.
- Intelephense 0.7.2
- Crash when reading anon. classes.
- Intelephense 0.7.0
- PSR2 compatible, lossless document and range formatting.
- Index cache.
- Add use declaration command.
- Indexing of constants declared with define().
- HTML language mode support allowing full HTML/Javascript/CSS/PHP dev experience.
- Improved completions when a use declaration is available.
- Conflicts with docBlocker extension
- Conflicts with local history extension
- Complex string parsing
- null coalesce expr type resolution
- Cleaned up built-in symbol definitions
- Intelephense 0.7.0
- Errors with variable completion inside anon.functions
- Use group declaration parse bug
- Heredoc parse bug
- Crash when encountering parse error on namespace use
- Traits mangling parse tree (php7parser)
- intelephense 0.6.8
- intelephense 0.6.7 (php7parser)
- Sorting of fuzzy symbol matches
- Diagnostics being reported on wrong file.
- Document becoming out of sync when applying multiple changes
- Variable types not resolving in various contexts.
- intelephense 0.6.6
- Shortened name completion item labels to name without namespace prefix.
- Shortened method override/implementation completion labels to just method name.
- Reduced completion spam for extends and implements contexts.
- Rolled back indexing on fqn parts.
- Use directives from other files showing as completion items
- intelephense 0.6.5
- Detail on variable and constructor completion items.
- Indexing on fqn parts.
- Variable types not resolving when on rhs of assignment
- Infinite recursion on cyclical inheritance
- Sort order of backslash prefixed completions
- intelephense 0.6.4
- Completion provider fixes and tweaks.
- Definition provider go to property fix.
- intelephense 0.6.2
- Document symbols provider
- Workspace symbols provider
- Type definition provider
- Signature help provider
- Diagnostics provider
- Completion provider