laravel-ide-helper icon indicating copy to clipboard operation
laravel-ide-helper copied to clipboard

Model's --write duplicates array properties that have summary and array key-value types added

Open olexoliinyk0 opened this issue 6 months ago • 3 comments

Versions:

  • ide-helper Version: dev-master 6336db0
  • Laravel Version: 10.22.0
  • PHP Version: 8.2.4

Description:

After specifying the key and value type for an Eloquent Model's array @property and adding a comment after that - it duplicates the property.

Steps To Reproduce:

  • have the Models that has an array or json column (eg Client model has address_values property that is json typed in DB);
  • run php artisan ide-helper:models App\\Models\\Client --write;
  • check that your Client model's phpDoc now has @property array|null $address_values;
  • specify array key-value types and add a summary for the property - @property array<string, string>|null $address_values some description;
  • run php artisan ide-helper:models App\\Models\\Client --write;
  • check that it now added / duplicated the $address_values property.

It works as expected for these variants:

  • @property array|null $address_values some description -- no array key-value types;
  • @property array<string, string>|null $address_values -- no description / summary / text after the property name.

Expected behavior is to be able to add both array's key-value types and description (I write some examples there).

olexoliinyk0 avatar Feb 01 '24 16:02 olexoliinyk0

Can you add a (failing) test? Or even provide a fix?

mfn avatar Feb 02 '24 10:02 mfn

@mfn This turns out to be a problem with the barryvdh/reflection-docblock dependency. There's a preg_split with a limit of 3 that combines $param_name with the description if generic type with TKey-TValue (and space between) provided, losing the description in such cases.

Created a PR to showcase this bug here and one in that dependency lib to fix this issue, but can't hope that'll be a priority for maintainers. Do you know any other way to fix this locally for the time being?

olexoliinyk0 avatar Feb 03 '24 01:02 olexoliinyk0

Do you know any other way to fix this locally for the time being?

Sorry, no.

mfn avatar Feb 03 '24 20:02 mfn