prettier / prettier/plugin-php

composer.json discovery fails in VS Code remote

Ouverte
#2,443 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
PHP
Étoiles
1.9k
Forks
139
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

In my (admittedly specific) use case the plugin is unable to find composer.json, which is plainly present in the root of the workspace.

Environment

Running VS Code with a devcontainer in Rancher Desktop. Prettier plugin is running inside the container.
prettier and @prettier/plugin-php are installed locally inside node_modules and the VS Code plugin uses the local installation.

Settings:
"phpVersion": "composer"

Filesystem layout:

  • /workspaces/myproject/
    • composer.json
    • .prettierrc
    • node_modules/
    • src/
      • a.php
Result

When run on src/a.php through VS Code, the plugin fails.

["ERROR" - 9:22:26 AM] Error formatting document.
["ERROR" - 9:22:26 AM] Could not determine PHP version from composer; Could not find composer.json
Error: Could not determine PHP version from composer; Could not find composer.json
    at resolvePhpVersion (file:///workspaces/myproject/node_modules/@prettier/plugin-php/src/options.mjs:95:13)
    at Object.parse (file:///workspaces/myproject/node_modules/@prettier/plugin-php/src/parser.mjs:11:3)
    at parse5 (file:///workspaces/myproject/node_modules/prettier/index.mjs:16731:24)
    at async coreFormat (file:///workspaces/myproject/node_modules/prettier/index.mjs:17287:25)
    at async formatWithCursor (file:///workspaces/myproject/node_modules/prettier/index.mjs:17504:14)
    at async Module.format2 (file:///workspaces/myproject/node_modules/prettier/index.mjs:19051:25)

When doing the same thing through the CLI, not the VS Code plugin, everything works as expected.

Cause

A little bit of digging turns up the root cause here: https://github.com/prettier/plugin-php/blob/0c883a49850281077218007322f6149f853b2015/src/options.mjs#L23

In my environment, prettier is run in this directory: /vscode/vscode-server/bin/linux-x64/360a4e4fd251bfce169a4ddf857c7d25d1ad40da
The recursive search for composer.json upwards from process.cwd() fails.

I don't feel qualified to suggest a solution but maybe search from the target file's location upwards, instead of the process' working dir?

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 src/options.mjs, au niveau de la recherche de composer.json mentionnée dans l’issue, puis suivez la manière dont src/parser.mjs transmet le contexte du fichier PHP. Reproduisez la différence entre l’environnement distant de la CLI et celui de VS Code, et vérifiez que le formatage de src/a.php puisse trouver le composer.json à la racine du workspace tout en préservant le comportement existant de la CLI.

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

Évaluation

Stack technique
php, vscode
Domaine
tooling
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
52/100

Recevez les nouvelles issues par e-mail

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