uqbar-project / wollok-ts

TypeScript based Wollok language implementation
GNU General Public License v3.0
20 stars 14 forks source link

Validación: no debería lanzar que la variable no es utilizada #124

Closed julimr closed 5 months ago

julimr commented 2 years ago

Error en consola: [WARNING]: shouldNotDefineUnusedVariables at src/temporada1.wtest:7

Link al repo

Detalle:

const otitis = new EnfermedadInfecciosa(cantCelulasAmenazadas = 1000)
const roberto = new Persona(temperatura = 36, cantCelulas = 9000000, enfermedades = [ malaria, otitis, lupus, otitisAgresiva, otitisAgresiva ])
method initialize() {
        logan.contraer(malaria)
        logan.contraer(otitis)
        logan.contraer(lupus)
    }

La otitis se usa y aún así la marca como unused

julimr commented 2 years ago

Error en consola: [WARNING]: shouldNotDefineUnusedVariables at src/volver.wlk:50

Link al repo

Detalle:

class Personaje{
    const elementosPersonales = []
    const caracteristica //variable que lanza warning
    var property edad
    var property altura
   ....
}
const docBrown = new Personaje(
    caracteristica = "le dicen doc", 
    elementosPersonales=[fotoReloj, revista], 
    edad = 71,
    altura = 1.8
) 
asanzo commented 2 years ago

@julimr puede ser que esté bien en ese último caso el warning de unusedVar? En ese proyecto la "caracteristica" no se usa nunca.

Pero en el caso de arriba la otitis sí se usa.

PalumboN commented 1 year ago

Sospecho que no detecta los usos dentro de los literales (colecciones, bloques, etc) porque acá tengo otros casos:

describe "Tests" {

    const juancito = new Arquero(rango = 50, agilidad = 1,copas = 20)

// UNUSED VARIABLES --> maria, cachito, misionSinIntegrantes
    const maria = new Guerrera(fuerza= 500, tieneEstrategia = true, copas = 12)
    const cachito = new Ballestero(rango = 101, agilidad = 1,copas = 50)
    const misionSinIntegrantes = new MisionEquipo() 

    const misionIndividual = new MisionIndividual(dificultad = 20, personaje = juancito )
    const misionEquipo = new MisionEquipo(personajes = [juancito,maria,cachito] )

    test "mision de equipo sin integrantes no puede comenzar" {
        assert.throwsExceptionLike(new MisionImposibleException(), {misionSinIntegrantes.repartirCopas()})
    }
}

pero todos se usan, dentro de una lista o del bloque dentro del test.

fdodino commented 6 months ago

@PalumboN estuve jugando con este issue pero estoy teniendo un tema:

const enfermedades = [otitis]

lo que se genera del lado derecho es

Literal a un array de Reference que apunta a wollok.lang.List, la clase de lang.wlk

Lo mismo debe pasar con set, con lo cual no estoy seguro cómo hacer que el intérprete me de las referencias a la variable que yo quiero...

PalumboN commented 6 months ago

Hay que acceder a los elementos del array. El literal List (y Set) se modela con un Array[referenceToClass, Array[expressionesDeLosElementos] ].

Habría que acceder a ese Array con los elementos y propagar la validación.

Lo mismo con los bloques de código y su body (o sea, el body del método ).

Contesto esto desde el celu, cualquier cosa lo vemos en la semana o cuando tenga el código cerca.

fdodino commented 6 months ago

Gracias @PalumboN !

fdodino commented 6 months ago

ahí en 5 minutos quedó con el datazo que me mandaste

fdodino commented 6 months ago

bueno, canté victoria antes de tiempo

PalumboN commented 5 months ago

bueno, canté victoria antes de tiempo

Yo veo todo verde los PRs 😄 🟢 🥂

fdodino commented 5 months ago

bueno, canté victoria antes de tiempo

Yo veo todo verde los PRs 😄 🟢 🥂

jajaja, ah bueno, así pos CI.

image