Resolución de la advertencia deprecada `this-property-fallback`

Antecedentes

Esencialmente, si estás usando algo como {{foo}} en una plantilla de handlebars para hacer referencia a una propiedad en el controlador/componente, entonces necesita ser actualizado a {{this.foo}}.

Información upstream: Property Fallback Lookup | Ember.js - Deprecations

Para lograr la actualización de Discourse a Ember 4.x, introdujimos un shim de retrocompatibilidad para que los temas y plugins no tuvieran que apresurarse con este cambio. Sin embargo, no es factible mantener este shim indefinidamente, por lo que necesitamos que los temas y plugins se actualicen a la sintaxis moderna.

Deprecación

En la última versión de Discourse, el uso de la sintaxis heredada provocará que se imprima un mensaje de deprecación en la consola. Se verá algo así:

DEPRECATION: [PLUGIN discourse-calendar] La ruta de la propiedad `loading` se usó en la plantilla `discourse/plugins/discourse-calendar/discourse/templates/admin-plugins-calendar.hbs` sin usar `this`. Este comportamiento de retroceso ha sido obsoleto, todas las propiedades deben buscarse en `this` cuando se usan en la plantilla: {{this.loading}}

Al igual que con cualquier otra deprecación, aumentaremos lentamente la visibilidad de esta advertencia, hasta que finalmente eliminemos el shim de retrocompatibilidad. Tentativamente, tenemos como objetivo el segundo trimestre de 2025 para la eliminación final, pero ajustaremos eso en función de los datos del mundo real.

Actualización de tu código

Para temas/plugins pequeños, puedes actualizar las plantillas manualmente para agregar this. antes de cualquier nombre de propiedad.

Para facilitar la transición a temas/plugins más grandes, hemos introducido una nueva regla de ember-template-lint que incluye un reparador automático.

Por lo tanto, si utilizas la última versión de nuestra configuración de linting estándar (según el esqueleto del plugin y el esqueleto del tema), todo el código afectado se actualizará automáticamente la próxima vez que ejecutes ember-template-lint --fix.

Si tienes alguna pregunta/preocupación, ¡háznoslo saber a continuación!

6 Me gusta

¡Eso es genial! En uno de mis plugins donde (creo que) he actualizado correctamente la configuración de linting, veo un montón de instancias de {{this.blah}} que estoy bastante seguro de que no estaban ahí hasta hace poco. No puedo exagerar lo genial que es eso. :tada: :clinking_glasses: :beers:

Sería bueno si hubiera alguna forma automatizada de copiar/eliminar los archivos adecuados en cada plugin cuando hubiera una actualización del esqueleto. (Puede que haya o no haya ideado hacer eso a mano esta vez). Quizás sería posible incluir un pequeño script de bash en el esqueleto que comprobara si existe plugin.rb en el directorio actual y, si estuviera allí, podría copiar cosas desde donde estaba el script al directorio actual. Algo así.

1 me gusta

No lo hemos publicitado realmente, pero podría interesarte GitHub - discourse/mass-pr: A tool for applying automated changes across a large number of GitHub repositories. Lo usamos para aplicar este tipo de cambios en los más de 600 repositorios de temas/plugins que mantenemos.

Así que en este caso, ejecuto algo como:

GITHUB_TOKEN=... pnpm mass-pr \
  --message "DEV: Update linting" \
  --branch "update-linting" \
  --script scripts/update-js-linting.sh \
  discourse-solved \
  discourse-assign \
  ...

y actualiza las cosas del esqueleto, arregla automáticamente todo el linting y crea el PR en GitHub.

Luego tenemos otro script para manejar la fusión: GitHub - discourse/mass-merge: A script for mass-approving and merging Dependabot pull requests

Definitivamente pr-welcome para un script de actualización más ligero. Estos son un poco exagerados si solo tienes un repositorio que actualizar.

5 Me gusta

¡No puede ser! ¡Eso es asombroso!

No puedo esperar a probarlo, pero tampoco pude esperar a agradecerte.

No. Un script es 4 veces más fácil de mantener que 2, y si ustedes están usando ese, entonces ese es el que quiero usar.

Genial.

¡Gracias, David! Esto es fantástico.

Primero, me tomó un poco darme cuenta de que necesito pnpm install.

Y ahora tengo esto:

#!/usr/bin/env bash
# sync-with-skeleton -- asume que estás en un
today=$(date +"%Y-%m-%d")
repo=$(grep url .git/config | sed -E 's/.*:([^/]+/[^.]+).*/\1/')
cd ~/src/discourse-repos/mass-pr
GITHUB_TOKEN=$GITHUB_TOKEN pnpm mass-pr \
--message "DEV: Update GitHub workflows" \
--branch "sync-with-skeleton-$today" \
--script scripts/update-workflows.sh \
$repo

Sería mejor si, por ejemplo, comprobara si hay un plugin.rb en el directorio actual y tal vez incluso comprobara si el repositorio existe, pero es lo que tuve tiempo de hacer hoy. O podría enviarlo como una PR y podría cambiar al directorio donde vivía.

Y también me enseñó por qué debería enviar cosas como PRs incluso cuando solo soy yo. Muchas gracias.

2 Me gusta