Temas obsoletos

En esta lección he mantenido algunas explicaciones que ya no son necesarias actualmente.

Conflictos entre pylint y black en VSCode

Antes de la versión 2.6.0 de Pylint (publicada en agosto de 2020), el formateador black entraba en conflicto con el validador pylint con el sangrado de las condiciones en una sentencia if como el del ejemplo siguiente:

a = 5
b = 7
c = 10
if (
    c > a
    and c > b
):
    print("c es mayor que a y que b")
else:
    print("c no es mayor que a y que b")

En este ejemplo, las líneas de la condición (líneas 4 y 5) tienen el mismo sangrado que los bloques de instrucciones (líneas 8 y 10). Este sangrado uniforme es el que aplica black, pero pylint indicaba un aviso "Wrong hanging indentation before block (add 4 spaces). pylint(bad-continuation)"

pylint prefería que la condición tenga más sangrado que los bloques de instrucciones, como en el ejemplo siguiente:

a = 5
b = 7
c = 10
if (
        c > a
        and c > b
):
    print("c es mayor que a y que b")
else:
    print("c no es mayor que a y que b")

Ambos sangrados son sintácticamente válidos y siguen las reglas de formato de Python (Pep 8, pero el problema es que cada vez que formateabamos con black el segundo programa, black lo dejaba como el primero y pylint mostraba un aviso (en realidad, mostraba varias veces el mismo aviso, uno por línea).

Se pidió tanto a black como a pylint que resolvieran esta situación (pylint issue #289 y black issue #48), y finalmente fue pylint el que dio su brazo a torcer (punto 2 de la lista de novedades en pylint 2.6.0).

En el curso 2019-20, la única solución que encontré fue desactivar el aviso C0330 de pylint en el archivo de configuración de VSCode.

  //
  // Extensión pylint (configuración para ejercicios pygame)
  "python.linting.pylintArgs": [
    "--extension-pkg-whitelist=pygame",
    "--disable=C0103, C0114, C0115, C0116, C0330",
    // Pylint features. Pylint global options and switches
    // http://pylint.pycqa.org/en/2.4/technical_reference/features.html
    // http://pylint.pycqa.org/en/latest/technical_reference/features.html
    // C0103: invalid-name - Used when the name doesn't conform to naming rules associated to its type (constant, variable, class...).
    // C0114: missing-module-docstring - Used when a module has no docstring.Empty modules do not require a docstring.
    // C0115: missing-class-docstring - Used when a class has no docstring.Even an empty class must have a docstring.
    // C0116: missing-function-docstring - Used when a function or method has no docstring.Some special methods like __init__ do not require a docstring.
    // C0330: bad-continuation - Wrong %s indentation%s%s. TODO
  ],
  //
  //