Skip to content

Commit 9f6ceb0

Browse files
authored
Merge pull request microsoft#223734 from microsoft/tyriar/223316
Normalize path depending on OS separator
2 parents bdde2df + f1cb13b commit 9f6ceb0

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalSuggestAddon.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ export class SuggestAddon extends Disposable implements ITerminalAddon, ISuggest
111111
private _screen?: HTMLElement;
112112
private _suggestWidget?: SimpleSuggestWidget;
113113
private _enableWidget: boolean = true;
114+
private _pathSeparator: string = sep;
114115
private _isFilteringDirectories: boolean = false;
115116

116117
private _codeCompletionsRequested: boolean = false;
@@ -271,7 +272,7 @@ export class SuggestAddon extends Disposable implements ITerminalAddon, ISuggest
271272
this._cursorIndexDelta = this._currentPromptInputState.cursorIndex - this._initialPromptInputState.cursorIndex;
272273
let leadingLineContent = this._leadingLineContent + this._currentPromptInputState.value.substring(this._leadingLineContent.length, this._leadingLineContent.length + this._cursorIndexDelta);
273274
if (this._isFilteringDirectories) {
274-
leadingLineContent = leadingLineContent.replaceAll('/', '\\');
275+
leadingLineContent = normalizePathSeparator(leadingLineContent, this._pathSeparator);
275276
}
276277
const lineContext = new LineContext(leadingLineContent, this._cursorIndexDelta);
277278
this._suggestWidget.setLineContext(lineContext);
@@ -353,9 +354,11 @@ export class SuggestAddon extends Disposable implements ITerminalAddon, ISuggest
353354
this._cursorIndexDelta = 0;
354355

355356
let leadingLineContent = this._leadingLineContent + this._currentPromptInputState.value.substring(this._leadingLineContent.length, this._leadingLineContent.length + this._cursorIndexDelta);
356-
this._isFilteringDirectories = completions.every(e => e.completion.isDirectory || e.completion.isFile);
357+
this._isFilteringDirectories = completions.some(e => e.completion.isDirectory) && completions.every(e => e.completion.isDirectory || e.completion.isFile);
357358
if (this._isFilteringDirectories) {
358-
leadingLineContent = leadingLineContent.replaceAll('/', '\\');
359+
const firstDir = completions.find(e => e.completion.isDirectory);
360+
this._pathSeparator = firstDir?.completion.label.match(/(?<sep>[\\\/])/)?.groups?.sep ?? sep;
361+
leadingLineContent = normalizePathSeparator(leadingLineContent, this._pathSeparator);
359362
}
360363
const lineContext = new LineContext(leadingLineContent, this._cursorIndexDelta);
361364
const model = new SimpleCompletionModel(completions, lineContext, replacementIndex, replacementLength);
@@ -726,3 +729,10 @@ function getIcon(resultType: number, tooltip: string): ThemeIcon {
726729
}
727730
return pwshTypeToIconMap[resultType] ?? Codicon.symbolText;
728731
}
732+
733+
function normalizePathSeparator(path: string, sep: string): string {
734+
if (sep === '/') {
735+
return path.replaceAll('\\', '/');
736+
}
737+
return path.replaceAll('/', '\\');
738+
}

0 commit comments

Comments
 (0)