Soporte para PHPStan

Hola Tomas,

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 [b]IdProyecto_autoload.php[/b] 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

</blockquote>
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.

<blockquote>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:</blockquote>
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.

<blockquote>

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

</blockquote>
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.

<blockquote>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</blockquote>
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