Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 3fe3e66

Browse files
work on #527: Code Completion Options broken in 5.0
1 parent 4e4ee83 commit 3fe3e66

7 files changed

Lines changed: 104 additions & 122 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ bool ShowCompletion(ITextEditor editor, char completionChar, bool ctrlSpace)
115115
} else {
116116
startPos = caretOffset;
117117
if (char.IsLetterOrDigit (completionChar) || completionChar == '_') {
118+
if (!CodeCompletionOptions.CompleteWhenTyping) return false;
118119
if (startPos > 1 && char.IsLetterOrDigit (completionContext.Document.GetCharAt (startPos - 2)))
119120
return false;
120121
completionData = cce.GetCompletionData(startPos, false);
@@ -137,7 +138,7 @@ bool ShowCompletion(ITextEditor editor, char completionChar, bool ctrlSpace)
137138
return true;
138139
}
139140

140-
if (!ctrlSpace) {
141+
if (CodeCompletionOptions.InsightEnabled && !ctrlSpace) {
141142
// Method Insight
142143
var pce = new CSharpParameterCompletionEngine(
143144
completionContext.Document,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,10 @@ void TextAreaTextEntered(object sender, TextCompositionEventArgs e)
569569
SD.ParserService.ParseAsync(this.FileName, this.Document.CreateSnapshot()).FireAndForget();
570570
} else {
571571
if (e.Text.Length == 1) {
572+
// disable all code completion bindings when CC is disabled
573+
if (!CodeCompletionOptions.EnableCodeCompletion)
574+
return;
575+
572576
foreach (ICodeCompletionBinding cc in CodeCompletionBindings) {
573577
if (cc.HandleKeyPressed(adapter, c))
574578
break;

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

Lines changed: 48 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -5,106 +5,68 @@
55
xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui"
66
xmlns:sd="clr-namespace:ICSharpCode.SharpDevelop"
77
xmlns:widgets="clr-namespace:ICSharpCode.SharpDevelop.Widgets;assembly=ICSharpCode.SharpDevelop.Widgets">
8-
<Grid>
9-
<Grid.RowDefinitions>
10-
<RowDefinition Height="Auto"></RowDefinition>
11-
<RowDefinition Height="Auto"></RowDefinition>
12-
<RowDefinition Height="Auto"></RowDefinition>
13-
</Grid.RowDefinitions>
14-
8+
<widgets:StackPanelWithSpacing SpaceBetweenItems="5">
159
<TextBlock
16-
Margin="0,0,0,5"
1710
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.MainOption}"
1811
TextWrapping="Wrap"
19-
VerticalAlignment="Center"/>
12+
VerticalAlignment="Center" />
2013

21-
<CheckBox Grid.Row="1" VerticalAlignment="Center"
22-
Content="{core:Localize Dialog.Options.IDEOptions.TextEditor.General.CodeCompletionCheckBox}"
23-
IsChecked="{Binding EnableCodeCompletion}">
24-
</CheckBox>
14+
<CheckBox
15+
VerticalAlignment="Center"
16+
Content="{core:Localize Dialog.Options.IDEOptions.TextEditor.General.CodeCompletionCheckBox}"
17+
IsChecked="{Binding EnableCodeCompletion}" />
2518

26-
<GroupBox Grid.Row="2" Margin="0,8,0,0"
27-
Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.DetailSettings}"
28-
IsEnabled="{Binding EnableCodeCompletion}">
19+
<GroupBox
20+
Margin="5"
21+
Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.DetailSettings}"
22+
IsEnabled="{Binding EnableCodeCompletion}">
2923

30-
<Grid>
31-
<Grid.RowDefinitions>
32-
<RowDefinition Height="25"></RowDefinition>
33-
<RowDefinition Height="25"></RowDefinition>
34-
<RowDefinition Height="25"></RowDefinition>
35-
<RowDefinition Height="25"></RowDefinition>
36-
<RowDefinition Height="Auto"></RowDefinition>
37-
<RowDefinition Height="25"></RowDefinition>
38-
<RowDefinition Height="25"></RowDefinition>
39-
<RowDefinition Height="25"></RowDefinition>
40-
41-
<RowDefinition Height="Auto"></RowDefinition>
42-
<RowDefinition Height="Auto"></RowDefinition>
43-
</Grid.RowDefinitions>
44-
45-
<CheckBox Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDataUsageCache}"
46-
IsChecked="{Binding UseDataUsageCache}">
47-
</CheckBox>
48-
49-
<widgets:StackPanelWithSpacing Grid.Row="1" SpaceBetweenItems="4" Margin="30,0,0,0"
50-
Orientation="Horizontal" IsEnabled="{Binding UseDataUsageCache}">
51-
52-
<Label Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.SaveItemCountBeforeNumber}"></Label>
53-
54-
<widgets:NumericUpDown MinWidth="50"
55-
Minimum="50" Maximum="10000" SmallChange="50" IsEnabled="{Binding UseDataUsageCache}"
56-
Value="{Binding DataUsageCacheItemCount}">
57-
</widgets:NumericUpDown>
58-
59-
<Label Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.SaveItemCountAfterNumber}"></Label>
60-
61-
<Button Style="{x:Static core:GlobalStyles.ButtonStyle}"
62-
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.ClearCache}"
63-
Click="Button_Click">
64-
</Button>
24+
<widgets:StackPanelWithSpacing SpaceBetweenItems="10">
25+
<TextBlock
26+
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.LanguageDependend}"
27+
TextWrapping="Wrap"/>
6528

