The pre-commit `types` hook never runs for a commit of only `.tsx` or `.jsx` files: its glob `"*.{js,ts, jsx, tsx}"` has spaces

Ouverte Adaptée aux débutants
#554 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 12 jours

Personne n'a encore pris cette issue.

Évaluation

Difficulté
1/5
Temps estimé
Moins d'une heure
Accessibilité débutants
88/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
git, typescript

Piste de recherche

Le bogue vient du glob de la commande types sous pre-commit dans lefthook.yml : "*.{js,ts, jsx, tsx}" contient des espaces parasites qui font que les alternatives jsx et tsx ne correspondent à rien. Supprime les espaces pour qu'il corresponde au glob de lint, puis vérifie en ajoutant à l'index uniquement un fichier .tsx avec une erreur de type et en confirmant que yarn tsc s'exécute et bloque le commit. C'est terminé lorsque types s'exécute pour les commits ne contenant que des .tsx et pour ceux ne contenant que des .jsx.

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

Description

Before submitting a new issue
  • I tested using the latest version of the library, as the bug might be already fixed.
  • I tested using a supported version of react native.
  • I checked for possible duplicate issues, with possible answers.
Bug summary

lefthook.yml's pre-commit types command globs "*.{js,ts, jsx, tsx}". The spaces make two of the brace alternatives jsx and tsx, which no file name matches, so a commit that stages only .tsx or .jsx files skips yarn tsc, and a type error in it is committed. The lint command above it globs "*.{js,ts,jsx,tsx}" and runs.

pre-commit:
  parallel: true
  commands:
    lint:
      glob: "*.{js,ts,jsx,tsx}"
      run: yarn eslint {staged_files}
    types:
      glob: "*.{js,ts, jsx, tsx}"
      run: yarn tsc

Most of the repository's tests are .tsx files, so a commit of a test alone is the common case.

Library version

main at a37903f (0.0.0-nightly.a37903f)

Environment info
Windows 11 10.0.26300, Node 26.12.1, Yarn 4.9.2, lefthook 2.1.9 (the repository's dev dependency), Git for Windows.
No app or native build is involved: this is the repository's own pre-commit hook.
Steps to reproduce
  1. Clone main and install, which installs the lefthook hooks:
    git clone https://github.com/nativewind/react-native-css
    cd react-native-css
    yarn install
    
  2. Add a .tsx file with a type error and commit it alone:
    printf 'export const count: number = "one";\n' > src/type-error.tsx
    git add src/type-error.tsx
    git commit -m "test: a .tsx file with a type error, committed alone"
    
  3. Add any .ts file beside it and commit again:
    printf 'export const control = 1;\n' > src/control.ts
    git add src/control.ts
    git commit -m "test: a .ts file beside it"
    

The reproducer branch is main at a37903f with step 2's commit on it, which went in with types skipped.

Expected: types runs in step 2, as it does in step 3, and refuses the commit with the type error.

Actual: step 2 prints types (skip) no matching staged files and commits; step 3 runs types, which reports src/type-error.tsx(1,14): error TS2322 and refuses the commit.

Step 2's output on main at a37903f, Windows 11
╭──────────────────────────────────────╮
│ lefthook  v2.1.9   hook:  pre-commit │
╰──────────────────────────────────────╯
│  types (skip) no matching staged files
┃  lint ❯ 

  ────────────────────────────────────
summary: (done in 6.78 seconds)
✓ lint (6.62 seconds)
╭──────────────────────────────────────╮
│ lefthook  v2.1.9   hook:  commit-msg │
╰──────────────────────────────────────╯
┃  commitlint ❯ 

  ────────────────────────────────────
summary: (done in 1.86 seconds)
✓ commitlint (1.86 seconds)
[repro/554-types-hook-skips-tsx-commits 07d3993] test: a .tsx file with a type error, committed alone
 1 file changed, 1 insertion(+)
 create mode 100644 src/type-error.tsx
Step 3's output
╭──────────────────────────────────────╮
│ lefthook  v2.1.9   hook:  pre-commit │
╰──────────────────────────────────────╯
┃  lint ❯ 

┃  types ❯ 
src/type-error.tsx(1,14): error TS2322: Type 'string' is not assignable to type 'number'.

exit status 2
  ────────────────────────────────────
summary: (done in 7.96 seconds)
✓ lint (4.13 seconds)
✗ types (7.89 seconds)
Reproducible example repository

https://github.com/YevheniiKotyrlo/react-native-css/tree/repro/554-types-hook-skips-tsx-commits

Langage dominant
TypeScript
Étoiles
166
Forks
45
Merge moyen
17 j 22 h
PR mergées (30 j)
3

Préparer son environnement

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 nativewind/react-native-css

Toutes les issues de nativewind/react-native-css

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

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