Skip to content

Commit 0342e5c

Browse files
authored
Merge branch 'next' into Fix3115
2 parents d92c983 + 8a33837 commit 0342e5c

20 files changed

+513
-251
lines changed

RetailCoder.VBE/App.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,16 @@ public void Startup()
110110
{
111111
EnsureLogFolderPathExists();
112112
EnsureTempPathExists();
113-
LogRubberduckSart();
114113
LoadConfig();
114+
115+
LogRubberduckStart();
116+
UpdateLoggingLevel();
117+
115118
CheckForLegacyIndenterSettings();
116119
_appMenus.Initialize();
117120
_hooks.HookHotkeys(); // need to hook hotkeys before we localize menus, to correctly display ShortcutTexts
118121
_appMenus.Localize();
119122

120-
UpdateLoggingLevel();
121-
122123
if (_config.UserSettings.GeneralSettings.CheckVersion)
123124
{
124125
_checkVersionCommand.Execute(null);
@@ -185,19 +186,19 @@ private void CheckForLegacyIndenterSettings()
185186
}
186187
}
187188

188-
private void LogRubberduckSart()
189+
public void LogRubberduckStart()
189190
{
190191
var version = _version.CurrentVersion;
191192
GlobalDiagnosticsContext.Set("RubberduckVersion", version.ToString());
192193
var headers = new List<string>
193194
{
194-
string.Format("Rubberduck version {0} loading:", version),
195+
string.Format("\r\n\tRubberduck version {0} loading:", version),
195196
string.Format("\tOperating System: {0} {1}", Environment.OSVersion.VersionString, Environment.Is64BitOperatingSystem ? "x64" : "x86"),
196197
string.Format("\tHost Product: {0} {1}", Application.ProductName, Environment.Is64BitProcess ? "x64" : "x86"),
197198
string.Format("\tHost Version: {0}", Application.ProductVersion),
198199
string.Format("\tHost Executable: {0}", Path.GetFileName(Application.ExecutablePath)),
199200
};
200-
Logger.Log(LogLevel.Info, string.Join(Environment.NewLine, headers));
201+
LogLevelHelper.SetDebugInfo(string.Join(Environment.NewLine, headers));
201202
}
202203

203204
private bool _disposed;

RetailCoder.VBE/Common/LogLevelHelper.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ public static class LogLevelHelper
1010
{
1111
private static readonly Lazy<IEnumerable<LogLevel>> _logLevels = new Lazy<IEnumerable<LogLevel>>(GetLogLevels);
1212

13+
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
14+
private static string LogHeader;
15+
private static bool LogHeaderWritten;
16+
1317
public static IEnumerable<LogLevel> LogLevels
1418
{
1519
get
@@ -39,8 +43,24 @@ public static int MaxLogLevel()
3943
return GetLogLevels().Max(lvl => lvl.Ordinal);
4044
}
4145

46+
public static void SetDebugInfo(String value)
47+
{
48+
LogHeader = value;
49+
LogHeaderWritten = false;
50+
}
51+
4252
public static void SetMinimumLogLevel(LogLevel minimumLogLevel)
4353
{
54+
if (LogManager.GlobalThreshold == minimumLogLevel)
55+
{
56+
return;
57+
}
58+
if (LogHeaderWritten == true)
59+
{
60+
Logger.Log(LogLevel.Info, "Minimum log level changing from " +
61+
LogManager.GlobalThreshold.Name +
62+
" to " + minimumLogLevel.Name);
63+
}
4464
var loggingRules = LogManager.Configuration.LoggingRules;
4565
foreach (var loggingRule in loggingRules)
4666
{
@@ -49,6 +69,7 @@ public static void SetMinimumLogLevel(LogLevel minimumLogLevel)
4969
if (minimumLogLevel == LogLevel.Off)
5070
{
5171
LogManager.DisableLogging();
72+
LogManager.GlobalThreshold = minimumLogLevel;
5273
LogManager.ReconfigExistingLoggers();
5374
return;
5475
}
@@ -63,7 +84,13 @@ public static void SetMinimumLogLevel(LogLevel minimumLogLevel)
6384
}
6485
}
6586
}
87+
LogManager.GlobalThreshold = minimumLogLevel;
6688
LogManager.ReconfigExistingLoggers();
89+
if (LogHeaderWritten == false)
90+
{
91+
Logger.Log(minimumLogLevel, LogHeader);
92+
LogHeaderWritten = true;
93+
}
6794
}
6895