66-
</widgets:StackPanelWithSpacing>
29+
<CheckBox
30+
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.CompleteWhenTyping}"
31+
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CompleteWhenTyping}"/>
6732

68-
<CheckBox Grid.Row="2"
69-
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseTooltips}"
70-
IsChecked="{Binding UseTooltips}">
71-
</CheckBox>
72-
73-
74-
<CheckBox x:Name="useDebugTooltipsOnly" Grid.Row="3" Margin="30,0,0,0"
75-
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDebugTooltipsOnly}"
76-
IsEnabled="{Binding UseTooltips}">
77-
</CheckBox>
78-
79-
<TextBlock Grid.Row="4" Margin="0,3,0,13"
80-
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.LanguageDependend}"
81-
TextWrapping="Wrap">
82-
</TextBlock>
33+
<CheckBox
34+
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.CommitOnTabEnterOnly}"
35+
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CommitOnTabEnterOnly}"/>
36+
</widgets:StackPanelWithSpacing>
37+
</GroupBox>
38+
39+
<GroupBox Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.TooltipLabel}" Margin="5">
40+
<widgets:StackPanelWithSpacing SpaceBetweenItems="10">
41+
<CheckBox
42+
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseTooltips}"
43+
IsChecked="{Binding UseTooltips}" />
8344

84-
<CheckBox x:Name="completeWhenTyping" Grid.Row="5"
85-
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CompleteWhenTyping}">
86-
</CheckBox>
45+
<CheckBox
46+
Margin="30,0,0,0"
47+
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.TooltipsOnlyWhenDebugging}"
48+
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDebugTooltipsOnly}"
49+
IsEnabled="{Binding UseTooltips}" />
8750

88-
<CheckBox x:Name="useKeywordCompletionCheckBox" Grid.Row="6"
89-
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseKeywordCompletion}">
90-
</CheckBox>
51+
<CheckBox
52+
VerticalAlignment="Center"
53+
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseInsight}"
54+
IsChecked="{Binding UseInsight}" />
9155

92-
<CheckBox Grid.Row="7" VerticalAlignment="Center"
93-
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseInsight}"
94-
IsChecked="{Binding UseInsight}" >
95-
</CheckBox>
56+
<CheckBox
57+
Margin="30,0,0,0"
58+
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.InsightRefreshOnComma}"
59+
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.RefreshInsightOnComma}"
60+
IsEnabled="{Binding UseInsight}" />
9661

