Browse Source

fix insertion of ="" with x:Key or other special completion items

pull/59/merge
Siegfried Pammer 13 years ago
parent
commit
16e7d7bc26
  1. 56
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs

56
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs

@ -60,40 +60,38 @@ namespace ICSharpCode.XamlBinding
context.EndOffset++; context.EndOffset++;
} }
if (item is XamlCompletionItem) { if (item is XamlCompletionItem && !item.Text.EndsWith(":", StringComparison.Ordinal)) {
XamlCompletionItem cItem = item as XamlCompletionItem; XamlCompletionItem cItem = item as XamlCompletionItem;
if (cItem.Entity is IProperty || cItem.Entity is IEvent) { if (xamlContext.Description == XamlContextDescription.InTag) {
if (xamlContext.Description == XamlContextDescription.InTag) { context.Editor.Document.Insert(context.EndOffset, "=\"\"");
context.Editor.Document.Insert(context.EndOffset, "=\"\""); context.CompletionCharHandled = context.CompletionChar == '=';
context.CompletionCharHandled = context.CompletionChar == '='; context.Editor.Caret.Offset--;
context.Editor.Caret.Offset--; new XamlCodeCompletionBinding().CtrlSpace(context.Editor);
new XamlCodeCompletionBinding().CtrlSpace(context.Editor); } else if (xamlContext.Description == XamlContextDescription.InMarkupExtension && !string.IsNullOrEmpty(xamlContext.RawAttributeValue)) {
} else if (xamlContext.Description == XamlContextDescription.InMarkupExtension && !string.IsNullOrEmpty(xamlContext.RawAttributeValue)) { string valuePart = xamlContext.RawAttributeValue.Substring(0, xamlContext.ValueStartOffset);
string valuePart = xamlContext.RawAttributeValue.Substring(0, xamlContext.ValueStartOffset); AttributeValue value = MarkupExtensionParser.ParseValue(valuePart);
AttributeValue value = MarkupExtensionParser.ParseValue(valuePart);
if (value != null && !value.IsString) {
if (value != null && !value.IsString) { var markup = Utils.GetMarkupExtensionAtPosition(value.ExtensionValue, context.Editor.Caret.Offset);
var markup = Utils.GetMarkupExtensionAtPosition(value.ExtensionValue, context.Editor.Caret.Offset); if (markup.NamedArguments.Count > 0 || markup.PositionalArguments.Count > 0) {
if (markup.NamedArguments.Count > 0 || markup.PositionalArguments.Count > 0) { int oldOffset = context.Editor.Caret.Offset;
int oldOffset = context.Editor.Caret.Offset; context.Editor.Caret.Offset = context.StartOffset;
context.Editor.Caret.Offset = context.StartOffset; string word = context.Editor.GetWordBeforeCaret().TrimEnd();
string word = context.Editor.GetWordBeforeCaret().TrimEnd(); int spaces = CountWhiteSpacesAtEnd(context.Editor.GetWordBeforeCaret());
int spaces = CountWhiteSpacesAtEnd(context.Editor.GetWordBeforeCaret()); int typeNameStart = markup.ExtensionType.IndexOf(':') + 1;
int typeNameStart = markup.ExtensionType.IndexOf(':') + 1;
if (!(word == "." || word == "," || word == ":") && markup.ExtensionType.Substring(typeNameStart, markup.ExtensionType.Length - typeNameStart) != word) {
if (!(word == "." || word == "," || word == ":") && markup.ExtensionType.Substring(typeNameStart, markup.ExtensionType.Length - typeNameStart) != word) { context.Editor.Document.Replace(context.Editor.Caret.Offset - spaces, spaces, ", ");
context.Editor.Document.Replace(context.Editor.Caret.Offset - spaces, spaces, ", "); oldOffset += (2 - spaces);
oldOffset += (2 - spaces);
}
context.Editor.Caret.Offset = oldOffset;
} }
context.Editor.Caret.Offset = oldOffset;
} }
if (cItem.Text.EndsWith("=", StringComparison.OrdinalIgnoreCase))
new XamlCodeCompletionBinding().CtrlSpace(context.Editor);
} }
if (cItem.Text.EndsWith("=", StringComparison.OrdinalIgnoreCase))
new XamlCodeCompletionBinding().CtrlSpace(context.Editor);
} }
} }

Loading…
Cancel
Save