better-review 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -17
- package/dist/cli.js +1394 -1762
- package/dist/web/assets/highlight.worker-BOqhB448.js +153 -0
- package/dist/web/assets/{html-Bv1KyTF7.js → html-B3xvRgDO.js} +1 -1
- package/dist/web/assets/html-BHZv6uqE.js +1 -0
- package/dist/web/assets/index-B9sCIpY8.js +111 -0
- package/dist/web/assets/{index-rNKORPVq.css → index-Dp_ug4Zx.css} +1 -1
- package/dist/web/assets/{json-B88Oqtu5.js → json-qhed-kSA.js} +1 -1
- package/dist/web/assets/{jsx-D3KKoC5L.js → jsx-Bz0zcwM4.js} +1 -1
- package/dist/web/assets/{markdown-CboqBxpY.js → markdown-BYOwaDjH.js} +1 -1
- package/dist/web/assets/scss-8bKmll0B.js +1 -0
- package/dist/web/assets/{tsx-BOvsFOI6.js → tsx-udAQXfEw.js} +1 -1
- package/dist/web/assets/{typescript-j_1H8WHN.js → typescript-bsJCZSQ-.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/astro-BGCLva2-.js +0 -1
- package/dist/web/assets/bat-qdxAdBWQ.js +0 -1
- package/dist/web/assets/c-Cz4nF6n_.js +0 -1
- package/dist/web/assets/c-SSSlmE39.js +0 -1
- package/dist/web/assets/clojure-DqKBuwfJ.js +0 -1
- package/dist/web/assets/cmake-Bj61d0ZC.js +0 -1
- package/dist/web/assets/cpp-DK5F0KO4.js +0 -1
- package/dist/web/assets/cpp-pF_afpy8.js +0 -1
- package/dist/web/assets/csharp-dmMxLVLW.js +0 -1
- package/dist/web/assets/dart-CHZY9Xhz.js +0 -1
- package/dist/web/assets/diff-woXpYk--.js +0 -1
- package/dist/web/assets/dockerfile-IyjqRm3v.js +0 -1
- package/dist/web/assets/dotenv-CuH5my32.js +0 -1
- package/dist/web/assets/elixir-DcSoMxCm.js +0 -1
- package/dist/web/assets/erlang-59ohNboI.js +0 -1
- package/dist/web/assets/fsharp-D2W_zG4w.js +0 -1
- package/dist/web/assets/gleam-CSRkHgEL.js +0 -1
- package/dist/web/assets/go-rLFTqkRN.js +0 -1
- package/dist/web/assets/graphql-BoW1g5X9.js +0 -1
- package/dist/web/assets/graphql-C2HCcBds.js +0 -1
- package/dist/web/assets/groovy-CacY0gHj.js +0 -1
- package/dist/web/assets/haskell-D8IpX4py.js +0 -1
- package/dist/web/assets/hcl-Dh228itO.js +0 -1
- package/dist/web/assets/highlight.worker-D2jBd466.js +0 -153
- package/dist/web/assets/html-DZNlqGBh.js +0 -1
- package/dist/web/assets/index-DuH6feCh.js +0 -110
- package/dist/web/assets/ini-0B7NLFlx.js +0 -1
- package/dist/web/assets/ini-DiZ1IqbV.js +0 -1
- package/dist/web/assets/java-BtIQNnN0.js +0 -1
- package/dist/web/assets/java-_ATy9zCa.js +0 -1
- package/dist/web/assets/json-C3WlssX3.js +0 -1
- package/dist/web/assets/json5-BR5RXkoi.js +0 -1
- package/dist/web/assets/jsx-C4yDKi0A.js +0 -1
- package/dist/web/assets/julia-CBcsyk3j.js +0 -1
- package/dist/web/assets/kotlin-DhhofPvG.js +0 -1
- package/dist/web/assets/lua-B0e3uOiv.js +0 -1
- package/dist/web/assets/lua-pjIdZuk8.js +0 -1
- package/dist/web/assets/makefile-Dixweg8N.js +0 -1
- package/dist/web/assets/markdown-CjQmuOi1.js +0 -1
- package/dist/web/assets/mdx-DQZ5AkYe.js +0 -1
- package/dist/web/assets/nginx-DbUAZ-J7.js +0 -1
- package/dist/web/assets/nix-Cl_7024t.js +0 -1
- package/dist/web/assets/objective-c-D1A_Heim.js +0 -1
- package/dist/web/assets/ocaml-O90oeIOV.js +0 -1
- package/dist/web/assets/perl-CCy4CjC0.js +0 -1
- package/dist/web/assets/php-3goRFXPs.js +0 -1
- package/dist/web/assets/postcss-D_Wz94rJ.js +0 -1
- package/dist/web/assets/powershell-QtSnmXcu.js +0 -1
- package/dist/web/assets/prisma-DMgNhnYS.js +0 -1
- package/dist/web/assets/properties-DiZ1IqbV.js +0 -1
- package/dist/web/assets/proto-DB4EqR-F.js +0 -1
- package/dist/web/assets/python-C5TF47hQ.js +0 -1
- package/dist/web/assets/python-CzFU0dpx.js +0 -1
- package/dist/web/assets/r-BXEss897.js +0 -1
- package/dist/web/assets/r-DWzjseEo.js +0 -1
- package/dist/web/assets/ruby-ChLscevq.js +0 -1
- package/dist/web/assets/rust-DpiIf5JO.js +0 -1
- package/dist/web/assets/scala-BiFt_7mu.js +0 -1
- package/dist/web/assets/shellscript-CVTB3cr6.js +0 -1
- package/dist/web/assets/shellscript-CqHdAlCp.js +0 -1
- package/dist/web/assets/sql-CNu3Or2W.js +0 -1
- package/dist/web/assets/sql-CfM2IJm3.js +0 -1
- package/dist/web/assets/svelte-Bte6OA2r.js +0 -1
- package/dist/web/assets/swift-CyEgAFGc.js +0 -1
- package/dist/web/assets/terraform-DswuEJGm.js +0 -1
- package/dist/web/assets/toml-CcmNWLt0.js +0 -1
- package/dist/web/assets/tsx-CGosfAUg.js +0 -1
- package/dist/web/assets/typescript-Bb1J8qyy.js +0 -1
- package/dist/web/assets/vue-CcmjViMa.js +0 -1
- package/dist/web/assets/xml-Bvlx11yh.js +0 -1
- package/dist/web/assets/xml-Byfru430.js +0 -1
- package/dist/web/assets/yaml-DDA_XMNu.js +0 -1
- package/dist/web/assets/yaml-DijMHRDA.js +0 -1
- package/dist/web/assets/zig-CMLA9XwU.js +0 -1
package/README.md
CHANGED
|
@@ -35,7 +35,22 @@ navigateur). Le jeton est généré au premier lancement et conservé dans `BR_D
|
|
|
35
35
|
redémarrer le serveur ne déconnecte pas. Le cookie est lié à l'hôte : `127.0.0.1` et `localhost` sont deux
|
|
36
36
|
sessions distinctes.
|
|
37
37
|
|
|
38
|
-
Puis « Repos suivis » : ajouter des repos (`owner/repo`) ou des orgs / comptes. L'
|
|
38
|
+
Puis « Repos suivis » : ajouter des repos (`owner/repo`) ou des orgs / comptes. L'accueil ne montre que cette liste.
|
|
39
|
+
|
|
40
|
+
## Accueil : tableau des PR
|
|
41
|
+
|
|
42
|
+
Toutes les PR ouvertes des repos suivis, en colonnes par avancement : Brouillon · En attente de review · En review
|
|
43
|
+
(commentaires, changements demandés) · Approuvée (CI ou threads ouverts) · Prête à merger (approuvée, CI ok, aucun
|
|
44
|
+
thread ouvert) · Merge queue · Mergée (dernières 24 h). Pas de glisser-déposer : la colonne découle de l'état GitHub.
|
|
45
|
+
|
|
46
|
+
Badges de relation (review demandée, à re-relire, retours à traiter, ma PR, je participe, stagnante, sans reviewer) et
|
|
47
|
+
filtres par groupe : Reviewer, Auteur, Lead ; plus « Non lues » et « Non vues à 100 % ». Le tableau se recharge au
|
|
48
|
+
retour sur la page ou dans l'onglet (au-delà de 30 s), toutes les 5 min, dès qu'un changement GitHub est détecté
|
|
49
|
+
(sondage toutes les 60 s) et sur « Actualiser ».
|
|
50
|
+
|
|
51
|
+
Données chargées au plus juste : champs du tableau pour toutes les PR ; CI et threads en plus pour les PR approuvées
|
|
52
|
+
(pour séparer « Approuvée » de « Prête à merger ») ; taille, fichiers vus, réponses attendues et dernière activité
|
|
53
|
+
seulement pour les PR qui me concernent. Recherche GitHub limitée à 1000 résultats par repo / org suivi.
|
|
39
54
|
|
|
40
55
|
## Configuration
|
|
41
56
|
|
|
@@ -59,6 +74,11 @@ Commenter : clic sur un numéro de ligne (« + » au survol), côté ancien code
|
|
|
59
74
|
nouveau code pour une ligne ajoutée, `Maj+clic` pour une plage ; bouton « Commenter » dans l'en-tête d'un fichier
|
|
60
75
|
pour le fichier entier. Chaque commentaire part seul ou dans la review en attente.
|
|
61
76
|
|
|
77
|
+
Réactions emoji (celles de GitHub) sous chaque commentaire, review et la description : clic sur une réaction pour
|
|
78
|
+
ajouter / retirer la mienne, « ☺ » pour en choisir une autre. Les conversations résolues sont repliées (« Afficher N
|
|
79
|
+
messages ») et s'ouvrent quand on y navigue. La CI de l'en-tête met les échecs en avant (détail au clic) et est sondée
|
|
80
|
+
toutes les 15 s tant que des checks tournent.
|
|
81
|
+
|
|
62
82
|
## Naviguer dans les fichiers
|
|
63
83
|
|
|
64
84
|
Le panneau de gauche (360 px, masquable avec `f`) propose trois vues. **La vue choisie fixe l'ordre des fichiers** :
|
|
@@ -71,10 +91,14 @@ sans changer l'ordre).
|
|
|
71
91
|
| Arbre | Dossiers repliables (sous-dossiers avant fichiers, A→Z ou Taille) avec changements, fichiers vus, threads |
|
|
72
92
|
| Liens | Fichiers en ordre de lecture « base d'abord », nombre d'imports / d'utilisateurs, graphe plein écran |
|
|
73
93
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
la
|
|
94
|
+
**Langages pris en charge** : TypeScript / JavaScript, HTML, CSS / SCSS / Sass / Less, Markdown, JSON et texte brut
|
|
95
|
+
(`.txt`). Seuls les fichiers de ces langages sont analysés et colorés ; les autres s'affichent en texte simple et
|
|
96
|
+
peuvent seulement être la cible d'un lien. Les liens sont calculés côté serveur sur le contenu complet des fichiers au
|
|
97
|
+
head de la PR : AST TypeScript pour TS/JS (y compris `.js` → `.ts`, `require`, `import()`) ; `<script src>` et
|
|
98
|
+
`<link href>` pour HTML (URL relatives, ou `/…` depuis le dossier de la page) ; `@import` / `@use` / `@forward` pour les
|
|
99
|
+
feuilles de style (partiels `_x.scss`, `index`, chemins de chargement) ; les mentions (nom de fichier en CamelCase, ou
|
|
100
|
+
nom avec extension, ou chemin) valent pour tous ces langages. Les alias `tsconfig` `paths` autres que `@/`, `~/`, `#`
|
|
101
|
+
ne sont pas résolus.
|
|
78
102
|
|
|
79
103
|
**Ordre « base d'abord »** (vue Liens) : ordre topologique, chaque fichier après ceux qu'il importe ou mentionne, les
|
|
80
104
|
plus utilisés en premier, les cycles départagés de la même façon et les fichiers sans lien à la fin. On relit la PR de
|
|
@@ -83,12 +107,11 @@ ses fondations vers ce qui les assemble.
|
|
|
83
107
|
**Voisinage** (onglet du panneau de droite, 520 px, quelle que soit la vue de gauche) : graphe du fichier courant, ce
|
|
84
108
|
qu'il utilise → fichier → ce qui l'utilise, avec tous ses voisins ; clic sur un voisin pour l'ouvrir.
|
|
85
109
|
|
|
86
|
-
**Monorepos** : chaque dossier contenant un
|
|
87
|
-
`Cargo.toml`, `pom.xml`, `build.gradle`, `composer.json`) est un package ; à partir de deux, l'ordre devient
|
|
110
|
+
**Monorepos** : chaque dossier contenant un `package.json` est un package ; à partir de deux, l'ordre devient
|
|
88
111
|
hiérarchique : packages du plus utilisé au plus dépendant (dépendances déclarées entre packages du workspace, y
|
|
89
112
|
compris via un package non modifié, + imports entre fichiers), puis la base d'abord dans chaque package. Les imports
|
|
90
|
-
par nom de package (`@acme/shared`, `@acme/shared/x
|
|
91
|
-
(`exports` / `main` / `types` de `package.json`, sources `src/` correspondantes, `src/index
|
|
113
|
+
par nom de package (`@acme/shared`, `@acme/shared/x`) sont résolus vers le point d'entrée du package
|
|
114
|
+
(`exports` / `main` / `types` de `package.json`, sources `src/` correspondantes, `src/index.*`). La
|
|
92
115
|
vue Liens groupe les fichiers par package et le graphe plein écran les encadre ; il affiche aussi les autres packages du
|
|
93
116
|
monorepo et les dépendances entre packages (option « Autres packages du monorepo ») : en couleur uniquement les
|
|
94
117
|
packages qui contiennent des fichiers modifiés (et les liens entre eux), le reste en gris. Le graphe de voisinage
|
|
@@ -101,22 +124,35 @@ La description de la PR s'ouvre dans l'onglet « Description » du panneau de dr
|
|
|
101
124
|
## Architecture
|
|
102
125
|
|
|
103
126
|
```
|
|
104
|
-
apps/cli
|
|
105
|
-
apps/server
|
|
106
|
-
apps/web
|
|
107
|
-
packages/shared
|
|
127
|
+
apps/cli paquet npm `better-review` : serveur + packages du workspace groupés par esbuild, front dans dist/web
|
|
128
|
+
apps/server Node + Hono + tRPC v11 : proxy GitHub (GraphQL, diffs REST), SQLite, polling → subscriptions SSE
|
|
129
|
+
apps/web Vite + React + Mantine, TanStack Router / Query, diff virtualisé, coloration Shiki en Web Worker
|
|
130
|
+
packages/shared schémas zod, parseur de diff unifié (empreinte de hunk partagée serveur / navigateur)
|
|
131
|
+
packages/language briques communes aux langages : registre, chemins, index des fichiers, contrats d'analyse / coloration
|
|
132
|
+
packages/lang-typescript TS / JS : imports (AST TypeScript), écosystème npm (package.json), grammaires Shiki
|
|
133
|
+
packages/lang-html HTML : `<script src>`, `<link href>`, grammaire Shiki
|
|
134
|
+
packages/lang-css CSS / SCSS / Sass / Less : `@import` / `@use` / `@forward` (résolution façon Sass), grammaires Shiki
|
|
135
|
+
packages/lang-markdown Markdown : mentions, grammaire Shiki
|
|
136
|
+
packages/lang-json JSON / JSONC : mentions, grammaires Shiki
|
|
137
|
+
packages/lang-text texte brut : mentions
|
|
108
138
|
```
|
|
109
139
|
|
|
140
|
+
Chaque package de langage expose une partie `./analysis` (serveur : `LanguageAnalyzer`, et `Ecosystem` pour les
|
|
141
|
+
manifestes) et une partie `./highlight` (navigateur : `LanguageHighlighter`, grammaires chargées à la demande). Ajouter
|
|
142
|
+
un langage : créer `packages/lang-<nom>` sur ce modèle, puis l'enregistrer dans `apps/server/src/languages.ts` et
|
|
143
|
+
`apps/web/src/highlight/languages.ts` (seuls points d'enregistrement).
|
|
144
|
+
|
|
110
145
|
- Les diffs sont demandés entre deux SHA (immuables) et mis en cache définitivement.
|
|
111
146
|
- La coloration syntaxique porte sur le fichier entier (blobs désignés par les lignes `index` du diff, mis en cache
|
|
112
147
|
définitivement) : un commentaire ou une chaîne ouvert hors d'un hunk est coloré correctement. Fichier trop gros ou
|
|
113
148
|
indisponible : seules les lignes du diff sont colorées.
|
|
114
149
|
- Un commentaire, une réponse ou un nouveau thread s'affiche dès la réponse de GitHub ; la PR est rechargée ensuite en
|
|
115
150
|
arrière-plan.
|
|
116
|
-
-
|
|
117
|
-
(≈
|
|
118
|
-
- Une PR ouverte est surveillée toutes les 30 s,
|
|
119
|
-
rafraîchit l'écran sans rechargement.
|
|
151
|
+
- Le tableau d'accueil fait des recherches « ids seulement » en parallèle puis charge les PR par lots de 25, avec trois
|
|
152
|
+
niveaux de détail (voir plus haut) : ≈ 5 points de quota GraphQL et ~7 s pour ~440 PR ouvertes.
|
|
153
|
+
- Une PR ouverte est surveillée toutes les 30 s, le tableau toutes les 60 s (empreinte légère) ; un changement côté
|
|
154
|
+
GitHub rafraîchit l'écran sans rechargement.
|
|
155
|
+
- « Vu » / hunk vu : affichage optimiste, protégé contre un rechargement de la PR parti avant l'écriture.
|
|
120
156
|
|
|
121
157
|
## Développement
|
|
122
158
|
|