97-
<CheckBox x:Name="refreshInsightOnComma" Grid.Row="8" Margin="30,0,0,0"
98-
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.RefreshInsightOnComma}"
99-
IsEnabled="{Binding UseInsight}">
100-
</CheckBox>
101-
10262
<StackPanel Grid.Row="9" Orientation="Horizontal" Margin="0,10">
10363
<TextBlock Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTarget}" Margin="0,2,2,0" />
104-
<ComboBox sd:EnumBinding.EnumType="{x:Type sd:TooltipLinkTarget}"
105-
SelectedValue="{core:OptionBinding sd:CodeCompletionOptions.TooltipLinkTarget}" />
64+
65+
<ComboBox
66+
sd:EnumBinding.EnumType="{x:Type sd:TooltipLinkTarget}"
67+
SelectedValue="{core:OptionBinding sd:CodeCompletionOptions.TooltipLinkTarget}" />
10668
</StackPanel>
107-
</Grid>
69+
</widgets:StackPanelWithSpacing>
10870
</GroupBox>
109-
</Grid>
71+
</widgets:StackPanelWithSpacing>
11072
</gui:OptionPanel>

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

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -42,25 +42,17 @@ public override void LoadOptions()
4242
this.UseDataUsageCache = CodeCompletionOptions.DataUsageCacheEnabled;
4343
DataUsageCacheItemCount = CodeCompletionOptions.DataUsageCacheItemCount;
4444
UseTooltips = CodeCompletionOptions.TooltipsEnabled;
45-
useDebugTooltipsOnly.IsChecked = CodeCompletionOptions.TooltipsOnlyWhenDebugging;
46-
completeWhenTyping.IsChecked = CodeCompletionOptions.CompleteWhenTyping;
47-
useKeywordCompletionCheckBox.IsChecked = CodeCompletionOptions.KeywordCompletionEnabled;
4845
UseInsight = CodeCompletionOptions.InsightEnabled;
49-
refreshInsightOnComma.IsChecked = CodeCompletionOptions.InsightRefreshOnComma;
5046
}
5147

5248

5349
public override bool SaveOptions()
5450
{
5551
CodeCompletionOptions.EnableCodeCompletion = this.EnableCodeCompletion;
5652
CodeCompletionOptions.DataUsageCacheEnabled = this.UseDataUsageCache;
57-
CodeCompletionOptions.DataUsageCacheItemCount = DataUsageCacheItemCount;
58-
CodeCompletionOptions.TooltipsEnabled = UseTooltips;
59-
CodeCompletionOptions.TooltipsOnlyWhenDebugging = (bool)useDebugTooltipsOnly.IsChecked;
60-
CodeCompletionOptions.CompleteWhenTyping = (bool)completeWhenTyping.IsChecked;
61-
CodeCompletionOptions.KeywordCompletionEnabled = (bool)useKeywordCompletionCheckBox.IsChecked;
53+
CodeCompletionOptions.DataUsageCacheItemCount = DataUsageCacheItemCount;
54+
CodeCompletionOptions.TooltipsEnabled = UseTooltips;
6255
CodeCompletionOptions.InsightEnabled = UseInsight;
63-
CodeCompletionOptions.InsightRefreshOnComma = (bool)refreshInsightOnComma.IsChecked;
6456
return base.SaveOptions();
6557
}
6658

@@ -72,42 +64,51 @@ public override bool SaveOptions()
7264

7365
public bool EnableCodeCompletion {
7466
get { return enableCodeCompletion; }
75-
set { enableCodeCompletion = value;
76-
base.RaisePropertyChanged(() => EnableCodeCompletion);}
67+
set {
68+
enableCodeCompletion = value;
69+
base.RaisePropertyChanged(() => EnableCodeCompletion);
70+
}
7771
}
7872

7973

8074
private bool useDataUsageCache;
8175

8276
public bool UseDataUsageCache {
8377
get { return useDataUsageCache; }
84-
set { useDataUsageCache = value;
85-
base.RaisePropertyChanged(() => UseDataUsageCache);}
78+
set {
79+
useDataUsageCache = value;
80+
base.RaisePropertyChanged(() => UseDataUsageCache);
81+
}
8682
}
8783

8884
private int dataUsageCacheItemCount;
8985

9086
public int DataUsageCacheItemCount {
9187
get { return dataUsageCacheItemCount; }
92-
set { dataUsageCacheItemCount = value;
93-
base.RaisePropertyChanged(() => DataUsageCacheItemCount);}
88+
set {
89+
dataUsageCacheItemCount = value;
90+
base.RaisePropertyChanged(() => DataUsageCacheItemCount);
91+
}
9492
}
9593

96-
9794
private bool useTooltips;
9895

