Skip to content

Commit 306f833

Browse files
authored
Merge pull request #3110 from Vogel612/InspectionSettingDiscovery
Inspection setting discovery
2 parents 421f9e2 + 267f1f2 commit 306f833

File tree

15 files changed

+409
-232
lines changed

15 files changed

+409
-232
lines changed
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

RetailCoder.VBE/UI/RubberduckUI.Designer.cs

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

0 commit comments

Comments
 (0)