Browse Source

fix #276: Merge keyword CC items with snippet CC items

fix #277: The "using" snippet should not be displayed for the "using" keyword on the namespace/global level
pull/326/merge
Siegfried Pammer 12 years ago
parent
commit
dac858b664
  1. 21
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs
  2. 5
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionDataFactory.cs

21
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs

@ -24,6 +24,7 @@ using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Completion; using ICSharpCode.NRefactory.Completion;
using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Completion; using ICSharpCode.NRefactory.CSharp.Completion;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion; using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
@ -92,7 +93,7 @@ namespace CSharpBinding.Completion
} }
DefaultCompletionItemList list = new DefaultCompletionItemList(); DefaultCompletionItemList list = new DefaultCompletionItemList();
list.Items.AddRange(completionData.Cast<ICompletionItem>()); list.Items.AddRange(FilterAndAddTemplates(editor, completionData.Cast<ICompletionItem>().ToList()));
if (list.Items.Count > 0) { if (list.Items.Count > 0) {
list.SortItems(); list.SortItems();
list.PreselectionLength = editor.Caret.Offset - startPos; list.PreselectionLength = editor.Caret.Offset - startPos;
@ -120,5 +121,23 @@ namespace CSharpBinding.Completion
} }
return false; return false;
} }
static IEnumerable<ICompletionItem> FilterAndAddTemplates(ITextEditor editor, IList<ICompletionItem> items)
{
List<ISnippetCompletionItem> snippets = editor.GetSnippets().ToList();
snippets.RemoveAll(item => !FitsInContext(item, items));
items.RemoveAll(item => ClassBrowserIconService.Keyword.Equals(item.Image) && snippets.Exists(i => i.Text == item.Text));
items.AddRange(snippets);
return items;
}
static bool FitsInContext(ISnippetCompletionItem item, IList<ICompletionItem> list)
{
if (string.IsNullOrEmpty(item.Keyword))
return true;
return list.Any(x => ClassBrowserIconService.Keyword.Equals(x.Image)
&& x.Text == item.Keyword);
}
} }
} }

5
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionDataFactory.cs

@ -141,8 +141,9 @@ namespace CSharpBinding.Completion
IEnumerable<ICompletionData> ICompletionDataFactory.CreateCodeTemplateCompletionData() IEnumerable<ICompletionData> ICompletionDataFactory.CreateCodeTemplateCompletionData()
{ {
return completionContext.Editor.GetSnippets().OfType<ISnippetCompletionItem>() // We handle this in CSharpCompletionBinding, because there we have the full list
.Select(snippet => new SnippetCompletionData(snippet)); // of keywords available in the given context.
return ICSharpCode.NRefactory.EmptyList<ICompletionData>.Instance;
} }
IEnumerable<ICompletionData> ICompletionDataFactory.CreatePreProcessorDefinesCompletionData() IEnumerable<ICompletionData> ICompletionDataFactory.CreatePreProcessorDefinesCompletionData()

Loading…
Cancel
Save