Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions RetailCoder.VBE/Common/ClipboardWriter.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
using System.Windows;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace Rubberduck.Common
{
public interface IClipboardWriter
{
void Write(string text);
void AppendData(string format, object data);
void AppendString(string formatName, string data);
void AppendStream(string formatName, MemoryStream stream);
void Flush();
}

Expand All @@ -15,17 +22,26 @@ public class ClipboardWriter : IClipboardWriter

public void Write(string text)
{
this.AppendData(DataFormats.UnicodeText, text);
this.AppendString(DataFormats.UnicodeText, text);
this.Flush();
}

public void AppendData(string format, object data)
public void AppendString(string formatName, string data)
{
if (_data == null)
{
_data = new DataObject();
}
_data.SetData(format, data);
_data.SetData(formatName, data);
}

public void AppendStream(string formatName, MemoryStream stream)
{
if (_data == null)
{
_data = new DataObject();
}
_data.SetData(formatName, stream);
}

public void Flush()
Expand Down
375 changes: 359 additions & 16 deletions RetailCoder.VBE/Common/ExportFormatter.cs

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions RetailCoder.VBE/Inspections/ConvertToProcedureQuickFix.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.Vbe.Interop;
using Rubberduck.Parsing.Symbols;

namespace Rubberduck.Inspections
{
Expand Down Expand Up @@ -55,13 +56,13 @@ public override void Fix()
: Tokens.Property;

string visibility = context.visibility() == null ? string.Empty : context.visibility().GetText() + ' ';
string name = ' ' + functionName.identifier().identifierValue().GetText();
bool hasTypeHint = functionName.identifier().typeHint() != null;
string name = ' ' + Identifier.GetName(functionName.identifier());
bool hasTypeHint = Identifier.GetTypeHintValue(functionName.identifier()) != null;

string args = context.argList().GetText();
string asType = context.asTypeClause() == null ? string.Empty : ' ' + context.asTypeClause().GetText();

string oldSignature = visibility + token + name + (hasTypeHint ? functionName.identifier().typeHint().GetText() : string.Empty) + args + asType;
string oldSignature = visibility + token + name + (hasTypeHint ? Identifier.GetTypeHintValue(functionName.identifier()) : string.Empty) + args + asType;
string newSignature = visibility + Tokens.Sub + name + args;

string procedure = Context.GetText();
Expand Down
2 changes: 1 addition & 1 deletion RetailCoder.VBE/Inspections/InspectionResultBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ public int CompareTo(object obj)
public object[] ToArray()
{
var module = QualifiedSelection.QualifiedName;
return new object[] {Inspection.Severity.ToString(), Description, module.ProjectId, module.ComponentName, QualifiedSelection.Selection.StartLine };
return new object[] { Inspection.Severity.ToString(), module.ProjectTitle, module.ComponentTitle, Description, QualifiedSelection.Selection.StartLine, QualifiedSelection.Selection.StartColumn };
}

public string ToCsvString()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Rubberduck.Parsing.Grammar;
using Rubberduck.Parsing.Symbols;
using Rubberduck.VBEditor;
using Rubberduck.Parsing.Symbols;

namespace Rubberduck.Inspections
{
Expand Down Expand Up @@ -74,7 +75,7 @@ private void FixTypeHintUsage(string hint, CodeModule module, Selection selectio

if (isDeclaration && Context is VBAParser.FunctionStmtContext)
{
var typeHint = ((VBAParser.FunctionStmtContext)Context).functionName().identifier().typeHint();
var typeHint = Identifier.GetTypeHintContext(((VBAParser.FunctionStmtContext)Context).functionName().identifier());
var argList = ((VBAParser.FunctionStmtContext)Context).argList();
var endLine = argList.Stop.Line;
var endColumn = argList.Stop.Column;
Expand All @@ -86,7 +87,7 @@ private void FixTypeHintUsage(string hint, CodeModule module, Selection selectio
}
else if (isDeclaration && Context is VBAParser.PropertyGetStmtContext)
{
var typeHint = ((VBAParser.PropertyGetStmtContext)Context).functionName().identifier().typeHint();
var typeHint = Identifier.GetTypeHintContext(((VBAParser.PropertyGetStmtContext)Context).functionName().identifier());
var argList = ((VBAParser.PropertyGetStmtContext)Context).argList();
var endLine = argList.Stop.Line;
var endColumn = argList.Stop.Column;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.VBA;
using Rubberduck.VBEditor;
using Rubberduck.Parsing.Symbols;

namespace Rubberduck.Inspections
{
Expand Down Expand Up @@ -115,7 +116,7 @@ private void UpdateSignature()

private void UpdateCalls()
{
var procedureName = _subStmtQualifiedContext.Context.subroutineName().identifier().identifierValue().GetText();
var procedureName = Identifier.GetName(_subStmtQualifiedContext.Context.subroutineName().identifier());

var procedure =
_state.AllDeclarations.SingleOrDefault(d =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ public CodeExplorer_FindAllReferencesCommand(RubberduckParserState state, FindAl

public override bool CanExecute(object parameter)
{
return _state.Status == ParserState.Ready && !(parameter is CodeExplorerCustomFolderViewModel);
return _state.Status == ParserState.Ready &&
parameter != null &&
!(parameter is CodeExplorerCustomFolderViewModel);
}

public override void Execute(object parameter)
Expand Down
22 changes: 15 additions & 7 deletions RetailCoder.VBE/UI/CodeInspections/InspectionResultsViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
Expand Down Expand Up @@ -359,26 +360,33 @@ private void ExecuteQuickFixInProjectCommand(object parameter)

private void ExecuteCopyResultsCommand(object parameter)
{
const string XML_SPREADSHEET_DATA_FORMAT = "XML Spreadsheet";
if (_results == null)
{
return;
}
ColumnInfo[] ColumnInfos = { new ColumnInfo("Type"), new ColumnInfo("Project"), new ColumnInfo("Component"), new ColumnInfo("Issue"), new ColumnInfo("Line", hAlignment.Right), new ColumnInfo("Column", hAlignment.Right) };

var aResults = _results.Select(result => result.ToArray()).ToArray();

var resource = _results.Count == 1
? RubberduckUI.CodeInspections_NumberOfIssuesFound_Singular
: RubberduckUI.CodeInspections_NumberOfIssuesFound_Plural;

var title = string.Format(resource, DateTime.Now.ToString(CultureInfo.InstalledUICulture), _results.Count);
var title = string.Format(resource, DateTime.Now.ToString(CultureInfo.InvariantCulture), _results.Count);

var textResults = title + Environment.NewLine + string.Join("", _results.Select(result => result.ToString() + Environment.NewLine).ToArray());
var csvResults = ExportFormatter.Csv(aResults, title);
var htmlResults = ExportFormatter.HtmlClipboardFragment(aResults, title);

var csvResults = ExportFormatter.Csv(aResults, title,ColumnInfos);
var htmlResults = ExportFormatter.HtmlClipboardFragment(aResults, title,ColumnInfos);
var rtfResults = ExportFormatter.RTF(aResults, title);

MemoryStream strm1 = ExportFormatter.XmlSpreadsheetNew(aResults, title, ColumnInfos);
//Add the formats from richest formatting to least formatting
_clipboard.AppendData(DataFormats.Html, htmlResults);
_clipboard.AppendData(DataFormats.CommaSeparatedValue, csvResults);
_clipboard.AppendData(DataFormats.UnicodeText, textResults);
_clipboard.AppendStream(DataFormats.GetDataFormat(XML_SPREADSHEET_DATA_FORMAT).Name, strm1);
_clipboard.AppendString(DataFormats.Rtf, rtfResults);
_clipboard.AppendString(DataFormats.Html, htmlResults);
_clipboard.AppendString(DataFormats.CommaSeparatedValue, csvResults);
_clipboard.AppendString(DataFormats.UnicodeText, textResults);

_clipboard.Flush();
}
Expand Down
15 changes: 5 additions & 10 deletions RetailCoder.VBE/UI/Settings/GeneralSettings.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,6 @@
<Grid>
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<StackPanel Grid.Row="0" Margin="5,5,5,0">
<Label DockPanel.Dock="Top"
Background="DarkGray"
Expand Down Expand Up @@ -134,11 +128,10 @@
IsChecked="{Binding DetailedLoggingEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Left" />
</StackPanel>
</StackPanel>

<Label Grid.Row="1" Content="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=GeneralSettings_HotkeysLabel}" FontWeight="SemiBold" />
<Label Content="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=GeneralSettings_HotkeysLabel}" FontWeight="SemiBold" />

<DataGrid Grid.Row="2" ItemsSource="{Binding Hotkeys}"
<DataGrid ItemsSource="{Binding Hotkeys}"
HorizontalAlignment="Stretch"
AutoGenerateColumns="False"
CanUserDeleteRows="False"
Expand All @@ -154,6 +147,7 @@
HorizontalScrollBarVisibility="Hidden"
ItemContainerStyle="{StaticResource PrettifyRow}"
ColumnHeaderHeight="22"
Height="100"
BorderThickness="0">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
Expand Down Expand Up @@ -206,7 +200,8 @@
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DataGrid>
</StackPanel>
</Grid>
</ScrollViewer>
</Grid>
Expand Down
19 changes: 11 additions & 8 deletions RetailCoder.VBE/UI/Settings/IndenterSettings.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -178,13 +178,16 @@
</StackPanel>
</ScrollViewer>

<TextBlock Grid.Row="1"
Background="White"
Height="100"
xml:space="preserve"
Margin="5,0"
FontFamily="Consolas"
VerticalAlignment="Bottom"
Text="{Binding PreviewSampleCode}"/>
<ScrollViewer Grid.Row="1"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<TextBlock Background="White"
xml:space="preserve"
Margin="5,0"
FontFamily="Consolas"
VerticalAlignment="Top"
Text="{Binding PreviewSampleCode}"
ScrollViewer.VerticalScrollBarVisibility="Visible"/>
</ScrollViewer>
</Grid>
</UserControl>
106 changes: 84 additions & 22 deletions RetailCoder.VBE/UI/Settings/IndenterSettingsViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Rubberduck.Settings;
using System;
using Rubberduck.Settings;
using Rubberduck.SmartIndenter;

namespace Rubberduck.UI.Settings
Expand All @@ -7,22 +8,22 @@ public class IndenterSettingsViewModel : ViewModelBase, ISettingsViewModel
{
public IndenterSettingsViewModel(Configuration config)
{
AlignCommentsWithCode = config.UserSettings.IndenterSettings.AlignCommentsWithCode;
AlignContinuations = config.UserSettings.IndenterSettings.AlignContinuations;
AlignDimColumn = config.UserSettings.IndenterSettings.AlignDimColumn;
AlignDims = config.UserSettings.IndenterSettings.AlignDims;
EnableUndo = config.UserSettings.IndenterSettings.EnableUndo;
EndOfLineCommentColumnSpaceAlignment = config.UserSettings.IndenterSettings.EndOfLineCommentColumnSpaceAlignment;
EndOfLineCommentStyle = config.UserSettings.IndenterSettings.EndOfLineCommentStyle;
ForceCompilerDirectivesInColumn1 = config.UserSettings.IndenterSettings.ForceCompilerDirectivesInColumn1;
ForceDebugStatementsInColumn1 = config.UserSettings.IndenterSettings.ForceDebugStatementsInColumn1;
IgnoreOperatorsInContinuations = config.UserSettings.IndenterSettings.IgnoreOperatorsInContinuations;
IndentCase = config.UserSettings.IndenterSettings.IndentCase;
IndentCompilerDirectives = config.UserSettings.IndenterSettings.IndentCompilerDirectives;
IndentEntireProcedureBody = config.UserSettings.IndenterSettings.IndentEntireProcedureBody;
IndentFirstCommentBlock = config.UserSettings.IndenterSettings.IndentFirstCommentBlock;
IndentFirstDeclarationBlock = config.UserSettings.IndenterSettings.IndentFirstDeclarationBlock;
IndentSpaces = config.UserSettings.IndenterSettings.IndentSpaces;
_alignCommentsWithCode = config.UserSettings.IndenterSettings.AlignCommentsWithCode;
_alignContinuations = config.UserSettings.IndenterSettings.AlignContinuations;
_alignDimColumn = config.UserSettings.IndenterSettings.AlignDimColumn;
_alignDims = config.UserSettings.IndenterSettings.AlignDims;
_enableUndo = config.UserSettings.IndenterSettings.EnableUndo;
_endOfLineCommentColumnSpaceAlignment = config.UserSettings.IndenterSettings.EndOfLineCommentColumnSpaceAlignment;
_endOfLineCommentStyle = config.UserSettings.IndenterSettings.EndOfLineCommentStyle;
_forceCompilerDirectivesInColumn1 = config.UserSettings.IndenterSettings.ForceCompilerDirectivesInColumn1;
_forceDebugStatementsInColumn1 = config.UserSettings.IndenterSettings.ForceDebugStatementsInColumn1;
_ignoreOperatorsInContinuations = config.UserSettings.IndenterSettings.IgnoreOperatorsInContinuations;
_indentCase = config.UserSettings.IndenterSettings.IndentCase;
_indentCompilerDirectives = config.UserSettings.IndenterSettings.IndentCompilerDirectives;
_indentEntireProcedureBody = config.UserSettings.IndenterSettings.IndentEntireProcedureBody;
_indentFirstCommentBlock = config.UserSettings.IndenterSettings.IndentFirstCommentBlock;
_indentFirstDeclarationBlock = config.UserSettings.IndenterSettings.IndentFirstDeclarationBlock;
_indentSpaces = config.UserSettings.IndenterSettings.IndentSpaces;

PropertyChanged += IndenterSettingsViewModel_PropertyChanged;
}
Expand Down Expand Up @@ -262,14 +263,75 @@ public int IndentSpaces
}

// ReSharper disable once InconsistentNaming
private const string _previewSampleCode = @"Sub Foo()
' Do something here
' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ' comment here
End Sub";
private const string _previewSampleCode =
@"' Example Procedure
Sub ExampleProc()

' SMART INDENTER
' Original VB6 code graciously offered to Rubberduck by Stephen Bullen & Rob Bovey
'@ 2016 by Rubberduck VBA.

Dim iCount As Integer
Static sName As String

If YouLikeRubberduck Then
' Star us on GitHub http://github.com/rubberduck-vba/Rubberduck
' Follow us on Twitter @rubberduck-vba/contributors
' Visit http://rubberduckvba.com for news and updates

Select Case X
Case ""A""
' If you have any comments or suggestions, _
or find valid VBA code that isn't indented correctly,

#If VBA6 Then
MsgBox ""Contact contact@rubberduck-vba.com""
#End If

Case ""Continued strings and parameters can be"" _
& ""lined up for easier reading, optionally ignoring"" _
, ""any operators (&+, etc) at the start of the line.""

Debug.Print ""X<>1""
End Select 'Case X
End If 'More Tools?

End Sub
";

public string PreviewSampleCode
{
get { return _previewSampleCode; /* SmartIndenter.Indent(_indenterData); */ }
get
{
var indenter = new Indenter(null, GetCurrentSettings);

var lines = _previewSampleCode.Split(new[] {Environment.NewLine}, StringSplitOptions.None);
indenter.Indent(lines, "TestModule", false);
return string.Join(Environment.NewLine, lines);
}
}

private IIndenterSettings GetCurrentSettings()
{
return new SmartIndenter.IndenterSettings
{
AlignCommentsWithCode = AlignCommentsWithCode,
AlignContinuations = AlignContinuations,
AlignDimColumn = AlignDimColumn,
AlignDims = AlignDims,
EnableUndo = EnableUndo,
EndOfLineCommentColumnSpaceAlignment = EndOfLineCommentColumnSpaceAlignment,
EndOfLineCommentStyle = EndOfLineCommentStyle,
ForceCompilerDirectivesInColumn1 = ForceCompilerDirectivesInColumn1,
ForceDebugStatementsInColumn1 = ForceDebugStatementsInColumn1,
IgnoreOperatorsInContinuations = IgnoreOperatorsInContinuations,
IndentCase = IndentCase,
IndentCompilerDirectives = IndentCompilerDirectives,
IndentEntireProcedureBody = IndentEntireProcedureBody,
IndentFirstCommentBlock = IndentFirstCommentBlock,
IndentFirstDeclarationBlock = IndentFirstDeclarationBlock,
IndentSpaces = IndentSpaces
};
}

#endregion
Expand Down
Loading