Résolution de la dépréciation `this-property-fallback`

Contexte

Essentiellement, si vous utilisez quelque chose comme {{foo}} dans un modèle handlebars pour faire référence à une propriété du contrôleur/composant, vous devez le mettre à jour en {{this.foo}}.

Informations en amont : Property Fallback Lookup | Ember.js - Deprecations

Pour faire passer Discourse à la mise à niveau Ember 4.x, nous avons introduit un correctif de rétrocompatibilité afin que les thèmes et les plugins n’aient pas besoin de se précipiter pour ce changement. Cependant, il n’est pas possible de maintenir ce correctif indéfiniment, nous devons donc mettre à jour les thèmes et les plugins vers la syntaxe moderne.

Dépréciation

Dans la dernière version de Discourse, l’utilisation de la syntaxe héritée provoquera l’affichage d’un message de dépréciation dans la console. Il ressemblera à ceci :

DÉPRÉCIATION : [PLUGIN discourse-calendar] La propriété `loading` a été utilisée dans le modèle `discourse/plugins/discourse-calendar/discourse/templates/admin-plugins-calendar.hbs` sans utiliser `this`. Ce comportement de repli a été déprécié, toutes les propriétés doivent être recherchées sur `this` lorsqu'elles sont utilisées dans le modèle : {{this.loading}}

Comme pour toute autre dépréciation, nous augmenterons progressivement la visibilité de cet avertissement, jusqu’à ce que nous supprimions éventuellement le correctif de rétrocompatibilité. Nous visons provisoirement le deuxième trimestre 2025 pour la suppression finale, mais nous ajusterons cela en fonction des données du monde réel.

Mise à niveau de votre code

Pour les petits thèmes/plugins, vous pouvez mettre à jour les modèles manuellement pour ajouter this. avant tout nom de propriété.

Pour faciliter la transition pour les thèmes/plugins plus importants, nous avons introduit une nouvelle règle ember-template-lint qui comprend un correcteur automatique.

Ainsi, si vous utilisez la dernière version de notre configuration de linting standard (conformément au squelette de plugin et au squelette de thème), tout le code affecté sera automatiquement mis à jour la prochaine fois que vous exécuterez ember-template-lint --fix.

Si vous avez des questions/préoccupations, n’hésitez pas à nous en faire part ci-dessous !

6 « J'aime »

C’est génial ! Dans l’un de mes plugins où (je pense avoir) correctement mis à jour la configuration de linting, je vois un tas d’instances de {{this.blah}} qui, j’en suis à peu près sûr, n’étaient pas là jusqu’à récemment. Je ne peux pas assez souligner à quel point c’est cool. :tada: :clinking_glasses: :beers:

Ce serait bien s’il existait un moyen automatisé de copier/supprimer les fichiers appropriés dans chaque plugin lorsqu’il y a une mise à jour du squelette. (J’ai peut-être ou peut-être pas réussi à le faire manuellement cette fois-ci.) Peut-être serait-il possible de placer un petit script bash dans le squelette qui vérifierait la présence de plugin.rb dans le répertoire courant, et s’il était là, il pourrait copier des éléments de l’emplacement du script vers le répertoire courant. Quelque chose comme ça.

1 « J'aime »

Nous ne l’avons pas vraiment rendu public, mais vous pourriez être intéressé par GitHub - discourse/mass-pr: A tool for applying automated changes across a large number of GitHub repositories. Nous l’utilisons pour appliquer ce genre de changements sur les plus de 600 dépôts de thèmes/plugins que nous maintenons.

Donc, dans ce cas, j’exécute quelque chose comme :

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

et cela met à jour les éléments du squelette, corrige automatiquement tout le linting, et crée la PR sur GitHub.

Ensuite, nous avons un autre script pour gérer la fusion : GitHub - discourse/mass-merge: A script for mass-approving and merging Dependabot pull requests

Certainement pr-welcome pour un script de mise à jour plus léger ! Ceux-ci sont un peu trop puissants si vous n’avez qu’un seul dépôt à mettre à jour.

5 « J'aime »

Non. C’est incroyable !

J’ai hâte de l’essayer, mais j’avais aussi hâte de vous remercier.

Non. Un script est 4 fois plus facile à maintenir que 2, et si vous l’utilisez, c’est celui que je veux utiliser.

Trop cool.

Merci, David ! C’est fantastique.

Tout d’abord, il m’a fallu un peu de temps pour comprendre que je devais faire pnpm install.

Et maintenant, j’ai ceci :

#!/usr/bin/env bash
# sync-with-skeleton -- suppose que vous êtes dans 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

Ce serait mieux si, par exemple, il vérifiait l’existence d’un plugin.rb dans le répertoire courant et vérifiait même si le dépôt existe, mais c’est ce que j’ai eu le temps de faire aujourd’hui. Ou je pourrais le soumettre en tant que PR et il pourrait se déplacer vers le répertoire où il se trouvait.

Et cela m’a aussi appris pourquoi je devrais soumettre des choses en tant que PRs, même quand il n’y a que moi. Merci beaucoup.

2 « J'aime »