Browse Source

Fixed SD2-1604 - Code completion does not learn commonly used items

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5676 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 15 years ago
parent
commit
79e8189c7c
  1. 1
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs
  2. 4
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs
  3. 7
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetCompletionItem.cs
  4. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs
  5. 6
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/ICompletionData.cs
  6. 10
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionItemProvider.cs
  7. 11
      src/Main/Base/Project/Src/Editor/CodeCompletion/ICompletionItem.cs
  8. 4
      src/Main/Base/Project/Src/Editor/CodeCompletion/OverrideCompletionItem.cs

1
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs

@ -70,6 +70,7 @@ namespace ICSharpCode.XamlBinding @@ -70,6 +70,7 @@ namespace ICSharpCode.XamlBinding
public override void Complete(CompletionContext context)
{
if (addType) {
MarkAsUsed();
string newText = Entity.DeclaringType.Name + "." + Text;
context.Editor.Document.Replace(context.StartOffset, context.Length, newText);
context.EndOffset = context.StartOffset + newText.Length;

4
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs

@ -168,6 +168,10 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -168,6 +168,10 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
}
public double Priority {
get { return item.Priority; }
}
public void Complete(TextArea textArea, ISegment completionSegment, EventArgs insertionRequestEventArgs)
{
CompletionContext context = new CompletionContext {

7
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetCompletionItem.cs

@ -38,6 +38,8 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -38,6 +38,8 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
if (textArea == null)
throw new ArgumentException("textEditor must be an AvalonEdit text editor");
this.codeSnippet = codeSnippet;
this.Priority = CodeCompletionDataUsageCache.GetPriority("snippet" + codeSnippet.Name, true);
}
public bool AlwaysInsertSnippet { get; set; }
@ -63,6 +65,9 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -63,6 +65,9 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
{
if (context.Editor != this.textEditor)
throw new ArgumentException("wrong editor");
CodeCompletionDataUsageCache.IncrementUsage("snippet" + codeSnippet.Name);
using (context.Editor.Document.OpenUndoGroup()) {
if (context.CompletionChar == '\t' || AlwaysInsertSnippet) {
context.Editor.Document.Remove(context.StartOffset, context.Length);
@ -98,5 +103,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -98,5 +103,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
return fancyDescription;
}
}
public double Priority { get; set; }
}
}

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs

@ -189,7 +189,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -189,7 +189,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
for (int i = 0; i < completionData.Count; ++i) {
string itemText = completionData[i].Text;
if (itemText.StartsWith(startText, StringComparison.OrdinalIgnoreCase)) {
double priority = 0; //completionData[i].Priority;
double priority = completionData[i].Priority;
int quality;
if (string.Equals(itemText, startText, StringComparison.OrdinalIgnoreCase)) {
if (startText == itemText)

6
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/ICompletionData.cs

@ -38,6 +38,12 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -38,6 +38,12 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
/// </summary>
object Description { get; }
/// <summary>
/// Gets the priority. This property is used in the selection logic. You can use it to prefer selecting those items
/// which the user is accessing most frequently.
/// </summary>
double Priority { get; }
/// <summary>
/// Perform the completion.
/// </summary>

10
src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionItemProvider.cs

@ -182,8 +182,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -182,8 +182,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
public class CodeCompletionItem : ICompletionItem
{
// TODO: what to do with these properties?
[Obsolete]
public double Priority { get; set; }
readonly IEntity entity;
@ -201,6 +199,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -201,6 +199,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
description = ambience.Convert(entity);
this.Image = ClassBrowserIconService.GetIcon(entity);
this.Overloads = 1;
this.Priority = CodeCompletionDataUsageCache.GetPriority(entity.DotNetName, true);
}
public IEntity Entity {
@ -213,8 +213,14 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -213,8 +213,14 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
public IImage Image { get; set; }
protected void MarkAsUsed()
{
CodeCompletionDataUsageCache.IncrementUsage(entity.DotNetName);
}
public virtual void Complete(CompletionContext context)
{
MarkAsUsed();
context.Editor.Document.Replace(context.StartOffset, context.Length, this.Text);
context.EndOffset = context.StartOffset + this.Text.Length;

11
src/Main/Base/Project/Src/Editor/CodeCompletion/ICompletionItem.cs

@ -19,6 +19,15 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -19,6 +19,15 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
/// Performs code completion for the item.
/// </summary>
void Complete(CompletionContext context);
/// <summary>
/// Gets a priority value for the completion data item.
/// When selecting items by their start characters, the item with the highest
/// priority is selected first.
/// </summary>
double Priority {
get;
}
}
public class DefaultCompletionItem : ICompletionItem
@ -27,6 +36,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -27,6 +36,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
public virtual string Description { get; set; }
public virtual IImage Image { get; set; }
public virtual double Priority { get { return 0; } }
public DefaultCompletionItem(string text)
{
this.Text = text;

4
src/Main/Base/Project/Src/Editor/CodeCompletion/OverrideCompletionItem.cs

@ -14,7 +14,7 @@ using ICSharpCode.SharpDevelop.Dom.Refactoring; @@ -14,7 +14,7 @@ using ICSharpCode.SharpDevelop.Dom.Refactoring;
namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
{
public class OverrideCompletionItem : ICompletionItem
public sealed class OverrideCompletionItem : ICompletionItem
{
IMember member;
string text;
@ -49,6 +49,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -49,6 +49,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
}
}
double ICompletionItem.Priority { get { return 0; } }
static string GetName(IMember member, ConversionFlags flags)
{
IAmbience ambience = AmbienceService.GetCurrentAmbience();

Loading…
Cancel
Save