rfc recursive return type definitions
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 25/100
Direção de pesquisa
Start with the recursive @return and @param examples in issue #9 and review the parser's existing type syntax. No file, test, or entry point is named. Done would require an agreed recursive type representation and corresponding parser behavior.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
/**
* @return array<string, scalar|array<int, array<{{recursive definition is here}}>>>
*/
function DoThingWithNode(DOMNode $node) : array { /* do stuff here */ }
So I have this method that return an array with string keys whose values are either scalars or arrays with string keys whose values are either scalars or arrays with string keys whose values are either scalars with string keys..... etc.
If the definition stops at array, then one would just assume that phpstan et. al would determine that values at that level are "mixed" (or otherwise defined), which may be an undesirable effect.
One solution to the recursive @return/@param problem could be to define a class that encapsulates the recursion- i.e. class Thing extends ArrayObject & modify the return types to indicate scalar|Thing, but I'd be wanting to avoid class definitions.
A docblock-type solution would be to define a template/pattern tag so one could @thing foo array<string, scalar|array<string, {{@thing foo}}> , but I could foresee problems by virtue of it being a recursive solution to a recursive problem.
Thoughts?
p.s. the recursion here comes from the return type possibly containing arrays of the return type of the method, so maybe @return array<string, scalar|{{@method DoThingWithNode}}||{{@method DoSomeOtherThingWithNode}}> might be a solution by explicitly indicating the return values is built up from other methods ?
- Linguagem predominante
- PHP
- Estrelas
- 1.5k
- Forks
- 78
- Merge médio
- 7h 43min
- PRs com merge (30d)
- 6
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de phpstan/phpdoc-parser
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 68/100
phpstan/phpdoc-parser#317 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
phpstan/phpdoc-parser#281 · 2 comentários · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
phpstan/phpdoc-parser#271 · 1 comentário · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
phpstan/phpdoc-parser#219 ·
Mantenedores costumam responder em até 1 dia
-
Extension for custom tagsAberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 38/100
phpstan/phpdoc-parser#178 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
Todas as issues de phpstan/phpdoc-parser
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
filamentphp/filament#20630 ·
Mantenedores costumam responder em até 1 dia
-
Issue: Bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
OpenAPITools/openapi-generator#25107 ·
Mantenedores costumam responder em até 1 dia
-
needs-maintainer-review review:approve
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Ultimate-Multisite/ultimate-ai-connector-compatible-endpoints#163 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
Bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
Mantenedores costumam responder em até 1 dia