Hola Tomas,
Dale, veo si puedo forkear el branch.
El branch esta pensado para correr PHPStan dentro de Toba... asi que le archivo neon tuyo probablemente deba incluir el de Toba estimo.
O sea, no esta levantando el autoload (y es correcto porque toba lo maneja aparte de composer)
2) Cree un archivo de config phpstan.neon para decirle que haga autoload del directorio php:
Archivo phpstan.neon:
parameters:
autoload_directories:
- php
Yo opte por pasarle directamente el archivo autoload que tiene que levantar, ya que los que usa el framework tienen por nombre
IdProyecto_autoload.php con lo cual no necesariamente puede reconocerlo.
Note: Using configuration file /path/al/proyecto/phpstan.neon.
11/204 [▓░░░░░░░░░░░░░░░░░░░░░░░░░░░] 5%
Warning: require_once(consola/consola.php): failed to open stream: No such file or directory in /path/al/proyecto/php/extension_toba/stock_comando.php on line 3
Fatal error: require_once(): Failed opening required 'consola/consola.php' (include_path='/path/al/proyecto/vendor/pear/console_getopt:/path/al/proyecto/vendor/pear/pear-core-minimal/src:/path/al/proyecto/vendor/pear/pear_exception:/path/al/proyecto/vendor/siu-toba/numbers_words:/path/al/proyecto/vendor/siu-toba/structures_graph:/path/al/proyecto/vendor/siu-toba/text_highlighter:/path/al/proyecto/vendor/pear/console_getopt:/path/al/proyecto/vendor/pear/pear-core-minimal/src:/path/al/proyecto/vendor/pear/pear_exception:/path/al/proyecto/vendor/siu-toba/numbers_words:/path/al/proyecto/vendor/siu-toba/structures_graph:/path/al/proyecto/vendor/siu-toba/text_highlighter:.:/usr/share/php') in /path/al/proyecto/php/extension_toba/stock_comando.php on line 3
Todo lo que sea extension de comandos va a ser un problema a resolver, por dos motivos:
- Tiene diseño top-down, asi que cada archivo va incluyendo lo que necesita hacia abajo... hay una cantidad minima de herencia ahi.
- A causa de eso, no hacen uso del autoload y por ende es cuasi imposible que PHPStan enganche las clases correctas salvo que arranque a ejecutar desde el launcher de Toba.
Ciertamente ahi voy a tener que encontrar la manera de que reconozca la presencia de esos archivos por mas que no esten en el autoload.
3) Intentando y probando varias cosas, termine con el archivo phpstan.neon de la siguiente manera
parameters:
autoload_directories:
- php
- vendor/siu-toba/framework/php
excludes_analyse:
- vendor/siu-toba/framework/php/convenciones
- vendor/siu-toba/framework/php/modelo/migraciones_instancia
- vendor/siu-toba/framework/php/3ros
Los exclude son necesarios porque detecta clases duplicadas. En este punto, la salida que obtengo al ejecutar el ya mencionado comando es esta:
Bien, es mas o menos similar a lo que llegue yo.. solo que aun asi se muere impunemente en menos del 10%, tendria que agregar la exclusion para las migraciones de la instancia que me estan faltando.
68/204 [▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░] 33%
Warning: require_once(consola/consola.php): failed to open stream: No such file or directory in /path/al/proyecto/php/extension_toba/stock_comando.php on line 3
Fatal error: require_once(): Failed opening required 'consola/consola.php' (include_path='/path/al/proyecto/vendor/pear/console_getopt:/path/al/proyecto/vendor/pear/pear-core-minimal/src:/path/al/proyecto/vendor/pear/pear_exception:/path/al/proyecto/vendor/siu-toba/numbers_words:/path/al/proyecto/vendor/siu-toba/structures_graph:/path/al/proyecto/vendor/siu-toba/text_highlighter:/path/al/proyecto/vendor/pear/console_getopt:/path/al/proyecto/vendor/pear/pear-core-minimal/src:/path/al/proyecto/vendor/pear/pear_exception:/path/al/proyecto/vendor/siu-toba/numbers_words:/path/al/proyecto/vendor/siu-toba/structures_graph:/path/al/proyecto/vendor/siu-toba/text_highlighter:.:/usr/share/php') in /path/al/proyecto/php/extension_toba/stock_comando.php on line 3
Es lo que te decia mas arriba, intenta cargar desde tus clases... cuando en la consola el camino es inverso, salvo que tengas el require_once explicito, no va a encontrar la clase.
Ademas, justamente esa parte requiere de parametros para determinar proyecto, directorio de instalacion, etc... no es muy "static" friendly.
Una cosa que se me ocurre probar (aun no me hice el tiempo) es ver si se puede hacer un autoload de todo toba en composer tal como indican aca[1]. No es util para toba en si pero por ahi le sirve a phpstan. Tenes idea si eso se puede hacer?
[1]: https://getcomposer.org/doc/04-schema.md#psr-4
Toba ya tiene apuntado en composer el autoload con formato psr-4, lo que hay que ir haciendo es pasar el resto de las clases a namespaces e incorporarlas ahi dentro.
Me parece que es mas sencillo hacer asi:
parameters:
autoload_files:
- php/proyecto_autoload.php
- vendor/siu-toba/framework/php/toba_autoload.php
Y con eso intentar garantizarse que levanta ambos, igual.. .aun con eso, la parte de consola seguramente siga fallando.. asi que quizas debas meter esa parte dentro del exclude.
Saludos