9996
public bool UseTooltips {
10097
get { return useTooltips; }
101-
set { useTooltips = value;
102-
base.RaisePropertyChanged(() => UseTooltips);}
98+
set {
99+
useTooltips = value;
100+
base.RaisePropertyChanged(() => UseTooltips);
101+
}
103102
}
104103

105104
private bool useInsight;
106105

107106
public bool UseInsight {
108107
get { return useInsight; }
109-
set { useInsight = value;
110-
base.RaisePropertyChanged(() => UseInsight);}
108+
set {
109+
useInsight = value;
110+
base.RaisePropertyChanged(() => UseInsight);
111+
}
111112
}
112113

113114
#endregion

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,20 @@ IEnumerable<ICompletionItem> ICompletionItemList.Items {
138138
/// <inheritdoc/>
139139
public virtual CompletionItemListKeyResult ProcessInput(char key)
140140
{
141-
if (key == ' ' && this.InsertSpace) {
142-
this.InsertSpace = false; // insert space only once
143-
return CompletionItemListKeyResult.BeforeStartKey;
144-
} else if (char.IsLetterOrDigit(key) || key == '_') {
145-
this.InsertSpace = false; // don't insert space if user types normally
141+
if (char.IsLetterOrDigit(key) || key == '_') {
142+
InsertSpace = false; // don't insert space if user types normally
146143
return CompletionItemListKeyResult.NormalKey;
147-
} else {
148-
// do not reset insertSpace when doing an insertion!
149-
return CompletionItemListKeyResult.InsertionKey;
150144
}
145+
if (key == ' ' && InsertSpace) {
146+
InsertSpace = false;
147+
// insert space only once
148+
return CompletionItemListKeyResult.BeforeStartKey;
149+
}
150+
if (CodeCompletionOptions.CommitOnTabEnterOnly || !CodeCompletionOptions.CommitOnChar(key)) {
151+
return CompletionItemListKeyResult.Cancel;
152+
}
153+
// do not reset insertSpace when doing an insertion!
154+
return CompletionItemListKeyResult.InsertionKey;
151155
}
152156

153157
/// <inheritdoc/>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public static void RequestToolTip(ToolTipRequestEventArgs e)
4141
if (e == null)
4242
throw new ArgumentNullException("e");
4343

44-
if (!CodeCompletionOptions.EnableCodeCompletion || !CodeCompletionOptions.TooltipsEnabled) {
44+
if (!CodeCompletionOptions.TooltipsEnabled) {
4545
e.Handled = true;
4646
return;
4747
}

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,16 @@ public static bool TooltipsOnlyWhenDebugging {
6363
set { properties.Set("TooltipsOnlyWhenDebugging", value); }
6464
}
6565

66-
public static bool KeywordCompletionEnabled {
67-
get { return properties.Get("KeywordCompletionEnabled", true); }
68-
set { properties.Set("KeywordCompletionEnabled", value); }
69-
}
70-
7166
public static bool CompleteWhenTyping {
7267
get { return properties.Get("CompleteWhenTyping", true); }
7368
set { properties.Set("CompleteWhenTyping", value); }
7469
}
7570

71+
public static bool CommitOnTabEnterOnly {
72+
get { return properties.Get("CommitOnTabEnterOnly", false); }
73+
set { properties.Set("CommitOnTabEnterOnly", value); }
74+
}
75+
7676
public static bool InsightEnabled {
7777
get { return properties.Get("InsightEnabled", true); }
7878
set { properties.Set("InsightEnabled", value); }
@@ -87,6 +87,16 @@ public static TooltipLinkTarget TooltipLinkTarget {
8787
get { return properties.Get("TooltipLinkTarget", TooltipLinkTarget.Documentation); }
8888
set { properties.Set("TooltipLinkTarget", value); }
8989
}
90+
91+
public static string CompletionCharList {
92+
get { return properties.Get("CompletionCharList", @"{}[]().,:;+-*/%&|^!~=<>?@#'""\"); }
93+
set { properties.Set("CompletionCharList", value); }
94+
}
95+
96+
public static bool CommitOnChar(char key)
97+
{
98+
return CompletionCharList.IndexOf(key) >= 0;
99+
}
90100
}
91101

92102
public enum TooltipLinkTarget {

0 commit comments

Comments
 (0)