6996
private static void ClearLogLevels(LoggingRule loggingRule)
Lines changed: 7 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
using System.Collections.Generic;
22
using Rubberduck.Parsing.Inspections.Resources;
33
using Rubberduck.SettingsProvider;
4+
using Rubberduck.Parsing.Inspections.Abstract;
5+
using System.Linq;
46

57
namespace Rubberduck.Settings
68
{
79
public class CodeInspectionConfigProvider : IConfigProvider<CodeInspectionSettings>
810
{
911
private readonly IPersistanceService<CodeInspectionSettings> _persister;
12+
private readonly IEnumerable<IInspection> _foundInspections;
1013

11-
public CodeInspectionConfigProvider(IPersistanceService<CodeInspectionSettings> persister)
14+
public CodeInspectionConfigProvider(IPersistanceService<CodeInspectionSettings> persister, IEnumerable<IInspection> foundInspections)
1215
{
1316
_persister = persister;
17+
_foundInspections = foundInspections;
1418
}
1519

1620
public CodeInspectionSettings Create()
@@ -29,61 +33,9 @@ public void Save(CodeInspectionSettings settings)
2933
_persister.Save(settings);
3034
}
3135

32-
public HashSet<CodeInspectionSetting> GetDefaultCodeInspections()
36+
public IEnumerable<CodeInspectionSetting> GetDefaultCodeInspections()
3337
{
34-
// https://github.com/rubberduck-vba/Rubberduck/issues/3021
35-
return new HashSet<CodeInspectionSetting>
36-
{
37-
new CodeInspectionSetting("ApplicationWorksheetFunctionInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Suggestion),
38-
new CodeInspectionSetting("AssignedByValParameterInspection", CodeInspectionType.LanguageOpportunities),
39-
new CodeInspectionSetting("ConstantNotUsedInspection", CodeInspectionType.CodeQualityIssues),
40-
new CodeInspectionSetting("DefaultProjectNameInspection", CodeInspectionType.MaintainabilityAndReadabilityIssues, CodeInspectionSeverity.Suggestion),
41-
new CodeInspectionSetting("EmptyIfBlockInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Hint),
42-
new CodeInspectionSetting("EmptyStringLiteralInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
43-
new CodeInspectionSetting("EncapsulatePublicFieldInspection", CodeInspectionType.MaintainabilityAndReadabilityIssues, CodeInspectionSeverity.Hint),
44-
new CodeInspectionSetting("FunctionReturnValueNotUsedInspection", CodeInspectionType.CodeQualityIssues),
45-
new CodeInspectionSetting("HostSpecificExpressionInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
46-
new CodeInspectionSetting("HungarianNotationInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Hint),
47-
new CodeInspectionSetting("IllegalAnnotationInspection", CodeInspectionType.RubberduckOpportunities, CodeInspectionSeverity.Error),
48-
new CodeInspectionSetting("ImplicitActiveSheetReferenceInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Hint),
49-
new CodeInspectionSetting("ImplicitActiveWorkbookReferenceInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Hint),
50-
new CodeInspectionSetting("ImplicitByRefParameterInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Hint),
51-
new CodeInspectionSetting("ImplicitDefaultMemberAssignmentInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Hint),
52-
new CodeInspectionSetting("ImplicitPublicMemberInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
53-
new CodeInspectionSetting("ImplicitVariantReturnTypeInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
54-
new CodeInspectionSetting("LineLabelNotUsedInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Warning),
55-
new CodeInspectionSetting("MemberNotOnInterfaceInspection", CodeInspectionType.CodeQualityIssues),
56-
new CodeInspectionSetting("MissingAnnotationArgumentInspection", CodeInspectionType.RubberduckOpportunities, CodeInspectionSeverity.Error),
57-
new CodeInspectionSetting("MissingAnnotationInspection", CodeInspectionType.RubberduckOpportunities, CodeInspectionSeverity.Suggestion),
58-
new CodeInspectionSetting("MissingAttributeInspection", CodeInspectionType.RubberduckOpportunities),
59-
new CodeInspectionSetting("ModuleScopeDimKeywordInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
60-
new CodeInspectionSetting("MoveFieldCloserToUsageInspection", CodeInspectionType.MaintainabilityAndReadabilityIssues, CodeInspectionSeverity.Hint),
61-
new CodeInspectionSetting("MultilineParameterInspection", CodeInspectionType.MaintainabilityAndReadabilityIssues, CodeInspectionSeverity.Suggestion),
62-
new CodeInspectionSetting("MultipleDeclarationsInspection", CodeInspectionType.MaintainabilityAndReadabilityIssues, CodeInspectionSeverity.Suggestion),
63-
new CodeInspectionSetting("NonReturningFunctionInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Error),
64-
new CodeInspectionSetting("ObjectVariableNotSetInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Error),
65-
new CodeInspectionSetting("ObsoleteCallStatementInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
66-
new CodeInspectionSetting("ObsoleteCommentSyntaxInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
67-
new CodeInspectionSetting("ObsoleteGlobalInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
68-
new CodeInspectionSetting("ObsoleteLetStatementInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
69-
new CodeInspectionSetting("ObsoleteTypeHintInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
70-
new CodeInspectionSetting("OptionBaseInspection", CodeInspectionType.MaintainabilityAndReadabilityIssues, CodeInspectionSeverity.Hint),
71-
new CodeInspectionSetting("OptionExplicitInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Error),
72-
new CodeInspectionSetting("ParameterCanBeByValInspection", CodeInspectionType.MaintainabilityAndReadabilityIssues, CodeInspectionSeverity.Suggestion),
73-
new CodeInspectionSetting("ParameterNotUsedInspection", CodeInspectionType.CodeQualityIssues),
74-
new CodeInspectionSetting("ProcedureCanBeWrittenAsFunctionInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Suggestion),
75-
new CodeInspectionSetting("ProcedureNotUsedInspection", CodeInspectionType.CodeQualityIssues),
76-
new CodeInspectionSetting("RedundantOptionInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Hint),
77-
new CodeInspectionSetting("SelfAssignedDeclarationInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Suggestion),
78-
new CodeInspectionSetting("UnassignedVariableUsageInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Error),
79-
new CodeInspectionSetting("UndeclaredVariableUsageInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Error),
80-
new CodeInspectionSetting("UntypedFunctionUsageInspection", CodeInspectionType.LanguageOpportunities, CodeInspectionSeverity.Hint),
81-
new CodeInspectionSetting("UseMeaningfulNameInspection", CodeInspectionType.MaintainabilityAndReadabilityIssues, CodeInspectionSeverity.Suggestion),
82-
new CodeInspectionSetting("VariableNotAssignedInspection", CodeInspectionType.CodeQualityIssues),
83-
new CodeInspectionSetting("VariableNotUsedInspection", CodeInspectionType.CodeQualityIssues),
84-
new CodeInspectionSetting("VariableTypeNotDeclaredInspection", CodeInspectionType.LanguageOpportunities),
85-
new CodeInspectionSetting("WriteOnlyPropertyInspection", CodeInspectionType.CodeQualityIssues, CodeInspectionSeverity.Suggestion),
86-
};
38+
return _foundInspections.Select(inspection => new CodeInspectionSetting(inspection));
8739
}
8840
}
8941
}

RetailCoder.VBE/Settings/CodeInspectionSettings.cs

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.Xml.Serialization;
66
using Rubberduck.Parsing.Inspections.Abstract;
77
using Rubberduck.Parsing.Inspections.Resources;
8-
using Rubberduck.UI;
98

109
namespace Rubberduck.Settings
1110
{
@@ -27,13 +26,13 @@ public class CodeInspectionSettings : ICodeInspectionSettings, IEquatable<CodeIn
2726

2827
public bool RunInspectionsOnSuccessfulParse { get; set; }
2928

30-
public CodeInspectionSettings() : this(new HashSet<CodeInspectionSetting>(), new WhitelistedIdentifierSetting[] {}, true)
29+
public CodeInspectionSettings() : this(Enumerable.Empty<CodeInspectionSetting>(), new WhitelistedIdentifierSetting[] { }, true)
3130
{
3231
}
3332

34-
public CodeInspectionSettings(HashSet<CodeInspectionSetting> inspections, WhitelistedIdentifierSetting[] whitelistedNames, bool runInspectionsOnParse)
33+
public CodeInspectionSettings(IEnumerable<CodeInspectionSetting> inspections, WhitelistedIdentifierSetting[] whitelistedNames, bool runInspectionsOnParse)
3534
{
36-
CodeInspections = inspections;
35+
CodeInspections = new HashSet<CodeInspectionSetting>(inspections);
3736
WhitelistedIdentifiers = whitelistedNames;
3837
RunInspectionsOnSuccessfulParse = runInspectionsOnParse;
3938
}
@@ -77,19 +76,41 @@ public class CodeInspectionSetting : IInspectionModel
7776
public string Name { get; set; }
7877

7978
[XmlIgnore]
80-
public string Description { get; set; } // not serialized because culture-dependent
79+
private string _description;
80+
[XmlIgnore]
81+
public string Description
82+
{
83+
get
84+
{
85+
if (_description == null)
86+
{
87+
_description = InspectionsUI.ResourceManager.GetString(Name + "InspectionName");
88+
}
89+
return _description;
90+
}
91+
set
92+
{
93+
_description = value;
94+
}
95+
}// not serialized because culture-dependent
8196

8297
[XmlIgnore]
8398
public string LocalizedName
8499
{
85100
get
86101
{
87-
return InspectionsUI.ResourceManager.GetString(Name + "Name", CultureInfo.CurrentUICulture);
102+
return InspectionsUI.ResourceManager.GetString(Name + "InspectionName", CultureInfo.CurrentUICulture);
88103
}
89104
} // not serialized because culture-dependent
90105

91106
[XmlIgnore]
92-
public string AnnotationName { get; set; }
107+
public string AnnotationName
108+
{
109+
get
110+
{
111+
return Name.Replace("Inspection", string.Empty);
112+
}
113+
}
93114

94115
[XmlIgnore]
95116
public CodeInspectionSeverity DefaultSeverity { get; private set; }
@@ -102,23 +123,23 @@ public string Meta
102123
{
103124
get
104125
{
105-
return InspectionsUI.ResourceManager.GetString(Name + "Meta", CultureInfo.CurrentUICulture);
126+
return InspectionsUI.ResourceManager.GetString(Name + "InspectionMeta", CultureInfo.CurrentUICulture);
106127
}
107128
}
108129

109130
[XmlIgnore]
110131
// ReSharper disable once UnusedMember.Global; used in string literal to define collection groupings
111-
public string TypeLabel => RubberduckUI.ResourceManager.GetString("CodeInspectionSettings_" + InspectionType, CultureInfo.CurrentUICulture);
132+
public string TypeLabel => InspectionsUI.ResourceManager.GetString("CodeInspectionSettings_" + InspectionType, CultureInfo.CurrentUICulture);
112133

113134
[XmlIgnore]
114135
public string SeverityLabel
115136
{
116-
get { return RubberduckUI.ResourceManager.GetString("CodeInspectionSeverity_" + Severity, CultureInfo.CurrentUICulture); }
137+
get { return InspectionsUI.ResourceManager.GetString("CodeInspectionSeverity_" + Severity, CultureInfo.CurrentUICulture); }
117138
set
118139
{
119-
foreach (var severity in Enum.GetValues(typeof (CodeInspectionSeverity)))
140+
foreach (var severity in Enum.GetValues(typeof(CodeInspectionSeverity)))
120141
{
121-
if (value == RubberduckUI.ResourceManager.GetString("CodeInspectionSeverity_" + severity, CultureInfo.CurrentUICulture))
142+
if (value == InspectionsUI.ResourceManager.GetString("CodeInspectionSeverity_" + severity, CultureInfo.CurrentUICulture))
122143
{
123144
Severity = (CodeInspectionSeverity)severity;
124145
return;
@@ -167,8 +188,8 @@ public override int GetHashCode()
167188
unchecked
168189
{
169190
var hashCode = Name?.GetHashCode() ?? 0;
170-
hashCode = (hashCode * 397) ^ (int) Severity;
171-
hashCode = (hashCode * 397) ^ (int) InspectionType;
191+
hashCode = (hashCode * 397) ^ (int)Severity;
192+
hashCode = (hashCode * 397) ^ (int)InspectionType;
172193
return hashCode;
173194
}
174195
}

RetailCoder.VBE/UI/Inspections/InspectionDescriptionConverter.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
1515
{
1616
return null;
1717
}
18-
19-
return RubberduckUI.ResourceManager.GetString("CodeInspectionSettings_" + inspection.InspectionType, CultureInfo.CurrentUICulture);
18+
return InspectionsUI.ResourceManager.GetString("CodeInspectionSettings_" + inspection.InspectionType.ToString(), CultureInfo.CurrentUICulture);
2019
}
2120

2221
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
@@ -34,7 +33,6 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
3433
{
3534
return null;
3635
}
37-
3836
return InspectionsUI.ResourceManager.GetString(inspection.Name + "Name", CultureInfo.CurrentUICulture);
3937
}
4038

0 commit comments

Comments
 (0)