Browse Source

work on #527: Code Completion Options broken in 5.0

pull/505/merge
Siegfried Pammer 12 years ago
parent
commit
3fe3e66195
  1. 3
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs
  2. 4
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  3. 134
      src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml
  4. 43
      src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs
  5. 20
      src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs
  6. 2
      src/Main/Base/Project/Editor/ToolTipService.cs
  7. 20
      src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs

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

@ -115,6 +115,7 @@ namespace CSharpBinding.Completion @@ -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 @@ -137,7 +138,7 @@ namespace CSharpBinding.Completion
return true;
}
if (!ctrlSpace) {
if (CodeCompletionOptions.InsightEnabled && !ctrlSpace) {
// Method Insight
var pce = new CSharpParameterCompletionEngine(
completionContext.Document,

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

@ -569,6 +569,10 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -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;

134
src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml

@ -5,106 +5,68 @@ @@ -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">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<widgets:StackPanelWithSpacing SpaceBetweenItems="5">
<TextBlock
Margin="0,0,0,5"
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.MainOption}"
TextWrapping="Wrap"
VerticalAlignment="Center"/>
VerticalAlignment="Center" />
<CheckBox Grid.Row="1" VerticalAlignment="Center"
Content="{core:Localize Dialog.Options.IDEOptions.TextEditor.General.CodeCompletionCheckBox}"
IsChecked="{Binding EnableCodeCompletion}">
</CheckBox>
<CheckBox
VerticalAlignment="Center"
Content="{core:Localize Dialog.Options.IDEOptions.TextEditor.General.CodeCompletionCheckBox}"
IsChecked="{Binding EnableCodeCompletion}" />
<GroupBox Grid.Row="2" Margin="0,8,0,0"
Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.DetailSettings}"
IsEnabled="{Binding EnableCodeCompletion}">
<GroupBox
Margin="5"
Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.DetailSettings}"
IsEnabled="{Binding EnableCodeCompletion}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<CheckBox Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDataUsageCache}"
IsChecked="{Binding UseDataUsageCache}">
</CheckBox>
<widgets:StackPanelWithSpacing Grid.Row="1" SpaceBetweenItems="4" Margin="30,0,0,0"
Orientation="Horizontal" IsEnabled="{Binding UseDataUsageCache}">
<Label Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.SaveItemCountBeforeNumber}"></Label>
<widgets:NumericUpDown MinWidth="50"
Minimum="50" Maximum="10000" SmallChange="50" IsEnabled="{Binding UseDataUsageCache}"
Value="{Binding DataUsageCacheItemCount}">
</widgets:NumericUpDown>
<Label Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.SaveItemCountAfterNumber}"></Label>
<Button Style="{x:Static core:GlobalStyles.ButtonStyle}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.ClearCache}"
Click="Button_Click">
</Button>
<widgets:StackPanelWithSpacing SpaceBetweenItems="10">
<TextBlock
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.LanguageDependend}"
TextWrapping="Wrap"/>
</widgets:StackPanelWithSpacing>
<CheckBox
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.CompleteWhenTyping}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CompleteWhenTyping}"/>
<CheckBox Grid.Row="2"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseTooltips}"
IsChecked="{Binding UseTooltips}">
</CheckBox>
<CheckBox x:Name="useDebugTooltipsOnly" Grid.Row="3" Margin="30,0,0,0"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDebugTooltipsOnly}"
IsEnabled="{Binding UseTooltips}">
</CheckBox>
<TextBlock Grid.Row="4" Margin="0,3,0,13"
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.LanguageDependend}"
TextWrapping="Wrap">
</TextBlock>
<CheckBox
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.CommitOnTabEnterOnly}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CommitOnTabEnterOnly}"/>
</widgets:StackPanelWithSpacing>
</GroupBox>
<GroupBox Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.TooltipLabel}" Margin="5">
<widgets:StackPanelWithSpacing SpaceBetweenItems="10">
<CheckBox
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseTooltips}"
IsChecked="{Binding UseTooltips}" />
<CheckBox x:Name="completeWhenTyping" Grid.Row="5"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CompleteWhenTyping}">
</CheckBox>
<CheckBox
Margin="30,0,0,0"
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.TooltipsOnlyWhenDebugging}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDebugTooltipsOnly}"
IsEnabled="{Binding UseTooltips}" />
<CheckBox x:Name="useKeywordCompletionCheckBox" Grid.Row="6"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseKeywordCompletion}">
</CheckBox>
<CheckBox
VerticalAlignment="Center"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseInsight}"
IsChecked="{Binding UseInsight}" />
<CheckBox Grid.Row="7" VerticalAlignment="Center"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseInsight}"
IsChecked="{Binding UseInsight}" >
</CheckBox>
<CheckBox
Margin="30,0,0,0"
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.InsightRefreshOnComma}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.RefreshInsightOnComma}"
IsEnabled="{Binding UseInsight}" />
<CheckBox x:Name="refreshInsightOnComma" Grid.Row="8" Margin="30,0,0,0"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.RefreshInsightOnComma}"
IsEnabled="{Binding UseInsight}">
</CheckBox>
<StackPanel Grid.Row="9" Orientation="Horizontal" Margin="0,10">
<TextBlock Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTarget}" Margin="0,2,2,0" />
<ComboBox sd:EnumBinding.EnumType="{x:Type sd:TooltipLinkTarget}"
SelectedValue="{core:OptionBinding sd:CodeCompletionOptions.TooltipLinkTarget}" />
<ComboBox
sd:EnumBinding.EnumType="{x:Type sd:TooltipLinkTarget}"
SelectedValue="{core:OptionBinding sd:CodeCompletionOptions.TooltipLinkTarget}" />
</StackPanel>
</Grid>
</widgets:StackPanelWithSpacing>
</GroupBox>
</Grid>
</widgets:StackPanelWithSpacing>
</gui:OptionPanel>

43
src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs

@ -42,11 +42,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -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 @@ -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 @@ -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 @@ -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

20
src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs

@ -138,16 +138,20 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -138,16 +138,20 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
/// <inheritdoc/>
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;
}
/// <inheritdoc/>

2
src/Main/Base/Project/Editor/ToolTipService.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -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;
}

20
src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs

@ -63,16 +63,16 @@ namespace ICSharpCode.SharpDevelop @@ -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 @@ -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 {

Loading…
Cancel
Save