Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make shouldUseOverrideKeyword ignore initialize method #176

Merged

Conversation

juanbono
Copy link
Member

@juanbono juanbono commented Oct 13, 2023

Arregla #123
Este PR modifica la validation ya existente shouldUseOverrideKeyword para que no aparezca si el metodo es initialize.

El programa que use para testearlo es (PR en wollok-language):

// This describe should not trigger a shouldUseOverrideKeyword warning
// @Expect(code="shouldUseOverrideKeyword", level="warning")
describe "Fake describe" {
    method initialize() {

    }

    test "2 == 1 + 1" {
        assert.equals(2, 1+1)
    }
}


class Perro {
    // @Expect(code="shouldUseOverrideKeyword", level="warning")
    method initialize() {

    }

    method ladrar() {
        return "guau"
    }
}

Una pregunta que tengo es, hay algun NotExpect? ya que en este caso quiero testear que no aparece la validation.

@juanbono juanbono requested a review from fdodino October 14, 2023 00:24
Copy link
Contributor

@fdodino fdodino left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Un detalle importante es que hay que

  1. hacer el cambio en wollok-language con el test diferente
  2. ese test sería bueno que en el initialize haga algo que produzca efecto (para no tener un initialize vacío)
  3. una vez que se apruebe ese PR, podemos liberar una versión nueva de language
  4. reapuntamos este PR para subirle la versión a language y ahí va a pasar CI
  5. se mergea

src/validator.ts Outdated
@@ -184,7 +184,7 @@ export const shouldOnlyInheritFromMixin = error<Mixin>(node => node.supertypes.e
}))

export const shouldUseOverrideKeyword = warning<Method>(node =>
node.isOverride || !superclassMethod(node)
!(!node.isOverride && superclassMethod(node) && !['initialize'].includes(node.name))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
!(!node.isOverride && superclassMethod(node) && !['initialize'].includes(node.name))
node.isOverride || !superclassMethod(node) || ['initialize'].includes(node.name))

prefiero que haya menos negación y más aserción

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree con vos Fer.

Igual para mí las validations se están declarando mal: afirman cuando el programa es correcto, y para mí debería afirmar cuándo quiero que aparezca el error.... no sé, siempre queda incómodo pensar el booleano.

Otra cosa es que nombre del método debe ser initialize (no incluir), y ese string ya debería estar en algún lado (la VM llama al método cada vez que instancia un objeto), tratemos de usar esa.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh ahí vi que el includes es sobre una lista, okkk!

Por qué no usar ==? Igual yo esperaría que ya haya una función isInitialize 🤔

@fdodino
Copy link
Contributor

fdodino commented Oct 14, 2023

Arregla #123 Este PR modifica la validation ya existente shouldUseOverrideKeyword para que no aparezca si el metodo es initialize.

El programa que use para testearlo es (PR en wollok-language):

// This describe should not trigger a shouldUseOverrideKeyword warning
// @Expect(code="shouldUseOverrideKeyword", level="warning")
describe "Fake describe" {
    method initialize() {

    }

    test "2 == 1 + 1" {
        assert.equals(2, 1+1)
    }
}


class Perro {
    // @Expect(code="shouldUseOverrideKeyword", level="warning")
    method initialize() {

    }

    method ladrar() {
        return "guau"
    }
}

Una pregunta que tengo es, hay algun NotExpect? ya que en este caso quiero testear que no aparece la validation.

Groso @juanbono !

Es medio una paja todo el ciclo, pero ahí te lo dejé escrito. Por otra parte, no hay un NotExpect, al menos no por ahora. Con que no falle estaríamos bien, salvo que @nscarcella haya desarrollado algo. Cualquier cosa chiflame.

Copy link
Contributor

@PalumboN PalumboN left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahí agregué otra cosa al comentario de Fer.

No hay un @NotExpect, los tests del validador fallan si se produce un error en un nodo que no tiene @Expect así que va a funcionar igual.
PEROOOO si lo querés dejar como documentación (cosa que me parece maravillosa) podés simplemente agregarlo! El test debería ignorar esa annotation 😄

src/validator.ts Outdated
@@ -184,7 +184,7 @@ export const shouldOnlyInheritFromMixin = error<Mixin>(node => node.supertypes.e
}))

export const shouldUseOverrideKeyword = warning<Method>(node =>
node.isOverride || !superclassMethod(node)
!(!node.isOverride && superclassMethod(node) && !['initialize'].includes(node.name))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree con vos Fer.

Igual para mí las validations se están declarando mal: afirman cuando el programa es correcto, y para mí debería afirmar cuándo quiero que aparezca el error.... no sé, siempre queda incómodo pensar el booleano.

Otra cosa es que nombre del método debe ser initialize (no incluir), y ese string ya debería estar en algún lado (la VM llama al método cada vez que instancia un objeto), tratemos de usar esa.

Copy link
Contributor

@PalumboN PalumboN left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juanbono me tomé el atrevimiento de hacer los cambios pendientes para mergear y seguir.

Muchas gracias por tus infinitas contribuciones! 🚀 💯

@PalumboN PalumboN merged commit ec1bc4b into uqbar-project:master Dec 14, 2023
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Validación: no debería pedir override para el initialize de los test, clases y objetos
3 participants