Open
Conversation
Contributor
Author
|
automergeComment |
c4883b8 to
702f079
Compare
07dc643 to
19adc6e
Compare
f0930dd to
79cda5a
Compare
5fce0b8 to
4ebd3bd
Compare
4ebd3bd to
2c4252f
Compare
69d26c7 to
1e4f1a6
Compare
| datasource | package | from | to | | ---------- | --------------------------------- | ------- | ------- | | packagist | carthage-software/mago | 1.4.1 | 1.8.0 | | packagist | ergebnis/composer-normalize | 2.49.0 | 2.50.0 | | packagist | phpstan/phpstan | 2.1.38 | 2.1.39 | | packagist | phpstan/phpstan-deprecation-rules | 2.0.3 | 2.0.4 | | packagist | phpstan/phpstan-phpunit | 2.0.12 | 2.0.16 | | packagist | phpstan/phpstan-strict-rules | 2.0.8 | 2.0.10 | | packagist | phpstan/phpstan-symfony | 2.0.12 | 2.0.14 | | packagist | phpunit/phpunit | 11.5.50 | 11.5.53 |
1e4f1a6 to
0d1f9b5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^1.4.1→^1.8.0^2.49.0→^2.50.0^2.1.38→^2.1.39^2.0.3→^2.0.4^2.0.12→^2.0.16^2.0.8→^2.0.10^2.0.12→^2.0.14^11.5.50→^11.5.53Release Notes
carthage-software/mago (carthage-software/mago)
v1.8.0: Mago 1.8.0Compare Source
Mago 1.8.0
This release delivers major improvements to the incremental analysis engine for watch mode, new type narrowing capabilities, return type providers for
filter_var()/filter_input(), and a large number of bug fixes across the analyzer, linter, formatter, and type system.✨ Features
Analyzer
is_a()andis_subclass_of()type narrowing: The analyzer now narrows types after calls tois_a()andis_subclass_of(), including support forclass-stringparameters (#1102)filter_var()andfilter_input(): These functions now return precise types based on the filter and flags arguments (e.g.,FILTER_VALIDATE_INTreturnsint|false,FILTER_VALIDATE_EMAILwithFILTER_NULL_ON_FAILUREreturnsstring|null) (#1117)array{valid: true, result: string}|array{valid: false, errorCode: string}), the analyzer now correctly filters out incompatible variants based on the narrowed key type, instead of blindly overwriting all variants. This also works for object property narrowing on union types (#1093)Linter
no-issetarray access ignore option: Theno-issetrule now supports anallow-array-accessoption, allowing you to flagisset($var)while still permittingisset($array['key'])for array offset checks (#1097, #1120) by @dotdashSemantics
function() { ... }()as error, requiring parentheses around the closure for immediate invocation (#1118)⚡ Performance
Incremental Analysis Engine
The watch mode (
mago analyze --watch) received a complete overhaul of its incremental analysis pipeline:extend_refandremove_entriesoperations allow fine-grained metadata updates without rebuilding the entire codebasenon-existent-class-likeerrors in watch mode🐛 Bug Fixes
Analyzer
require-extends/require-implementsresolution: Members from@require-extendsand@require-implementstypes are now correctly resolved (#1064, #1070)\true,\false, and\nullare now correctly recognized (#1099, #1100) by @kzmshxget_substituted_methodfunction is now correctly applied to the child method when checking method signature compatibility, fixing false positives with generic abstract method inheritanceIteratorIterator) are now preserved during method resolution, fixing incorrect return types (#1106)for ($i = 0; $i < 10; $i++)) are now properly extracted from the AST for type narrowing (#1089)redundant-type-comparisonwhen using count checks or string narrowing in||conditions (#1112)HasAtLeastCountassertions no longer incorrectly set an exactknown_counton lists with unknown count, preventing falseunreachable-codereports (#1104)@vardocblock type: The analyzer now prefers@vardocblock types over inferred types for class constants, fixing cases where properly typed array values stayed asmixed(#1090, #1094)Codex (Type System)
neveras bottom type:neveris now correctly treated as a subtype of all types inextends_or_implementschecks (#1107, #1109) by @kzmshx@psalm-type/@phpstan-typealias names are now pre-registered before parsing, so aliases can reference each other regardless of declaration order (#1116)impossible-conditionfalse positives when comparingstrtolower()/strtoupper()results with literals containing non-alphabetic characters (spaces, digits, etc.) (#1086)Linter
no-redundant-usewhole-word matching: Docblock reference checking now uses whole-word matching instead of substring matching, souse Config;is correctly flagged as unused even whenConfigUsageappears in a docblock (#1078)inline-variable-returnwith by-reference assignment: The fixer no longer inlines assignments of by-reference expressions, which would produce invalid PHP (#1114)prefer-early-continuewith non-block body: Fixed the fixer for cases where the loop body is a single statement without braces (#1085) by @chrisopperwall-qzFormatter
$foo(...)) are no longer incorrectly treated as breaking expressions, fixing misformatted output (#1091)Prelude (Type Stubs)
explode()return type: Corrected to properly returnlist<string>instead ofnon-empty-list<string>when the separator could be empty (#1095)array_slice()return type: Now correctly preserves string keys in the return type (#1096)ldap_sasl_bind()stubs: Updated all arguments except the first to be nullable (#1098)bin2hex()stubs: Improved type definition (#1101) by @veewee🏗️ Internal
IncrementalAnalysisServiceencapsulating the full incremental analysis pipeline for watch mode and LSPCodebaseDiff::between()for metadata comparison andmark_safe_symbols()for incremental analysis🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
Issue Reporters
Thank you to everyone who reported issues and requested features that shaped this release:
Full Changelog: carthage-software/mago@1.7.0...1.8.0
v1.7.0: Mago 1.7.0Compare Source
Mago 1.7.0
This release introduces new type system features, improved type inference for built-in functions, a new linter rule, and numerous bug fixes for the analyzer, formatter, and type system. A significant internal effort also went into reducing dependencies and binary size.
✨ Features
Type System
uppercase-stringandnon-empty-uppercase-stringtypes: Full support for these PHPDoc types in type syntax, codex, and analyzer. This resolves cascading errors when these types were previously unrecognized (#1057)Analyzer
Return type providers for
min()andmax(): These functions now return precise types based on their arguments (#1074)array_filter()callback parameter type inference: The analyzer now respects themodeargument (ARRAY_FILTER_USE_KEY,ARRAY_FILTER_USE_BOTH) when inferring closure parameter types, fixing incorrectmixedinference for callback parameters (#1031)Switch statement fallthrough analysis: The analyzer now correctly recognizes that non-terminating code paths in a
caseblock fall through to the next case. Acasewith a conditionalreturnfollowed by a case that always returns is no longer flagged asmissing-return-statement(#1081)Linter
no-redundant-issetrule: New rule that detects redundant arguments inisset()calls. For example, inisset($a, $a['key'], $a['key']['nested']), the first two checks are redundant becauseisseton a nested access implicitly checks all parent accesses (#769)CLI
--ignore-baselineflag: New flag forlintandanalyzecommands that temporarily ignores the baseline file, useful for reviewing and fixing baselined issues (#1076)⚡ Performance
reqwest,openssl,num_cpus,strum_macros,derivative,strsim,bitflags,async-walkdir), replacing them with standard library equivalents or manual implementations.reqwest/opensslwere replaced withureq/rustlsfor a significantly smaller and faster-compiling binary🐛 Bug Fixes
Analyzer
[$this, 'method']) and string callbacks ('ClassName::method') are now correctly tracked as used (#1069, #1044)Codex
@psalm-require-extendssupport in traits: Methods, properties, and class constants inherited from required parent classes via@psalm-require-extendsor@phpstan-require-extendsare now properly resolved in traits, eliminating falsenon-existent-property,non-existent-class-constant, andunknown-referrors (#1064, #1068, #1070)invalid-return-typeerrors (#1061)PHP_INT_SIZE,PHP_INT_MAX, andPHP_FLOAT_DIGnow use platform-aware range/union types instead of host-specific literal values.PHP_INT_SIZE > 4is no longer flagged as a redundant comparison (#1084)Formatter
align-assignment-likeis enabled, the alignment context from consecutive variable assignments no longer leaks into nested array key-value pairs (#1082)Linter
prefer-first-class-callablewith reference captures: Skip suggesting first-class callable syntax when the callee variable is captured by reference in a closure'suseclause, as the two forms have different semantics (#1067, #1063) by @kzmshxPrelude (Type Stubs)
array_walkgenerics: Fixed generic templates forarray_walkto properly infer callback parameter types (#1066, #1045) by @ddanielouarray_splicetype precision: Improved type definitions forarray_spliceto preservelist<T>types and correctly handle non-array replacement arguments (#1072, #1080)usort,uasort,uksort, etc.) to preserve non-empty array types (#1083)🏗️ Internal
reqwest+opensslwithureq+rustlsin self-update modulenum_cpuswithstd::thread::available_parallelism()bitflagswith manual bit flag implementationsderivative,strum_macros,strsim, andasync-walkdirdependencies🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
Issue Reporters
Thank you to everyone who reported issues and requested features that shaped this release:
Full Changelog: carthage-software/mago@1.6.0...1.7.0
v1.6.0: Mago 1.6.0Compare Source
Mago 1.6.0
This release brings new analyzer checks for class design enforcement, new linter rules for file organization, path-scoped ignore/exclusion support, formatter fixes, and numerous bug fixes across the board.
✨ Features
Analyzer
class-must-be-finalcheck: New opt-inenforce-class-finalitysetting that reports classes not declaredfinal,abstract, or annotated with@api/@psalm-apiwhen they have no children (#1054)missing-api-or-internalcheck: New opt-inrequire-api-or-internalsetting that requires abstract classes, interfaces, and traits to have@apior@internalannotations, forcing projects to declare extensibility intent (#1055)Path-scoped ignore entries: The
ignoreoption now supports scoping ignored codes to specific paths (#1037, #1043)Literal types for enum properties: Enum
nameandvalueproperties now return literal types instead of genericstring/int, enabling more precise type inference (#1035, #952) by @veeweeSeverity level in code-count format: The
code-countreporting format now includes the severity level for each issue code (#987)Linter
file-namerule: New rule that enforces file names match the class/interface/enum/trait they contain (#1049)single-class-per-filerule: New rule that enforces each file contains at most one class-like declarationPer-rule path exclusions: Linter rules now support path-based exclusions, allowing you to disable specific rules for specific directories (#1037)
no-issetandreadable-literalenabled by default: These rules are now enabled out of the boxRemoved deprecated rules: The deprecated
constant-type,no-boolean-literal-comparison,parameter-type,property-type, andreturn-typelinter rules have been removed — their functionality has been moved to the analyzerFormatter
inline-empty-function-bracesandinline-empty-method-bracesnow default totrue, matching the PER Coding Style specification (#1053)CLI
--onlyrules: The--onlyflag now accepts multiple comma-separated rules (#1046)⚡ Performance
foldhashreplacesahash: Switched tofoldhashfor faster hashing across the codebaseArc<T>replacesBox<T>in codex: Improves cloning performance for shared metadata🐛 Bug Fixes
Analyzer
switchstatements no longer incorrectly narrow variable types, preventing false redundant null-check warnings (#1038)@vardocblocks: Imported type aliases are now correctly expanded in@vardocblock annotations (#1029, #1030)extends/implements(#1040)FORCE_COLORsupport: TheFORCE_COLORenvironment variable is now respected in reporting output (#1042)Linter
readable-literalfalse positive on floats: Fixed the rule triggering on float literals like123.45where neither side of the decimal benefits from separators, producing a no-op suggestionFormatter
Prelude (Type Stubs)
array_walkgenerics: Added generic templates toarray_walkfor proper type inference (#1045)curl_multi_execsignature: Corrected the signature ofcurl_multi_exec(#1033)setcookieduplicate: Removed duplicate definition forsetcookiethat only accepted the old syntax (#1032)Documentation
🔒 Security & CI
attydependency🏗️ Internal
timefrom 0.3.46 to 0.3.47 (#1039) by @dependabot🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
Issue Reporters
Thank you to everyone who reported issues and requested features that shaped this release:
Full Changelog: carthage-software/mago@1.5.0...1.6.0
v1.5.0: Mago 1.5.0Compare Source
Mago 1.5.0
This release brings PSR-11 container support, custom help text for disallowed functions, and several important bug fixes for type narrowing and linter false positives.
✨ Features
Analyzer
PSR-11 container support: New
psr-containerplugin that infers types fromclass-stringarguments when callingContainerInterface::get(). This eliminatesmixed-method-accessandmixed-argumenterrors when using PSR-11 service containers (#1015) by @NoojunoLinter
Custom help text for disallowed functions: The
disallowed-functionsrule now supports custom help messages per function or extension. Entries can be simple strings or objects withnameand optionalhelpfields (#1024)🐛 Bug Fixes
Analyzer
Nullsafe operator type narrowing: Fixed incorrect type narrowing in the false branch of if statements using nullsafe operators (
?->). Previously, the variable was incorrectly narrowed tonullin the else branch. Nowif ($user?->isAuthorized())correctly preserves the original type in the else branch, matching the semantics of$user !== null && $user->isAuthorized()(#1025)Redundant instanceof detection: Fixed false positive for undefined variables when a variable is assigned in exhaustive if/elseif branches over a union type. The analyzer now correctly detects redundant
instanceofchecks and tracks variable assignments across all branches (#1026)Linter
prefer-first-class-callable: Skip suggesting first-class callable syntax for runtime-dependent call targets where conversion would change evaluation semantics. This includes method chains (adminUrlGenerator()->generateUrl()), nullsafe calls ($obj?->method()), and dynamic method names ($obj->$method()) (#1027, #1020) by @kzmshx🏗️ Internal
bytesfrom 1.11.0 to 1.11.1 (#1023) by @dependabot🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
Issue Reporters
Thank you to everyone who reported issues that were fixed in this release:
Full Changelog: carthage-software/mago@1.4.1...1.5.0
ergebnis/composer-normalize (ergebnis/composer-normalize)
v2.50.0Compare Source
For a full diff see [
2.49.0...2.50.0][2.49.0...2.50.0].Changed
schema.json([#1563]), by [@ergebnis-bot]phpstan/phpstan-phar-composer-source (phpstan/phpstan)
v2.1.39Compare Source
phpstan/phpstan-deprecation-rules (phpstan/phpstan-deprecation-rules)
v2.0.4Compare Source
phpstan/phpstan-phpunit (phpstan/phpstan-phpunit)
v2.0.16Compare Source
v2.0.15Compare Source
v2.0.14Compare Source
v2.0.13Compare Source
phpstan/phpstan-strict-rules (phpstan/phpstan-strict-rules)
v2.0.10Compare Source
reportNonIntStringArrayKeyto truev2.0.9Compare Source
phpstan/phpstan-symfony (phpstan/phpstan-symfony)
v2.0.14Compare Source
v2.0.13Compare Source
sebastianbergmann/phpunit (phpunit/phpunit)
v11.5.53: PHPUnit 11.5.53Compare Source
Fixed
SourceMappermay be deleted prematurely when multiple PHPUnit processes run in parallelLearn how to install or update PHPUnit 11.5 in the documentation.
Keep up to date with PHPUnit:
v11.5.52: PHPUnit 11.5.52Compare Source
Fixed
Learn how to install or update PHPUnit 11.5 in the documentation.
Keep up to date with PHPUnit:
v11.5.51: PHPUnit 11.5.51Compare Source
Added
Fixed
Learn how to install or update PHPUnit 11.5 in the documentation.
Keep up to date with PHPUnit:
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
Renovate Bot