---
name: paths
description: Prefer vscode-uri over node:path. Use when .ts files in /src import node:path or use path.join/basename/dirname/resolve, URI.file, or memfs paths.
review: always
---

# Paths

Scope: .ts files in /src

- prefer vscode-uri URIs over paths (file, memfs; cross-platform; FsService/workspace.fs accept URIs)
- `Utils` from vscode-uri instead of node:path:
  - `Utils.joinPath(baseUri, 'a', 'b')` — path.join
  - `Utils.basename(uri)`, `Utils.dirname(uri)`, `Utils.extname(uri)` — path.\*
  - `Utils.resolvePath(baseUri, 'rel')` — path.resolve
- URI↔path via FsService: `toUri(filePath)` / `uriToPath(uri)` (Effect; extensions with salesforcedx-vscode-services)
- raw path→URI: `URI.file(path)`, or `toUri` for memfs in web
- Windows file-drive compare: `comparisonPath` / `pathSuffixWithin` (`uriComparison.ts`), `isUriEqualOrWithin` (`uriContainment.ts`) — don't hand-roll `path.toLowerCase()`
- FsService setup: [services-extension-consumption](../services-extension-consumption/SKILL.md)
- exit hatch: build scripts, esbuild configs, tests, desktop-only extension, host-FS-only tooling → node:path ok
