Parsoid/Unification de l'analyseur syntaxique
Actuellement, nous disposons de deux analyseurs syntaxiques de wikicode séparés et utilisés dans MediaWiki. L'un est l'analyseur original du noyau (ancien analyseur) et l'autre est Parsoid. Début 2023, le parseur du noyau était utilisé pour toutes les vues de lecture web de la version bureau et pour mobile, tandis que Parsoid était utilisé pour servir tous les clients qui éditaient (VisualEditor, Discussions structurées, Traduction de contenu), les outils de lint (Extension:Linter), certains gadgets, les applications mobiles, le lecteur hors ligne Kiwix, Wikimedia Enterprise et le projet Google du graphe des connaissances.
Le but de ce projet est d'arriver à un analyseur unique qui supporte tous les clients et les cas d'utilisation. Ceci rendra nos wikis plus fiables et cohérents à utiliser pour les rédacteurs, les lecteurs et les outils. Le fait d'avoir une base de code unique pour le traitement du wikicode facilite l'implémentation de nouvelles fonctions wikicode.
Ce projet est principalement conduit par l'Content Transform Team (anciennement Equipe Parsing) avec la participation de l'équipe MediaWiki Platform, toutes les équipes internes ayant développé les clients Parsoid, l'Equipe Movement Communications (anciennement Spécialistes des relations communautaires), les communautés des rédacteurs de wikis Wikimedia, et les projets MediaWiki tiers, car cette unification de l'analyseur les concernait tous.
Cette page contient un aperçu du projet; nous maintenons aussi une page pour la feuille de route, le calendrier et les mises à jour et une liste de pages avec les informations techniques complémentaires.
Objectifs du projet
Objectif à plus long terme : Parsoid est le moteur par défaut du wikicode pour MediaWiki et l'ancien analyseur est supprimé de la base de code.
Objectif intermédiaire : Parsoid remplace l'analyseur du noyau pour tous les cas d'utilisation du wikicode sur la grappe Wikimedia.
Pourquoi
Pourquoi unifier ? : maintenir deux moteurs de wikicode nécessite beaucoup de ressources et demanderait à dupliquer nos efforts pour les nouvelles fonctionnalités.
Pourquoi Parsoid ? : parce qu'il répond à tous les cas d'utilisation concernant l'édition, l'API pour laquelle ces derniers sont spécifiques à Parsoid (par exemple : Enterprise, Kiwix), et parce que le développement est vivant afin de satisfaire les cas d'utilisation pour la lecture. L'ancien analyseur ne prend pas en charge les cas d'utilisation de l'édition basée sur HTML (voir VisualEditor).
Comment nous testons ces modifications
- Tests de l'analyseur : C'est ainsi que le Parsoid a été développé depuis sa création. Nous veillons à ce que Parsoid continue à passer les tests de l'analyseur syntaxique, et là où une divergence est signalée, elle est enregistrée après un examen attentif. Nous avons aussi considérablement étendu la couverture des tests par les parseurs au fil des ans, et tous les correctifs sur Parsoid doivent passer les tests.
- Tour d'horizon / tests d'intégration : Dans ce mode, avant chaque déploiement de production, nous convertissons le wikicode en HTML et le HTML en wikicode sur environ 180 000 pages à partir d'environ 50 wikis de production. Bien que ce mode de test soit principalement pour s'assurer que notre conversion HTML → wikicode n'est pas cassée (ce qui aurait un impact sur nos outils d'édition client), cela sert également implicitement à marquer toute rupture dans notre sortie HTML. Mais ce ne sont pas les tests les plus fiables pour vérifier que notre sortie HTML n'est pas cassée.
- Tests du diff visulel : Ici, nous prenons des rendus de l'ancien analyseur HTML et le HTML de Parsoid, et nous comparons les captures d'écran de rendus et générons un score numérique du diff. Une exécution typique comprend plus de 25 000 pages issues des wikis de production. C'est un moyen vraiment fiable pour identifier divers dysfonctionnements et bogues dans la sortie de Parsoid. Au fur et à mesure que nous déployons, nous étendons nos tests à un plus large éventail de wikis et améliorons la capacité de l'outil à distinguer les problèmes réels des faux positifs.
- Clients de Parsoid en lecture et en écriture : La sortie de Parsoid a été utilisée au fil des ans par VisualEditor, les applications mobiles Android et iOS, Kiwix et autres clients. Nous avons corrigé un certain nombre de bogues et d'incompatibilités dans Parsoid au fil des ans et continuons à corriger les différents cas au limites complexes au fur et à mesure qu'ils sont découverts et signalés.
Au fur et à mesure que notre déploiement progresse, nous continuerons à identifier d'autres méthodes de QA et de test nécessaires pour nous assurer que nous pouvons déployer ce changement de la manière la plus souple et non perturbante possible.
Notre plan de déploiement et notre stratégie
Les étapes suivantes sont celles déjà entreprises ou prévues pour l'unification de l'analyseur.
- ✅ Déploiement des modifications du noyau qui rendent la structure HTML des médias identique très largement à ce que produit Parsoid. Ceci a son propre plan de déploiement. Ces modoifications sont actives sur mediawiki.org et officewiki depuis septembre 2021 et nous nous attendons à les déployer progressivement sur tous les wikis en 2022.
- ✅ Déploiement des outils sur adhésion pour utiliser Parsoid par les utilisateurs individuels pour les vues de lecture dans le cadre de l'extension ParserMigration.
- ✅ Déploiement des modifications de la production de Wikimedia qui permet aux DiscussionTools d'utiliser directement le HTML de Parsoid.
- Activer les vues de lecture du HTML Parsoid progressivement sur des wikis supplémentaires
- ✅ officewiki
- ✅ pages de discussions sur wikitech
- ✅ wikivoyage (sauf zhwikivoyage)
- ✅ Incubator et la wikipedia en dagbani
- ✅ Wiktionaries (except those using LanguageConverter and enwikt)
En cours all Wikipedias (6 language converter wikis are yet to be done)- ...
- Travail en continu pour s'assurer que Parsoid peut générer les métadonnées de manière identiques à celle de l'ancien analyseur (catégories, tables des liens arrière, propriétés des pages, etc). Ceci est nécessaire pour une intégration plus étroite de Parsoid dans le noyau de MediaWiki et pour commencer à remplacer l'ancien analyseur dans les cas d'utilisation supplémentaires du wikicode.
- utiliser Parsoid pour générer les messages de l'interface utiisateur
- Construire une version de support à long terme (prévue pour être la 1.47) avec Parsoid comme analyseur par défaut du wikicode hors de la boîte.
Environnement privé
Pour valider l'évolution de notre feuille de route et utiliser la prise de décision en fonction des données pour faire nos déploiements, nous avons développé un Environnement privé pour les vues Parsoid de lecture. Cet environnement contient les lignes directrices sur la façon dont nous attribuons les priorités aux fonctionnalités, aux corrections de bogues et aux déploiements.
Conséquences sur les wikis
Pour la plupart des utilisateurs, le passage au HTML généré par Parsoid devrait être transparent. Mais ci-dessous nous attirons l'attention sur certaines conséquences possibles sur les lecteurs, les éditeurs et les développeurs.
Lecteurs
Parsoid modèle et traite le wikicode d'une manière différente de l'ancien analyseur et cela peut parfois amener une différence de rendu dans certains scénarios à la limite. Si un motif de wikicode est couramment utilisé, nous avons essayé de le prendre en charge dans Parsoid autant que possible, selon le cas soit en le corrigeant, soit en fournissant un support pour le corriger. À l'heure actuelle, nous pensons que toutes les différences de rendu que nous nous attendons à rencontrer seront des cas aux limites pouvant certainement être résolus en corrigeant le wikicode des pages individuelles ou des modèles.
Rédacteurs et robot, développeurs de gadgets, d'habillages
- Le HTML de Parsoid pour le wikicode multimédia est différent de ce que l'ancien analyseur a généralement généré. Comme faisant partie d'un projet séparé pour utiliser la sortie des images avec la sémantique HTML5, l'ancien analyseur a été mis à jour pour générer du HTML très proche de celui de Parsoid. Il est possible que cela nécessite la mise à jour de certains habillages, gadgets, robots, ou styles de modèles (si pas déjà fait).
- L'extension Cite qui cible Parsoid s'appuie sur des règles CSS pour la numérotation des liens arrière dans la section des références plutôt que de générer du HTML localisé. Bien que nous ayons corrigé les instances connues, sur certains wikis où il a été observé une différence de rendu cela nécessitera d'avoir des rédacteurs avec les autorisations appropriées pour mettre à jour MediaWiki:Common.css sur leurs wikis en ajoutant les règles CSS appropriées qui ciblent ce HTML. Dans le cadre de T384948, WMDE pourrait supprimer le besoin d'utiliser le CSS et adapter le HTML rendu, mais jusqu'à ce moment, ces règles CSS sont nécessaires.
Développeurs d'extensions
Le modèle du processus interne Parsoid est différent de l'ancien analyseur. En conséquence, il peut être nécessaire de mettre à jour les extensions. Cela n'affecte que les extensions qui effectuent une ou plusieurs des opérations suivantes: a. fonctionnent sur le wikicode, b. fournissent des gestionnaires pour les accroches de l'analyseur, c. appellent une méthode publique de l'ancien analyseur syntaxique.
Les extensions qui traitent le wikicode devront certainement être mises à jour pour fonctionner avec Parsoid. À ce jour, la grande majorité de ces extensions a été mise à jour. Comme Parsoid continue d'accéder à l'ancien analyseur pour l'expansion de modèles, le traitement des fonctions d'analyse, les accroches de l'analyseur déclenchées au cours de ce traitement continueront à fonctionner et les extensions qui dépendent de ces accroches continueront à opérer. Pour le reste nous analysons des stratégies pour minimiser les mises à jour nécessaires aux extensions.
L'équipe de la transformation du contenu crée les tâches Phabricator pour toutes les extensions impactées et corrigera directement les extensions au possible. Si vous êtes un développeur d'extensions, tout travail proactif est le bienvenu tout comme la relecture rapide du code des correctifs que vous pourriez recevoir.
Type de support que nous allons fournir aux rédacteurs concernés et aux communauté de développeurs
L'équipe Transformation du contenu est en charge du projet. Notre objectif est de rendre ce passage à Parsoid aussi fluide que possible. Nous avons donc essayé de mettre en œuvre des changements au fil des ans progressivement.
Nous avons commencé par remplacer HTML4 Tidy par HTML5 RemexHtml durant 2015 à 2018. En 2019, en vue d'intégrer plus étroitement Parsoid dans le noyau de MediaWiki, nous avons porté Parsoid de JS en PHP. Ce basculement s'est déroulé progressivement. En 2020, le travail a commencé par unifier la production de médias générée par Parsoid et par le noyau. Cela a principalement impliqué de faire des modifications dans le noyau, mais nous avons parfois ajusté la sortie de Parsoid en fonction des commentaires et d'autres considérations techniques. En 2024 nous avons commencé à déployer Parsoid en tant qu'analyseur syntaxique par défaut pour la lecture des pages sur wikivoyage.
Pour avancer, nous fournirons le support de manière suivante :
- règles linter pour tout wikicode nécessitant d'être corrigé.
- La grande majorité de ce travail a été achevée dans le cadre de la migration Tidy → Remex et nous n'envisageons pas à introduire un grand nombre de catégories linter supplémentaires pour cela
- Communication via cette page, via les mises à jour des nouvelles techniques, et via les misés à jour et les messages à la pompe du village et autres forums spécifiques au wiki.
- Mécanismes d'option pour les utilisateurs et les wikis adoptants pour tester et signaler les problèmes.
- Voir la section suivante pour d'autres détails.
Manière de nous aider et de vous impliquer
A partir de novembre 2023 vous pouvez choisir d'utiliser le nouvel analyseur Parsoid pour lire les articles de Wikipedia. Voir Aide:Extension:ParserMigration pour plus d'informations.
Autres choses que vous pouvez faire pour nous aider :
- tester vos gadgets ou vos scripts utilisateur avec Parsoid HTML pour identifier ou corriger la rupture de compatibilité
- Utiliser Aide:Extension:ParserMigration pour vous permettre de basculer facilement entre l'ancien HTML et celui de Parsoid.
- Les vues Parsoid de lecture seront d'abord diffusées sur les wikis dont les communautés ont choisi d'être les premiers adoptants; consultez cet espace pour plus de détails.
Documentation associée
- Parsoid/Parser Unification/Updates – mises à jour du projet
- Parsoid/Unification de l'analyseur/Problèmes connus – liste les différences entre l'analyseur syntaxique de Parsoid et l'ancien analyseur que l'utilisateur peut observer lorsqu'il utilise Extension:ParserMigration.
- Parsoid/Parser Unification/Instructions for editors
- Parsoid Performance Considerations – décrit les travaux de performance nécessaires à Parsoid ainsi que les critères d'acceptation pour le déploiement
Documents historiques
- Parsoid/Différences connues avec la sortie de l'analyseur du noyau – page plus technique qui énumère des différences spécifiques dans la sortie HTML, intéressant pour les développeurs et les auteurs de styles CSS. Cette page n'est plus aussi importante. Nous nous concentrons maintenant sur les problèmes plus précis trouvés lors des tests visuels des différences.
- Parsoid/Parser Unification/Pixel Diff Testing Stats – suivi des progrès réalisés dans la mesure (et la réalisation) de la parité du rendement entre la sortie Parsoid et la sortie de l'analyseur du noyau. Cette page n'est plus pertinente car nous ne faisons plus de tests visuels des diff génériques; à la place, les tests et le débogage sont concentrés sur les wikis où Parsoid a été développé.
- La longue et tempêtueuse route pour faire de Parsoid l'analyseur syntaxique par défaut de MediaWiki – discussion technique de février 2019
- Replacing Tidy – page du projet de remplacement de Tidy
- Parsing/Notes/Two Systems Problem – Ce document de 2016 explorait différentes options pour converger vers un seul analyseur
- Parsing/Notes/Moving Parsoid Into Core