Suositut: Tiedot päivitetty 27. lokakuuta 2026

Kategoriat

Internet1 356
Viestintä321
Ääni ja video898
Grafiikka ja suunnittelu539
Toimisto ja tuottavuus1 124
Kehitystyökalut3 134
Tekoälytyökalut529
Tietoturva ja yksityisyys385
Järjestelmätyökalut3 114
Pelit523
Opiskelu ja tiede239
Verkko ja IT284

Mago: vanhemmat versiot ja versiohistoria

Mago is a toolchain for PHP that aims to provide a set of tools to help developers write better code.

Carthage Software Kehittäjän apuohjelmat #86 Kehittäjän apuohjelmat

Mago-ohjelmasta on luettelossa 18 versiota, ensimmäinen 6. toukokuuta 2026 ja uusin 1.59.0. Jokainen versio linkittää julkaisijan omiin asennustiedostoihin.

2026: 18 18 26
VersioPäivämääräKokoTiedostot
1.59.0Uusin 25. lokakuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.59.0 fixes analyzer narrowing across boolean guards, nullsafe checks, and `elseif` branches, improves generic and callable inference, and updates the analyzer extension protocol to MANA 2.2.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## 🐛 Bug Fixes

### Analyzer

• **Namespace constants**:preserves global constant fallback in namespaced declarations. (#2594, 0e6c1d8)
• **Method assertions**:keeps getter assertions from the right side of `||`. (#2600, #2609, 777429f)
• **CLI argument guards**:fixes `$argc` typing and negated `count()` bounds. (#2607, #2608, be88d13)
• **Template defaults**:applies declared defaults when constructing generic objects. (#2603, #2606, 2066b18)
• **Stored booleans**:keeps narrowing implied by boolean variables across `&&` and `||`. (#2601, 8d739b3)
• **Nullsafe membership**:narrows receivers after strict `in_array()` checks against non-null values. (#2599, 56e4b49)
• **Collection intersections**:honors narrower read types in intersected collection types. (#2612, 79c295f)
• **Callable signatures**:preserves parameter and return types through `Closure::fromCallable()`. (#2611, #2614, 3ea5963)
• **PHPDoc generics**:checks missing, excess, and out-of-bounds template arguments in docblocks. (#2616, 2ac5c5d)
• **Boolean branches**:preserves `true` and `false` types across short-circuit expressions. (#2593, 9890d23)
• **Dynamic instanceof**:keeps valid operand types when a dynamic class check fails. (#2592, #2595, 65530ba)
• **Strict equality**:narrows both union-typed operands to their shared types. (#2559, 923c061)
• **Elseif branches**:preserves all reachable types and branch facts after conditional chains. (#2619, 0a098f4)
• **Nullsafe comparisons**:avoids false impossible-null reports when assigning comparison results. (#2591, b7273f4)
• **URL components**:allows empty user, password, query, and fragment strings from `parse_url()`. (#2590, #2610, 16dd70b)

## 📖 Documentation

### Extensions

• **Protocol compatibility**:documents MANA 2.2 constant fallback and worker upgrade requirements. (#2594, 0e6c1d8)

## 🏗️ Internal

### CI

• **Pull request limit**:limits outside contributors to one open PR at a time, including drafts. (9b6979c)

### Tooling

• **Justfile cleanup**:removes an unused variable. (3f212f3)

## 🧩 Extension Protocol

### Analyzer

• **MANA 2.2**:adds namespace fallbacks to global constant references in the protocol and PHP SDK. (#2594, 0e6c1d8)

Update the PHP SDK to 1.59.0 when upgrading Mago. Custom analyzer workers must use MANA 2.2; MANA 2.1 workers are not compatible. The linter protocol is unchanged.

## 🙏 Thank You

### Contributors

Thank you to everyone who contributed to this release:

• @alfredbez:#2559
• @hbenabdallah:#2595
• @pujitha24:#2610
• @shuvroroy:#2606, #2608, #2609, #2614
• @serdarucel for investigating #2591 in #2598.

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @alfredbez:#2619
• @cweiske:#2611
• @douglasgreen:#2607
• @gsteel:#2593
• @MichaelOwenDyer:#2591, #2592, #2599, #2600, #2601
• @NoNoNo:#2594
• @norberttech:#2616
• @npo-mmenke:#2603, #2612
• @patka-123:#2590

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.58.2...1.59.0
1.58.2 19. lokakuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.58.2 fixes parser recovery for unfinished static accesses, keeping class names and call arguments in the syntax tree while you type.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## 🐛 Bug Fixes

### Parser

• **Incomplete static access**:keeps `Foo::` and `Foo::$` in the syntax tree during editor recovery. (#2589, 431e823)

## 🙏 Thank You

### Contributors

• @azjezz for the parser fix. (431e823)

### Issue Reporters

• @AJenbo for reporting #2589.

**Full Changelog**:[1.58.1...1.58.2](https://github.com/carthage-software/mago/compare/1.58.1...1.58.2)
1.57.0 14. lokakuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.57.0 adds opt-in BcMath/GMP arithmetic, applies PHPDoc flags from type patches, fixes analyzer and formatter bugs, and speeds up work across the toolchain.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## ✨ Features

### Analyzer

• **Number operators**:adds opt-in arithmetic for `BcMath\Number` and `GMP` via `allow-operator-overloading`. (#2486, #2487, 0fff359)

## 🐛 Bug Fixes

### Analyzer

• **Native type contracts**:keeps native types and nullability when PHPDoc conflicts. (#2494, 2dc705f)
• **Inline @var tags**:no longer treats unassigned local variables as defined. (#2496, 56f2ad9)
• **Malformed PHPDoc**:reports malformed types and unresolved variable links. (#2493, c1cdff1)
• **Conditional variables**:reports possibly undefined variables after switch and in finally. (#2497, e378e5d)
• **Iterator types**:keeps current() and key() types without explicit generics. (#2476, 467b29d)
• **Array unions**:preserves left-hand values and optional keys with array-key key types. (#2485, #2488, 782b0b5)
• **Empty checks**:handles unset variables and falsy values correctly. (#2484, 8dc47c5)
• **Dynamic properties**:honors AllowDynamicProperties on classes and their ancestors. (#2483, 6bccb58)
• **Deprecated members**:reports access to deprecated properties and class constants. (#2478, 90fa5e5)
• **Deprecated scopes**:skips deprecation warnings inside already deprecated code. (#2492, d412c32)
• **Boolean assignments**:avoids false narrowing when loops update boolean flags. (#2499, 64ad7d6)
• **Iterable assertions**:narrows traversables without false impossible-condition reports. (#2508, ac54e6c)

### Codex

• **Patch flags**:applies supported PHPDoc flags and their negations from type patches. (#2477, #2495, 29f3416)

### Formatter

• **Stable layouts**:keeps concatenations, arrow functions, and assignments stable across passes. (#2491, 9f4804d)
• **Parenthesized comparisons**:keeps comparison layouts stable when operands use parentheses. (#2480, f2fdf5f)

### Prelude

• **Base64 decoding**:returns string for non-strict decoding. (#2511, 4918783)

## 📖 Documentation

### Configuration

• **Operator settings**:documents opt-in number operators in English, French, and Chinese. (#2487, 0fff359)
• **Patch flags**:documents supported PHPDoc patch flags in English, French, and Chinese. (#2495, 29f3416)

## 🏗️ Internal

### Analyzer

• **Named arguments**:speeds up argument matching and default type inference. (#2498, 2f7475f)
• **Member checks**:cuts reference scans and allocations when checking unused members. (cc19617)
• **Default arguments**:skips needless type expansion for omitted non-generic defaults. (#2506, #2507, 6590a7b)

### Codex

• **Reference lookups**:speeds up reference queries and merges. (23ebbf2)

### Formatter

• **Formatting work**:cuts allocations and layout work. (a2e8ae5)

### Guard

• **Dependency scans**:skips unused dependency files and cuts allocations. (dae8785)

## 🧩 Extension Protocol

No protocol changes in this release.

## 🙏 Thank You

### Contributors

Thank you to everyone who contributed to this release:

• @alfredbez:#2476, #2492, #2493, #2494, #2496, #2497, #2511
• @AnnaDamm:#2495, #2507
• @matthewnessworthy:#2480
• @Mir-Zairan:#2487
• @ynaamane:#2488

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @amateescu:#2478, #2508
• @AnnaDamm:#2477, #2498, #2506
• @atournayre:#2491
• @jfilter:#2483, #2484, #2485
• @MichaelOwenDyer:#2499
• @Mir-Zairan:#2486

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.56.3...1.57.0
1.56.3 12. lokakuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.56.3 fixes formatter stability with preserved line breaks and keeps return types from valid method targets in unions.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## 🐛 Bug Fixes

### Analyzer

• **Union method calls**:keeps known return types when a union member lacks the method. (#2474, 001ff0f)

### Formatter

• **Preserved line breaks**:keeps conditions and member chains stable across formatting passes. (#2475, 6d73836)

## 🧩 Extension Protocol

No protocol changes in this release.

## 🙏 Thank You

### Contributors

Thank you to everyone who contributed to this release:

• @alfredbez:#2474

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @atournayre:#2475

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.56.2...1.56.3
1.54.0 8. lokakuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.54.0 continues the performance work across analysis, PHPDoc parsing, metadata, name handling, and project loading. It also adds configurable slow-file warnings and fixes integer-comparison narrowing.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## ✨ Features

### Analyzer

• **Slow-file warnings**:sets the warning threshold through config or CLI, keeping 5s as the default. (#2436, #2438, 3c38ca1)

## 🐛 Bug Fixes

### Analyzer

• **Integer comparisons**:narrows `null` and `false` correctly in integer comparisons. (#2434, #2437, a75379c)

## 🏗️ Internal

### Analyzer

• **Call analysis**:cuts allocations in expression, argument, and invocation analysis. (c553631, c33ecfb)
• **Condition checks**:skips needless paradox checks and assertion-map copies. (ae907c2, 14e2f65)
• **Visibility checks**:skips repeated public-method lookups. (9f42dfd)
• **Parameter checks**:skips unused-parameter work for functions with no parameters. (f00d6d7)

### Codex

• **Class metadata**:cuts copying and reuses lowercase lookups and prepared property types. (62aec23, d413832)
• **Type setup**:avoids needless type clones during population. (569e3c9)

### Pipeline

• **Project loading**:speeds up file reads, parsing, and compilation. (fa28802)

### Syntax

• **Namespace checks**:uses a focused walker to gather namespaces. (c085159)
• **Throw checks**:stops block scans once it finds a throw. (781c18c)

### PHPDoc

• **Docblock parsing**:skips trivia storage during analysis and metadata scans. (f30ced2)

### Names

• **Word interning**:reduces lock contention and grows per-thread caches. (05304cd)

## 🧩 Extension Protocol

No protocol changes in this release.

## 🙏 Thank You

### Contributors

Thank you to everyone who contributed to this release:

• @annadamm-check24:#2438
• @ynaamane:#2437

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @annadamm-check24:#2436
• @mytskine:#2434

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.53.0...1.54.0
1.50.0 21. syyskuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.50.0 adds `mago fix` to apply fixes across all four tools until no changes remain, alongside safer imports, better type analysis, and more flexible pragmas and guard patterns.

## ✨ Features

### CLI

• **`mago fix`**:runs guard, analyzer, linter, and formatter until fixes settle, with safety controls. (#2157, 7386092)

## 🐛 Bug Fixes

### Analyzer

• **Callable arrays**:preserves `is_callable()` narrowing for calls, closure conversion, offsets, and loops. (#2385, 18482c2)
• **Stringable names**:supports `Stringable` property names and variable-variable reads. (659446c)
• Shoutout to Ondřej Mirtes (@ondrejmirtes), PHPStan’s creator, for [sharing this in Roave’s Discord](https://discord.com/channels/1090672946370052166/1090672946856595500/1551529672234246154). I stole it for Mago! 😄

### Linter

• **Import conflicts**:avoids fixes that shadow class names and asks for a manual alias. (#2136, 5d4ceea)

### Guard

• **Brace patterns**:accepts brace alternatives in perimeter paths and symbol selectors. (#2372, #2373, e26e451)

### Collector

• **Pragma lists**:accepts whitespace and repeated category prefixes in comma-separated issue codes. (#2109, 05f6818)

### Prelude

• **`preg_replace`**:preserves array key types and marks the replacement count as non-negative. (#2384, d894be8)

### CLI

• **CST exit codes**:returns failure for parse errors while still printing the syntax tree. (116abff)

## 📖 Documentation

### Guides

• **Fixes and suppressions**:documents `mago fix` and pragma lists in English, French, and Chinese. (#2157, #2109, 7386092, 05f6818)

## 🏗️ Internal

### Maintenance

• **Nightly Clippy**:uses `mul_add` for Kan defect scores and handles watch-mode exit codes. (044b765, 116abff)

## 🧩 Extension Protocol

No protocol changes in this release.

## 🙏 Thank You

### Contributors

This release contains no merged external pull requests.

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @adam-ja:#2157
• @bendavies:#2385
• @HaiTo:#2372
• @gsteel:#2109
• @umulmrum:#2136
• @Double-Ramzi:#2384

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.49.0...1.50.0
1.47.2 19. elokuuta 2026 — 64-bittinen ZIP
Muutosloki
# Mago 1.47.2

Mago 1.47.2 prevents invalid UTF-8 reporting crashes, preserves formatter semantics, and fixes several analyzer false positives.

## 🐛 Bug Fixes

### Analyzer

**Static class-string calls**: preserves generics returned by `static` factories. (#2220, 0766957)
**Array assignments**: reports undefined target variables once. (#2219, 1705475)
**Promoted property hooks**: analyzes hook bodies and records method usage. (#2218, 0936c30)

### Formatter

**Invoked constructs**: preserves required parentheses around invoked `require` expressions. (#2221, 38f9e2a)

### Reporting

**Invalid UTF-8**: preserves source offsets and prevents rich-reporting panics. (#2222, e91cc71)

## 🏗️ Internal

### Maintenance

**Shared internals**: deduplicates closure typing, call analysis, and linter utilities. (1668678)
**Analyzer linting**: cleans up Clippy findings after the shared refactor. (782d2cc)

## 🙏 Thank You

### Contributors

No external pull requests were merged for this release.

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

@ddanielou: #2218
@SanderMuller: #2219
@BafS: #2220
@daliforenko: #2221
@MichaelOwenDyer: #2222

**Full Changelog**: https://github.com/carthage-software/mago/compare/1.47.1...1.47.2
1.46.0 5. elokuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.42.0
A small release adding a prefer-early-return linter rule, fixing Windows self-update, and clearing analyzer and PHPDoc false positives around is_a(), nullable destructuring, and @param on promoted properties.
✨ Features
Linter
• prefer-early-return:new rule suggesting early returns to reduce nesting in functions. (#2031, e523ab1)
🐛 Bug Fixes
Analyzer
• is_a() with allow_string:a string subject no longer triggers a false impossible-type-comparison. (db64917)
• Nullable destructuring:destructuring T|null keeps element types (plus null) instead of widening to mixed. (643a037)
PHPDoc Syntax
• @param on promoted properties:@param T with no variable is allowed and types the property like @var. (8b9af32)
CLI
• Windows self-update:extracts the .exe-suffixed binary from the archive, fixing "file not found". (805a1c3)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
• @Bleksak:#2031
Full Changelog:1.41.0...1.42.0
1.42.0 27. kesäkuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.42.0
A small release adding a prefer-early-return linter rule, fixing Windows self-update, and clearing analyzer and PHPDoc false positives around is_a(), nullable destructuring, and @param on promoted properties.
✨ Features
Linter
- prefer-early-return: new rule suggesting early returns to reduce nesting in functions. (#2031, e523ab1)
🐛 Bug Fixes
Analyzer
- is_a() with allow_string: a string subject no longer triggers a false impossible-type-comparison. (db64917)
- Nullable destructuring: destructuring T|null keeps element types (plus null) instead of widening to mixed. (643a037)
PHPDoc Syntax
- @param on promoted properties: @param T with no variable is allowed and types the property like @var. (8b9af32)
CLI
- Windows self-update: extracts the .exe-suffixed binary from the archive, fixing "file not found". (805a1c3)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @Bleksak: #2031
Full Changelog: 1.41.0...1.42.0
1.40.2 25. kesäkuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.40.2
A patch release fixing analyzer false positives around property narrowing across calls and match subjects, two PHPDoc inline-code and conditional-type parsing fixes, plus new diagnostics for unsetting readonly/hooked properties and invalid trait as modifiers.
✨ Features
Analyzer
- Invalid unset: unsetting a readonly or hooked property is now reported. (#2018, a24eb10)
Semantics
- Trait as modifiers: a non-visibility modifier in a trait as adaptation (e.g. as final) is now rejected. (e3d9437)
🐛 Bug Fixes
Analyzer
- match after impure call: a property used as a match subject no longer widens to mixed. (#2014, c9e5cc9)
- Narrowing across calls: passing $obj->prop no longer drops narrowings on sibling properties. (#2015, 2e9a529)
- Readonly writes: outside writes to a readonly property report a readonly violation, not a visibility one. (5eb7068)
PHPDoc Syntax
- Inline code spans: // and quotes inside backticks are literal, not an "unclosed code" error. (95b393d)
- Parenthesized conditionals: ($x is Y ? A : B) return types parse correctly again. (3a8d627)
🙏 Thank You
Issue Reporters
Thank you to everyone who reported issues that shaped this release:
- @Lukkie: #2014
- @BafS: #2015
- @edsrzf: #2018
Full Changelog: 1.40.1...1.40.2
1.40.1 24. kesäkuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.40.1
A small patch release fixing array_key_exists() narrowing under strict-array-index-existence and a PHPDoc parsing regression where a @return description beginning with is was mistaken for a conditional type.
🐛 Bug Fixes
Analyzer
- array_key_exists(): narrows a non-literal key like isset() under strict-array-index-existence. (#2012, 246b1eb)
PHPDoc Syntax
- Conditional types: is only starts a conditional type when a target ? follows, so prose like @return bool is true when … stays a description. (8d615a8)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @Soean: #2012
Issue Reporters
Thank you to everyone who reported issues that shaped this release:
- @ddanielou: #2008
Full Changelog: 1.40.0...1.40.1
1.40.0 24. kesäkuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.40.0
A big release driven by community reports: three new formatter settings, a new suspicious-explode-arguments linter rule and a final-controller auto-fix, an inspect-baseline CLI command, a Composer-shipped editor schema, and a long list of analyzer, codex, prelude, and PHP-parity syntax fixes. Under the hood, the 2.0 groundwork landed on main: a new high-level IR, a unified mago-phpdoc-syntax, and new mago-allocator/mago-flags crates.
✨ Features
Analyzer
- array_filter truthiness: a callback-less array_filter() narrows values to their truthy form. (#1990, bc9bede)
Formatter
- Breaking binary expressions: preserve_breaking_binary_expression keeps author line breaks in such chains. (#1853, 5aacc7d)
- Sort uses by length: optional sorting of use statements by length. (#1942, 0688859)
- Tag + declare: optionally combine the opening tag and declare(strict_types=1) onto one line. (#1959, 2ff4cf5)
Linter
- suspicious-explode-arguments: warns when explode's short literal looks swapped into the string position. (#1998, 577d40a)
- final-controller fix: offers an auto-fix that inserts final before any modifier. (#2006, 82017a0)
- sensitive-parameter: skips boolean-like parameters. (#1949, 2333626)
Type System
- empty types: empty and empty-scalar are supported in type-syntax and codex. (#1968, e94cfdd)
CLI
- inspect-baseline: new command to visualise the distribution of baselined issues. (#1900, efd07bd)
Composer
- Editor schema: ships a version-matched schema.json under vendor/carthage-software/mago/. (#1899, 38b78d0)
Nix
- Default package: packages.<system>.default now provides bin/mago. (#1970, 13d7071)
🐛 Bug Fixes
Analyzer
- Named args + optional params: too-few-arguments fires when a named arg fills only an optional param. (#2004, c5ec4ef)
- Conditional array shapes: double-quoted array-access keys reconcile like single-quoted ones. (#2005, 095badf)
- Shadowed overrides: no false incompatible-return-type against an ancestor hidden by an intermediate override. (#1996, 431ff97)
- $this calls: a property keeps its declared type instead of widening to mixed. (#1994, 5eef024)
- Readonly narrowing: readonly property narrowings survive a call passing an object argument. (#1993, 5cbbe91)
- foreach over unions: corrected always-entered inference, fixing a false impossible-condition. (#1986, 22951bd)
- Compound conditions: avoid duplicate diagnostics in compound conditions. (#1961, 1ea5ba2)
- @property traits: trait property conflicts are no longer reported against @property tags. (#1964, a5f3823)
Codex
- Self-cased display: self/static/parent resolve to the original-cased class name in diagnostics. (#1995, b544222)
- Closure instanceof: closures are treated as instances of Closure. (#1956, 6fe1bbd)
- Callable variance: null is no longer ignored in contravariant callable parameter checks. (#1966, 3f94734)
Linter
- String-concat chains: a whole chain collapses into one no-redundant-string-concat issue and fix. (#2003, f8a31f8)
- no-dead-store: flags stores overwritten across a conditional branch. (#1999, a315465)
- no-boolean-flag: only flags boolean parameters actually used as flags. (#1988, 50cdd11)
- prefer-early-continue: the auto-fix preserves comments and indentation. (#1946, 495f639)
Syntax
- Operator precedence: corrected clone/cast/unary precedence and bound print/yield above and/xor/or. (1ac37b0, 4d01d2d)
- String interpolation: distinguishes ${label}/${ expr } and $a[offset] forms in the lexer. (b56a704, f3198c8)
- Reference operands: relational stays above equality when a reference assignment is an operand. (ea6cbce)
- Unicode escapes: \u{...} decodes to UTF-8 bytes to match Zend. (b19386c)
HIR
- Integer literals: lowered with PHP long semantics, overflowing to float. (9014c33, 79a7600)
- Anonymous classes: anonymous-class modifiers are now lowered. (797358f)
Docblock
- static return: parses a static return type after the static method modifier. (#1963, d5fb015)
Prelude
- phpversion(): $extension is optional. (#1950, 5a
1.30.0 4. kesäkuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.30.0
A release focused on generics and robustness: intersection types of generic parameters are now computed, generic reflection (ReflectionClass<T>) threads T into method-return inference, and a new fuzzing + Miri CI hardened the lexer and parsers against crashes, leaks, and quadratic blowups on malformed input. Also: vendor type patches, an object&callable type, and the usual analyzer, codex, formatter, linter, and CLI fixes.
✨ Features
Analyzer
- Generic reflection: ReflectionClass<T>/ReflectionMethod<T> thread T into getName()/invoke() return types. (c44dc8f)
- object&callable type: invokable classes are accepted via has-method<__invoke>. (#1902, 7efac3c)
Codex
- Vendor type patches: a patches source overrides third-party types without editing vendor code. (#1873, dcfd38b)
Database
- Explicit extensionless files: files named without an extension are loaded when listed explicitly. (#1916, 639f481)
🐛 Bug Fixes
Analyzer
- Generic intersections: A&B of unions/iterables computed, e.g. (int|bool)&(int|float) → int. (#1945, 353ed77, 7dd3d61)
- do/while null-narrowing: the loop condition now narrows the body on re-entry. (#1947, db10237)
- Undocumented __call return: inferred from __call's declared return instead of mixed. (131537a)
Codex
- public-properties-of: resolves inherited props, @type aliases, and generic-parameter selectors. (#1928, #1929, ce5eea6)
- Transitive @mixin: methods resolve across mixin chains. (#1915, e6d9304)
- Nested templates: params inside class-string and $this in @extends/@implements now resolve. (#1924, f2fff71, 5eda2e0)
- Patched method signatures: abstract/concrete mismatches in method patches no longer flagged. (#1940, c370be3)
Formatter
- null last in unions: ordered last by default per PER CS 3. (#1835, 3e5d38c)
- Comment before method chain: kept on its own line. (#1854, 1db1fa5)
- Property-receiver chains: first method stays on the same line under same-line chain style. (#1193, 5ff2133)
Linter
- FQ refs in namespace-less files: fully-qualified global class/function/constant references are flagged. (#1846, 53626d0)
- global/static rebinds: no false no-parameter-shadowing/no-dead-store. (#1910, #1911, 4ccc4f5)
Syntax
- Class-name keyword casing: resource/integer no longer collide with type keywords. (#1898, 899cbf3)
- Identifier::last_segment: returns the last segment, not the first. (#1919, cadea52)
- Interpolation perf & leaks: brace-interpolation scan is linear and string-aware; token-kind leak fixed. (#1914, 478aa81, a80e557)
Type Syntax
- Malformed-input hardening: type parser is depth-guarded; invalid float tokens like .1E are no longer emitted. (5179f3f, 6baf0b1)
Twig Syntax
- Malformed-input hardening: expression/statement parsing is depth-guarded and an arena leak is fixed. (f338622, 3972674)
CLI
- Versioned docs URL: the generated mago.toml links to a versioned, non-404 docs page. (#1939, b120e6b)
- Baseline on scoped runs: no false out-of-sync warning on filtered runs. (#1904, fdffae9)
Prelude
- DateTime types: precise constant types and format() return type. (#1917, 70e6094)
Database
- Vendor watcher: stops adding vendor-path files as host files. (#1912, f1eaf73)
🏗️ Internal
Language Server
- Experimental language server removed from the distribution, it is now available on the feat/language-server branch. (131b34c)
CI / Tooling
- Fuzzing & Miri: scheduled fuzz action and Miri job; fuzzers built for the gnu target so ASan links. (48a3cf1, b0dbd5f, 3b7f34b)
- Stacked Borrows UB: word interner reads interned bytes via the raw entry pointer. (e9bd270)
- Toolchain: workspace builds on Rust 1.96.0; routine nightly pins. (35e53c2, #1925)
- MAGO_THREADS tests: no longer fail when the env var is set. (#1895, e2a9d31)
- Dependencies: bump tar to 0.4.46. (#1920, b220deb)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @dotdash: #1873, #1916, #1912, #1940, #1895
- @gsteel: #1917
Issue Reporters
Thank you to everyone who reported issues that 
1.29.0 23. toukokuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.29.0
A maintenance release with two themes: tightening generic template inference (the #1859 false-positive cluster) and giving closures + anonymous classes stable, human-readable names. New: three WordPress security rules, regex-based ignore patterns, symlinked-vendor support, and a no-fully-qualified-global-function follow-up that migrates use function imports in one pass. Plus the usual analyzer, formatter, and language-server fixes.
✨ Features
Codex
- Readable closure & anon-class names: {closure:src/foo.php:12:5} replaces opaque hash identifiers in messages and baselines. (#1872, 8c7751d)
Reporting
- Regex-pattern ignores: [analyzer] ignore entries accept pattern = "..." matched against issue text. (#1866, d769368)
Linter
- WordPress security rules: nonce-verification, prepared-sql, validated-sanitized-input under the wordpress integration. (#1572, 64ec53e)
- use function migration: under namespaced = true, bare imported calls rewrite to namespace-prefixed form and the orphan import is dropped. (#1843, e23fdfc)
Docs
- Copy linter rule names without expanding details: rule heading anchors are click-to-copy. (#1890, 720f3c7)
🐛 Bug Fixes
Analyzer
- Top-level template pinning: Column<T> matched against IntColumn pins T; nested-container literals still union freely. (#1859, 491374f)
- redundant-logical-operation on &&-assign: silent on short-circuit assignment idioms like $x === 't' && $y = 1. (#1869, 6f957d6)
- String-casing preserved in assertion intersection: lowercase-string etc. keep their narrowing. (#1879, 61764f1)
Codex
- Property docblock inheritance: typed properties pick up @var from parent class declarations. (#1885, 1e36833)
Formatter
- Promoted-property docblocks stay on their own line: when the parameter list breaks. (#1874, 04a0c37)
- Constructor parens on chained new: preserved for (new Foo())->bar() shapes. (#1875, 4e86fc2)
Semantics
- Invalid bare-class new member access: new Foo->bar() etc. surface a proper diagnostic. (#1875, 4e86fc2)
Linter
- $this pre-declared in variable-usage analysis: stops no-redundant-variable flagging $this reassignment. (#1868, 191902b)
- prefer-fake-helper inside interpolated strings: report-only, no auto-fix that would produce invalid syntax. (#1870, ce50ef1)
Docblock
- Non-ASCII bytes in @var names: accepted in identifier positions. (#1888, fafff67)
Database
- Follow symlinks under paths/includes: composer path-type packages and other symlinked sources are scanned. (#1861, 9d65ff3)
Language Server - Experimental
- Bootstrap events no longer lost: fixes the race during the initial workspace scan. (#1891, 370c724)
- Analyzer issues filtered by config: LSP diagnostics now respect [analyzer].ignore. (#1877, b26ef25)
Config
- mago.dist discovery restored: distributed config file is picked up again. (#1889, 7b8e8fe)
🏗️ Internal
CI / Tooling
- Clippy fixes: applies the latest Clippy lint cleanups across the workspace. (e578c1d)
- Nightly toolchain pins: routine bumps to nightly-2026-05-19 / 2026-05-22. (#1867, #1876, cbc2f68, 3b43f33)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @dotdash: #1891, #1877
- @rlorenzo: #1572
- @mvanhorn: #1890
- @HenkPoley: #1889
Issue Reporters
Thank you to everyone who reported issues that shaped this release:
- @kitrio: #1859
- @eran-digipharma: #1866
- @bendavies: #1843
- @mathroc: #1872
- @Tastaturberuf: #1861
- @galiazzi: #1869
- @adam-ja: #1885
- @norberttech: #1868
- @BafS: #1879
- @LocalHeroPro: #1875, #1870
- @oruborus: #1888
- @edsrzf: #1874
Full Changelog: 1.28.0...1.29.0
1.28.0 19. toukokuuta 2026 — 64-bittinen ZIP
Muutosloki
Mago 1.28.0
A feature release led by sound generic type-checking in the analyzer: diamond merges, variance, bounds, Liskov substitution, and constructor arity are now all enforced. The linter gains five Laravel-focused rules, and the CLI picks up a version subcommand, a configurable version-drift-fail-level, and --remove-outdated-baseline-entries for pruning stale baseline entries. Internally, PHP source handling moves to a byte-native representation, retiring mago-atom in favour of mago-word and mago-bytes. The rest is a batch of analyzer and formatter fixes.
✨ Features
Analyzer
- Sound generic type-checking: enforces diamond merges, variance, bounds, Liskov substitution, and constructor arity. (5af93b3)
Linter
- Laravel rules: five rules for test assertions, queries, fake(), casts, and validation. (#1838, #1837, #1836, #1834, #1833, 6156709)
CLI
- version subcommand: prints the version, mirroring the --version flag. (#1840, d93d75a)
- version-drift-fail-level: fail the run on minor or patch version drift, not just major. (#1864, 980dbfa)
- --remove-outdated-baseline-entries: prunes baseline entries that no longer match any issue. (#1865, d35e9d3)
🐛 Bug Fixes
Analyzer
- redundant-type-comparison false positives: impossible negated assertions are no longer flagged. (#1842, c52b5bd)
- Template defaults at call sites: a template's declared default type is now applied at the call site. (#1856, e8d5a84)
Formatter
- Mid-line echo tags: indent alignment restored for echo tags that don't begin a line. (#1857, bae65db)
📖 Documentation
- WinGet: installation guide now mentions the WinGet package. (#1844, f9c6cc6)
🏗️ Internal
Refactor
- Byte-native source handling: PHP source moves to bytes; mago-atom replaced by mago-word and mago-bytes. (#1862, 2a1b5a9)
CI / Tooling
- Clippy fixes: applies the latest Clippy lint cleanups across the workspace. (ab624ca)
- Nightly toolchain pins: routine bumps, now on nightly-2026-05-18. (#1845, #1855, #1858, #1860, #1863, 489e310)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @dotdash: #1856, #1857
- @rafaucau: #1844
Issue Reporters
Thank you to everyone who reported issues that shaped this release:
- @LocalHeroPro: #1838, #1837, #1836, #1834, #1833
- @Zuruuh: #1864, #1865
- @maximal: #1840
- @bendavies: #1842
Full Changelog: 1.27.1...1.28.0
1.27.1 13. toukokuuta 2026 — 64-bittinen ZIP
1.27.0 13. toukokuuta 2026 — 64-bittinen ZIP
1.26.0 6. toukokuuta 2026 — 64-bittinen ZIP

Suosituin kategoriassa Kehittäjän apuohjelmat

Näytä kaikki
  1. WinMergeKehittäjän apuohjelmat · Thingamahoochie Software
  2. jqKehittäjän apuohjelmat · jqlang
  3. x64dbgKehittäjän apuohjelmat · x64dbg
  4. BiomeKehittäjän apuohjelmat · BiomeJS
  5. deltaKehittäjän apuohjelmat · Dan Davison
  6. ValeKehittäjän apuohjelmat · errata.ai
  7. jadxKehittäjän apuohjelmat · Skylot
  8. dnSpyKehittäjän apuohjelmat · dnSpyEx
  9. Detect It EasyKehittäjän apuohjelmat · horsicq
  10. DifftasticKehittäjän apuohjelmat · Wilfred Hughes

Tunnisteet

Jaa