nodejs / nodejs/node-addon-api

Unify handling of string-like arguments across the API

Ouverte
#1,745 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

SemVer-major
Langage dominant
C++
Étoiles
2.4k
Forks
499
Merge moyen
2 j 11 h
PR mergées (30 j)
2

Description

Follow-up to #1741 / #1742.

Several APIs still carry multiple overloads for different string types. Now that the library requires C++17, we can modernize by preferring std::string_view and removing the redundant UTF-8 overloads, replacing them with a single constrained template, as a semver-major change.

For String::New, Symbol::New, and Symbol::For, collapse the const std::string& + std::string_view pair into:

template <typename T,
          std::enable_if_t<
              std::is_convertible_v<const T&, std::string_view> &&
              !std::is_convertible_v<const T&, const char*>, int> = 0>
static String New(napi_env env, const T& t);

This matches the C++17 standard-library idiom (std::string's find/append/compare/… members). The !is_convertible_v<const T&, const char*> clause keeps const char* and literals on the dedicated overload and filters nullptr (avoiding a UB string_view(nullptr)).

The enable_if alias is shareable across APIs e.g. enable_if_string_view_like_t<T>.

Guide de contribution

Ouvrir le guide de contribution

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.

Piste de recherche

Commencez par localiser les déclarations et les implémentations de String::New, Symbol::New et Symbol::For, puis comparez leurs surcharges existantes pour std::string et std::string_view. La tâche est terminée lorsque les surcharges redondantes sont unifiées au moyen du template contraint de type string_view, tandis que const char* et les littéraux conservent leur traitement dédié et que nullptr reste exclu.

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

Évaluation

Stack technique
cpp
Domaine
api
Type d'issue
Refactorisation
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
55/100

Recevez les nouvelles issues par e-mail

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