Améliorer la navigation en ligne avec des jumeaux hyperliés
Une nouvelle approche améliore la navigation dans le code pour les spécifications de langages logiciels en ligne.
― 7 min lire
Table des matières
Les langages de programmation sont des outils essentiels dans le monde de la programmation d'aujourd'hui. Ils définissent comment on écrit et comprend le code. Cependant, à mesure que les langages de programmation deviennent plus complexes, naviguer dans leurs spécifications peut devenir un vrai casse-tête. Ça devient particulièrement galère quand on bosse sur des dépôts de code en ligne, comme GitHub, où l'accès à des fonctionnalités de navigation précises est souvent absent.
Le problème de la navigation dans le code
Quand les programmeurs s'attaquent à leur code, ils doivent souvent relier des noms (comme les noms de fonctions ou de variables) à leurs définitions. C'est ce qu'on appelle la navigation par nom. Les environnements de développement intégrés (IDEs) offrent généralement un moyen de naviguer facilement. Si tu cliques sur un nom, l'IDE te ramène directement à l'endroit où ce nom a été déclaré. Mais quand les devs regardent du code en ligne, surtout sur des plateformes comme GitHub, cette fonctionnalité super utile n'est pas dispo pour la plupart des langages de programmation.
GitHub permet des recherches de base mais a du mal avec la navigation précise, qui est cruciale pour les langages ayant des structures complexes et des relations de fichiers. Bien que certains langages, comme Python, aient plus de soutien, beaucoup d'autres n'ont pas cette précision. Ce manque crée de la frustration chez les développeurs, car ils doivent souvent faire défiler un bon nombre de fichiers juste pour trouver où un nom est utilisé.
Qu'est-ce que les méta-langages de logiciels ?
Les méta-langages de logiciels servent un but crucial en définissant les règles pour d'autres langages de programmation. Ils aident à décrire comment la syntaxe et les sémantiques des langages de programmation sont structurées. Cependant, naviguer dans les spécifications de ces méta-langages peut devenir compliqué, surtout si les développeurs ne sont pas familiers avec eux. Cette manque de familiarité peut rendre la navigation manuelle pénible et inefficace.
Les ateliers de langages sont des outils qui aident les développeurs à créer et valider ces langages de logiciel. Ils offrent des fonctionnalités qui permettent une navigation précise basée sur les noms dans les spécifications des langages, mais cette navigation précise est généralement seulement disponible lorsque l'on utilise l'atelier en local, pas en ligne.
Jumeaux Hyperliés
Présentation desPour améliorer la navigation en ligne des spécifications des langages, on propose un concept appelé jumeaux hyperliés. Les jumeaux hyperliés sont des pages web créées à partir du texte brut des spécifications des langages. Elles contiennent le même contenu que le texte source mais sont enrichies de liens qui relient les noms à leurs définitions. Ça veut dire que les utilisateurs peuvent cliquer sur un nom pour sauter directement à sa déclaration, tout comme dans un IDE.
L'idée est de créer une page web où le texte est affiché comme il apparaîtrait dans un IDE, avec des hyperliens soutenant les mêmes fonctionnalités de navigation. Cela se fait en tirant parti des analyses existantes utilisées dans les ateliers de langages pour s'assurer que les liens sont précis et reflètent fidèlement les spécifications originales.
Mise en œuvre des jumeaux hyperliés
Le processus de génération de ces sites web de jumeaux hyperliés implique quelques étapes importantes. D'abord, les spécifications en langage brut doivent être analysées et analysées pour créer une structure appelée un arbre de syntaxe abstraite (AST). L'AST aide à représenter la structure hiérarchique du code, facilitant navigation et génération de liens.
La deuxième étape consiste à ajouter des informations de liaison de nom aux nœuds dans l'AST. Chaque nœud de déclaration doit inclure le texte du nom déclaré, et chaque nœud de référence doit identifier à quelles déclarations il fait référence. Cette étape est cruciale car elle garantit que les utilisateurs peuvent naviguer avec précision entre les déclarations et les références.
Après avoir créé et amélioré l'AST, l'étape suivante est de générer le HTML. Le HTML doit afficher le code correctement tout en préservant la mise en forme, comme l'indentation et les sauts de ligne. Tous les caractères spéciaux dans le texte doivent également être convertis en leurs équivalents HTML, permettant au texte de s'afficher correctement sur les navigateurs web.
Génération de liens et mise en surbrillance
Pendant que le site est en cours de création, des hyperliens sont générés entre les déclarations et les références. Lorsqu'une déclaration est trouvée pendant le parcours de l'AST, une balise unique est insérée dans le HTML. Quand une référence est rencontrée, un lien d'ancre est créé, pointant vers la déclaration. Cette structure rend la navigation fluide.
En plus des liens de navigation, la mise en surbrillance syntaxique est aussi importante pour la lisibilité. L'atelier de langage peut reproduire les couleurs et styles utilisés dans les spécifications originales, garantissant que le code rendu semble familier aux utilisateurs.
Création d'un site web convivial
Quand on génère le site web de jumeaux hyperliés, c'est logique de créer une page séparée pour chaque fichier dans la spécification du langage. Cette organisation imite la structure du répertoire du projet de code, permettant aux utilisateurs de naviguer intuitivement dans le contenu.
Des générateurs de sites statiques peuvent être utilisés pour simplifier le processus de création automatique de ces pages web. Ces générateurs aident à s'assurer que le HTML final est compatible avec les navigateurs modernes, rendant le site accessible sur divers appareils.
Applications dans le monde réel
La technique proposée pour générer des sites web de jumeaux hyperliés a été appliquée avec succès à différentes spécifications de langages. Plusieurs méta-langages ont été utilisés pour créer ces jumeaux hyperliés, montrant la polyvalence de l'approche. Bien que l'accent initial ait été mis sur l'atelier de langage Spoofax, la technique peut probablement être adaptée pour d'autres ateliers de langages aussi.
Un des avantages de cette approche est qu'elle rend les spécifications de langages plus accessibles aux utilisateurs qui n'ont pas l'atelier installé. Ils peuvent naviguer dans les spécifications des langages en ligne sans avoir besoin de télécharger ou d'installer des logiciels supplémentaires.
Conclusion et perspectives d'avenir
La création de sites web de jumeaux hyperliés représente un pas significatif vers l'amélioration de l'accessibilité des spécifications des langages de logiciels. En permettant une navigation précise basée sur les noms en ligne, cette méthode améliore l'expérience des développeurs travaillant avec des langages et des spécifications complexes.
Les développements futurs pourraient étendre cette capacité encore plus, permettant de soutenir d'autres méta-langages. À mesure que l'ensemble d'outils pour générer ces jumeaux hyperliés grandit, l'objectif est de les publier pour tous les dépôts utilisant des spécifications compatibles, améliorant l'utilité générale des ateliers de langages.
Alors que les langages de logiciels continuent d'évoluer, fournir des outils robustes pour naviguer et comprendre ces langages sera essentiel. Les jumeaux hyperliés offrent une solution prometteuse pour combler le fossé entre la navigation locale et en ligne, rendant les spécifications de langages plus faciles à gérer pour les développeurs partout.
Titre: Online Name-Based Navigation for Software Meta-languages
Résumé: Software language design and implementation often involve specifications written in various esoteric meta-languages. Language workbenches generally include support for precise name-based navigation when browsing language specifications locally, but such support is lacking when browsing the same specifications online in code repositories. This paper presents a technique to support precise name-based navigation of language specifications in online repositories using ordinary web browsers. The idea is to generate hyperlinked twins: websites where verbatim copies of specification text are enhanced with hyperlinks between name references and declarations. By generating hyperlinks directly from the name binding analysis used internally in a language workbench, online navigation in hyperlinked twins is automatically consistent with local navigation. The presented technique has been implemented for the Spoofax language workbench, and used to generate hyperlinked twin websites from various language specifications in Spoofax meta-languages. However, the applicability of the technique is not limited to Spoofax, and developers of other language workbenches could presumably implement similar tooling, to make their language specifications more accessible to those who do not have the workbench installed.
Auteurs: Peter D. Mosses
Dernière mise à jour: 2023-09-12 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2309.06121
Source PDF: https://arxiv.org/pdf/2309.06121
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.
Liens de référence
- https://dl.acm.org/ccs.cfm
- https://pdmosses.github.io/hyperlinked-twins/
- https://github.com/pdmosses/sdf/tree/master/org.metaborg.meta.lang.template/trans/generation/docs/
- https://plancomps.github.io/CBS-beta/
- https://tree-sitter.github.io/tree-sitter/
- https://www.mkdocs.org
- https://jekyllrb.com
- https://spoofax.dev
- https://spoofax.dev/references/
- https://spoofax.dev/howtos/development/
- https://squidfunk.github.io/mkdocs-material/
- https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin
- https://squidfunk.github.io/mkdocs-material/setup/setting-up-versioning/