From 3ff8f3f421f055db47d464149ff34965e8cfc3be Mon Sep 17 00:00:00 2001 From: Kirill Osenkov Date: Sat, 30 Nov 2024 22:50:05 -0800 Subject: [PATCH 1/2] Allow passing IncludeBracket to XmlSchemaCompletionBuilder When triggering completion from typing open `<` the ApplicableToSpan includes the character, so if we don't respect IncludeBracket the completion items will erase the bracket. Allow passing IncludeBracket such that the item insertText includes the bracket if necessary. This will be used by XSD completion. --- .../Completion/XmlSchemaCompletionBuilder.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Editor/Completion/XmlSchemaCompletionBuilder.cs b/Editor/Completion/XmlSchemaCompletionBuilder.cs index 0a0ba9bc..866f893b 100644 --- a/Editor/Completion/XmlSchemaCompletionBuilder.cs +++ b/Editor/Completion/XmlSchemaCompletionBuilder.cs @@ -32,6 +32,7 @@ using Microsoft.VisualStudio.Language.Intellisense.AsyncCompletion.Data; using Microsoft.VisualStudio.Language.Intellisense.AsyncCompletion; +using Microsoft.VisualStudio.Text.Adornments; namespace MonoDevelop.Xml.Editor.Completion { @@ -43,6 +44,8 @@ class XmlSchemaCompletionBuilder readonly XmlNamespacePrefixMap nsMap; readonly IAsyncCompletionSource source; + public bool IncludeBracket { get; set; } + public XmlSchemaCompletionBuilder (IAsyncCompletionSource source, XmlNamespacePrefixMap nsMap) { this.nsMap = nsMap; @@ -121,6 +124,7 @@ public XmlSchemaCompletionBuilder AddElement (string name, string prefix, string return this; var item = new CompletionItem (name, source, XmlImages.Element); + var item = CreateItem (name, XmlImages.Element); item.AddDocumentation (documentation); items.Add (item); return this; @@ -140,6 +144,7 @@ public XmlSchemaCompletionBuilder AddElement (string name, string prefix, XmlSch return this; var item = new CompletionItem (name, source, XmlImages.Element); + var item = CreateItem (name, XmlImages.Element); if (annotation is not null) { item.AddDocumentation (annotation); } @@ -148,6 +153,22 @@ public XmlSchemaCompletionBuilder AddElement (string name, string prefix, XmlSch } public ImmutableArray GetItems () => ImmutableArray.Empty.AddRange (items); + + CompletionItem CreateItem(string name, ImageElement image) + { + var item = new CompletionItem( + displayText: name, + source: source, + icon: image, + filters: [], + suffix: string.Empty, + insertText: IncludeBracket ? "<" + name : name, + sortText: name, + filterText: name, + attributeIcons: []) + .AddKind(XmlCompletionItemKind.Element); + return item; + } } } From 3801090ffb1331a8e6d64024ba6dba670cefe2d1 Mon Sep 17 00:00:00 2001 From: Kirill Osenkov Date: Sat, 30 Nov 2024 22:57:35 -0800 Subject: [PATCH 2/2] Fix wrong edit --- Editor/Completion/XmlSchemaCompletionBuilder.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Editor/Completion/XmlSchemaCompletionBuilder.cs b/Editor/Completion/XmlSchemaCompletionBuilder.cs index 866f893b..7c752f4d 100644 --- a/Editor/Completion/XmlSchemaCompletionBuilder.cs +++ b/Editor/Completion/XmlSchemaCompletionBuilder.cs @@ -123,7 +123,6 @@ public XmlSchemaCompletionBuilder AddElement (string name, string prefix, string if (!names.Add (name)) return this; - var item = new CompletionItem (name, source, XmlImages.Element); var item = CreateItem (name, XmlImages.Element); item.AddDocumentation (documentation); items.Add (item); @@ -143,7 +142,6 @@ public XmlSchemaCompletionBuilder AddElement (string name, string prefix, XmlSch if (!names.Add (name)) return this; - var item = new CompletionItem (name, source, XmlImages.Element); var item = CreateItem (name, XmlImages.Element); if (annotation is not null) { item.AddDocumentation (annotation);