From 3fe3e66195a76a9f624e80c76cc2b5f1ada8aa29 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 16 Aug 2014 18:12:23 +0200 Subject: [PATCH] work on #527: Code Completion Options broken in 5.0 --- .../Src/Completion/CSharpCompletionBinding.cs | 3 +- .../AvalonEdit.AddIn/Src/CodeEditor.cs | 4 + .../CodeCompletionOptionPanel.xaml | 134 +++++++----------- .../CodeCompletionOptionPanel.xaml.cs | 43 +++--- .../CodeCompletion/ICompletionItemList.cs | 20 +-- .../Base/Project/Editor/ToolTipService.cs | 2 +- .../ParserService/CodeCompletionOptions.cs | 20 ++- 7 files changed, 104 insertions(+), 122 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs index 11bbd494da..c17fd5b888 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs @@ -115,6 +115,7 @@ namespace CSharpBinding.Completion } else { startPos = caretOffset; if (char.IsLetterOrDigit (completionChar) || completionChar == '_') { + if (!CodeCompletionOptions.CompleteWhenTyping) return false; if (startPos > 1 && char.IsLetterOrDigit (completionContext.Document.GetCharAt (startPos - 2))) return false; completionData = cce.GetCompletionData(startPos, false); @@ -137,7 +138,7 @@ namespace CSharpBinding.Completion return true; } - if (!ctrlSpace) { + if (CodeCompletionOptions.InsightEnabled && !ctrlSpace) { // Method Insight var pce = new CSharpParameterCompletionEngine( completionContext.Document, diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs index 0c14792c7c..df011392f8 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs @@ -569,6 +569,10 @@ namespace ICSharpCode.AvalonEdit.AddIn SD.ParserService.ParseAsync(this.FileName, this.Document.CreateSnapshot()).FireAndForget(); } else { if (e.Text.Length == 1) { + // disable all code completion bindings when CC is disabled + if (!CodeCompletionOptions.EnableCodeCompletion) + return; + foreach (ICodeCompletionBinding cc in CodeCompletionBindings) { if (cc.HandleKeyPressed(adapter, c)) break; diff --git a/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml b/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml index f39d4b88cd..9d395de780 100644 --- a/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml +++ b/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml @@ -5,106 +5,68 @@ xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui" xmlns:sd="clr-namespace:ICSharpCode.SharpDevelop" xmlns:widgets="clr-namespace:ICSharpCode.SharpDevelop.Widgets;assembly=ICSharpCode.SharpDevelop.Widgets"> - - - - - - - + + VerticalAlignment="Center" /> - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - + + + + + + + - - + - - + - - + - - - - + + - + - + \ No newline at end of file diff --git a/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs b/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs index e70363988c..51de768fa9 100644 --- a/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs +++ b/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs @@ -42,11 +42,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion this.UseDataUsageCache = CodeCompletionOptions.DataUsageCacheEnabled; DataUsageCacheItemCount = CodeCompletionOptions.DataUsageCacheItemCount; UseTooltips = CodeCompletionOptions.TooltipsEnabled; - useDebugTooltipsOnly.IsChecked = CodeCompletionOptions.TooltipsOnlyWhenDebugging; - completeWhenTyping.IsChecked = CodeCompletionOptions.CompleteWhenTyping; - useKeywordCompletionCheckBox.IsChecked = CodeCompletionOptions.KeywordCompletionEnabled; UseInsight = CodeCompletionOptions.InsightEnabled; - refreshInsightOnComma.IsChecked = CodeCompletionOptions.InsightRefreshOnComma; } @@ -54,13 +50,9 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion { CodeCompletionOptions.EnableCodeCompletion = this.EnableCodeCompletion; CodeCompletionOptions.DataUsageCacheEnabled = this.UseDataUsageCache; - CodeCompletionOptions.DataUsageCacheItemCount = DataUsageCacheItemCount; - CodeCompletionOptions.TooltipsEnabled = UseTooltips; - CodeCompletionOptions.TooltipsOnlyWhenDebugging = (bool)useDebugTooltipsOnly.IsChecked; - CodeCompletionOptions.CompleteWhenTyping = (bool)completeWhenTyping.IsChecked; - CodeCompletionOptions.KeywordCompletionEnabled = (bool)useKeywordCompletionCheckBox.IsChecked; + CodeCompletionOptions.DataUsageCacheItemCount = DataUsageCacheItemCount; + CodeCompletionOptions.TooltipsEnabled = UseTooltips; CodeCompletionOptions.InsightEnabled = UseInsight; - CodeCompletionOptions.InsightRefreshOnComma = (bool)refreshInsightOnComma.IsChecked; return base.SaveOptions(); } @@ -72,8 +64,10 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion public bool EnableCodeCompletion { get { return enableCodeCompletion; } - set { enableCodeCompletion = value; - base.RaisePropertyChanged(() => EnableCodeCompletion);} + set { + enableCodeCompletion = value; + base.RaisePropertyChanged(() => EnableCodeCompletion); + } } @@ -81,33 +75,40 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion public bool UseDataUsageCache { get { return useDataUsageCache; } - set { useDataUsageCache = value; - base.RaisePropertyChanged(() => UseDataUsageCache);} + set { + useDataUsageCache = value; + base.RaisePropertyChanged(() => UseDataUsageCache); + } } private int dataUsageCacheItemCount; public int DataUsageCacheItemCount { get { return dataUsageCacheItemCount; } - set { dataUsageCacheItemCount = value; - base.RaisePropertyChanged(() => DataUsageCacheItemCount);} + set { + dataUsageCacheItemCount = value; + base.RaisePropertyChanged(() => DataUsageCacheItemCount); + } } - private bool useTooltips; public bool UseTooltips { get { return useTooltips; } - set { useTooltips = value; - base.RaisePropertyChanged(() => UseTooltips);} + set { + useTooltips = value; + base.RaisePropertyChanged(() => UseTooltips); + } } private bool useInsight; public bool UseInsight { get { return useInsight; } - set { useInsight = value; - base.RaisePropertyChanged(() => UseInsight);} + set { + useInsight = value; + base.RaisePropertyChanged(() => UseInsight); + } } #endregion diff --git a/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs b/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs index faefa1a8aa..031d1abb6a 100644 --- a/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs +++ b/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs @@ -138,16 +138,20 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion /// public virtual CompletionItemListKeyResult ProcessInput(char key) { - if (key == ' ' && this.InsertSpace) { - this.InsertSpace = false; // insert space only once - return CompletionItemListKeyResult.BeforeStartKey; - } else if (char.IsLetterOrDigit(key) || key == '_') { - this.InsertSpace = false; // don't insert space if user types normally + if (char.IsLetterOrDigit(key) || key == '_') { + InsertSpace = false; // don't insert space if user types normally return CompletionItemListKeyResult.NormalKey; - } else { - // do not reset insertSpace when doing an insertion! - return CompletionItemListKeyResult.InsertionKey; } + if (key == ' ' && InsertSpace) { + InsertSpace = false; + // insert space only once + return CompletionItemListKeyResult.BeforeStartKey; + } + if (CodeCompletionOptions.CommitOnTabEnterOnly || !CodeCompletionOptions.CommitOnChar(key)) { + return CompletionItemListKeyResult.Cancel; + } + // do not reset insertSpace when doing an insertion! + return CompletionItemListKeyResult.InsertionKey; } /// diff --git a/src/Main/Base/Project/Editor/ToolTipService.cs b/src/Main/Base/Project/Editor/ToolTipService.cs index 912765c35e..aa98e2bf6d 100644 --- a/src/Main/Base/Project/Editor/ToolTipService.cs +++ b/src/Main/Base/Project/Editor/ToolTipService.cs @@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Editor if (e == null) throw new ArgumentNullException("e"); - if (!CodeCompletionOptions.EnableCodeCompletion || !CodeCompletionOptions.TooltipsEnabled) { + if (!CodeCompletionOptions.TooltipsEnabled) { e.Handled = true; return; } diff --git a/src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs b/src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs index b82f1bb429..4e2965dbeb 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs @@ -63,16 +63,16 @@ namespace ICSharpCode.SharpDevelop set { properties.Set("TooltipsOnlyWhenDebugging", value); } } - public static bool KeywordCompletionEnabled { - get { return properties.Get("KeywordCompletionEnabled", true); } - set { properties.Set("KeywordCompletionEnabled", value); } - } - public static bool CompleteWhenTyping { get { return properties.Get("CompleteWhenTyping", true); } set { properties.Set("CompleteWhenTyping", value); } } + public static bool CommitOnTabEnterOnly { + get { return properties.Get("CommitOnTabEnterOnly", false); } + set { properties.Set("CommitOnTabEnterOnly", value); } + } + public static bool InsightEnabled { get { return properties.Get("InsightEnabled", true); } set { properties.Set("InsightEnabled", value); } @@ -87,6 +87,16 @@ namespace ICSharpCode.SharpDevelop get { return properties.Get("TooltipLinkTarget", TooltipLinkTarget.Documentation); } set { properties.Set("TooltipLinkTarget", value); } } + + public static string CompletionCharList { + get { return properties.Get("CompletionCharList", @"{}[]().,:;+-*/%&|^!~=<>?@#'""\"); } + set { properties.Set("CompletionCharList", value); } + } + + public static bool CommitOnChar(char key) + { + return CompletionCharList.IndexOf(key) >= 0; + } } public enum TooltipLinkTarget {