expand PATH on Linux so desktop-launched clide finds pql (T-347)

A desktop launcher gives the app a minimal PATH (e.g. /usr/bin:/bin) with
no ~/.local/bin, where pql installs — so _findOnPath('pql') returned null,
clide spawned the literal 'pql', and Process.start failed with ENOENT;
the pql pane errored. The PATH re-expansion that re-adds ~/.local/bin +
/usr/local/bin ran on macOS only; Linux GUI launches hit the same wall.

Extend it to Linux (homebrew dirs stay macOS-only). Extract the logic
into a pure expandToolPath() so the platform gating is unit-tested.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-10 19:22:12 +02:00
co-authored by Claude Opus 4.8
parent 5bbbc72dab
commit 36f4561ca1
5 changed files with 80 additions and 7 deletions
+30
View File
@@ -47,4 +47,34 @@ void main() {
expect(v.allOk, isFalse);
});
});
group('expandToolPath (T-347)', () {
const minimal = '/usr/bin:/bin'; // a desktop-launch PATH, no ~/.local/bin
test('Linux prepends ~/.local/bin + /usr/local/bin (desktop-launch fix)', () {
final out = expandToolPath(minimal, isMac: false, isLinux: true, home: '/home/u');
expect(out, '/home/u/.local/bin:/usr/local/bin:/usr/bin:/bin');
// No homebrew dirs on Linux.
expect(out.contains('/opt/homebrew'), isFalse);
});
test('macOS also adds the homebrew dirs', () {
final out = expandToolPath(minimal, isMac: true, isLinux: false, home: '/Users/u');
expect(out.split(':'), containsAll(['/Users/u/.local/bin', '/opt/homebrew/bin', '/opt/homebrew/sbin', '/usr/local/bin']));
});
test('does not duplicate dirs already on PATH', () {
final base = '/home/u/.local/bin:/usr/local/bin:/usr/bin';
expect(expandToolPath(base, isMac: false, isLinux: true, home: '/home/u'), base);
});
test('skips ~/.local/bin when HOME is empty', () {
final out = expandToolPath(minimal, isMac: false, isLinux: true, home: '');
expect(out, '/usr/local/bin:/usr/bin:/bin');
});
test('other platforms pass PATH through unchanged', () {
expect(expandToolPath(minimal, isMac: false, isLinux: false, home: '/home/u'), minimal);
});
});
}