diff --git a/RetailCoder.VBE/Common/ClipboardWriter.cs b/RetailCoder.VBE/Common/ClipboardWriter.cs index 24e6fbb654..ac990c770a 100644 --- a/RetailCoder.VBE/Common/ClipboardWriter.cs +++ b/RetailCoder.VBE/Common/ClipboardWriter.cs @@ -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(); } @@ -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() diff --git a/RetailCoder.VBE/Common/ExportFormatter.cs b/RetailCoder.VBE/Common/ExportFormatter.cs index 1b0e1e81f6..f068bf0b80 100644 --- a/RetailCoder.VBE/Common/ExportFormatter.cs +++ b/RetailCoder.VBE/Common/ExportFormatter.cs @@ -1,13 +1,61 @@ using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; using System.Net; +using System.Text; +using System.Threading.Tasks; +using System.Xml; namespace Rubberduck.Common { + public enum hAlignment + { + Left, Center, Right + } + + public enum vAlignment + { + Top, Middle, Bottom + } + + public class CellFormatting + { + public hAlignment HorizontalAlignment; + public vAlignment VerticalAlignment; + public string FormatString; + public bool bold; + } + + public class ColumnInfo + { + public ColumnInfo(string Title, hAlignment HorizontalAlignment = hAlignment.Left, vAlignment VerticalAlignment = vAlignment.Bottom) + { + this.Title = Title; + this.Data = new CellFormatting(); + this.Data.HorizontalAlignment = HorizontalAlignment; + this.Data.VerticalAlignment = VerticalAlignment; + this.Heading = new CellFormatting(); + this.Heading.HorizontalAlignment = HorizontalAlignment; + this.Heading.VerticalAlignment = VerticalAlignment; + } + public CellFormatting Heading; + public CellFormatting Data; + public string Title; + } + public static class ExportFormatter { - public static string Csv(object[][] data, string Title) + public static string Csv(object[][] data, string Title, ColumnInfo[] ColumnInfos) { string s = ""; + + string[] headerRow = new string[ColumnInfos.Length]; + for (var c = 0; c < ColumnInfos.Length; c++) + { + headerRow[c] = CsvEncode(ColumnInfos[c].Title); + } + string[] rows = new string[data.Length]; for (var r = 0; r < data.Length; r++) { @@ -18,7 +66,7 @@ public static string Csv(object[][] data, string Title) } rows[r] = string.Join(",", row); } - return CsvEncode(Title) + Environment.NewLine + string.Join(Environment.NewLine, rows); + return CsvEncode(Title.Replace("\r\n"," ")) + Environment.NewLine + string.Join(",", headerRow) + Environment.NewLine + string.Join(Environment.NewLine, rows); } private static string CsvEncode(object value) @@ -48,7 +96,7 @@ private static string CsvEncode(object value) return s; } - public static string HtmlClipboardFragment(object[][] data, string Title) + public static string HtmlClipboardFragment(object[][] data, string Title, ColumnInfo[] ColumnInfos) { const string OffsetFormat = "0000000000"; const string CFHeaderTemplate = @@ -69,7 +117,7 @@ public static string HtmlClipboardFragment(object[][] data, string Title) "\r\n" + ""; - string html = ExportFormatter.HtmlTable(data,Title); + string html = ExportFormatter.HtmlTable(data, Title, ColumnInfos); int CFHeaderLength = string.Format(CFHeaderTemplate, OffsetFormat, OffsetFormat, OffsetFormat, OffsetFormat).Length; int startFragment = CFHeaderLength + HtmlHeader.Length; @@ -81,27 +129,38 @@ public static string HtmlClipboardFragment(object[][] data, string Title) return CfHtml + HtmlHeader + html + HtmlFooter; } - public static string HtmlTable(object[][] data, string Title) + public static string HtmlTable(object[][] data, string Title, ColumnInfo[] ColumnInfos) { + + string titleRow = HtmlCell(Title,true,false,3,ColumnInfos.Length); + + string[] hcells = new string[ColumnInfos.Length]; + for (var c = 0; c < ColumnInfos.Length; c++) + { + hcells[c] = HtmlCell(ColumnInfos[c].Title, true, true, 3, 1, ColumnInfos[c].Heading.HorizontalAlignment); + } + string headerRow = " \r\n" + string.Join(Environment.NewLine, hcells) + "\r\n"; + string[] rows = new string[data.Length]; for (var r = 0; r < data.Length; r++) { string[] row = new string[data[r].Length]; for (var c = 0; c < data[r].Length; c++) { - row[c] = HtmlCell(data[r][c], r == data.Length - 1, c == 0 ? 5: 10); + row[c] = HtmlCell(data[r][c], r == data.Length - 1, false, 3, 1, ColumnInfos[c].Heading.HorizontalAlignment); } rows[r] = " \r\n" + string.Join(Environment.NewLine, row) + "\r\n"; } - return "\r\n" + string.Join(Environment.NewLine, rows) + "\r\n
\r\n"; + return "\r\n" + titleRow + "\r\n" + headerRow + "\r\n" + string.Join(Environment.NewLine, rows) + "\r\n
\r\n"; } - private static string HtmlCell(object value, bool BottomBorder = false, int LeftPadding = 10) + private static string HtmlCell(object value, bool BottomBorder = false, bool bold = false, int padding = 3, int colSpan = 1, hAlignment hAlign = hAlignment.Left) { - const string td = "
{2}
"; + const string td = "
{3}
"; const string nbsp = " "; string CellContent = nbsp; + string colspanAttribute = colSpan == 1 ? "" : " colspan=\"" + colSpan + "\""; bool AlignLeft = true; string Border = BottomBorder ? "0.5pt" : ""; if (value != null) @@ -109,27 +168,311 @@ private static string HtmlCell(object value, bool BottomBorder = false, int Left CellContent = value.ToString().HtmlEncode(); AlignLeft = value is string; } - return string.Format(td, TdStyle(AlignLeft, Border), TdDivStyle(LeftPadding), CellContent); + return string.Format(td, TdStyle(hAlign, Border, bold), colspanAttribute, TdDivStyle(padding, hAlign), CellContent); } - private static string TdStyle(bool AlignLeft = true, string BorderBottom = "") + private static string TdStyle(hAlignment hAlign = hAlignment.Left, string BorderBottom = "", bool bold = false) { const string tdstyle = "vertical-align: bottom; "; - string sAlign = AlignLeft ? "text-align: left; " : "text-align: right; "; + string sAlign = "text-align: " + hAlign.ToString() + "; " ; string sBorder = BorderBottom.Length > 0 ? "border-bottom: " + BorderBottom + " solid #000000; " : ""; - - return tdstyle + sAlign + sBorder; + string sWeight = bold ? "font-weight: bold; " : ""; + return tdstyle + sAlign + sBorder + sWeight; } - private static string TdDivStyle(int LeftPadding) + private static string TdDivStyle(int padding, hAlignment hAlign = hAlignment.Left) { - return "vertical-align: bottom; padding-left: " + LeftPadding + "px; "; + switch (hAlign) + { + case hAlignment.Left: + return "vertical-align: bottom; padding-left: " + padding + "px; "; + case hAlignment.Right: + return "vertical-align: bottom; padding-right: " + padding + "px; "; + default: + return "vertical-align: bottom; padding-left: " + padding + "px; padding-right: " + padding + "px; "; + } } private static string HtmlEncode(this string value) { return WebUtility.HtmlEncode(value.ToString()); } + + public static MemoryStream XmlSpreadsheetNew(object[][] data, string Title, ColumnInfo[] ColumnInfos) + { + MemoryStream strm = new MemoryStream(); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + settings.Encoding = new UTF8Encoding(false); + + XmlWriter xmlSS = XmlWriter.Create(strm, settings); + + xmlSS.WriteStartDocument(); + + //Processing Instructions + xmlSS.WriteProcessingInstruction("mso-application","progid=\"Excel.Sheet\""); + //Namespaces + xmlSS.WriteStartElement("Workbook", "urn:schemas-microsoft-com:office:spreadsheet"); + xmlSS.WriteAttributeString("xmlns", null, null, "urn:schemas-microsoft-com:office:spreadsheet"); + xmlSS.WriteAttributeString("xmlns", "o", null, "urn:schemas-microsoft-com:office:office"); + xmlSS.WriteAttributeString("xmlns", "x", null, "urn:schemas-microsoft-com:office:excel"); + xmlSS.WriteAttributeString("xmlns", "ss", null, "urn:schemas-microsoft-com:office:spreadsheet"); + xmlSS.WriteAttributeString("xmlns", "html", null, "http://www.w3.org/TR/REC-html40"); + + xmlSS.WriteStartElement("Styles"); + + //Default Style + xmlSS.WriteStartElement("Style"); + xmlSS.WriteAttributeString("ss", "ID", null, "Default"); + xmlSS.WriteAttributeString("ss", "Name", null, "Normal"); + xmlSS.WriteStartElement("Alignment"); + xmlSS.WriteAttributeString("ss", "Vertical", null, "Bottom"); + xmlSS.WriteEndElement(); //Close Alignment + xmlSS.WriteStartElement("Font"); + xmlSS.WriteAttributeString("ss", "FontName", null, "Calibri"); + xmlSS.WriteAttributeString("x", "Family", null, "Swiss"); + xmlSS.WriteAttributeString("ss", "Size", null, "11"); + xmlSS.WriteAttributeString("ss", "Color", null, "#000000"); + xmlSS.WriteEndElement(); //Close Font + xmlSS.WriteElementString("Interior", ""); + xmlSS.WriteElementString("NumberFormat", ""); + xmlSS.WriteElementString("Protection", ""); + xmlSS.WriteEndElement(); //Close Style + + //Style for column headers + xmlSS.WriteStartElement("Style"); + xmlSS.WriteAttributeString("ss", "ID", null, "HeaderBottomLeft"); + + xmlSS.WriteStartElement("Alignment"); + xmlSS.WriteAttributeString("ss", "Horizontal", null, "Left"); + xmlSS.WriteAttributeString("ss", "Vertical", null, "Bottom"); + xmlSS.WriteEndElement(); //Close Alignment + + xmlSS.WriteStartElement("Borders"); + + xmlSS.WriteStartElement("Border"); + xmlSS.WriteAttributeString("ss", "Position",null, "Top"); + xmlSS.WriteAttributeString("ss", "LineStyle",null, "Continuous"); + xmlSS.WriteAttributeString("ss", "Weight",null, "1"); + xmlSS.WriteEndElement(); //Close Border + + xmlSS.WriteStartElement("Border"); + xmlSS.WriteAttributeString("ss", "Position",null, "Bottom"); + xmlSS.WriteAttributeString("ss", "LineStyle",null, "Continuous"); + xmlSS.WriteAttributeString("ss", "Weight",null, "1"); + xmlSS.WriteEndElement(); //Close Border + + xmlSS.WriteEndElement(); //Close Borders + + xmlSS.WriteStartElement("Font"); + xmlSS.WriteAttributeString("ss", "Bold", null, "1"); + xmlSS.WriteEndElement(); //Close Font + xmlSS.WriteEndElement(); //Close Style + + //Header_BottomRight + xmlSS.WriteStartElement("Style"); + xmlSS.WriteAttributeString("ss", "ID", null, "HeaderBottomRight"); + + xmlSS.WriteStartElement("Alignment"); + xmlSS.WriteAttributeString("ss", "Horizontal", null, "Right"); + xmlSS.WriteAttributeString("ss", "Vertical", null, "Bottom"); + xmlSS.WriteEndElement(); //Close Alignment + + xmlSS.WriteStartElement("Borders"); + + xmlSS.WriteStartElement("Border"); + xmlSS.WriteAttributeString("ss", "Position", null, "Top"); + xmlSS.WriteAttributeString("ss", "LineStyle", null, "Continuous"); + xmlSS.WriteAttributeString("ss", "Weight", null, "1"); + xmlSS.WriteEndElement(); //Close Border + + xmlSS.WriteStartElement("Border"); + xmlSS.WriteAttributeString("ss", "Position", null, "Bottom"); + xmlSS.WriteAttributeString("ss", "LineStyle", null, "Continuous"); + xmlSS.WriteAttributeString("ss", "Weight", null, "1"); + xmlSS.WriteEndElement(); //Close Border + + xmlSS.WriteEndElement(); //Close Borders + + xmlSS.WriteStartElement("Font"); + xmlSS.WriteAttributeString("ss", "Bold", null, "1"); + xmlSS.WriteEndElement(); //Close Font + xmlSS.WriteEndElement(); //Close Style + + //Style for last row + xmlSS.WriteStartElement("Style"); + xmlSS.WriteAttributeString("ss", "ID", null, "LastRow"); + xmlSS.WriteStartElement("Borders"); + xmlSS.WriteStartElement("Border"); + xmlSS.WriteAttributeString("ss", "Position", null, "Bottom"); + xmlSS.WriteAttributeString("ss", "LineStyle", null, "Continuous"); + xmlSS.WriteAttributeString("ss", "Weight", null, "1"); + xmlSS.WriteEndElement(); //Close Border + xmlSS.WriteEndElement(); //Close Borders + xmlSS.WriteEndElement(); //Close Style + + + //Style for right-aligned data cells + xmlSS.WriteStartElement("Style"); + xmlSS.WriteAttributeString("ss", "ID", null, "RightAligned"); + xmlSS.WriteStartElement("Alignment"); + xmlSS.WriteAttributeString("ss", "Horizontal", null, "Right"); + xmlSS.WriteEndElement(); //Close Alignment + xmlSS.WriteEndElement(); //Close Style + + //Style for right-aligned last row data cells + xmlSS.WriteStartElement("Style"); + xmlSS.WriteAttributeString("ss", "ID", null, "LastRowRightAligned"); + xmlSS.WriteStartElement("Alignment"); + xmlSS.WriteAttributeString("ss", "Horizontal", null, "Right"); + xmlSS.WriteEndElement(); //Close Alignment + xmlSS.WriteStartElement("Borders"); + xmlSS.WriteStartElement("Border"); + xmlSS.WriteAttributeString("ss", "Position", null, "Bottom"); + xmlSS.WriteAttributeString("ss", "LineStyle", null, "Continuous"); + xmlSS.WriteAttributeString("ss", "Weight", null, "1"); + xmlSS.WriteEndElement(); //Close Border + xmlSS.WriteEndElement(); //Close Borders + xmlSS.WriteEndElement(); //Close Style + + + xmlSS.WriteEndElement(); //Close Styles + + xmlSS.WriteStartElement("Worksheet"); + xmlSS.WriteAttributeString("ss", "Name", null, "Sheet1"); + xmlSS.WriteStartElement("Table"); + xmlSS.WriteAttributeString("ss", "ExpandedColumnCount", null, ColumnInfos.Length.ToString()); + xmlSS.WriteAttributeString("ss", "ExpandedRowCount", null, (data.Length + 2).ToString()); + xmlSS.WriteAttributeString("ss", "DefaultRowHeight", null, "15"); + + xmlSS.WriteStartElement("Row"); + xmlSS.WriteStartElement("Cell"); + xmlSS.WriteAttributeString("ss", "MergeAcross", null, (ColumnInfos.Length-1).ToString()); + xmlSS.WriteStartElement("Data"); + xmlSS.WriteAttributeString("ss", "Type", null, "String"); + xmlSS.WriteValue(Title); + xmlSS.WriteEndElement(); //Close Data + xmlSS.WriteEndElement(); //Close Cell + + xmlSS.WriteEndElement(); //Close Row + + //Column Headers + if (ColumnInfos.Length > 0) + { + xmlSS.WriteStartElement("Row"); + foreach (ColumnInfo ch in ColumnInfos) + { + xmlSS.WriteStartElement("Cell"); + xmlSS.WriteAttributeString("ss", "StyleID", null, "Header" + ch.Heading.VerticalAlignment.ToString() + ch.Heading.HorizontalAlignment.ToString()); + xmlSS.WriteStartElement("Data"); + xmlSS.WriteAttributeString("ss", "Type", null, "String"); + xmlSS.WriteValue(ch.Title); + xmlSS.WriteEndElement(); //Close Data + xmlSS.WriteEndElement(); //Close Cell + } + xmlSS.WriteEndElement(); //Close Row + } + + for (var r = 0; r < data.Length; r++) + { + xmlSS.WriteStartElement("Row"); + for (var c = 0; c < data[r].Length; c++) + { + string ValueType = (data[r][c] is string || data[r][c] == null) ? "String" : "Number"; + xmlSS.WriteStartElement("Cell"); + if (ColumnInfos[c].Data.HorizontalAlignment == hAlignment.Right) + { + xmlSS.WriteAttributeString("ss", "StyleID", null, (r == data.Length - 1 ? "LastRowRightAligned" : "RightAligned")); + } + else + { + if (r == data.Length - 1) + { + xmlSS.WriteAttributeString("ss", "StyleID", null, "LastRow"); + } + } + xmlSS.WriteStartElement("Data"); + + xmlSS.WriteAttributeString("ss", "Type", null, ValueType); + if (data[r][c] != null) + { + xmlSS.WriteValue(data[r][c].ToString()); + } + xmlSS.WriteEndElement(); //Close Data + xmlSS.WriteEndElement(); //Close Cell + } + xmlSS.WriteEndElement(); //Close Row + } + + xmlSS.WriteEndElement(); //Close Table + xmlSS.WriteEndElement(); //Close Worksheet + xmlSS.WriteEndElement(); //Close Workbook + xmlSS.WriteEndDocument(); + xmlSS.Close(); + + return strm; + } + + + public static string RTF(object[][] data, string Title) + { + const byte fontSize = 16; //half-points + const long colWidth = 1440; //twips + const long borderWidth = 10; //twips + const long cellPadding = 20; //trips + + const string boldFormat = @"\b{{{0}}}\b0"; + const string borderBottom = @"\clbrdrb\brdrw{0}\brdrs"; + const string borderTop = @"\clbrdrt\brdrw{0}\brdrs"; + const string headerFormat = @"\clvertalb{0}\cellx{1}{2}"; + const string cellFormat = @"\clvertalt{0}\cellx{1}{2}"; + const string cellContent = @"\pard\intbl\ql\sb{0}\sa{0}\li{0}\lr{0}{{{1}}}\cell{2}"; + const string rowStart = @"\trowd\intbl{0}"; + const string rowEnd = @"\row{0}"; + const string rtfStart = @"{{\rtf1{1}\fs{0}{1}"; + const string titleFormat = @"\pard{{{0}}}\par{1}"; + const string rtfEnd = @"}}{0}"; + + string newLine = Environment.NewLine; + + StringBuilder s = new StringBuilder(); + s.AppendFormat(rtfStart, fontSize.ToString(), newLine); + s.AppendFormat(titleFormat, Title, newLine); + + string cellBorders = string.Format(borderBottom, borderWidth) + string.Format(borderTop, borderWidth); + for (var r = 0; r < data.Length; r++) + { + if (r == 0) + { + s.AppendFormat(rowStart,newLine); + for (int c = 0; c < data[r].Length; c++) + { + s.AppendFormat(headerFormat, cellBorders, colWidth * (c+1), newLine); + } + for (int c = 0; c < data[r].Length; c++) + { + s.AppendFormat(cellContent, cellPadding, string.Format(boldFormat,"Col. " + (c+1).ToString()), newLine); + } + s.AppendFormat(rowEnd,newLine); + } + + cellBorders = (r == data.Length - 1) ? string.Format(borderBottom, borderWidth) : ""; + + s.AppendFormat(rowStart, newLine); + for (int c = 0; c < data[r].Length; c++) + { + s.AppendFormat(cellFormat, cellBorders, colWidth * (c + 1), newLine); + } + for (int c = 0; c < data[r].Length; c++) + { + s.AppendFormat(cellContent, cellPadding, data[r][c], newLine); + } + s.AppendFormat(rowEnd, newLine); + } + s.AppendFormat(rtfEnd, newLine); + return s.ToString(); + } } } diff --git a/RetailCoder.VBE/Inspections/ConvertToProcedureQuickFix.cs b/RetailCoder.VBE/Inspections/ConvertToProcedureQuickFix.cs index 4074821056..3530a3ef03 100644 --- a/RetailCoder.VBE/Inspections/ConvertToProcedureQuickFix.cs +++ b/RetailCoder.VBE/Inspections/ConvertToProcedureQuickFix.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text.RegularExpressions; using Microsoft.Vbe.Interop; +using Rubberduck.Parsing.Symbols; namespace Rubberduck.Inspections { @@ -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(); diff --git a/RetailCoder.VBE/Inspections/InspectionResultBase.cs b/RetailCoder.VBE/Inspections/InspectionResultBase.cs index 2aee2c960e..3fe292fb95 100644 --- a/RetailCoder.VBE/Inspections/InspectionResultBase.cs +++ b/RetailCoder.VBE/Inspections/InspectionResultBase.cs @@ -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() diff --git a/RetailCoder.VBE/Inspections/ObsoleteTypeHintInspectionResult.cs b/RetailCoder.VBE/Inspections/ObsoleteTypeHintInspectionResult.cs index 8b55b1c309..fff9e35e64 100644 --- a/RetailCoder.VBE/Inspections/ObsoleteTypeHintInspectionResult.cs +++ b/RetailCoder.VBE/Inspections/ObsoleteTypeHintInspectionResult.cs @@ -7,6 +7,7 @@ using Rubberduck.Parsing.Grammar; using Rubberduck.Parsing.Symbols; using Rubberduck.VBEditor; +using Rubberduck.Parsing.Symbols; namespace Rubberduck.Inspections { @@ -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; @@ -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; diff --git a/RetailCoder.VBE/Inspections/ProcedureShouldBeFunctionInspectionResult.cs b/RetailCoder.VBE/Inspections/ProcedureShouldBeFunctionInspectionResult.cs index 0d412d4dc6..03cffbdabe 100644 --- a/RetailCoder.VBE/Inspections/ProcedureShouldBeFunctionInspectionResult.cs +++ b/RetailCoder.VBE/Inspections/ProcedureShouldBeFunctionInspectionResult.cs @@ -6,6 +6,7 @@ using Rubberduck.Parsing.Symbols; using Rubberduck.Parsing.VBA; using Rubberduck.VBEditor; +using Rubberduck.Parsing.Symbols; namespace Rubberduck.Inspections { @@ -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 => diff --git a/RetailCoder.VBE/UI/CodeExplorer/Commands/CodeExplorer_FindAllReferencesCommand.cs b/RetailCoder.VBE/UI/CodeExplorer/Commands/CodeExplorer_FindAllReferencesCommand.cs index ddbb28f935..653b6725a5 100644 --- a/RetailCoder.VBE/UI/CodeExplorer/Commands/CodeExplorer_FindAllReferencesCommand.cs +++ b/RetailCoder.VBE/UI/CodeExplorer/Commands/CodeExplorer_FindAllReferencesCommand.cs @@ -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) diff --git a/RetailCoder.VBE/UI/CodeInspections/InspectionResultsViewModel.cs b/RetailCoder.VBE/UI/CodeInspections/InspectionResultsViewModel.cs index 8eaff024d6..7c91bfb8fa 100644 --- a/RetailCoder.VBE/UI/CodeInspections/InspectionResultsViewModel.cs +++ b/RetailCoder.VBE/UI/CodeInspections/InspectionResultsViewModel.cs @@ -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; @@ -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(); } diff --git a/RetailCoder.VBE/UI/Settings/GeneralSettings.xaml b/RetailCoder.VBE/UI/Settings/GeneralSettings.xaml index 5a6fd168b4..8bafba8c47 100644 --- a/RetailCoder.VBE/UI/Settings/GeneralSettings.xaml +++ b/RetailCoder.VBE/UI/Settings/GeneralSettings.xaml @@ -69,12 +69,6 @@ - - - - - - - -