fix(tui): preserve ./ prefix in tab completion, closes #2087
This commit is contained in:
@@ -575,6 +575,10 @@ export class CombinedAutocompleteProvider implements AutocompleteProvider {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
relativePath = join(dirname(displayPrefix), name);
|
relativePath = join(dirname(displayPrefix), name);
|
||||||
|
// path.join normalizes away ./ prefix, preserve it
|
||||||
|
if (displayPrefix.startsWith("./") && !relativePath.startsWith("./")) {
|
||||||
|
relativePath = `./${relativePath}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// For standalone entries, preserve ~/ if original prefix was ~/
|
// For standalone entries, preserve ~/ if original prefix was ~/
|
||||||
|
|||||||
@@ -331,6 +331,52 @@ describe("CombinedAutocompleteProvider", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("dot-slash path completion", () => {
|
||||||
|
let baseDir = "";
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
baseDir = mkdtempSync(join(tmpdir(), "pi-autocomplete-"));
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
rmSync(baseDir, { recursive: true, force: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
test("preserves ./ prefix when completing paths", () => {
|
||||||
|
setupFolder(baseDir, {
|
||||||
|
files: {
|
||||||
|
"update.sh": "#!/bin/bash",
|
||||||
|
"utils.ts": "export {};",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const provider = new CombinedAutocompleteProvider([], baseDir);
|
||||||
|
const line = "./up";
|
||||||
|
const result = provider.getForceFileSuggestions([line], 0, line.length);
|
||||||
|
|
||||||
|
assert.notEqual(result, null, "Should return suggestions for ./ path");
|
||||||
|
const values = result?.items.map((item) => item.value);
|
||||||
|
assert.ok(values?.includes("./update.sh"), `Expected ./update.sh in ${JSON.stringify(values)}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("preserves ./ prefix for directory completions", () => {
|
||||||
|
setupFolder(baseDir, {
|
||||||
|
dirs: ["src"],
|
||||||
|
files: {
|
||||||
|
"src/index.ts": "export {};",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const provider = new CombinedAutocompleteProvider([], baseDir);
|
||||||
|
const line = "./sr";
|
||||||
|
const result = provider.getForceFileSuggestions([line], 0, line.length);
|
||||||
|
|
||||||
|
assert.notEqual(result, null, "Should return suggestions for ./ directory path");
|
||||||
|
const values = result?.items.map((item) => item.value);
|
||||||
|
assert.ok(values?.includes("./src/"), `Expected ./src/ in ${JSON.stringify(values)}`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("quoted path completion", () => {
|
describe("quoted path completion", () => {
|
||||||
let baseDir = "";
|
let baseDir = "";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user