Skip to content

Commit a384e72

Browse files
committed
WIP: Improve path auto-completion
1 parent 32354f8 commit a384e72

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/PowerShellEditorServices.Protocol/LanguageServer/Completion.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ public enum CompletionItemKind
5858
Folder = 19
5959
}
6060

61+
public enum InsertTextFormat
62+
{
63+
PlainText = 1,
64+
Snippet = 2,
65+
}
66+
6167
[DebuggerDisplay("NewText = {NewText}, Range = {Range.Start.Line}:{Range.Start.Character} - {Range.End.Line}:{Range.End.Character}")]
6268
public class TextEdit
6369
{
@@ -69,6 +75,11 @@ public class TextEdit
6975
[DebuggerDisplay("Kind = {Kind.ToString()}, Label = {Label}, Detail = {Detail}")]
7076
public class CompletionItem
7177
{
78+
public CompletionItem()
79+
{
80+
this.InsertTextFormat = InsertTextFormat.PlainText;
81+
}
82+
7283
public string Label { get; set; }
7384

7485
public CompletionItemKind? Kind { get; set; }
@@ -86,6 +97,8 @@ public class CompletionItem
8697

8798
public string InsertText { get; set; }
8899

100+
public InsertTextFormat InsertTextFormat { get; set; }
101+
89102
public Range Range { get; set; }
90103

91104
public string[] CommitCharacters { get; set; }

src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1915,6 +1915,8 @@ private static CompletionItem CreateCompletionItem(
19151915
{
19161916
string detailString = null;
19171917
string documentationString = null;
1918+
string completionText = completionDetails.CompletionText;
1919+
InsertTextFormat insertTextFormat = InsertTextFormat.PlainText;
19181920

19191921
if ((completionDetails.CompletionType == CompletionType.Variable) ||
19201922
(completionDetails.CompletionType == CompletionType.ParameterName))
@@ -1956,6 +1958,14 @@ private static CompletionItem CreateCompletionItem(
19561958
}
19571959
}
19581960
}
1961+
else if (((completionDetails.CompletionType == CompletionType.File) ||
1962+
(completionDetails.CompletionType == CompletionType.Folder)) &&
1963+
(completionText.EndsWith("\"") || completionText.EndsWith("'")))
1964+
{
1965+
int len = completionDetails.CompletionText.Length;
1966+
completionText = completionDetails.CompletionText.Insert(len - 1, "$0");
1967+
insertTextFormat = InsertTextFormat.Snippet;
1968+
}
19591969

19601970
// Force the client to maintain the sort order in which the
19611971
// original completion results were returned. We just need to
@@ -1966,7 +1976,8 @@ private static CompletionItem CreateCompletionItem(
19661976

19671977
return new CompletionItem
19681978
{
1969-
InsertText = completionDetails.CompletionText,
1979+
InsertText = completionText,
1980+
InsertTextFormat = insertTextFormat,
19701981
Label = completionDetails.ListItemText,
19711982
Kind = MapCompletionKind(completionDetails.CompletionType),
19721983
Detail = detailString,
@@ -1975,7 +1986,7 @@ private static CompletionItem CreateCompletionItem(
19751986
FilterText = completionDetails.CompletionText,
19761987
TextEdit = new TextEdit
19771988
{
1978-
NewText = completionDetails.CompletionText,
1989+
NewText = completionText,
19791990
Range = new Range
19801991
{
19811992
Start = new Position

0 commit comments

Comments
 (0)