Publish the parser as a standalone OCaml library
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 35/100
- Type d'issue
- Fonctionnalité
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- ocaml
- Domaine
- build-system
Piste de recherche
Start by reading the dune graph and the listed blocker issues #8567 and #8624, then trace the parser’s dependency closure with ocamldep. The proposed work spans AST boundaries, dependencies, namespacing, global state, C stubs, packaging, and CI, so it is not a small standalone change. Done means a clean-switch dune build -p rescript-syntax succeeds with only ocaml and dune dependencies.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Goal
Publish the ReScript parser/printer as a reusable OCaml library that needs only ocaml and dune.
Current state
The dune graph is syntax → ml → {ext, flow_parser}. flow_parser is the only part with heavy OPAM dependencies (ppxlib, ppx_deriving, ppx_gen_rec, wtf8, plus a vendored sedlex ppx). The parser pulls all of them in.
Transitive module closure of Res_core / Res_printer / Res_driver (via ocamldep):
| library | modules reached |
|---|---|
syntax/src |
16 / 24 |
ml |
~18 / 91 |
ext |
20 / 66 |
flow_parser |
27 / 27 |
The parser needs only a small part of ml/ext. A few edges drag in the rest.
Blockers
- The AST layer depends on the Flow JS parser.
ml/ast_payload.mlcallsParser_flowandClassify_functionto classify%rawpayloads.ml/ast_helper.mlusesAst_payload, so the plain AST builder depends onflow_parser.- Related: #8567 (replacing/vendoring the Flow parser). This issue needs Flow out of the parser's dependency closure either way.
- Compiler semantics live in
Parsetree.Prim_ffi of {spec: External_ffi_types.t}andPrim_inline_consttie the syntax tree to FFI/codegen types. Tracked in #8624 (section C / step B). - No library boundary.
syntaxdepends on all ofml(the type checker). - No namespacing. All libraries are
(wrapped false). Module names clash withcompiler-libs/ ppxlib (Location,Misc,Warnings,Ident,Parsetree,Asttypes,Longident,Ast_helper,Printast,Pprintast) and are generic (Literals,Map_gen,Identifiable). - Global mutable state.
Location→Clflags/Warnings/Misc. Diagnostics go through global refs, stderr and exceptions. - C stubs and build profiles.
exthas C stubs reachable from the parser (Ext_platform_primitives). Native vs. playground behavior is chosen with thebrowserprofile and copy rules instead ofselector virtual libraries.
Proposed plan
- Split
Ast_payloadinto a pure payload-inspection part and a%raw/%reclassification part. Move the classification tofrontend/core, and makeAst_helperflow-free. This alone drops ppxlib/ppx_deriving/ppx_gen_rec/wtf8 from the parser. - Move
Prim_ffi/Prim_inline_constout of the parsetree (see #8624). - Extract a small
rescript_astlibrary (Parsetree, Asttypes, Longident, Location, Ast_helper, pure Ast_payload, neededexthelpers). Makesyntaxdepend on it instead ofml. Decide wherejsx_ppxandRes_outcome_printer(Outcometree) go. - Make the AST library free of C stubs, or give it a pure-OCaml fallback, so it works under js_of_ocaml without a custom profile.
- Wrap the published libraries (
(wrapped true)or(wrapped (transition …))). - Expose a parser API that returns diagnostics and takes explicit config instead of relying on global state.
- Add an opam package (e.g.
rescript-syntax) withpublic_names. Its only dependencies should beocamlanddune. - Align with #8624 (parsetree v1) for API/AST stability.
- Confirm licensing for the package: compiler-derived files are LGPL with the OCaml linking exception.
- Add a CI job that builds the package alone in a clean switch (
dune build -p rescript-syntax) to catch dependency regressions.
- Langage dominant
- OCaml
- Étoiles
- 7.5k
- Forks
- 485
- Merge moyen
- 21 h 51 min
- PR mergées (30 j)
- 53
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de rescript-lang/rescript
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 22/100
rescript-lang/rescript#8733 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
rescript-lang/rescript#8726 ·
Les mainteneurs répondent en général sous 1 jour
-
Integer range patterns ending at 2147483647 generate incorrect JavaScriptPeut-être pris @fhammerschmidt l’a pris il y a 4 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 70/100
rescript-lang/rescript#8716 ·
Les mainteneurs répondent en général sous 1 jour
-
Integer range patterns on record fields match values below the rangePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 76/100
rescript-lang/rescript#8713 ·
Les mainteneurs répondent en général sous 1 jour
-
A regex literal that starts a statement is parsed as division, and the formatter removes the parentheses that prevent itPeut-être pris @fhammerschmidt l’a pris il y a 4 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 68/100
rescript-lang/rescript#8688 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de rescript-lang/rescript
Issues similaires
-
qt6base报错Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
coolsnowwolf/lede#14208 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 4 jours
-
sev:L
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
Systemorph/MeshWeaver#6233 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
Les mainteneurs répondent en général sous 1 jour
-
4Q-maintenance
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
OpenLiberty/liberty-tools-intellij#1790 ·
Les mainteneurs répondent en général sous 2 jours