Printed @as names of fields and constructors turn non-ASCII letters into other characters

Ouverte
#9,142 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@cknitt y travaille déjà.

Depuis le 30/10/2026.

  • #9143 par @cknitt — ouverte

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
25/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Domaine
compilers

Piste de recherche

Start with Printtyp.tree_of_constructor and Res_outcome_printer, the two printer locations named in the issue, and compare their escaping with String_literal.encode_js_string, which is used for @tag names. Check how non-ASCII @as names appear in printed interfaces, errors, and hover; done means they preserve the original runtime names when read back. Linked pull request #9143 is already open.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

When a type declaration is printed (error messages, hover, createInterface), the @as names of record fields and variant constructors are escaped the OCaml way (%S in Printtyp.tree_of_constructor, String.escaped in Res_outcome_printer). Non-ASCII bytes become decimal escapes like \195\169, which ReScript reads back as different characters.

module Make = (X: {type t}) => {
  type record = {@as("prénom") name: X.t}
  type variant = | @as("é") E | @as("a\"b") Q
}

module Applied = Make({
  type t = string
})

createInterface prints the types of Applied through this printer:

module Applied: {
  type record = {@as("pr\195\169nom") name: string}
  type variant = @as("\195\169") E | @as("a\"b") Q
}

Read back, @as("pr\195\169nom") names the field prénom:

type record = {@as("pr\195\169nom") name: string}
let r = {name: "x"}

compiles to

let r = {
  "prénom": "x"
};

so a generated interface gives the fields and constructors other runtime names than the implementation. Error messages and hover show the escapes too.

The @tag name of a declaration is printed with String_literal.encode_js_string since #9136, which keeps non-ASCII letters and escapes only what a string literal needs.

Langage dominant
OCaml
Étoiles
7.5k
Forks
484
Merge moyen
20 h 43 min
PR mergées (30 j)
263

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de rescript-lang/rescript

Toutes les issues de rescript-lang/rescript

Issues similaires

Plus d'issues Compilers

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.