Skip to content

Executable resolve algorithm for pnpm #116

@otakustay

Description

@otakustay

What I See

On my macOS, if dprint is installed via pnpm, after pnpm approve-builds, vscode extension logs like:

[INFO] Initialized dprint 0.50.2
  Folder: /Users/otakustay/Downloads/Code/play/
  Command: dprint

Accordingly, on a project which installs dprint with npm, logs include an executable under node_modules:

[INFO] Initialized dprint 0.50.2
  Folder: /Users/otakustay/Downloads/Code/play/
  Command: /Users/otakustay/Downloads/Code/play/node_modules/@dprint/darwin-arm64/dprint

Some Information

Interestingly, when installed with pnpm, we have 2 dprint folder in node_modules:

tree node_modules
node_modules
└── dprint -> .pnpm/dprint@0.50.2/node_modules/dprint

tree node_modules/.pnpm
node_modules/.pnpm
├── @dprint+darwin-arm64@0.50.2
│   └── node_modules
│       └── @dprint
│           └── darwin-arm64
│               ├── dprint
│               ├── package.json
│               └── README.md
├── dprint@0.50.2
│   └── node_modules
│       ├── @dprint
│       │   └── darwin-arm64 -> ../../../@dprint+darwin-arm64@0.50.2/node_modules/@dprint/darwin-arm64
│       └── dprint
│           ├── bin.js
│           ├── dprint
│           ├── install_api.js
│           ├── install.js
│           ├── LICENSE
│           ├── node_modules
│           ├── package.json
│           └── README.md
├── lock.yaml
└── node_modules
    └── @dprint
        └── darwin-arm64 -> ../../@dprint+darwin-arm64@0.50.2/node_modules/@dprint/darwin-arm64

However, when initializing vscode extension, in tryResolveInNodeModules function, it locates Uri.joinPath(dir, "node_modules", "@dprint", packageName) which doesn't exists in pnpm workspace.

My Thought

Sine @dprint/{platform} is a dependency of dprint, we should not assume that @dprint/{platform} always has the same parent folder as dprint.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions