CommunityRédaction et éditiongithub.com

reyalka/astro

Comment écrire des commentaires JSDoc (/** */) et inline (//) dans la base de code Astro, destinés aux contributeurs lisant le code source — pas aux utilisateurs finaux. À utiliser à chaque fois que vous écrivez ou modifiez des commentaires dans des fichiers source .ts/.js, y compris les commentaires ajoutés incidemment lors de la correction de bugs ou de l'ajout de fonctionnalités. Ne couvre pas les références de configuration/erreur générées par @docs.

Qu'est-ce que astro ?

Cette compétence définit les règles pour rédiger des commentaires dans la base de code Astro, ciblant les contributeurs qui lisent le code source des mois ou des années après son écriture. Son objectif principal est de garantir que les commentaires restent pertinents, informatifs et durables dans le temps, en évitant les pièges courants comme la narration de l'historique des modifications ou l'adresse au relecteur de PR. La compétence s'applique à tous les commentaires dans les fichiers source TypeScript/JavaScript, à l'exception de ceux générés automatiquement par l'outil `@docs` pour la documentation utilisateur finale. Les instructions sont extrêmement détaillées : elles classent les commentaires en trois types (vue d'ensemble de fichier, documentation d'élément, commentaires inline), chacun avec un objectif précis. Elles imposent un test de suppression (ne pas écrire ce que le code dit déjà), l'obligation de lier un ticket GitHub pour chaque contournement, et interdisent les émojis, les bandeaux de section ad-hoc et les formulations vagues. La compétence est conçue pour être utilisée dans des environnements comme Claude Code ou Cursor, partout où l'on modifie du code source Astro.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/reyalka/astro/tree/HEAD/.agents/skills/writing-comments

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Écrire des commentaires

Objectif

Les commentaires de ce dépôt sont lus par des contributeurs, des mois ou des années après leur rédaction, sans aucun du contexte dont vous disposez actuellement. Cette compétence définit qui est ce lecteur, à quoi sert chaque type de commentaire et quels motifs sont interdits.

Périmètre

Cette compétence régit les commentaires destinés aux contributeurs dans le code source TypeScript/JavaScript. Elle ne s'applique pas à la documentation utilisateur finale :

Tout ce qui suit concerne le code source qu'un contributeur lit à HEAD.

Le lecteur

Écrivez pour un contributeur Astro compétent en TypeScript mais qui n'a accès à aucun de votre contexte actuel : ni cette conversation, ni la pull request, ni le ticket, ni le diff. Il ne voit que le dépôt à HEAD.

Deux conséquences en découlent directement :

  1. Ne racontez jamais l'historique des modifications. Des mots comme « maintenant », « auparavant », « ne...plus », « la nouvelle approche » n'ont aucun sens à HEAD, où une seule approche existe. Décrivez comment le code fonctionne, pas comment il en est arrivé là. (Une mention @deprecated fait exception — voir Conventions — car elle décrit le futur du contrat, dont le lecteur a besoin.)
  2. Ne vous adressez jamais au relecteur. Un commentaire qui justifie votre modification (« ceci gère correctement X ») appartient à la description de la PR, pas au code source. Le commentaire doit justifier le code tel qu'il est, en permanence.

Trois types de commentaires, trois rôles différents

TypeSyntaxeRôleContenu
Vue d'ensemble de fichier/module/** */ en haut du fichierExplicationPourquoi le module existe, les concepts et termes qu'il définit, comment les parties s'articulent, justification de conception
Documentation d'élément/** */ directement au-dessus d'une déclarationRéférenceLe contrat : comportement, paramètres, valeur de retour, erreurs levées, invariants. Neutre et factuel
Commentaires inline// à l'intérieur d'un corpsJustificationUniquement ce que le code ne peut pas dire : contraintes, contournements (avec liens vers les tickets), couplage non évident

Ne mélangez pas les rôles. Les détails d'implémentation n'ont pas leur place dans le contrat /** */ — mettez-les dans des commentaires // à l'intérieur du corps. Le contrat n'a pas sa place éparpillé dans des commentaires inline — mettez-le sur la déclaration.

Documentation du comportement

Lorsqu'une documentation d'élément est justifiée, rédigez le contrat pour un lecteur humain, pas comme une traduction de l'implémentation. Cela n'exige pas de JSDoc pour chaque fonction ; les noms, types et structure devraient porter seuls le comportement évident.

  • Commencez par une description en langage clair de ce que la fonction retourne ou accomplit.
  • Utilisez des phrases courtes ou de longueur moyenne avec une idée principale chacune.
  • Évitez le jargon interne d'Astro lorsque les appelants n'en ont pas besoin. Si un terme technique est nécessaire, expliquez-le dans le même paragraphe.
  • Décrivez les mises en garde visibles par l'appelant qui peuvent être surprenantes : comportement de repli, limites de travail, résultats ambigus, ordre de surcharge, effets de bord, et les conditions qui retournent undefined, null, un résultat vide ou une autre valeur indéterminée.
  • Documentez les erreurs levées lorsque les appelants sont censés les distinguer ou s'en remettre.
  • Ne décrivez pas les détails d'implémentation sauf si les appelants en ont besoin pour comprendre le comportement ou utiliser l'API en toute sécurité.

Ajoutez un exemple lorsque le comportement dépend d'une relation que la signature ne peut pas montrer clairement. Les cas courants dans Astro et TypeScript incluent :

  • quelle surcharge est sélectionnée ;
  • comment les arguments sont mappés aux paramètres optionnels ou rest ;
  • quel point d'entrée public d'Astro expose un symbole implémenté ou ré-exporté ailleurs ;
  • comportement de repli pour les routes ambiguës, la configuration incomplète ou le contenu manquant ;
  • un résultat dont le sens n'est pas évident d'après son type.

Introduisez l'exemple en prose avant le bloc de code. Indiquez ce qu'il démontre et quel résultat est attendu. Gardez les extraits minimaux, autonomes et rédigés du point de vue d'un utilisateur Astro ou de l'appelant interne propriétaire du contrat.

La documentation d'un module doit décrire un concept durable, une frontière architecturale ou une raison de conception. Ne listez pas les exportations individuelles simplement pour résumer le fichier ; ces inventaires deviennent obsolètes à mesure que les symboles sont ajoutés ou renommés. Si un module n'a aucun concept durable à expliquer, utilisez une brève description d'une ligne ou aucune vue d'ensemble.

Le test de suppression

Avant d'écrire un commentaire, demandez-vous : est-ce que cela énonce quelque chose que le lecteur ne peut pas retrouver à partir du code lui-même ?

  • Si l'information est déjà portée par les noms, types ou structure, n'écrivez pas le commentaire. Si le nom ne la porte pas, améliorez le nom.
  • Informations qui légitimement nécessitent un commentaire : un invariant, une justification, un couplage avec du code ailleurs, un contournement avec un lien, un comportement surprenant d'une dépendance, un terme spécialisé que le module définit.

Lors de l'édition ultérieure, le même test s'applique en sens inverse : un commentaire qui ne le réussit plus doit être supprimé, pas laissé pourrir.

Liez le ticket pour les contournements

Cette base de code ancre systématiquement les contournements à une source. Tout commentaire qui explique un contournement, un HACK, un garde-fou de régression ou un comportement surprenant d'une dépendance doit lier le ticket GitHub ou la PR qui le motive. Le lien est ce qui permet à un futur lecteur de savoir si le contournement est toujours nécessaire.

// Gère les nanostores recommandés. Seul @nanostores/preact est requis d'après nos tests !
// Explication complète et rapport de bug associé : https://github.com/withastro/astro/pull/3667
'@nanostores/preact',

Un contournement sans lien est impossible à distinguer d'une erreur.

Motifs interdits

Narrer la ligne suivante. Supprimez-les à vue :

// Incrémente le compteur de génération
generation += 1;

Narration de l'historique des modifications. Réécrivez comme une justification au présent :

// MAUVAIS : Nous résolvons maintenant lightningcss depuis la racine de l'utilisateur au lieu de la nôtre.
// BON : lightningcss est une dépendance optionnelle de pair, donc elle se résout depuis la racine du projet utilisateur.

Justification adressée au relecteur. Déplacez l'argument dans la PR :

// MAUVAIS : Ceci gère correctement le chemin multi-encodé du rapport de bug.
// BON : Un chemin toujours encodé après MAX_DECODE_ITERATIONS est rejeté, donc
//       le middleware et le routage ne peuvent jamais diverger sur le chemin décodé.

JSDoc redondant. Un bloc /** */ qui reformule le nom de la déclaration ne dit rien :

// MAUVAIS :
/** Compile les styles. */
function compileStyles(...)

// BON :
/** Réécrit les références `url()` relatives dans `css` par rapport à `base`, en laissant
 *  les URL absolues et les données intactes. */
function compileStyles(...)

Formulations vagues. « Certains cas », « diverses raisons », « gère les cas limites », « etc. » — soit nommez-les, soit supprimez la phrase.

Émojis. Interdits dans le code source, y compris les commentaires (politique à l'échelle du dépôt).

Bandeaux de section ad-hoc (// ----- helpers -----, // ==== TYPES ====). Ce dépôt n'a pas de convention de pliage // #region ; n'ajoutez pas de bandeaux. Si un fichier est assez long pour que vous soyez tenté d'en utiliser un, c'est un signal pour diviser le fichier, pas pour le décorer.

Conventions dans ce dépôt

Balises JSDoc. @param nom - description, @returns et @throws énoncent le contrat. Mettez un type entre accolades (@returns {Promise<string>}) uniquement lorsque la signature seule est ambiguë. Utilisez @example avec un bloc ```js pour une utilisation non évidente.

Références croisées. Utilisez {@link Symbole} / {@linkcode Symbole} plutôt qu'un nom nu, afin qu'un renommage mette à jour la référence et que les éditeurs puissent sauter à la cible.

@internal. Marque une API qui ne fait pas partie de la surface publique. C'est une convention uniquement — il n'y a ni typedoc ni api-extractor ici pour la supprimer — donc elle documente l'intention mais ne remplace pas les modificateurs d'accès.

@deprecated. Indiquez la migration, puis l'horizon de suppression :

/** @deprecated Utilisez la méthode d'instance `cookies.consume()` à la place. Ceci sera supprimé dans Astro 7 */

Dites quoi utiliser à la place, pas seulement que le symbole est déprécié. Cette note au futur est une information contractuelle dont le lecteur a besoin, pas une narration interdite de l'historique des modifications.

TODO. Utilisez // TODO: pour un travail différé ; liez un ticket lorsqu'il en existe un. Pour un travail conditionné à une fenêtre de rupture, utilisez l'idiome établi // TODO: remove in Astro <N>. Il n'y a pas de FIXME dans ce dépôt — ne l'introduisez pas.

Modification de code existant

  • Préservez les commentaires existants. Si votre modification altère le comportement, étendez ou corrigez le texte spécifique — ne le remplacez jamais par du texte générique. Supprimer un contexte durement acquis est pire que de laisser un commentaire légèrement obsolète.
  • Lorsque votre modification rend un commentaire faux, corrigez-le dans le même diff. Un commentaire obsolète est pire qu'aucun commentaire.
  • Adaptez-vous à la densité environnante. Un module fortement documenté mérite le même niveau sur les nouveaux éléments ; ne couvrez pas un module peu documenté de commentaires de façon systématique.

Auto-vérification avant de terminer

Après avoir terminé toute tâche qui a touché des commentaires, relisez uniquement les commentaires de votre diff, isolés des modifications de code :

  1. Chacun réussit-il le test de suppression ?
  2. L'un d'eux fait-il référence à la conversation, à la modification elle-même ou au relecteur ?
  3. Chaque contournement lie-t-il son ticket ou sa PR ?
  4. Un lecteur sans accès au diff comprendrait-il chacun d'eux ?

Corrigez ou supprimez ce qui échoue. La suppression est le comportement par défaut ; un commentaire manquant coûte moins cher qu'un commentaire trompeur.

Références

  • Diátaxis — le framework derrière la répartition explication / référence / justification ci-dessus.
  • packages/astro/src/core/errors/README.md — pour les entrées d'erreur marquées @docs, qui sont de la documentation utilisateur finale.
  • TSDoc — la référence des balises pour les commentaires de documentation TypeScript.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

reyalka/astro

Analyze recent GitHub Actions workflow runs to identify patterns, mistakes, and improvements. Use when asked to "analyze workflow logs", "review action runs", or "analyze GitHub Actions".

reyalka/astro

Independently implement and validate an alternative solution for an Astro pull request. Use only for Factory's adversary blue team.

reyalka/astro

Qualify and compare red and blue solutions for an Astro pull request using Astro-specific merge and tie-break criteria. Use only for Factory's adversary purple team.

reyalka/astro

Perform a static, read-only code review of an Astro pull request or of a local branch, commit range, diff, patch, or working tree being prepared as a pull request. Determine whether the change satisfies its stated business requirements and is good enough to merge, using the PR description, linked requirement issues and roadmap items, and PR or issue discussions when available. Use this skill only for PR review or self-review, not issue triage or bug investigation. It reports only merge-relevant findings and never edits code or runs project code, tests, builds, checks, or scripts.

reyalka/astro

Comprehensive guide for developing in the Astro monorepo. Covers architecture, debugging, testing, and critical constraints. Use when working on features, fixes, tests, or understanding the codebase structure.

reyalka/astro

Write and update Astro pull requests with reviewer-friendly titles and high-signal bodies. Trigger whenever the user asks to create a PR, open a PR, draft a PR, update PR title/body, or write PR notes/summary/description.

reyalka/astro

Handle main-to-next merge tasks including conflict resolution, changeset cleanup, and CI fix-ups. Use when merging main into next.

Skills associés