Skip to content

Commit cd47c67

Browse files
committed
Previewer
1 parent 75b54b3 commit cd47c67

File tree

6 files changed

+155
-6
lines changed

6 files changed

+155
-6
lines changed

RetailCoder.VBE/Inspections/QuickFixes/RemoveUnusedParameterQuickFix.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public RemoveUnusedParameterQuickFix(ParserRuleContext context, QualifiedSelecti
2727

2828
public override void Fix()
2929
{
30-
using (var dialog = new RemoveParametersDialog(new RemoveParametersViewModel()))
30+
using (var dialog = new RemoveParametersDialog(new RemoveParametersViewModel(_state)))
3131
{
3232
var refactoring = new RemoveParametersRefactoring(_vbe,
3333
new RemoveParametersPresenterFactory(_vbe, dialog, _state, _messageBox));

RetailCoder.VBE/UI/Command/Refactorings/RefactorRemoveParametersCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ protected override void ExecuteImpl(object parameter)
6262
}
6363

6464
var selection = pane.GetQualifiedSelection();
65-
using (var view = new RemoveParametersDialog(new RemoveParametersViewModel()))
65+
using (var view = new RemoveParametersDialog(new RemoveParametersViewModel(_state)))
6666
{
6767
var factory = new RemoveParametersPresenterFactory(Vbe, view, _state, _msgbox);
6868
var refactoring = new RemoveParametersRefactoring(Vbe, factory);

RetailCoder.VBE/UI/Refactorings/RemoveParameters/RemoveParametersView.xaml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
66
xmlns:removeParameters="clr-namespace:Rubberduck.UI.Refactorings.RemoveParameters"
77
xmlns:converters="clr-namespace:Rubberduck.UI.Converters"
8+
xmlns:controls="clr-namespace:Rubberduck.UI.Controls"
89
mc:Ignorable="d"
910
d:DesignHeight="300" d:DesignWidth="300">
1011
<UserControl.Resources>
@@ -23,6 +24,10 @@
2324
Margin="5,0" />
2425
</StackPanel>
2526
<Grid Grid.Row="1" Grid.IsSharedSizeScope="True">
27+
<Grid.RowDefinitions>
28+
<RowDefinition />
29+
<RowDefinition Height="auto" />
30+
</Grid.RowDefinitions>
2631
<Grid.ColumnDefinitions>
2732
<ColumnDefinition Width="*" />
2833
<ColumnDefinition Width="auto" />
@@ -86,6 +91,26 @@
8691
</StackPanel>
8792
</Button>
8893
</Grid>
94+
95+
<Expander Grid.Row="1"
96+
Grid.ColumnSpan="2"
97+
IsExpanded="True"
98+
Background="#FFFFFFFF"
99+
BorderBrush="#FFA9A9A9"
100+
Margin="5,0,5,5">
101+
<Expander.Header>
102+
<Label FontWeight="SemiBold">
103+
<Resx ResxName="Rubberduck.UI.RubberduckUI" Key="Preview"/>
104+
</Label>
105+
</Expander.Header>
106+
<controls:BindableTextEditor Margin="10,10,10,10"
107+
FontFamily="Courier New "
108+
ShowLineNumbers="False"
109+
HorizontalScrollBarVisibility="Auto"
110+
VerticalScrollBarVisibility="Disabled"
111+
IsReadOnly="True"
112+
Text="{Binding SignaturePreview,Mode=OneWay}"/>
113+
</Expander>
89114
</Grid>
90115
<Grid Grid.Row="2" Background="{x:Static SystemColors.ControlDarkBrush}" Grid.IsSharedSizeScope="True">
91116
<Grid HorizontalAlignment="Right"

RetailCoder.VBE/UI/Refactorings/RemoveParameters/RemoveParametersViewModel.cs

Lines changed: 113 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
using System;
55
using System.Collections.Generic;
66
using System.Windows.Forms;
7+
using Rubberduck.Parsing.Symbols;
8+
using System.Linq;
9+
using Rubberduck.Parsing.VBA;
710

811
namespace Rubberduck.UI.Refactorings.RemoveParameters
912
{
1013
public class RemoveParametersViewModel : ViewModelBase
1114
{
15+
public RubberduckParserState State { get; }
16+
1217
private List<Parameter> _parameters;
1318
public List<Parameter> Parameters
1419
{
@@ -20,8 +25,113 @@ public List<Parameter> Parameters
2025
}
2126
}
2227

23-
public RemoveParametersViewModel()
28+
public string SignaturePreview
29+
{
30+
get
31+
{
32+
// if there is only one parameter, we remove it without displaying the UI; this gets called anyway as part of the initialization process
33+
if (Parameters == null)
34+
{
35+
return string.Empty;
36+
}
37+
38+
var member = Parameters[0].Declaration.ParentDeclaration;
39+
40+
if (member.DeclarationType.HasFlag(DeclarationType.Property))
41+
{
42+
var declarations = State.AllUserDeclarations;
43+
44+
var getter = declarations.FirstOrDefault(item => item.Scope == member.Scope &&
45+
item.IdentifierName == member.IdentifierName &&
46+
item.DeclarationType == DeclarationType.PropertyGet);
47+
48+
var letter = declarations.FirstOrDefault(item => item.Scope == member.Scope &&
49+
item.IdentifierName == member.IdentifierName &&
50+
item.DeclarationType == DeclarationType.PropertyLet);
51+
52+
var setter = declarations.FirstOrDefault(item => item.Scope == member.Scope &&
53+
item.IdentifierName == member.IdentifierName &&
54+
item.DeclarationType == DeclarationType.PropertySet);
55+
56+
var signature = string.Empty;
57+
if (getter != null) { signature += GetSignature((PropertyGetDeclaration)getter); }
58+
if (letter != null)
59+
{
60+
if (!string.IsNullOrEmpty(signature)) { signature += Environment.NewLine; }
61+
signature += GetSignature((PropertyLetDeclaration)letter);
62+
}
63+
if (setter != null)
64+
{
65+
if (!string.IsNullOrEmpty(signature)) { signature += Environment.NewLine; }
66+
signature += GetSignature((PropertySetDeclaration)setter);
67+
}
68+
69+
return signature;
70+
}
71+
72+
return GetSignature((dynamic) member);
73+
}
74+
}
75+
76+
private string GetSignature(SubroutineDeclaration member)
77+
{
78+
var signature = member.Accessibility == Accessibility.Implicit ? string.Empty : member.Accessibility.ToString();
79+
signature += " Sub " + member.IdentifierName + "(";
80+
81+
var selectedParams = Parameters.Where(p => !p.IsRemoved).Select(s => s.Name);
82+
return signature + string.Join(", ", selectedParams) + ")";
83+
}
84+
85+
private string GetSignature(FunctionDeclaration member)
86+
{
87+
var signature = member.Accessibility == Accessibility.Implicit ? string.Empty : member.Accessibility.ToString();
88+
signature += " Function " + member.IdentifierName + "(";
89+
90+
var selectedParams = Parameters.Where(p => !p.IsRemoved).Select(s => s.Name);
91+
return signature + string.Join(", ", selectedParams) + ") As " + member.AsTypeName;
92+
}
93+
94+
private string GetSignature(EventDeclaration member)
95+
{
96+
var signature = member.Accessibility == Accessibility.Implicit ? string.Empty : member.Accessibility.ToString();
97+
signature += " Event " + member.IdentifierName + "(";
98+
99+
var selectedParams = Parameters.Where(p => !p.IsRemoved).Select(s => s.Name);
100+
return signature + string.Join(", ", selectedParams) + ")";
101+
}
102+
103+
private string GetSignature(PropertyGetDeclaration member)
104+
{
105+
var signature = member.Accessibility == Accessibility.Implicit ? string.Empty : member.Accessibility.ToString();
106+
signature += " Property Get " + member.IdentifierName + "(";
107+
108+
var selectedParams = Parameters.Where(p => !p.IsRemoved).Select(s => s.Name);
109+
return signature + string.Join(", ", selectedParams) + ") As " + member.AsTypeName;
110+
}
111+
112+
private string GetSignature(PropertyLetDeclaration member)
113+
{
114+
var signature = member.Accessibility == Accessibility.Implicit ? string.Empty : member.Accessibility.ToString();
115+
signature += " Property Let " + member.IdentifierName + "(";
116+
117+
var selectedParams = Parameters.Where(p => !p.IsRemoved).Select(s => s.Name).ToList();
118+
selectedParams.Add(new Parameter(member.Parameters.Last(), -1).Name);
119+
return signature + string.Join(", ", selectedParams) + ")";
120+
}
121+
122+
private string GetSignature(PropertySetDeclaration member)
123+
{
124+
var signature = member.Accessibility == Accessibility.Implicit ? string.Empty : member.Accessibility.ToString();
125+
signature += " Property Set " + member.IdentifierName + "(";
126+
127+
var selectedParams = Parameters.Where(p => !p.IsRemoved).Select(s => s.Name).ToList();
128+
selectedParams.Add(new Parameter(member.Parameters.Last(), -1).Name);
129+
return signature + string.Join(", ", selectedParams) + ")";
130+
}
131+
132+
public RemoveParametersViewModel(RubberduckParserState state)
24133
{
134+
State = state;
25135
OkButtonCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => DialogOk());
26136
CancelButtonCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => DialogCancel());
27137
RemoveParameterCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), param => RemoveParameter((Parameter)param));
@@ -33,6 +143,7 @@ private void RemoveParameter(Parameter parameter)
33143
if (parameter != null)
34144
{
35145
parameter.IsRemoved = true;
146+
OnPropertyChanged(nameof(SignaturePreview));
36147
}
37148
}
38149

@@ -41,6 +152,7 @@ private void RestoreParameter(Parameter parameter)
41152
if (parameter != null)
42153
{
43154
parameter.IsRemoved = false;
155+
OnPropertyChanged(nameof(SignaturePreview));
44156
}
45157
}
46158

RetailCoder.VBE/UI/RubberduckUI.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

RetailCoder.VBE/UI/RubberduckUI.resx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="UTF-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<root>
33
<!--
44
Microsoft ResX Schema
@@ -59,7 +59,7 @@
5959
: using a System.ComponentModel.TypeConverter
6060
: and then encoded with base64 encoding.
6161
-->
62-
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
62+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
6363
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
6464
<xsd:element name="root" msdata:IsDataSet="true">
6565
<xsd:complexType>
@@ -1964,4 +1964,7 @@ Would you like to import them to Rubberduck?</value>
19641964
<data name="ConfirmRemoveAssignmentWithUnusedDeclaration" xml:space="preserve">
19651965
<value>Variable '{0}' is assigned. Remove assignment instruction(s)?</value>
19661966
</data>
1967-
</root>
1967+
<data name="Preview" xml:space="preserve">
1968+
<value>Preview</value>
1969+
</data>
1970+
</root>

0 commit comments

Comments
 (0)