From 44ac1aaa3f600a6084c82f31d3515f1d32646f7f Mon Sep 17 00:00:00 2001 From: Vogel612 Date: Sat, 13 Apr 2019 14:39:21 +0200 Subject: [PATCH 1/5] Inverted dependency graph for Rubberduck.CodeAnalysis, For that purpose we cleaned up Settings and their loading behaviour a bit and moved most of the interfaces relating to it into Rubberduck.SettingsProvider. The Defaults are now loaded differently, registration is probably utterly broken, though. Furthermore this extracts the CodeInspectionSettings defaults to RD.CodeAnalysis to make them accessible for the loader there. --- .../CodeMetrics/AggregationLevel.cs | 0 .../CodeMetrics/CodeMetric.cs | 0 .../CodeMetrics/ICodeMetricResult.cs | 0 .../CodeMetrics/ICodeMetricsAnalyst.cs | 0 .../ICodeMetricsParseTreeListener.cs | 0 .../Concrete/HungarianNotationInspection.cs | 2 +- .../Concrete/UseMeaningfulNameInspection.cs | 2 +- .../Helper}/VariableNameValidator.cs | 0 .../Inspections/IInspectionProvider.cs | 0 .../Inspections/InspectionProvider.cs | 3 +- .../Inspections/Inspector.cs | 21 +- .../CodeInspectionDefaults.Designer.cs | 157 +++++ .../CodeInspectionDefaults.settings | 92 +++ .../AddIdentifierToWhiteListQuickFix.cs | 2 +- .../Rubberduck.CodeAnalysis.csproj | 17 +- .../Settings/CodeInspectionConfigProvider.cs | 65 ++ .../Settings/CodeInspectionSettings.cs | 2 +- .../Settings/WhitelistedIdentifierSetting.cs | 2 +- Rubberduck.CodeAnalysis/app.config | 266 +++++++- .../ReferenceReconciler.cs | 4 +- Rubberduck.Core/App.cs | 15 +- .../AutoComplete/AutoCompleteService.cs | 9 +- Rubberduck.Core/Common/RubberduckHooks.cs | 7 +- .../CodeExplorer/CodeExplorerViewModel.cs | 8 +- .../Properties/Settings.Designer.cs | 609 +++++++++--------- Rubberduck.Core/Properties/Settings.settings | 499 +++++++------- Rubberduck.Core/Rubberduck.Core.csproj | 23 +- .../Settings/AutoCompleteConfigProvider.cs | 18 +- .../Settings/CodeInspectionConfigProvider.cs | 70 -- .../Settings/ConfigurationLoader.cs | 94 ++- Rubberduck.Core/Settings/DefaultSettings.cs | 18 - .../Settings/GeneralConfigProvider.cs | 36 +- .../Settings/HotkeyConfigProvider.cs | 18 +- .../Settings/IConfigurationService.cs | 11 - .../Settings/ReferenceConfigProvider.cs | 27 +- .../Settings/ToDoListConfigProvider.cs | 24 +- Rubberduck.Core/Settings/UserSettings.cs | 1 + .../Settings/WindowConfigProvider.cs | 18 +- .../AddRemoveReferencesPresenterFactory.cs | 6 +- .../CodeExplorerDockablePresenter.cs | 2 +- .../CodeMetricsDockablePresenter.cs | 2 +- Rubberduck.Core/UI/Command/ReparseCommand.cs | 4 +- .../UI/DockableToolwindowPresenter.cs | 4 +- .../InspectionResultsDockablePresenter.cs | 2 +- .../Inspections/InspectionResultsViewModel.cs | 13 +- ...ddRemoveReferencesUserSettingsViewModel.cs | 8 +- .../UI/Settings/InspectionSettings.xaml.cs | 2 +- .../Settings/InspectionSettingsViewModel.cs | 1 + Rubberduck.Core/UI/Settings/Settings.cs | 7 +- .../UI/Settings/SettingsControlViewModel.cs | 9 +- Rubberduck.Core/UI/Settings/SettingsForm.cs | 5 +- .../ToDoExplorerDockablePresenter.cs | 2 +- .../UI/ToDoItems/ToDoExplorerViewModel.cs | 9 +- .../TestExplorerDockablePresenter.cs | 2 +- .../UI/UnitTesting/TestExplorerViewModel.cs | 3 +- Rubberduck.Core/app.config | 491 +++----------- .../IAssignedByValParameterQuickFixDialog.cs | 0 ...gnedByValParameterQuickFixDialogFactory.cs | 0 .../Rubberduck.Interaction.csproj | 5 + .../Output}/IExportable.cs | 0 .../Output}/StringExtensions.cs | 0 .../Properties/AssemblyInfo.cs | 13 + .../Rubberduck.JunkDrawer.csproj | 11 + Rubberduck.Main/Extension.cs | 2 +- .../Root/RubberduckIoCInstaller.cs | 8 +- .../ConfigurationServiceBase.cs | 40 ++ .../DefaultSettings.cs | 21 + .../IConfigProvider.cs | 28 +- .../Rubberduck.SettingsProvider.csproj | 4 + .../IndenterConfigProvider.cs | 11 +- .../CodeGeneration/TestCodeGenerator.cs | 10 +- .../Rubberduck.UnitTesting.csproj | 1 + .../Settings/UnitTestConfigProvider.cs | 22 +- Rubberduck.sln | 32 + .../AddRemoveReferencesSetup.cs | 10 +- .../CodeExplorer/MockedCodeExplorer.cs | 14 +- .../Commands/UnitTestCommandTests.cs | 4 +- RubberduckTests/ConfigurationTests.cs | 1 + .../Inspections/InspectionProviderTests.cs | 3 +- .../Inspections/InspectionsHelper.cs | 16 +- .../UseMeaningfulNameInspectionTests.cs | 1 + RubberduckTests/RubberduckTests.csproj | 1 + .../Settings/AutoCompleteSettingsTests.cs | 2 +- .../CodeInspectionConfigProviderTests.cs | 13 +- .../Settings/GeneralSettingsTests.cs | 4 +- .../Settings/InspectionSettingsTests.cs | 1 + .../TodoExplorer/TodoExplorerTests.cs | 8 +- 87 files changed, 1672 insertions(+), 1326 deletions(-) rename {Rubberduck.Core/CodeAnalysis => Rubberduck.CodeAnalysis}/CodeMetrics/AggregationLevel.cs (100%) rename {Rubberduck.Core/CodeAnalysis => Rubberduck.CodeAnalysis}/CodeMetrics/CodeMetric.cs (100%) rename {Rubberduck.Core/CodeAnalysis => Rubberduck.CodeAnalysis}/CodeMetrics/ICodeMetricResult.cs (100%) rename {Rubberduck.Core/CodeAnalysis => Rubberduck.CodeAnalysis}/CodeMetrics/ICodeMetricsAnalyst.cs (100%) rename {Rubberduck.Core/CodeAnalysis => Rubberduck.CodeAnalysis}/CodeMetrics/ICodeMetricsParseTreeListener.cs (100%) rename {Rubberduck.Core/Common => Rubberduck.CodeAnalysis/Inspections/Helper}/VariableNameValidator.cs (100%) rename {Rubberduck.Core/CodeAnalysis => Rubberduck.CodeAnalysis}/Inspections/IInspectionProvider.cs (100%) rename {Rubberduck.Core/CodeAnalysis => Rubberduck.CodeAnalysis}/Inspections/InspectionProvider.cs (90%) create mode 100644 Rubberduck.CodeAnalysis/Properties/CodeInspectionDefaults.Designer.cs create mode 100644 Rubberduck.CodeAnalysis/Properties/CodeInspectionDefaults.settings create mode 100644 Rubberduck.CodeAnalysis/Settings/CodeInspectionConfigProvider.cs rename {Rubberduck.Core => Rubberduck.CodeAnalysis}/Settings/CodeInspectionSettings.cs (99%) rename {Rubberduck.Core => Rubberduck.CodeAnalysis}/Settings/WhitelistedIdentifierSetting.cs (90%) delete mode 100644 Rubberduck.Core/Settings/CodeInspectionConfigProvider.cs delete mode 100644 Rubberduck.Core/Settings/DefaultSettings.cs delete mode 100644 Rubberduck.Core/Settings/IConfigurationService.cs rename {Rubberduck.Core/UI => Rubberduck.Interaction}/Refactorings/IAssignedByValParameterQuickFixDialog.cs (100%) rename {Rubberduck.Core/UI => Rubberduck.Interaction}/Refactorings/IAssignedByValParameterQuickFixDialogFactory.cs (100%) rename {Rubberduck.Core/Common => Rubberduck.JunkDrawer/Output}/IExportable.cs (100%) rename {Rubberduck.Core/Common => Rubberduck.JunkDrawer/Output}/StringExtensions.cs (100%) create mode 100644 Rubberduck.JunkDrawer/Properties/AssemblyInfo.cs create mode 100644 Rubberduck.JunkDrawer/Rubberduck.JunkDrawer.csproj create mode 100644 Rubberduck.SettingsProvider/ConfigurationServiceBase.cs create mode 100644 Rubberduck.SettingsProvider/DefaultSettings.cs diff --git a/Rubberduck.Core/CodeAnalysis/CodeMetrics/AggregationLevel.cs b/Rubberduck.CodeAnalysis/CodeMetrics/AggregationLevel.cs similarity index 100% rename from Rubberduck.Core/CodeAnalysis/CodeMetrics/AggregationLevel.cs rename to Rubberduck.CodeAnalysis/CodeMetrics/AggregationLevel.cs diff --git a/Rubberduck.Core/CodeAnalysis/CodeMetrics/CodeMetric.cs b/Rubberduck.CodeAnalysis/CodeMetrics/CodeMetric.cs similarity index 100% rename from Rubberduck.Core/CodeAnalysis/CodeMetrics/CodeMetric.cs rename to Rubberduck.CodeAnalysis/CodeMetrics/CodeMetric.cs diff --git a/Rubberduck.Core/CodeAnalysis/CodeMetrics/ICodeMetricResult.cs b/Rubberduck.CodeAnalysis/CodeMetrics/ICodeMetricResult.cs similarity index 100% rename from Rubberduck.Core/CodeAnalysis/CodeMetrics/ICodeMetricResult.cs rename to Rubberduck.CodeAnalysis/CodeMetrics/ICodeMetricResult.cs diff --git a/Rubberduck.Core/CodeAnalysis/CodeMetrics/ICodeMetricsAnalyst.cs b/Rubberduck.CodeAnalysis/CodeMetrics/ICodeMetricsAnalyst.cs similarity index 100% rename from Rubberduck.Core/CodeAnalysis/CodeMetrics/ICodeMetricsAnalyst.cs rename to Rubberduck.CodeAnalysis/CodeMetrics/ICodeMetricsAnalyst.cs diff --git a/Rubberduck.Core/CodeAnalysis/CodeMetrics/ICodeMetricsParseTreeListener.cs b/Rubberduck.CodeAnalysis/CodeMetrics/ICodeMetricsParseTreeListener.cs similarity index 100% rename from Rubberduck.Core/CodeAnalysis/CodeMetrics/ICodeMetricsParseTreeListener.cs rename to Rubberduck.CodeAnalysis/CodeMetrics/ICodeMetricsParseTreeListener.cs diff --git a/Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs b/Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs index c26a1da0cb..2fe5357468 100644 --- a/Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs +++ b/Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs @@ -2,6 +2,7 @@ using System.Globalization; using System.Linq; using System.Text.RegularExpressions; +using Rubberduck.CodeAnalysis.Settings; using Rubberduck.Inspections.Abstract; using Rubberduck.Inspections.Inspections.Extensions; using Rubberduck.Inspections.Results; @@ -9,7 +10,6 @@ using Rubberduck.Parsing.Symbols; using Rubberduck.Parsing.VBA; using Rubberduck.Resources; -using Rubberduck.Settings; using Rubberduck.SettingsProvider; namespace Rubberduck.Inspections.Concrete diff --git a/Rubberduck.CodeAnalysis/Inspections/Concrete/UseMeaningfulNameInspection.cs b/Rubberduck.CodeAnalysis/Inspections/Concrete/UseMeaningfulNameInspection.cs index 0da31e4e65..fe16f062ad 100644 --- a/Rubberduck.CodeAnalysis/Inspections/Concrete/UseMeaningfulNameInspection.cs +++ b/Rubberduck.CodeAnalysis/Inspections/Concrete/UseMeaningfulNameInspection.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using Rubberduck.CodeAnalysis.Settings; using Rubberduck.Common; using Rubberduck.Inspections.Abstract; using Rubberduck.Inspections.Results; @@ -9,7 +10,6 @@ using Rubberduck.Parsing.Symbols; using Rubberduck.Parsing.VBA; using Rubberduck.Resources; -using Rubberduck.Settings; using Rubberduck.SettingsProvider; using static Rubberduck.Parsing.Grammar.VBAParser; diff --git a/Rubberduck.Core/Common/VariableNameValidator.cs b/Rubberduck.CodeAnalysis/Inspections/Helper/VariableNameValidator.cs similarity index 100% rename from Rubberduck.Core/Common/VariableNameValidator.cs rename to Rubberduck.CodeAnalysis/Inspections/Helper/VariableNameValidator.cs diff --git a/Rubberduck.Core/CodeAnalysis/Inspections/IInspectionProvider.cs b/Rubberduck.CodeAnalysis/Inspections/IInspectionProvider.cs similarity index 100% rename from Rubberduck.Core/CodeAnalysis/Inspections/IInspectionProvider.cs rename to Rubberduck.CodeAnalysis/Inspections/IInspectionProvider.cs diff --git a/Rubberduck.Core/CodeAnalysis/Inspections/InspectionProvider.cs b/Rubberduck.CodeAnalysis/Inspections/InspectionProvider.cs similarity index 90% rename from Rubberduck.Core/CodeAnalysis/Inspections/InspectionProvider.cs rename to Rubberduck.CodeAnalysis/Inspections/InspectionProvider.cs index 4e9d5490ba..473cb7e846 100644 --- a/Rubberduck.Core/CodeAnalysis/Inspections/InspectionProvider.cs +++ b/Rubberduck.CodeAnalysis/Inspections/InspectionProvider.cs @@ -2,6 +2,7 @@ using System.Linq; using Rubberduck.Parsing.Inspections.Abstract; using Rubberduck.Settings; +using Rubberduck.CodeAnalysis.Settings; namespace Rubberduck.CodeAnalysis.Inspections { @@ -9,7 +10,7 @@ public class InspectionProvider : IInspectionProvider { public InspectionProvider(IEnumerable inspections) { - var defaultSettings = new DefaultSettings().Default; + var defaultSettings = new DefaultSettings().Default; var defaultNames = defaultSettings.CodeInspections.Select(x => x.Name); var defaultInspections = inspections.Where(inspection => defaultNames.Contains(inspection.Name)); diff --git a/Rubberduck.CodeAnalysis/Inspections/Inspector.cs b/Rubberduck.CodeAnalysis/Inspections/Inspector.cs index 06064997b9..4f4915d1ec 100644 --- a/Rubberduck.CodeAnalysis/Inspections/Inspector.cs +++ b/Rubberduck.CodeAnalysis/Inspections/Inspector.cs @@ -15,10 +15,10 @@ using Rubberduck.Parsing.Inspections.Abstract; using Rubberduck.Parsing.VBA; using Rubberduck.Parsing.VBA.Parsing; -using Rubberduck.Settings; -using Rubberduck.UI.Inspections; using Rubberduck.VBEditor; using Rubberduck.Resources; +using Rubberduck.SettingsProvider; +using Rubberduck.CodeAnalysis.Settings; namespace Rubberduck.Inspections { @@ -27,29 +27,28 @@ namespace Rubberduck.Inspections public class Inspector : IInspector { private const int _maxDegreeOfInspectionParallelism = -1; - - private readonly IGeneralConfigService _configService; + private readonly IConfigurationService _configService; private readonly List _inspections; - public Inspector(IGeneralConfigService configService, IInspectionProvider inspectionProvider) + public Inspector(IConfigurationService configService, IInspectionProvider inspectionProvider) { _inspections = inspectionProvider.Inspections.ToList(); - + _configService = configService; configService.SettingsChanged += ConfigServiceSettingsChanged; } private void ConfigServiceSettingsChanged(object sender, EventArgs e) { - var config = _configService.LoadConfiguration(); + var config = _configService.Load(); UpdateInspectionSeverity(config); } - private void UpdateInspectionSeverity(Configuration config) + private void UpdateInspectionSeverity(CodeInspectionSettings config) { foreach (var inspection in _inspections) { - foreach (var setting in config.UserSettings.CodeInspectionSettings.CodeInspections) + foreach (var setting in config.CodeInspections) { if (inspection.Name == setting.Name) { @@ -72,7 +71,7 @@ public async Task> FindIssuesAsync(RubberduckPars var allIssues = new ConcurrentBag(); token.ThrowIfCancellationRequested(); - var config = _configService.LoadConfiguration(); + var config = _configService.Load(); UpdateInspectionSeverity(config); token.ThrowIfCancellationRequested(); @@ -93,7 +92,7 @@ public async Task> FindIssuesAsync(RubberduckPars { try { - WalkTrees(config.UserSettings.CodeInspectionSettings, state, parseTreeInspections.Where(i => i.TargetKindOfCode == parsePass), parsePass); + WalkTrees(config, state, parseTreeInspections.Where(i => i.TargetKindOfCode == parsePass), parsePass); } catch (Exception e) { diff --git a/Rubberduck.CodeAnalysis/Properties/CodeInspectionDefaults.Designer.cs b/Rubberduck.CodeAnalysis/Properties/CodeInspectionDefaults.Designer.cs new file mode 100644 index 0000000000..9fdefbbe32 --- /dev/null +++ b/Rubberduck.CodeAnalysis/Properties/CodeInspectionDefaults.Designer.cs @@ -0,0 +1,157 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Rubberduck.CodeAnalysis.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] + public sealed partial class CodeInspectionDefaults : global::System.Configuration.ApplicationSettingsBase { + + private static CodeInspectionDefaults defaultInstance = ((CodeInspectionDefaults)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new CodeInspectionDefaults()))); + + public static CodeInspectionDefaults Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n\r\n \r\n \r\n \r\n \r\n <" + + "CodeInspection Name=\"UnhandledOnErrorResumeNextInspection\" Severity=\"Warning\" In" + + "spectionType=\"CodeQualityIssues\" />\r\n \r\n <" + + "CodeInspection Name=\"ImplicitByRefModifierInspection\" Severity=\"Hint\" Inspection" + + "Type=\"CodeQualityIssues\" />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n " + + "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n" + + " \r\n \r\n \r\n \r\n \r\n \r\n \r" + + "\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n true\r\n")] + public global::Rubberduck.CodeAnalysis.Settings.CodeInspectionSettings CodeInspectionSettings { + get { + return ((global::Rubberduck.CodeAnalysis.Settings.CodeInspectionSettings)(this["CodeInspectionSettings"])); + } + } + } +} diff --git a/Rubberduck.CodeAnalysis/Properties/CodeInspectionDefaults.settings b/Rubberduck.CodeAnalysis/Properties/CodeInspectionDefaults.settings new file mode 100644 index 0000000000..7666b940eb --- /dev/null +++ b/Rubberduck.CodeAnalysis/Properties/CodeInspectionDefaults.settings @@ -0,0 +1,92 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<CodeInspectionSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <CodeInspections> + <CodeInspection Name="BooleanAssignedInIfElseInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteErrorSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StopKeywordInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnhandledOnErrorResumeNextInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="EmptyStringLiteralInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitByRefModifierInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="FunctionReturnValueNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IllegalAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="RedundantByRefModifierInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="MissingAttributeInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="AttributeOutOfSyncInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="MissingAnnotationArgumentInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ModuleScopeDimKeywordInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="MultilineParameterInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="MultipleDeclarationsInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteCallStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteCommentSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteLetStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="OptionBaseInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="RedundantOptionInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="OptionExplicitInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ProcedureCanBeWrittenAsFunctionInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ApplicationWorksheetFunctionInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="AssignedByValParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="EmptyModuleInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="LineLabelNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IntegerDataTypeInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ShadowedDeclarationInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ConstantNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DefaultProjectNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyCaseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyDoWhileBlockInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyElseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyForEachBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyForLoopBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyIfBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyWhileWendBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EncapsulatePublicFieldInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="HostSpecificExpressionInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="HungarianNotationInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ImplicitActiveSheetReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitActiveWorkbookReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitDefaultMemberAssignmentInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitPublicMemberInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitVariantReturnTypeInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="MemberNotOnInterfaceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="MoveFieldCloserToUsageInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="NonReturningFunctionInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ObjectVariableNotSetInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ObsoleteGlobalInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteTypeHintInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ParameterCanBeByValInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ParameterNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ProcedureNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="SelfAssignedDeclarationInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnassignedVariableUsageInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UndeclaredVariableInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UntypedFunctionUsageInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="UseMeaningfulNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="VariableNotAssignedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="VariableNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="VariableTypeNotDeclaredInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="WriteOnlyPropertyInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DefTypeStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StepIsNotSpecifiedInspection" Severity="DoNotShow" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StepOneIsRedundantInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="SheetAccessedUsingStringInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteMemberUsageInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteCallingConventionInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DuplicatedAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="ModuleWithoutFolderInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="OnLocalErrorInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="IsMissingOnInappropriateArgumentInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IsMissingWithNonArgumentParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="AssignmentNotUsedInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnderscoreInPublicClassModuleMemberInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ExcelUdfNameIsValidCellReferenceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + </CodeInspections> + <WhitelistedIdentifiers /> + <RunInspectionsOnSuccessfulParse>true</RunInspectionsOnSuccessfulParse> +</CodeInspectionSettings> + + + \ No newline at end of file diff --git a/Rubberduck.CodeAnalysis/QuickFixes/AddIdentifierToWhiteListQuickFix.cs b/Rubberduck.CodeAnalysis/QuickFixes/AddIdentifierToWhiteListQuickFix.cs index 83ed7f9c43..1598a232fe 100644 --- a/Rubberduck.CodeAnalysis/QuickFixes/AddIdentifierToWhiteListQuickFix.cs +++ b/Rubberduck.CodeAnalysis/QuickFixes/AddIdentifierToWhiteListQuickFix.cs @@ -3,7 +3,7 @@ using Rubberduck.Inspections.Concrete; using Rubberduck.Parsing.Inspections.Abstract; using Rubberduck.Parsing.Rewriter; -using Rubberduck.Settings; +using Rubberduck.CodeAnalysis.Settings; using Rubberduck.SettingsProvider; namespace Rubberduck.Inspections.QuickFixes diff --git a/Rubberduck.CodeAnalysis/Rubberduck.CodeAnalysis.csproj b/Rubberduck.CodeAnalysis/Rubberduck.CodeAnalysis.csproj index 08f91a0755..c7416eb62d 100644 --- a/Rubberduck.CodeAnalysis/Rubberduck.CodeAnalysis.csproj +++ b/Rubberduck.CodeAnalysis/Rubberduck.CodeAnalysis.csproj @@ -5,7 +5,7 @@ Assembly Containing the Code Analysis features exposed by Rubberduck Copyright © 2017-2018 Rubberduck.CodeAnalysis - Rubberduck.Inspections + Rubberduck.CodeAnalysis {DEF2FB9D-6E62-49D6-8E26-9983AC025768} @@ -15,8 +15,8 @@ - + False @@ -52,4 +52,17 @@ 4.5.0 + + + True + True + CodeInspectionDefaults.settings + + + + + PublicSettingsSingleFileGenerator + CodeInspectionDefaults.Designer.cs + + \ No newline at end of file diff --git a/Rubberduck.CodeAnalysis/Settings/CodeInspectionConfigProvider.cs b/Rubberduck.CodeAnalysis/Settings/CodeInspectionConfigProvider.cs new file mode 100644 index 0000000000..e886c7c29a --- /dev/null +++ b/Rubberduck.CodeAnalysis/Settings/CodeInspectionConfigProvider.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; +using System.Linq; +using Rubberduck.CodeAnalysis.Inspections; +using Rubberduck.SettingsProvider; +using Rubberduck.Parsing.VBA; +using Rubberduck.Parsing.VBA.Extensions; +using Rubberduck.Settings; + +namespace Rubberduck.CodeAnalysis.Settings +{ + public class CodeInspectionConfigProvider : ConfigurationServiceBase + { + private readonly CodeInspectionSettings defaultSettings; + private readonly HashSet foundInspectionNames; + + public CodeInspectionConfigProvider(IPersistanceService persister, IInspectionProvider inspectionProvider) + : base(persister) + { + foundInspectionNames = inspectionProvider.Inspections.Select(inspection => inspection.Name).ToHashSet(); + defaultSettings = new DefaultSettings().Default; + // Ignore settings for unknown inspections, for example when using the Experimental attribute + defaultSettings.CodeInspections = defaultSettings.CodeInspections.Where(setting => foundInspectionNames.Contains(setting.Name)).ToHashSet(); + + var defaultNames = defaultSettings.CodeInspections.Select(x => x.Name); + var nonDefaultInspections = inspectionProvider.Inspections.Where(inspection => !defaultNames.Contains(inspection.Name)); + + defaultSettings.CodeInspections.UnionWith(nonDefaultInspections.Select(inspection => new CodeInspectionSetting(inspection))); + } + + public override CodeInspectionSettings Load() + { + var loaded = persister.Load(defaultSettings); + + if (loaded == null) + { + return defaultSettings; + } + + // Loaded settings don't contain defaults, so we need to combine user settings with defaults. + var settings = new HashSet(); + + foreach (var loadedSetting in loaded.CodeInspections.Where(inspection => foundInspectionNames.Contains(inspection.Name))) + { + var matchingDefaultSetting = defaultSettings.CodeInspections.FirstOrDefault(inspection => inspection.Equals(loadedSetting)); + if (matchingDefaultSetting != null) + { + loadedSetting.InspectionType = matchingDefaultSetting.InspectionType; + } + + settings.Add(loadedSetting); + } + + settings.UnionWith(defaultSettings.CodeInspections.Where(inspection => !settings.Contains(inspection))); + + loaded.CodeInspections = settings; + + return loaded; + } + + public override CodeInspectionSettings LoadDefaults() + { + return defaultSettings; + } + } +} diff --git a/Rubberduck.Core/Settings/CodeInspectionSettings.cs b/Rubberduck.CodeAnalysis/Settings/CodeInspectionSettings.cs similarity index 99% rename from Rubberduck.Core/Settings/CodeInspectionSettings.cs rename to Rubberduck.CodeAnalysis/Settings/CodeInspectionSettings.cs index ad5f88d8ad..4d8dc15467 100644 --- a/Rubberduck.Core/Settings/CodeInspectionSettings.cs +++ b/Rubberduck.CodeAnalysis/Settings/CodeInspectionSettings.cs @@ -7,7 +7,7 @@ using Rubberduck.Parsing.Inspections.Abstract; using Rubberduck.Parsing.Inspections; -namespace Rubberduck.Settings +namespace Rubberduck.CodeAnalysis.Settings { public interface ICodeInspectionSettings { diff --git a/Rubberduck.Core/Settings/WhitelistedIdentifierSetting.cs b/Rubberduck.CodeAnalysis/Settings/WhitelistedIdentifierSetting.cs similarity index 90% rename from Rubberduck.Core/Settings/WhitelistedIdentifierSetting.cs rename to Rubberduck.CodeAnalysis/Settings/WhitelistedIdentifierSetting.cs index f33ba7380e..ce47e5f2ac 100644 --- a/Rubberduck.Core/Settings/WhitelistedIdentifierSetting.cs +++ b/Rubberduck.CodeAnalysis/Settings/WhitelistedIdentifierSetting.cs @@ -1,6 +1,6 @@ using System.Xml.Serialization; -namespace Rubberduck.Settings +namespace Rubberduck.CodeAnalysis.Settings { [XmlType(AnonymousType = true)] public class WhitelistedIdentifierSetting diff --git a/Rubberduck.CodeAnalysis/app.config b/Rubberduck.CodeAnalysis/app.config index 3fb603793a..b396a8c55b 100644 --- a/Rubberduck.CodeAnalysis/app.config +++ b/Rubberduck.CodeAnalysis/app.config @@ -1,5 +1,11 @@ + + +
+
+ + @@ -8,4 +14,262 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + <CodeInspectionSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <CodeInspections> + <CodeInspection Name="BooleanAssignedInIfElseInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteErrorSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StopKeywordInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnhandledOnErrorResumeNextInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="EmptyStringLiteralInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitByRefModifierInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="FunctionReturnValueNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IllegalAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="RedundantByRefModifierInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="MissingAttributeInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="AttributeOutOfSyncInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="MissingAnnotationArgumentInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ModuleScopeDimKeywordInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="MultilineParameterInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="MultipleDeclarationsInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteCallStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteCommentSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteLetStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="OptionBaseInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="RedundantOptionInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="OptionExplicitInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ProcedureCanBeWrittenAsFunctionInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ApplicationWorksheetFunctionInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="AssignedByValParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="EmptyModuleInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="LineLabelNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IntegerDataTypeInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ShadowedDeclarationInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ConstantNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DefaultProjectNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyCaseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyDoWhileBlockInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyElseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyForEachBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyForLoopBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyIfBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyWhileWendBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EncapsulatePublicFieldInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="HostSpecificExpressionInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="HungarianNotationInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ImplicitActiveSheetReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitActiveWorkbookReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitDefaultMemberAssignmentInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitPublicMemberInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitVariantReturnTypeInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="MemberNotOnInterfaceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="MoveFieldCloserToUsageInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="NonReturningFunctionInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ObjectVariableNotSetInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ObsoleteGlobalInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteTypeHintInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ParameterCanBeByValInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ParameterNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ProcedureNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="SelfAssignedDeclarationInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnassignedVariableUsageInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UndeclaredVariableInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UntypedFunctionUsageInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="UseMeaningfulNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="VariableNotAssignedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="VariableNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="VariableTypeNotDeclaredInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="WriteOnlyPropertyInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DefTypeStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StepIsNotSpecifiedInspection" Severity="DoNotShow" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StepOneIsRedundantInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="SheetAccessedUsingStringInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteMemberUsageInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteCallingConventionInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DuplicatedAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="ModuleWithoutFolderInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="OnLocalErrorInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="IsMissingOnInappropriateArgumentInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IsMissingWithNonArgumentParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="AssignmentNotUsedInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnderscoreInPublicClassModuleMemberInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ExcelUdfNameIsValidCellReferenceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + </CodeInspections> + <WhitelistedIdentifiers /> + <RunInspectionsOnSuccessfulParse>true</RunInspectionsOnSuccessfulParse> + </CodeInspectionSettings> + + + + + diff --git a/Rubberduck.Core/AddRemoveReferences/ReferenceReconciler.cs b/Rubberduck.Core/AddRemoveReferences/ReferenceReconciler.cs index 292c239f0c..9fabded063 100644 --- a/Rubberduck.Core/AddRemoveReferences/ReferenceReconciler.cs +++ b/Rubberduck.Core/AddRemoveReferences/ReferenceReconciler.cs @@ -27,12 +27,12 @@ public class ReferenceReconciler : IReferenceReconciler public static readonly List TypeLibraryExtensions = new List { ".olb", ".tlb", ".dll", ".ocx", ".exe" }; private readonly IMessageBox _messageBox; - private readonly IConfigProvider _settings; + private readonly IConfigurationService _settings; private readonly IComLibraryProvider _libraryProvider; public ReferenceReconciler( IMessageBox messageBox, - IConfigProvider settings, + IConfigurationService settings, IComLibraryProvider libraryProvider) { _messageBox = messageBox; diff --git a/Rubberduck.Core/App.cs b/Rubberduck.Core/App.cs index 2328c07ebe..168b4206b1 100644 --- a/Rubberduck.Core/App.cs +++ b/Rubberduck.Core/App.cs @@ -16,13 +16,14 @@ using Rubberduck.VBEditor.Utility; using Rubberduck.VersionCheck; using Application = System.Windows.Forms.Application; +using Rubberduck.SettingsProvider; namespace Rubberduck { public sealed class App : IDisposable { private readonly IMessageBox _messageBox; - private readonly IGeneralConfigService _configService; + private readonly IConfigurationService _configService; private readonly IAppMenu _appMenus; private readonly IRubberduckHooks _hooks; private readonly IVersionCheck _version; @@ -33,7 +34,7 @@ public sealed class App : IDisposable private Configuration _config; public App(IMessageBox messageBox, - IGeneralConfigService configService, + IConfigurationService configService, IAppMenu appMenus, IRubberduckHooks hooks, IVersionCheck version, @@ -53,7 +54,7 @@ public App(IMessageBox messageBox, private void _configService_SettingsChanged(object sender, ConfigurationChangedEventArgs e) { - _config = _configService.LoadConfiguration(); + _config = _configService.Load(); _hooks.HookHotkeys(); UpdateLoggingLevel(); @@ -119,7 +120,7 @@ private void UpdateLoggingLevelOnShutdown() } _config.UserSettings.GeneralSettings.MinimumLogLevel = LogLevel.Off.Ordinal; - _configService.SaveConfiguration(_config); + _configService.Save(_config); } public void Startup() @@ -159,7 +160,7 @@ public void Shutdown() private void ApplyCultureConfig() { - _config = _configService.LoadConfiguration(); + _config = _configService.Load(); var currentCulture = Resources.RubberduckUI.Culture; try @@ -175,7 +176,7 @@ private void ApplyCultureConfig() // not accessing resources here, because setting resource culture literally just failed. _messageBox.NotifyWarn(exception.Message, "Rubberduck"); _config.UserSettings.GeneralSettings.Language.Code = currentCulture.Name; - _configService.SaveConfiguration(_config); + _configService.Save(_config); } } @@ -215,7 +216,7 @@ private void CheckForLegacyIndenterSettings() _config.UserSettings.IndenterSettings.LoadLegacyFromRegistry(); } _config.UserSettings.GeneralSettings.IsSmartIndenterPrompted = true; - _configService.SaveConfiguration(_config); + _configService.Save(_config); } catch { diff --git a/Rubberduck.Core/AutoComplete/AutoCompleteService.cs b/Rubberduck.Core/AutoComplete/AutoCompleteService.cs index 8bf6725244..957941bc8c 100644 --- a/Rubberduck.Core/AutoComplete/AutoCompleteService.cs +++ b/Rubberduck.Core/AutoComplete/AutoCompleteService.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using NLog; using Rubberduck.Settings; +using Rubberduck.SettingsProvider; using Rubberduck.VBEditor.Events; namespace Rubberduck.AutoComplete @@ -15,7 +16,7 @@ public class AutoCompleteService : IDisposable { private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); - private readonly IGeneralConfigService _configService; + private readonly IConfigurationService _configService; private readonly IEnumerable _handlers; private AutoCompleteSettings _settings; @@ -23,7 +24,7 @@ public class AutoCompleteService : IDisposable private bool _enabled; private bool _initialized; - public AutoCompleteService(IGeneralConfigService configService, IEnumerable handlers) + public AutoCompleteService(IConfigurationService configService, IEnumerable handlers) { _configService = configService; _configService.SettingsChanged += ConfigServiceSettingsChanged; @@ -42,7 +43,7 @@ private void InitializeConfig() { if (!_initialized) { - var config = _configService.LoadConfiguration(); + var config = _configService.Load(); ApplyAutoCompleteSettings(config); } } @@ -85,7 +86,7 @@ private void HandleIntelliSenseChanged(object sender, IntelliSenseEventArgs e) private void ConfigServiceSettingsChanged(object sender, ConfigurationChangedEventArgs e) { - var config = _configService.LoadConfiguration(); + var config = _configService.Load(); ApplyAutoCompleteSettings(config); } diff --git a/Rubberduck.Core/Common/RubberduckHooks.cs b/Rubberduck.Core/Common/RubberduckHooks.cs index 00337447c5..85360a1e99 100644 --- a/Rubberduck.Core/Common/RubberduckHooks.cs +++ b/Rubberduck.Core/Common/RubberduckHooks.cs @@ -8,12 +8,13 @@ using Rubberduck.VBEditor.SafeComWrappers.Abstract; using Rubberduck.VBEditor.WindowsApi; using Rubberduck.AutoComplete; +using Rubberduck.SettingsProvider; namespace Rubberduck.Common { public class RubberduckHooks : SubclassingWindow, IRubberduckHooks { - private readonly IGeneralConfigService _config; + private readonly IConfigurationService _config; private readonly HotkeyFactory _hotkeyFactory; private readonly IList _hooks = new List(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); @@ -28,7 +29,7 @@ private static IntPtr GetVbeMainWindowPtr(IVBE vbe) private RubberduckHooks(IntPtr ptr) : base(ptr, ptr) { } - public RubberduckHooks(IVBE vbe, IGeneralConfigService config, HotkeyFactory hotkeyFactory, + public RubberduckHooks(IVBE vbe, IConfigurationService config, HotkeyFactory hotkeyFactory, AutoCompleteService autoComplete) : this(GetVbeMainWindowPtr(vbe)) { @@ -42,7 +43,7 @@ public void HookHotkeys() Detach(); _hooks.Clear(); - var config = _config.LoadConfiguration(); + var config = _config.Load(); var settings = config.UserSettings.HotkeySettings; foreach (var hotkeySetting in settings.Settings.Where(hotkeySetting => hotkeySetting.IsEnabled)) diff --git a/Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerViewModel.cs b/Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerViewModel.cs index a0fb6ac9bb..b421c772cc 100644 --- a/Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerViewModel.cs +++ b/Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerViewModel.cs @@ -38,8 +38,8 @@ public sealed class CodeExplorerViewModel : ViewModelBase // ReSharper disable NotAccessedField.Local - The settings providers aren't used, but several enhancement requests will need them. private readonly RubberduckParserState _state; private readonly RemoveCommand _externalRemoveCommand; - private readonly IConfigProvider _generalSettingsProvider; - private readonly IConfigProvider _windowSettingsProvider; + private readonly IConfigurationService _generalSettingsProvider; + private readonly IConfigurationService _windowSettingsProvider; private readonly IUiDispatcher _uiDispatcher; private readonly IVBE _vbe; private readonly ITemplateProvider _templateProvider; @@ -48,8 +48,8 @@ public sealed class CodeExplorerViewModel : ViewModelBase public CodeExplorerViewModel( RubberduckParserState state, RemoveCommand removeCommand, - IConfigProvider generalSettingsProvider, - IConfigProvider windowSettingsProvider, + IConfigurationService generalSettingsProvider, + IConfigurationService windowSettingsProvider, IUiDispatcher uiDispatcher, IVBE vbe, ITemplateProvider templateProvider, diff --git a/Rubberduck.Core/Properties/Settings.Designer.cs b/Rubberduck.Core/Properties/Settings.Designer.cs index 3afed0600b..50d5fbc15f 100644 --- a/Rubberduck.Core/Properties/Settings.Designer.cs +++ b/Rubberduck.Core/Properties/Settings.Designer.cs @@ -25,149 +25,174 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("\r\n\r\n \r\n \r\n \r\n \r\n <" + - "CodeInspection Name=\"UnhandledOnErrorResumeNextInspection\" Severity=\"Warning\" In" + - "spectionType=\"CodeQualityIssues\" />\r\n \r\n <" + - "CodeInspection Name=\"ImplicitByRefModifierInspection\" Severity=\"Hint\" Inspection" + - "Type=\"CodeQualityIssues\" />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n + + M + true + false + false + true + IndentCurrentModuleCommand +")] + public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_IndentCurrentModuleCommand { + get { + return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_IndentCurrentModuleCommand"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <" + - "CodeInspection Name=\"UntypedFunctionUsageInspection\" Severity=\"Hint\" InspectionT" + - "ype=\"LanguageOpportunities\" />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n true\r\n")] - public global::Rubberduck.Settings.CodeInspectionSettings CodeInspectionSettings { + ">\r\n \r\n \r\n " + + "\r\n \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n " + + "\r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n \r\n \r\n \r\n " + + " \r\n \r\n \r\n <" + + "CodeInspection Name=\"IsMissingWithNonArgumentParameterInspection\" Severity=\"Warn" + + "ing\" InspectionType=\"CodeQualityIssues\" />\r\n \r\n \r\n " + + " \r\n \r" + + "\n \r\n true\r\n \r\n ")] + public string CodeInspectionSettings { get { - return ((global::Rubberduck.Settings.CodeInspectionSettings)(this["CodeInspectionSettings"])); + return ((string)(this["CodeInspectionSettings"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - R - true - true - false - true - CodePaneRefactorRenameCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + R + true + true + false + true + CodePaneRefactorRenameCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_CodePaneRefactorRenameCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_CodePaneRefactorRenameCommand"])); @@ -176,15 +201,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - F - true - true - false - true - RefactorEncapsulateFieldCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + F + true + true + false + true + RefactorEncapsulateFieldCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_RefactorEncapsulateFieldCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_RefactorEncapsulateFieldCommand"])); @@ -193,15 +219,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - M - true - true - false - true - RefactorExtractMethodCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + M + true + true + false + true + RefactorExtractMethodCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_RefactorExtractMethodCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_RefactorExtractMethodCommand"])); @@ -210,15 +237,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - C - true - true - false - true - RefactorMoveCloserToUsageCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + C + true + true + false + true + RefactorMoveCloserToUsageCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_RefactorMoveCloserToUsageCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_RefactorMoveCloserToUsageCommand"])); @@ -227,15 +255,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - R - true - false - false - true - CodeExplorerCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + R + true + false + false + true + CodeExplorerCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_CodeExplorerCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_CodeExplorerCommand"])); @@ -244,15 +273,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - E - true - true - false - true - ExportAllCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + E + true + true + false + true + ExportAllCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_ExportAllCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_ExportAllCommand"])); @@ -261,15 +291,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - T - true - false - false - true - FindSymbolCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + T + true + false + false + true + FindSymbolCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_FindSymbolCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_FindSymbolCommand"])); @@ -278,32 +309,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - M - true - false - false - true - IndentCurrentModuleCommand -")] - public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_IndentCurrentModuleCommand { - get { - return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_IndentCurrentModuleCommand"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - P - true - false - false - true - IndentCurrentProcedureCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + P + true + false + false + true + IndentCurrentProcedureCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_IndentCurrentProcedureCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_IndentCurrentProcedureCommand"])); @@ -312,15 +327,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - I - true - true - false - true - InspectionResultsCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + I + true + true + false + true + InspectionResultsCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_InspectionResultsCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_InspectionResultsCommand"])); @@ -329,15 +345,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - ` - true - false - false - true - ReparseCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + ` + true + false + false + true + ReparseCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_ReparseCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_ReparseCommand"])); @@ -346,15 +363,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - T - true - true - false - true - TestExplorerCommand -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + T + true + true + false + true + TestExplorerCommand + + ")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_TestExplorerCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_TestExplorerCommand"])); @@ -363,9 +381,8 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("\r\n")] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n ")] public global::Rubberduck.Settings.ToDoMarker ToDoMarker_ToDo { get { return ((global::Rubberduck.Settings.ToDoMarker)(this["ToDoMarker_ToDo"])); @@ -374,9 +391,8 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("\r\n")] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n ")] public global::Rubberduck.Settings.ToDoMarker ToDoMarker_Note { get { return ((global::Rubberduck.Settings.ToDoMarker)(this["ToDoMarker_Note"])); @@ -385,9 +401,8 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("\r\n")] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n ")] public global::Rubberduck.Settings.ToDoMarker ToDoMarker_Bug { get { return ((global::Rubberduck.Settings.ToDoMarker)(this["ToDoMarker_Bug"])); @@ -396,16 +411,17 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - false - false - false - false - true - false - false -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + false + false + false + false + true + false + false + + ")] public global::Rubberduck.Settings.WindowSettings WindowSettings { get { return ((global::Rubberduck.Settings.WindowSettings)(this["WindowSettings"])); @@ -414,36 +430,38 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - LateBinding - StrictAssert - true - true - false -")] - public global::Rubberduck.UnitTesting.Settings.UnitTestSettings UnitTestSettings { + [global::System.Configuration.DefaultSettingValueAttribute(@" + + LateBinding + StrictAssert + true + true + false + + ")] + public string UnitTestSettings { get { - return ((global::Rubberduck.UnitTesting.Settings.UnitTestSettings)(this["UnitTestSettings"])); + return ((string)(this["UnitTestSettings"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - - true - true - true - false - false - 10 - false - 0 - false - -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + + true + true + true + false + false + 10 + false + 0 + false + + + ")] public global::Rubberduck.Settings.GeneralSettings GeneralSettings { get { return ((global::Rubberduck.Settings.GeneralSettings)(this["GeneralSettings"])); @@ -452,15 +470,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - - None - 25 - - - -")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + + None + 25 + + + + + ")] public global::Rubberduck.Settings.AutoCompleteSettings AutoCompleteSettings { get { return ((global::Rubberduck.Settings.AutoCompleteSettings)(this["AutoCompleteSettings"])); diff --git a/Rubberduck.Core/Properties/Settings.settings b/Rubberduck.Core/Properties/Settings.settings index fef8ea2f93..3403de0b7c 100644 --- a/Rubberduck.Core/Properties/Settings.settings +++ b/Rubberduck.Core/Properties/Settings.settings @@ -2,286 +2,303 @@ - - <?xml version="1.0" encoding="utf-16"?> -<CodeInspectionSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <CodeInspections> - <CodeInspection Name="BooleanAssignedInIfElseInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteErrorSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StopKeywordInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnhandledOnErrorResumeNextInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="EmptyStringLiteralInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitByRefModifierInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="FunctionReturnValueNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IllegalAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="RedundantByRefModifierInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="MissingAttributeInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="MissingMemberAnnotationInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="MissingModuleAnnotationInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="AttributeValueOutOfSyncInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="MissingAnnotationArgumentInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ModuleScopeDimKeywordInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="MultilineParameterInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="MultipleDeclarationsInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteCallStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteCommentSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteLetStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="OptionBaseInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="RedundantOptionInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="OptionExplicitInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ProcedureCanBeWrittenAsFunctionInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ApplicationWorksheetFunctionInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="AssignedByValParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="EmptyModuleInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="LineLabelNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IntegerDataTypeInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ShadowedDeclarationInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ConstantNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DefaultProjectNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyCaseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyDoWhileBlockInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyElseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyForEachBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyForLoopBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyIfBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyWhileWendBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EncapsulatePublicFieldInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="HostSpecificExpressionInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="HungarianNotationInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ImplicitActiveSheetReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitActiveWorkbookReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitDefaultMemberAssignmentInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitPublicMemberInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitVariantReturnTypeInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="MemberNotOnInterfaceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="MoveFieldCloserToUsageInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="NonReturningFunctionInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ObjectVariableNotSetInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ObsoleteGlobalInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteTypeHintInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ParameterCanBeByValInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ParameterNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ProcedureNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="SelfAssignedDeclarationInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnassignedVariableUsageInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UndeclaredVariableInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UntypedFunctionUsageInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="UseMeaningfulNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="VariableNotAssignedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="VariableNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="VariableTypeNotDeclaredInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="WriteOnlyPropertyInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DefTypeStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StepIsNotSpecifiedInspection" Severity="DoNotShow" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StepOneIsRedundantInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="SheetAccessedUsingStringInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteMemberUsageInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteCallingConventionInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DuplicatedAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="ModuleWithoutFolderInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="OnLocalErrorInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="IsMissingOnInappropriateArgumentInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IsMissingWithNonArgumentParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="AssignmentNotUsedInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnderscoreInPublicClassModuleMemberInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ExcelUdfNameIsValidCellReferenceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - </CodeInspections> - <WhitelistedIdentifiers /> - <RunInspectionsOnSuccessfulParse>true</RunInspectionsOnSuccessfulParse> -</CodeInspectionSettings> - - + <?xml version="1.0" encoding="utf-16"?> <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>R</Key1> + <Key1>M</Key1> <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> + <HasShiftModifier>false</HasShiftModifier> <HasAltModifier>false</HasAltModifier> <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>CodePaneRefactorRenameCommand</CommandTypeName> + <CommandTypeName>IndentCurrentModuleCommand</CommandTypeName> </HotkeySetting> + + + <CodeInspectionSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <CodeInspections> + <CodeInspection Name="BooleanAssignedInIfElseInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteErrorSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StopKeywordInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnhandledOnErrorResumeNextInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="EmptyStringLiteralInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitByRefModifierInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="FunctionReturnValueNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IllegalAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="RedundantByRefModifierInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="MissingAttributeInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="AttributeOutOfSyncInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="MissingAnnotationArgumentInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ModuleScopeDimKeywordInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="MultilineParameterInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="MultipleDeclarationsInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteCallStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteCommentSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteLetStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="OptionBaseInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="RedundantOptionInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="OptionExplicitInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ProcedureCanBeWrittenAsFunctionInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ApplicationWorksheetFunctionInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="AssignedByValParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="EmptyModuleInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="LineLabelNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IntegerDataTypeInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ShadowedDeclarationInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ConstantNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DefaultProjectNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyCaseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyDoWhileBlockInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyElseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyForEachBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyForLoopBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyIfBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyWhileWendBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EncapsulatePublicFieldInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="HostSpecificExpressionInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="HungarianNotationInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ImplicitActiveSheetReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitActiveWorkbookReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitDefaultMemberAssignmentInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitPublicMemberInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitVariantReturnTypeInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="MemberNotOnInterfaceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="MoveFieldCloserToUsageInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="NonReturningFunctionInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ObjectVariableNotSetInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ObsoleteGlobalInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteTypeHintInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ParameterCanBeByValInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ParameterNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ProcedureNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="SelfAssignedDeclarationInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnassignedVariableUsageInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UndeclaredVariableInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UntypedFunctionUsageInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="UseMeaningfulNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="VariableNotAssignedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="VariableNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="VariableTypeNotDeclaredInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="WriteOnlyPropertyInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DefTypeStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StepIsNotSpecifiedInspection" Severity="DoNotShow" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StepOneIsRedundantInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="SheetAccessedUsingStringInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteMemberUsageInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteCallingConventionInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DuplicatedAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="ModuleWithoutFolderInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="OnLocalErrorInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="IsMissingOnInappropriateArgumentInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IsMissingWithNonArgumentParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="AssignmentNotUsedInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnderscoreInPublicClassModuleMemberInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ExcelUdfNameIsValidCellReferenceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + </CodeInspections> + <WhitelistedIdentifiers /> + <RunInspectionsOnSuccessfulParse>true</RunInspectionsOnSuccessfulParse> + </CodeInspectionSettings> + + + + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>R</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>CodePaneRefactorRenameCommand</CommandTypeName> + </HotkeySetting> + + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>F</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>RefactorEncapsulateFieldCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>F</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>RefactorEncapsulateFieldCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>M</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>RefactorExtractMethodCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>M</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>RefactorExtractMethodCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>C</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>RefactorMoveCloserToUsageCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>C</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>RefactorMoveCloserToUsageCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>R</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>CodeExplorerCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>R</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>false</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>CodeExplorerCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>E</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>ExportAllCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>E</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>ExportAllCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>T</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>FindSymbolCommand</CommandTypeName> -</HotkeySetting> - - - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>M</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>IndentCurrentModuleCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>T</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>false</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>FindSymbolCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>P</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>IndentCurrentProcedureCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>P</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>false</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>IndentCurrentProcedureCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>I</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>InspectionResultsCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>I</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>InspectionResultsCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>`</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>ReparseCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>`</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>false</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>ReparseCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>T</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>TestExplorerCommand</CommandTypeName> -</HotkeySetting> + + <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>T</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>TestExplorerCommand</CommandTypeName> + </HotkeySetting> + - <?xml version="1.0" encoding="utf-16"?> -<ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="TODO" /> + + <ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="TODO" /> + - <?xml version="1.0" encoding="utf-16"?> -<ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="NOTE" /> + + <ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="NOTE" /> + - <?xml version="1.0" encoding="utf-16"?> -<ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="BUG" /> + + <ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="BUG" /> + - <?xml version="1.0" encoding="utf-16"?> -<WindowSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <CodeExplorerVisibleOnStartup>false</CodeExplorerVisibleOnStartup> - <CodeInspectionsVisibleOnStartup>false</CodeInspectionsVisibleOnStartup> - <TestExplorerVisibleOnStartup>false</TestExplorerVisibleOnStartup> - <TodoExplorerVisibleOnStartup>false</TodoExplorerVisibleOnStartup> - <CodeExplorer_SortByName>true</CodeExplorer_SortByName> - <CodeExplorer_SortByCodeOrder>false</CodeExplorer_SortByCodeOrder> - <CodeExplorer_GroupByType>false</CodeExplorer_GroupByType> -</WindowSettings> + + <WindowSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <CodeExplorerVisibleOnStartup>false</CodeExplorerVisibleOnStartup> + <CodeInspectionsVisibleOnStartup>false</CodeInspectionsVisibleOnStartup> + <TestExplorerVisibleOnStartup>false</TestExplorerVisibleOnStartup> + <TodoExplorerVisibleOnStartup>false</TodoExplorerVisibleOnStartup> + <CodeExplorer_SortByName>true</CodeExplorer_SortByName> + <CodeExplorer_SortByCodeOrder>false</CodeExplorer_SortByCodeOrder> + <CodeExplorer_GroupByType>false</CodeExplorer_GroupByType> + </WindowSettings> + - - <?xml version="1.0" encoding="utf-16"?> -<UnitTestSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <BindingMode>LateBinding</BindingMode> - <AssertMode>StrictAssert</AssertMode> - <ModuleInit>true</ModuleInit> - <MethodInit>true</MethodInit> - <DefaultTestStubInNewModule>false</DefaultTestStubInNewModule> -</UnitTestSettings> + + + <UnitTestSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <BindingMode>LateBinding</BindingMode> + <AssertMode>StrictAssert</AssertMode> + <ModuleInit>true</ModuleInit> + <MethodInit>true</MethodInit> + <DefaultTestStubInNewModule>false</DefaultTestStubInNewModule> + </UnitTestSettings> + - <?xml version="1.0" encoding="utf-16"?> -<GeneralSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Language Code="en-US" /> - <CanShowSplash>true</CanShowSplash> - <CanCheckVersion>true</CanCheckVersion> - <CompileBeforeParse>true</CompileBeforeParse> - <IsSmartIndenterPrompted>false</IsSmartIndenterPrompted> - <IsAutoSaveEnabled>false</IsAutoSaveEnabled> - <AutoSavePeriod>10</AutoSavePeriod> - <UserEditedLogLevel>false</UserEditedLogLevel> - <MinimumLogLevel>0</MinimumLogLevel> - <SetDpiUnaware>false</SetDpiUnaware> - <EnableExperimentalFeatures /> -</GeneralSettings> + + <GeneralSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Language Code="en-US" /> + <CanShowSplash>true</CanShowSplash> + <CanCheckVersion>true</CanCheckVersion> + <CompileBeforeParse>true</CompileBeforeParse> + <IsSmartIndenterPrompted>false</IsSmartIndenterPrompted> + <IsAutoSaveEnabled>false</IsAutoSaveEnabled> + <AutoSavePeriod>10</AutoSavePeriod> + <UserEditedLogLevel>false</UserEditedLogLevel> + <MinimumLogLevel>0</MinimumLogLevel> + <SetDpiUnaware>false</SetDpiUnaware> + <EnableExperimentalFeatures /> + </GeneralSettings> + - <?xml version="1.0" encoding="utf-16"?> -<AutoCompleteSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" IsEnabled="false"> - <SmartConcat IsEnabled="false"> - <ConcatVbNewLineModifier>None</ConcatVbNewLineModifier> - <ConcatMaxLines>25</ConcatMaxLines> - </SmartConcat> - <SelfClosingPairs IsEnabled="false" /> - <BlockCompletion IsEnabled="false" CompleteOnEnter="false" CompleteOnTab="false" /> -</AutoCompleteSettings> + + <AutoCompleteSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" IsEnabled="false"> + <SmartConcat IsEnabled="false"> + <ConcatVbNewLineModifier>None</ConcatVbNewLineModifier> + <ConcatMaxLines>25</ConcatMaxLines> + </SmartConcat> + <SelfClosingPairs IsEnabled="false" /> + <BlockCompletion IsEnabled="false" CompleteOnEnter="false" CompleteOnTab="false" /> + </AutoCompleteSettings> + \ No newline at end of file diff --git a/Rubberduck.Core/Rubberduck.Core.csproj b/Rubberduck.Core/Rubberduck.Core.csproj index a471e91bb9..f97ca88d25 100644 --- a/Rubberduck.Core/Rubberduck.Core.csproj +++ b/Rubberduck.Core/Rubberduck.Core.csproj @@ -37,7 +37,9 @@ + + @@ -83,19 +85,6 @@ 2.0.20525 - - - True - True - Settings.settings - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - @@ -113,11 +102,17 @@ + Settings.settings True True - Settings.settings + + + Settings.Designer.cs + SettingsSingleFileGenerator + + diff --git a/Rubberduck.Core/Settings/AutoCompleteConfigProvider.cs b/Rubberduck.Core/Settings/AutoCompleteConfigProvider.cs index 6d6faa9d6c..5b179aa642 100644 --- a/Rubberduck.Core/Settings/AutoCompleteConfigProvider.cs +++ b/Rubberduck.Core/Settings/AutoCompleteConfigProvider.cs @@ -2,30 +2,24 @@ namespace Rubberduck.Settings { - public class AutoCompleteConfigProvider : IConfigProvider + public class AutoCompleteConfigProvider : ConfigurationServiceBase { - private readonly IPersistanceService _persister; private readonly AutoCompleteSettings _defaultSettings; public AutoCompleteConfigProvider(IPersistanceService persister) + : base(persister) { - _persister = persister; - _defaultSettings = new DefaultSettings().Default; + _defaultSettings = new DefaultSettings().Default; } - public AutoCompleteSettings Create() + public override AutoCompleteSettings Load() { - return _persister.Load(_defaultSettings) ?? _defaultSettings; + return persister.Load(_defaultSettings) ?? _defaultSettings; } - public AutoCompleteSettings CreateDefaults() + public override AutoCompleteSettings LoadDefaults() { return _defaultSettings; } - - public void Save(AutoCompleteSettings settings) - { - _persister.Save(settings); - } } } diff --git a/Rubberduck.Core/Settings/CodeInspectionConfigProvider.cs b/Rubberduck.Core/Settings/CodeInspectionConfigProvider.cs deleted file mode 100644 index f8aa8054c8..0000000000 --- a/Rubberduck.Core/Settings/CodeInspectionConfigProvider.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Rubberduck.CodeAnalysis.Inspections; -using Rubberduck.SettingsProvider; -using Rubberduck.Parsing.VBA; -using Rubberduck.Parsing.VBA.Extensions; - -namespace Rubberduck.Settings -{ - public class CodeInspectionConfigProvider : IConfigProvider - { - private readonly IPersistanceService _persister; - private readonly CodeInspectionSettings _defaultSettings; - private readonly HashSet _foundInspectionNames; - - public CodeInspectionConfigProvider(IPersistanceService persister, IInspectionProvider inspectionProvider) - { - _persister = persister; - _foundInspectionNames = inspectionProvider.Inspections.Select(inspection => inspection.Name).ToHashSet(); - _defaultSettings = new DefaultSettings().Default; - // Ignore settings for unknown inspections, for example when using the Experimental attribute - _defaultSettings.CodeInspections = _defaultSettings.CodeInspections.Where(setting => _foundInspectionNames.Contains(setting.Name)).ToHashSet(); - - var defaultNames = _defaultSettings.CodeInspections.Select(x => x.Name); - var nonDefaultInspections = inspectionProvider.Inspections.Where(inspection => !defaultNames.Contains(inspection.Name)); - - _defaultSettings.CodeInspections.UnionWith(nonDefaultInspections.Select(inspection => new CodeInspectionSetting(inspection))); - } - - public CodeInspectionSettings Create() - { - var loaded = _persister.Load(_defaultSettings); - - if (loaded == null) - { - return _defaultSettings; - } - - // Loaded settings don't contain defaults, so we need to combine user settings with defaults. - var settings = new HashSet(); - - foreach (var loadedSetting in loaded.CodeInspections.Where(inspection => _foundInspectionNames.Contains(inspection.Name))) - { - var matchingDefaultSetting = _defaultSettings.CodeInspections.FirstOrDefault(inspection => inspection.Equals(loadedSetting)); - if (matchingDefaultSetting != null) - { - loadedSetting.InspectionType = matchingDefaultSetting.InspectionType; - } - - settings.Add(loadedSetting); - } - - settings.UnionWith(_defaultSettings.CodeInspections.Where(inspection => !settings.Contains(inspection))); - - loaded.CodeInspections = settings; - - return loaded; - } - - public CodeInspectionSettings CreateDefaults() - { - return _defaultSettings; - } - - public void Save(CodeInspectionSettings settings) - { - _persister.Save(settings); - } - } -} diff --git a/Rubberduck.Core/Settings/ConfigurationLoader.cs b/Rubberduck.Core/Settings/ConfigurationLoader.cs index b1699508ac..d746b14924 100644 --- a/Rubberduck.Core/Settings/ConfigurationLoader.cs +++ b/Rubberduck.Core/Settings/ConfigurationLoader.cs @@ -3,43 +3,30 @@ using Rubberduck.SettingsProvider; using Rubberduck.SmartIndenter; using Rubberduck.UnitTesting.Settings; +using Rubberduck.CodeAnalysis.Settings; namespace Rubberduck.Settings { - public class ConfigurationChangedEventArgs : EventArgs - { - public bool LanguageChanged { get; } - public bool InspectionSettingsChanged { get; } - public bool RunInspectionsOnReparse { get; } - public bool AutoCompleteSettingsChanged { get; } - - public ConfigurationChangedEventArgs(bool runInspections, bool languageChanged, bool inspectionSettingsChanged, bool autoCompleteSettingsChanged) - { - AutoCompleteSettingsChanged = autoCompleteSettingsChanged; - RunInspectionsOnReparse = runInspections; - LanguageChanged = languageChanged; - InspectionSettingsChanged = inspectionSettingsChanged; - } - } - - public interface IGeneralConfigService : IConfigurationService - { - Configuration GetDefaultConfiguration(); - } - public class ConfigurationLoader : IGeneralConfigService + public class ConfigurationLoader : IConfigurationService { - private readonly IConfigProvider _generalProvider; - private readonly IConfigProvider _hotkeyProvider; - private readonly IConfigProvider _autoCompleteProvider; - private readonly IConfigProvider _todoProvider; - private readonly IConfigProvider _inspectionProvider; - private readonly IConfigProvider _unitTestProvider; - private readonly IConfigProvider _indenterProvider; - private readonly IConfigProvider _windowProvider; + private readonly IConfigurationService _generalProvider; + private readonly IConfigurationService _hotkeyProvider; + private readonly IConfigurationService _autoCompleteProvider; + private readonly IConfigurationService _todoProvider; + private readonly IConfigurationService _inspectionProvider; + private readonly IConfigurationService _unitTestProvider; + private readonly IConfigurationService _indenterProvider; + private readonly IConfigurationService _windowProvider; - public ConfigurationLoader(IConfigProvider generalProvider, IConfigProvider hotkeyProvider, IConfigProvider autoCompleteProvider, IConfigProvider todoProvider, - IConfigProvider inspectionProvider, IConfigProvider unitTestProvider, IConfigProvider indenterProvider, IConfigProvider windowProvider) + public ConfigurationLoader(IConfigurationService generalProvider, + IConfigurationService hotkeyProvider, + IConfigurationService autoCompleteProvider, + IConfigurationService todoProvider, + IConfigurationService inspectionProvider, + IConfigurationService unitTestProvider, + IConfigurationService indenterProvider, + IConfigurationService windowProvider) { _generalProvider = generalProvider; _hotkeyProvider = hotkeyProvider; @@ -54,52 +41,53 @@ public ConfigurationLoader(IConfigProvider generalProvider, ICo /// /// Loads the configuration from Rubberduck.config xml file. /// - public virtual Configuration LoadConfiguration() + // marked virtual for Mocking + public virtual Configuration Load() { var config = new Configuration { UserSettings = new UserSettings ( - _generalProvider.Create(), - _hotkeyProvider.Create(), - _autoCompleteProvider.Create(), - _todoProvider.Create(), - _inspectionProvider.Create(), - _unitTestProvider.Create(), - _indenterProvider.Create(), - _windowProvider.Create() + _generalProvider.Load(), + _hotkeyProvider.Load(), + _autoCompleteProvider.Load(), + _todoProvider.Load(), + _inspectionProvider.Load(), + _unitTestProvider.Load(), + _indenterProvider.Load(), + _windowProvider.Load() ) }; return config; } - public Configuration GetDefaultConfiguration() + public Configuration LoadDefaults() { return new Configuration { UserSettings = new UserSettings ( - _generalProvider.CreateDefaults(), - _hotkeyProvider.CreateDefaults(), - _autoCompleteProvider.CreateDefaults(), - _todoProvider.CreateDefaults(), - _inspectionProvider.CreateDefaults(), - _unitTestProvider.CreateDefaults(), - _indenterProvider.CreateDefaults(), - _windowProvider.CreateDefaults() + _generalProvider.LoadDefaults(), + _hotkeyProvider.LoadDefaults(), + _autoCompleteProvider.LoadDefaults(), + _todoProvider.LoadDefaults(), + _inspectionProvider.LoadDefaults(), + _unitTestProvider.LoadDefaults(), + _indenterProvider.LoadDefaults(), + _windowProvider.LoadDefaults() ) }; } - public void SaveConfiguration(Configuration toSerialize) + public void Save(Configuration toSerialize) { - var langChanged = _generalProvider.Create().Language.Code != toSerialize.UserSettings.GeneralSettings.Language.Code; - var oldInspectionSettings = _inspectionProvider.Create().CodeInspections.Select(s => Tuple.Create(s.Name, s.Severity)); + var langChanged = _generalProvider.Load().Language.Code != toSerialize.UserSettings.GeneralSettings.Language.Code; + var oldInspectionSettings = _inspectionProvider.Load().CodeInspections.Select(s => Tuple.Create(s.Name, s.Severity)); var newInspectionSettings = toSerialize.UserSettings.CodeInspectionSettings.CodeInspections.Select(s => Tuple.Create(s.Name, s.Severity)); var inspectionsChanged = !oldInspectionSettings.SequenceEqual(newInspectionSettings); var inspectOnReparse = toSerialize.UserSettings.CodeInspectionSettings.RunInspectionsOnSuccessfulParse; - var oldAutoCompleteSettings = _autoCompleteProvider.Create(); + var oldAutoCompleteSettings = _autoCompleteProvider.Load(); var newAutoCompleteSettings = toSerialize.UserSettings.AutoCompleteSettings; var autoCompletesChanged = oldAutoCompleteSettings.Equals(newAutoCompleteSettings); diff --git a/Rubberduck.Core/Settings/DefaultSettings.cs b/Rubberduck.Core/Settings/DefaultSettings.cs deleted file mode 100644 index 0db99a836a..0000000000 --- a/Rubberduck.Core/Settings/DefaultSettings.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Rubberduck.Settings -{ - public class DefaultSettings - { - public IEnumerable Defaults { get; } - public T Default => Defaults.First(); - - public DefaultSettings() - { - var properties = typeof(Properties.Settings).GetProperties().Where(prop => prop.PropertyType == typeof(T)); - - Defaults = properties.Select(prop => prop.GetValue(Properties.Settings.Default)).Cast(); - } - } -} diff --git a/Rubberduck.Core/Settings/GeneralConfigProvider.cs b/Rubberduck.Core/Settings/GeneralConfigProvider.cs index 3fcc7af6c2..cb5eb52a15 100644 --- a/Rubberduck.Core/Settings/GeneralConfigProvider.cs +++ b/Rubberduck.Core/Settings/GeneralConfigProvider.cs @@ -3,48 +3,48 @@ namespace Rubberduck.Settings { - public class GeneralConfigProvider : IConfigProvider + public class GeneralConfigProvider : ConfigurationServiceBase { - private GeneralSettings _current; - private readonly IPersistanceService _persister; - private readonly GeneralSettings _defaultSettings; + private GeneralSettings current; + private readonly GeneralSettings defaultSettings; public GeneralConfigProvider(IPersistanceService persister) + : base(persister) { - _persister = persister; - _defaultSettings = new DefaultSettings().Default; + defaultSettings = new DefaultSettings().Default; } - public GeneralSettings Create() + public override GeneralSettings Load() { - var updated = _persister.Load(_defaultSettings) ?? _defaultSettings; + var updated = persister.Load(defaultSettings) ?? defaultSettings; CheckForEventsToRaise(updated); - _current = updated; + current = updated; - return _current; + return current; } - public GeneralSettings CreateDefaults() + public override GeneralSettings LoadDefaults() { - return _defaultSettings; + return defaultSettings; } - public void Save(GeneralSettings settings) + public override void Save(GeneralSettings settings) { CheckForEventsToRaise(settings); - _persister.Save(settings); + OnSettingsChanged(); + persister.Save(settings); } private void CheckForEventsToRaise(GeneralSettings other) { - if (_current == null || !Equals(other.Language, _current.Language)) + if (current == null || !Equals(other.Language, current.Language)) { OnLanguageChanged(EventArgs.Empty); } - if (_current == null || - other.IsAutoSaveEnabled != _current.IsAutoSaveEnabled || - other.AutoSavePeriod != _current.AutoSavePeriod) + if (current == null || + other.IsAutoSaveEnabled != current.IsAutoSaveEnabled || + other.AutoSavePeriod != current.AutoSavePeriod) { OnAutoSaveSettingsChanged(EventArgs.Empty); } diff --git a/Rubberduck.Core/Settings/HotkeyConfigProvider.cs b/Rubberduck.Core/Settings/HotkeyConfigProvider.cs index 9826ddd975..ffa4b1c738 100644 --- a/Rubberduck.Core/Settings/HotkeyConfigProvider.cs +++ b/Rubberduck.Core/Settings/HotkeyConfigProvider.cs @@ -3,23 +3,22 @@ namespace Rubberduck.Settings { - public class HotkeyConfigProvider : IConfigProvider + public class HotkeyConfigProvider : ConfigurationServiceBase { - private readonly IPersistanceService _persister; private readonly IEnumerable _defaultHotkeys; public HotkeyConfigProvider(IPersistanceService persister) + : base(persister) { - _persister = persister; - _defaultHotkeys = new DefaultSettings().Defaults; + _defaultHotkeys = new DefaultSettings().Defaults; } - public HotkeySettings Create() + public override HotkeySettings Load() { var prototype = new HotkeySettings(_defaultHotkeys); // Loaded settings don't contain defaults, so we need to use the `Settings` property to combine user settings with defaults. - var loaded = _persister.Load(prototype); + var loaded = persister.Load(prototype); if (loaded != null) { prototype.Settings = loaded.Settings; @@ -28,14 +27,9 @@ public HotkeySettings Create() return prototype; } - public HotkeySettings CreateDefaults() + public override HotkeySettings LoadDefaults() { return new HotkeySettings(_defaultHotkeys); } - - public void Save(HotkeySettings settings) - { - _persister.Save(settings); - } } } diff --git a/Rubberduck.Core/Settings/IConfigurationService.cs b/Rubberduck.Core/Settings/IConfigurationService.cs deleted file mode 100644 index f5efe8af19..0000000000 --- a/Rubberduck.Core/Settings/IConfigurationService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace Rubberduck.Settings -{ - public interface IConfigurationService - { - T LoadConfiguration(); - void SaveConfiguration(T toSerialize); - event EventHandler SettingsChanged; - } -} diff --git a/Rubberduck.Core/Settings/ReferenceConfigProvider.cs b/Rubberduck.Core/Settings/ReferenceConfigProvider.cs index 8fb697195c..294287549c 100644 --- a/Rubberduck.Core/Settings/ReferenceConfigProvider.cs +++ b/Rubberduck.Core/Settings/ReferenceConfigProvider.cs @@ -11,23 +11,22 @@ namespace Rubberduck.Settings { - public class ReferenceConfigProvider : IConfigProvider, IDisposable + public class ReferenceConfigProvider : ConfigurationServiceBase, IDisposable { private static readonly string HostApplication = Path.GetFileName(Application.ExecutablePath).ToUpperInvariant(); - - private readonly IPersistanceService _persister; + private readonly IEnvironmentProvider _environment; private readonly IVBEEvents _events; private bool _listening; public ReferenceConfigProvider(IPersistanceService persister, IEnvironmentProvider environment, IVBEEvents events) + : base(persister) { - _persister = persister; _environment = environment; _events = events; - var settings = Create(); + var settings = Load(); _listening = settings.AddToRecentOnReferenceEvents; if (_listening && _events != null) { @@ -35,13 +34,13 @@ public ReferenceConfigProvider(IPersistanceService persister, } } - public ReferenceSettings Create() + public override ReferenceSettings Load() { - var defaults = CreateDefaults(); - return _persister.Load(defaults) ?? defaults; + var defaults = LoadDefaults(); + return persister.Load(defaults) ?? defaults; } - public ReferenceSettings CreateDefaults() + public override ReferenceSettings LoadDefaults() { var defaults = new ReferenceSettings { @@ -77,7 +76,7 @@ public ReferenceSettings CreateDefaults() return defaults; } - public void Save(ReferenceSettings settings) + public override void Save(ReferenceSettings settings) { if (_listening && _events != null && !settings.AddToRecentOnReferenceEvents) { @@ -90,8 +89,8 @@ public void Save(ReferenceSettings settings) _events.ProjectReferenceAdded += ReferenceAddedHandler; _listening = true; } - - _persister.Save(settings); + OnSettingsChanged(); + persister.Save(settings); } private void ReferenceAddedHandler(object sender, ReferenceEventArgs e) @@ -101,9 +100,9 @@ private void ReferenceAddedHandler(object sender, ReferenceEventArgs e) return; } - var settings = Create(); + var settings = Load(); settings.TrackUsage(e.Reference, e.Type == ReferenceKind.Project ? HostApplication : null); - _persister.Save(settings); + Save(settings); } public void Dispose() diff --git a/Rubberduck.Core/Settings/ToDoListConfigProvider.cs b/Rubberduck.Core/Settings/ToDoListConfigProvider.cs index e874c4d9c6..a12a99fd2f 100644 --- a/Rubberduck.Core/Settings/ToDoListConfigProvider.cs +++ b/Rubberduck.Core/Settings/ToDoListConfigProvider.cs @@ -3,31 +3,25 @@ namespace Rubberduck.Settings { - public class ToDoListConfigProvider : IConfigProvider + public class ToDoListConfigProvider : ConfigurationServiceBase { - private readonly IPersistanceService _persister; - private readonly IEnumerable _defaultMarkers; + private readonly IEnumerable defaultMarkers; public ToDoListConfigProvider(IPersistanceService persister) + : base(persister) { - _persister = persister; - _defaultMarkers = new DefaultSettings().Defaults; + defaultMarkers = new DefaultSettings().Defaults; } - public ToDoListSettings Create() + public override ToDoListSettings Load() { - var prototype = new ToDoListSettings(_defaultMarkers); - return _persister.Load(prototype) ?? prototype; + var prototype = new ToDoListSettings(defaultMarkers); + return persister.Load(prototype) ?? prototype; } - public ToDoListSettings CreateDefaults() + public override ToDoListSettings LoadDefaults() { - return new ToDoListSettings(_defaultMarkers); - } - - public void Save(ToDoListSettings settings) - { - _persister.Save(settings); + return new ToDoListSettings(defaultMarkers); } } } diff --git a/Rubberduck.Core/Settings/UserSettings.cs b/Rubberduck.Core/Settings/UserSettings.cs index 504aa4aac1..3c19cade1c 100644 --- a/Rubberduck.Core/Settings/UserSettings.cs +++ b/Rubberduck.Core/Settings/UserSettings.cs @@ -1,6 +1,7 @@ using System.Xml.Serialization; using Rubberduck.SmartIndenter; using Rubberduck.UnitTesting.Settings; +using Rubberduck.CodeAnalysis.Settings; namespace Rubberduck.Settings { diff --git a/Rubberduck.Core/Settings/WindowConfigProvider.cs b/Rubberduck.Core/Settings/WindowConfigProvider.cs index 6bbade33a4..b895bd5e54 100644 --- a/Rubberduck.Core/Settings/WindowConfigProvider.cs +++ b/Rubberduck.Core/Settings/WindowConfigProvider.cs @@ -2,30 +2,24 @@ namespace Rubberduck.Settings { - public class WindowConfigProvider : IConfigProvider + public class WindowConfigProvider : ConfigurationServiceBase { - private readonly IPersistanceService _persister; private readonly WindowSettings _defaultSettings; public WindowConfigProvider(IPersistanceService persister) + : base(persister) { - _persister = persister; - _defaultSettings = new DefaultSettings().Default; + _defaultSettings = new DefaultSettings().Default; } - public WindowSettings Create() + public override WindowSettings Load() { - return _persister.Load(_defaultSettings) ?? _defaultSettings; + return persister.Load(_defaultSettings) ?? _defaultSettings; } - public WindowSettings CreateDefaults() + public override WindowSettings LoadDefaults() { return _defaultSettings; } - - public void Save(WindowSettings settings) - { - _persister.Save(settings); - } } } diff --git a/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs b/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs index e0888e8f1a..f883e6b088 100644 --- a/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs +++ b/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs @@ -27,14 +27,14 @@ public class AddRemoveReferencesPresenterFactory : IAddRemoveReferencesPresenter private readonly IVBE _vbe; private readonly RubberduckParserState _state; - private readonly IConfigProvider _settings; + private readonly IConfigurationService _settings; private readonly IRegisteredLibraryFinderService _finder; private readonly IReferenceReconciler _reconciler; private readonly IFileSystemBrowserFactory _browser; public AddRemoveReferencesPresenterFactory(IVBE vbe, RubberduckParserState state, - IConfigProvider settingsProvider, + IConfigurationService settingsProvider, IRegisteredLibraryFinderService finder, IReferenceReconciler reconciler, IFileSystemBrowserFactory browser) @@ -116,7 +116,7 @@ public AddRemoveReferencesPresenter Create(ProjectDeclaration project) models.Add(reference.Key, new ReferenceModel(reference.Value)); } - var settings = _settings.Create(); + var settings = _settings.Load(); model = new AddRemoveReferencesModel(_state, project, models.Values, settings); if (AddRemoveReferencesViewModel.HostHasProjects) { diff --git a/Rubberduck.Core/UI/CodeExplorer/CodeExplorerDockablePresenter.cs b/Rubberduck.Core/UI/CodeExplorer/CodeExplorerDockablePresenter.cs index 4bc79bed61..131a88871a 100644 --- a/Rubberduck.Core/UI/CodeExplorer/CodeExplorerDockablePresenter.cs +++ b/Rubberduck.Core/UI/CodeExplorer/CodeExplorerDockablePresenter.cs @@ -6,7 +6,7 @@ namespace Rubberduck.UI.CodeExplorer { public class CodeExplorerDockablePresenter : DockableToolwindowPresenter { - public CodeExplorerDockablePresenter(IVBE vbe, IAddIn addIn, CodeExplorerWindow view, IConfigProvider settings) + public CodeExplorerDockablePresenter(IVBE vbe, IAddIn addIn, CodeExplorerWindow view, IConfigurationService settings) : base(vbe, addIn, view, settings) { } diff --git a/Rubberduck.Core/UI/CodeMetrics/CodeMetricsDockablePresenter.cs b/Rubberduck.Core/UI/CodeMetrics/CodeMetricsDockablePresenter.cs index 5e515f6593..81a17ad085 100644 --- a/Rubberduck.Core/UI/CodeMetrics/CodeMetricsDockablePresenter.cs +++ b/Rubberduck.Core/UI/CodeMetrics/CodeMetricsDockablePresenter.cs @@ -6,7 +6,7 @@ namespace Rubberduck.UI.CodeMetrics { public class CodeMetricsDockablePresenter : DockableToolwindowPresenter { - public CodeMetricsDockablePresenter(IVBE vbe, IAddIn addIn, CodeMetricsWindow view, IConfigProvider settings) + public CodeMetricsDockablePresenter(IVBE vbe, IAddIn addIn, CodeMetricsWindow view, IConfigurationService settings) : base(vbe, addIn, view, settings) { } diff --git a/Rubberduck.Core/UI/Command/ReparseCommand.cs b/Rubberduck.Core/UI/Command/ReparseCommand.cs index fade520270..6820f661e2 100644 --- a/Rubberduck.Core/UI/Command/ReparseCommand.cs +++ b/Rubberduck.Core/UI/Command/ReparseCommand.cs @@ -31,13 +31,13 @@ public class ReparseCommand : CommandBase private readonly RubberduckParserState _state; private readonly GeneralSettings _settings; - public ReparseCommand(IVBE vbe, IConfigProvider settingsProvider, RubberduckParserState state, IVBETypeLibsAPI typeLibApi, IVbeSettings vbeSettings, IMessageBox messageBox) : base(LogManager.GetCurrentClassLogger()) + public ReparseCommand(IVBE vbe, IConfigurationService settingsProvider, RubberduckParserState state, IVBETypeLibsAPI typeLibApi, IVbeSettings vbeSettings, IMessageBox messageBox) : base(LogManager.GetCurrentClassLogger()) { _vbe = vbe; _vbeSettings = vbeSettings; _typeLibApi = typeLibApi; _state = state; - _settings = settingsProvider.Create(); + _settings = settingsProvider.Load(); _messageBox = messageBox; AddToCanExecuteEvaluation(SpecialEvaluateCanExecute); diff --git a/Rubberduck.Core/UI/DockableToolwindowPresenter.cs b/Rubberduck.Core/UI/DockableToolwindowPresenter.cs index 7a7f12d603..510f507e5d 100644 --- a/Rubberduck.Core/UI/DockableToolwindowPresenter.cs +++ b/Rubberduck.Core/UI/DockableToolwindowPresenter.cs @@ -28,7 +28,7 @@ public abstract class DockableToolwindowPresenter : IDockablePresenter, IDisposa private readonly IWindow _window; private readonly WindowSettings _settings; //Storing this really doesn't matter - it's only checked on startup and never persisted. - protected DockableToolwindowPresenter(IVBE vbe, IAddIn addin, IDockableUserControl view, IConfigProvider settingsProvider) + protected DockableToolwindowPresenter(IVBE vbe, IAddIn addin, IDockableUserControl view, IConfigurationService settingsProvider) { _vbe = vbe; _addin = addin; @@ -36,7 +36,7 @@ protected DockableToolwindowPresenter(IVBE vbe, IAddIn addin, IDockableUserContr UserControl = view as UserControl; if (settingsProvider != null) { - _settings = settingsProvider.Create(); + _settings = settingsProvider.Load(); } _window = CreateToolWindow(view); } diff --git a/Rubberduck.Core/UI/Inspections/InspectionResultsDockablePresenter.cs b/Rubberduck.Core/UI/Inspections/InspectionResultsDockablePresenter.cs index 0a72255068..c98e9d8d5b 100644 --- a/Rubberduck.Core/UI/Inspections/InspectionResultsDockablePresenter.cs +++ b/Rubberduck.Core/UI/Inspections/InspectionResultsDockablePresenter.cs @@ -6,7 +6,7 @@ namespace Rubberduck.UI.Inspections { public class InspectionResultsDockablePresenter : DockableToolwindowPresenter { - public InspectionResultsDockablePresenter(IVBE vbe, IAddIn addin, InspectionResultsWindow window, IConfigProvider settings) + public InspectionResultsDockablePresenter(IVBE vbe, IAddIn addin, InspectionResultsWindow window, IConfigurationService settings) : base(vbe, addin, window, settings) { } diff --git a/Rubberduck.Core/UI/Inspections/InspectionResultsViewModel.cs b/Rubberduck.Core/UI/Inspections/InspectionResultsViewModel.cs index cea1daa10a..9f4ad80397 100644 --- a/Rubberduck.Core/UI/Inspections/InspectionResultsViewModel.cs +++ b/Rubberduck.Core/UI/Inspections/InspectionResultsViewModel.cs @@ -20,6 +20,7 @@ using Rubberduck.Parsing.VBA; using Rubberduck.Parsing.VBA.Extensions; using Rubberduck.Settings; +using Rubberduck.SettingsProvider; using Rubberduck.UI.Command; using Rubberduck.UI.Settings; using Rubberduck.VBEditor; @@ -66,7 +67,7 @@ public sealed class InspectionResultsViewModel : ViewModelBase, INavigateSelecti private readonly IInspector _inspector; private readonly IQuickFixProvider _quickFixProvider; private readonly IClipboardWriter _clipboard; - private readonly IGeneralConfigService _configService; + private readonly IConfigurationService _configService; private readonly ISettingsFormFactory _settingsFormFactory; private readonly IUiDispatcher _uiDispatcher; @@ -78,8 +79,8 @@ public InspectionResultsViewModel( IQuickFixProvider quickFixProvider, INavigateCommand navigateCommand, ReparseCommand reparseCommand, - IClipboardWriter clipboard, - IGeneralConfigService configService, + IClipboardWriter clipboard, + IConfigurationService configService, ISettingsFormFactory settingsFormFactory, IUiDispatcher uiDispatcher) { @@ -120,7 +121,7 @@ public InspectionResultsViewModel( _configService.SettingsChanged += _configService_SettingsChanged; // todo: remove I/O work in constructor - _runInspectionsOnReparse = _configService.LoadConfiguration().UserSettings.CodeInspectionSettings.RunInspectionsOnSuccessfulParse; + _runInspectionsOnReparse = _configService.Load().UserSettings.CodeInspectionSettings.RunInspectionsOnSuccessfulParse; if (CollectionViewSource.GetDefaultView(_results) is ListCollectionView results) { @@ -539,12 +540,12 @@ private void ExecuteDisableInspectionCommand(object parameter) return; } - var config = _configService.LoadConfiguration(); + var config = _configService.Load(); var setting = config.UserSettings.CodeInspectionSettings.CodeInspections.Single(e => e.Name == _selectedInspection.Name); setting.Severity = CodeInspectionSeverity.DoNotShow; - Task.Run(() => _configService.SaveConfiguration(config)); + Task.Run(() => _configService.Save(config)); _uiDispatcher.Invoke(() => { diff --git a/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs index 38f0a52548..0af68fd23c 100644 --- a/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs @@ -13,19 +13,19 @@ namespace Rubberduck.UI.Settings { public class AddRemoveReferencesUserSettingsViewModel : SettingsViewModelBase, ISettingsViewModel { - private readonly IConfigProvider _provider; + private readonly IConfigurationService _provider; private readonly IFileSystemBrowserFactory _browserFactory; private readonly ReferenceSettings _clean; public AddRemoveReferencesUserSettingsViewModel( - IConfigProvider provider, + IConfigurationService provider, IFileSystemBrowserFactory browserFactory, IFilePersistanceService service) : base(service) { _provider = provider; _browserFactory = browserFactory; - _clean = _provider.Create(); + _clean = _provider.Load(); TransferSettingsToView(_clean); @@ -118,7 +118,7 @@ public void UpdateConfig(Configuration config) public void SetToDefaults(Configuration config) { - var temp = _provider.CreateDefaults(); + var temp = _provider.LoadDefaults(); var user = new ReferenceSettings(_clean) { RecentReferencesTracked = temp.RecentReferencesTracked, diff --git a/Rubberduck.Core/UI/Settings/InspectionSettings.xaml.cs b/Rubberduck.Core/UI/Settings/InspectionSettings.xaml.cs index 5f54a4031a..ef94d6aaab 100644 --- a/Rubberduck.Core/UI/Settings/InspectionSettings.xaml.cs +++ b/Rubberduck.Core/UI/Settings/InspectionSettings.xaml.cs @@ -2,8 +2,8 @@ using System.Linq; using System.Windows.Controls; using System.Collections.ObjectModel; -using Rubberduck.Settings; using Rubberduck.Parsing.Inspections; +using Rubberduck.CodeAnalysis.Settings; namespace Rubberduck.UI.Settings { diff --git a/Rubberduck.Core/UI/Settings/InspectionSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/InspectionSettingsViewModel.cs index 0b7004ce34..b4ae454525 100644 --- a/Rubberduck.Core/UI/Settings/InspectionSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/InspectionSettingsViewModel.cs @@ -11,6 +11,7 @@ using System.Globalization; using System; using Rubberduck.Resources.Settings; +using Rubberduck.CodeAnalysis.Settings; namespace Rubberduck.UI.Settings { diff --git a/Rubberduck.Core/UI/Settings/Settings.cs b/Rubberduck.Core/UI/Settings/Settings.cs index 33b66e5899..d8833f4c22 100644 --- a/Rubberduck.Core/UI/Settings/Settings.cs +++ b/Rubberduck.Core/UI/Settings/Settings.cs @@ -2,15 +2,16 @@ using System.Globalization; using System.Windows.Threading; using Rubberduck.Settings; +using Rubberduck.SettingsProvider; namespace Rubberduck.UI.Settings { public class Settings : IDisposable { - private static IGeneralConfigService _configService; + private static IConfigurationService _configService; private static CultureInfo _cultureInfo = null; - public Settings(IGeneralConfigService configService) + public Settings(IConfigurationService configService) { _configService = configService; _configService.SettingsChanged += SettingsChanged; @@ -48,7 +49,7 @@ private static void LoadLanguage() try { - var config = _configService.LoadConfiguration(); + var config = _configService.Load(); _cultureInfo = CultureInfo.GetCultureInfo(config.UserSettings.GeneralSettings.Language.Code); Dispatcher.CurrentDispatcher.Thread.CurrentUICulture = _cultureInfo; diff --git a/Rubberduck.Core/UI/Settings/SettingsControlViewModel.cs b/Rubberduck.Core/UI/Settings/SettingsControlViewModel.cs index ff2f7f939e..22b80049d8 100644 --- a/Rubberduck.Core/UI/Settings/SettingsControlViewModel.cs +++ b/Rubberduck.Core/UI/Settings/SettingsControlViewModel.cs @@ -5,6 +5,7 @@ using Rubberduck.Interaction; using Rubberduck.Resources.Settings; using Rubberduck.Settings; +using Rubberduck.SettingsProvider; using Rubberduck.UI.Command; namespace Rubberduck.UI.Settings @@ -12,11 +13,11 @@ namespace Rubberduck.UI.Settings public class SettingsControlViewModel : ViewModelBase { private readonly IMessageBox _messageBox; - private readonly IGeneralConfigService _configService; + private readonly IConfigurationService _configService; private readonly Configuration _config; public SettingsControlViewModel(IMessageBox messageBox, - IGeneralConfigService configService, + IConfigurationService configService, Configuration config, SettingsView generalSettings, SettingsView todoSettings, @@ -79,7 +80,7 @@ private void SaveConfig() vm.UpdateConfig(_config); } - _configService.SaveConfiguration(_config); + _configService.Save(_config); } private void CloseWindow() @@ -100,7 +101,7 @@ private void ResetSettings() return; } - var defaultConfig = _configService.GetDefaultConfiguration(); + var defaultConfig = _configService.LoadDefaults(); foreach (var vm in SettingsViews.Select(v => v.Control.ViewModel)) { vm.SetToDefaults(defaultConfig); diff --git a/Rubberduck.Core/UI/Settings/SettingsForm.cs b/Rubberduck.Core/UI/Settings/SettingsForm.cs index d67404341b..99c8557751 100644 --- a/Rubberduck.Core/UI/Settings/SettingsForm.cs +++ b/Rubberduck.Core/UI/Settings/SettingsForm.cs @@ -2,6 +2,7 @@ using Rubberduck.Settings; using Rubberduck.Interaction; using Rubberduck.SettingsProvider; +using Rubberduck.CodeAnalysis.Settings; namespace Rubberduck.UI.Settings { @@ -26,13 +27,13 @@ public SettingsForm() InitializeComponent(); } - public SettingsForm(IGeneralConfigService configService, + public SettingsForm(IConfigurationService configService, IMessageBox messageBox, ISettingsViewModelFactory viewModelFactory, SettingsViews activeView = SettingsViews.GeneralSettings) : this() { - var config = configService.LoadConfiguration(); + var config = configService.Load(); ViewModel = new SettingsControlViewModel(messageBox, configService, config, diff --git a/Rubberduck.Core/UI/ToDoItems/ToDoExplorerDockablePresenter.cs b/Rubberduck.Core/UI/ToDoItems/ToDoExplorerDockablePresenter.cs index b23fdcb13c..954d9b7571 100644 --- a/Rubberduck.Core/UI/ToDoItems/ToDoExplorerDockablePresenter.cs +++ b/Rubberduck.Core/UI/ToDoItems/ToDoExplorerDockablePresenter.cs @@ -9,7 +9,7 @@ namespace Rubberduck.UI.ToDoItems /// public class ToDoExplorerDockablePresenter : DockableToolwindowPresenter { - public ToDoExplorerDockablePresenter(IVBE vbe, IAddIn addin, ToDoExplorerWindow window, IConfigProvider settings) + public ToDoExplorerDockablePresenter(IVBE vbe, IAddIn addin, ToDoExplorerWindow window, IConfigurationService settings) : base(vbe, addin, window, settings) { } diff --git a/Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs b/Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs index 53bb0a1a36..66f10e357d 100644 --- a/Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs +++ b/Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs @@ -19,6 +19,7 @@ using Rubberduck.Interaction.Navigation; using Rubberduck.Parsing.UIContext; using Rubberduck.VBEditor.Utility; +using Rubberduck.SettingsProvider; namespace Rubberduck.UI.ToDoItems { @@ -32,13 +33,13 @@ public enum ToDoItemGrouping public sealed class ToDoExplorerViewModel : ViewModelBase, INavigateSelection, IDisposable { private readonly RubberduckParserState _state; - private readonly IGeneralConfigService _configService; + private readonly IConfigurationService _configService; private readonly ISettingsFormFactory _settingsFormFactory; private readonly IUiDispatcher _uiDispatcher; public ToDoExplorerViewModel( - RubberduckParserState state, - IGeneralConfigService configService, + RubberduckParserState state, + IConfigurationService configService, ISettingsFormFactory settingsFormFactory, ISelectionService selectionService, IUiDispatcher uiDispatcher) @@ -224,7 +225,7 @@ public void ExecuteOpenTodoSettingsCommand(object obj) private IEnumerable GetToDoMarkers(CommentNode comment) { - var markers = _configService.LoadConfiguration().UserSettings.ToDoListSettings.ToDoMarkers; + var markers = _configService.Load().UserSettings.ToDoListSettings.ToDoMarkers; return markers.Where(marker => !string.IsNullOrEmpty(marker.Text) && Regex.IsMatch(comment.CommentText, @"\b" + Regex.Escape(marker.Text) + @"\b", RegexOptions.IgnoreCase)) .Select(marker => new ToDoItem(marker.Text, comment)); diff --git a/Rubberduck.Core/UI/UnitTesting/TestExplorerDockablePresenter.cs b/Rubberduck.Core/UI/UnitTesting/TestExplorerDockablePresenter.cs index faff233d8d..b6764861b5 100644 --- a/Rubberduck.Core/UI/UnitTesting/TestExplorerDockablePresenter.cs +++ b/Rubberduck.Core/UI/UnitTesting/TestExplorerDockablePresenter.cs @@ -6,7 +6,7 @@ namespace Rubberduck.UI.UnitTesting { internal class TestExplorerDockablePresenter : DockableToolwindowPresenter { - public TestExplorerDockablePresenter(IVBE vbe, IAddIn addin, TestExplorerWindow view, IConfigProvider settings) + public TestExplorerDockablePresenter(IVBE vbe, IAddIn addin, TestExplorerWindow view, IConfigurationService settings) : base(vbe, addin, view, settings) { } diff --git a/Rubberduck.Core/UI/UnitTesting/TestExplorerViewModel.cs b/Rubberduck.Core/UI/UnitTesting/TestExplorerViewModel.cs index 47427a92a6..7ff0b6178a 100644 --- a/Rubberduck.Core/UI/UnitTesting/TestExplorerViewModel.cs +++ b/Rubberduck.Core/UI/UnitTesting/TestExplorerViewModel.cs @@ -9,6 +9,7 @@ using Rubberduck.Common; using Rubberduck.Interaction.Navigation; using Rubberduck.Settings; +using Rubberduck.SettingsProvider; using Rubberduck.UI.Command; using Rubberduck.UI.Settings; using Rubberduck.UI.UnitTesting.Commands; @@ -37,7 +38,7 @@ public TestExplorerViewModel(ISelectionService selectionService, TestExplorerModel model, IClipboardWriter clipboard, // ReSharper disable once UnusedParameter.Local - left in place because it will likely be needed for app wide font settings, etc. - IGeneralConfigService configService, + IConfigurationService configService, ISettingsFormFactory settingsFormFactory) { _clipboard = clipboard; diff --git a/Rubberduck.Core/app.config b/Rubberduck.Core/app.config index d5eed5da90..d6700ea159 100644 --- a/Rubberduck.Core/app.config +++ b/Rubberduck.Core/app.config @@ -16,401 +16,102 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - R - true - true - false - true - CodePaneRefactorRenameCommand - - - - - - - F - true - true - false - true - RefactorEncapsulateFieldCommand - - - - - - - M - true - true - false - true - RefactorExtractMethodCommand - - - - - - - C - true - true - false - true - RefactorMoveCloserToUsageCommand - - - - - - - R - true - false - false - true - CodeExplorerCommand - - - - - - - E - true - true - false - true - ExportAllCommand - - - - - - - T - true - false - false - true - FindSymbolCommand - - - - - - - M - true - false - false - true - IndentCurrentModuleCommand - - - - - - - P - true - false - false - true - IndentCurrentProcedureCommand - - - - - - - I - true - true - false - true - InspectionResultsCommand - - - - - - - ` - true - false - false - true - ReparseCommand - - - - - - - T - true - true - false - true - TestExplorerCommand - - - - - - - - - - - - - - - - - - - - - - false - false - false - false - true - false - false - - - - - - - LateBinding - StrictAssert - true - true - false - - - - - - - - true - true - true - false - false - 10 - false - 0 - false - - - - - - - - - None - 25 - - - - + + + <CodeInspectionSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <CodeInspections> + <CodeInspection Name="BooleanAssignedInIfElseInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteErrorSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StopKeywordInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnhandledOnErrorResumeNextInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="EmptyStringLiteralInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitByRefModifierInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="FunctionReturnValueNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IllegalAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="RedundantByRefModifierInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="MissingAttributeInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="AttributeOutOfSyncInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="MissingAnnotationArgumentInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ModuleScopeDimKeywordInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="MultilineParameterInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="MultipleDeclarationsInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteCallStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteCommentSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteLetStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="OptionBaseInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="RedundantOptionInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="OptionExplicitInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ProcedureCanBeWrittenAsFunctionInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ApplicationWorksheetFunctionInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="AssignedByValParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="EmptyModuleInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="LineLabelNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IntegerDataTypeInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ShadowedDeclarationInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ConstantNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DefaultProjectNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyCaseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyDoWhileBlockInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyElseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyForEachBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyForLoopBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyIfBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EmptyWhileWendBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="EncapsulatePublicFieldInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="HostSpecificExpressionInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="HungarianNotationInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ImplicitActiveSheetReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitActiveWorkbookReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitDefaultMemberAssignmentInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitPublicMemberInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ImplicitVariantReturnTypeInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="MemberNotOnInterfaceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="MoveFieldCloserToUsageInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="NonReturningFunctionInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ObjectVariableNotSetInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ObsoleteGlobalInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteTypeHintInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ParameterCanBeByValInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ParameterNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ProcedureNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="SelfAssignedDeclarationInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnassignedVariableUsageInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UndeclaredVariableInspection" Severity="Error" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UntypedFunctionUsageInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="UseMeaningfulNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="VariableNotAssignedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="VariableNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="VariableTypeNotDeclaredInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="WriteOnlyPropertyInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DefTypeStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StepIsNotSpecifiedInspection" Severity="DoNotShow" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="StepOneIsRedundantInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="SheetAccessedUsingStringInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="ObsoleteMemberUsageInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> + <CodeInspection Name="ObsoleteCallingConventionInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="DuplicatedAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="ModuleWithoutFolderInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> + <CodeInspection Name="OnLocalErrorInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> + <CodeInspection Name="IsMissingOnInappropriateArgumentInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="IsMissingWithNonArgumentParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="AssignmentNotUsedInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="UnderscoreInPublicClassModuleMemberInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + <CodeInspection Name="ExcelUdfNameIsValidCellReferenceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> + </CodeInspections> + <WhitelistedIdentifiers /> + <RunInspectionsOnSuccessfulParse>true</RunInspectionsOnSuccessfulParse> + </CodeInspectionSettings> + + + + + <UnitTestSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <BindingMode>LateBinding</BindingMode> + <AssertMode>StrictAssert</AssertMode> + <ModuleInit>true</ModuleInit> + <MethodInit>true</MethodInit> + <DefaultTestStubInNewModule>false</DefaultTestStubInNewModule> + </UnitTestSettings> diff --git a/Rubberduck.Core/UI/Refactorings/IAssignedByValParameterQuickFixDialog.cs b/Rubberduck.Interaction/Refactorings/IAssignedByValParameterQuickFixDialog.cs similarity index 100% rename from Rubberduck.Core/UI/Refactorings/IAssignedByValParameterQuickFixDialog.cs rename to Rubberduck.Interaction/Refactorings/IAssignedByValParameterQuickFixDialog.cs diff --git a/Rubberduck.Core/UI/Refactorings/IAssignedByValParameterQuickFixDialogFactory.cs b/Rubberduck.Interaction/Refactorings/IAssignedByValParameterQuickFixDialogFactory.cs similarity index 100% rename from Rubberduck.Core/UI/Refactorings/IAssignedByValParameterQuickFixDialogFactory.cs rename to Rubberduck.Interaction/Refactorings/IAssignedByValParameterQuickFixDialogFactory.cs diff --git a/Rubberduck.Interaction/Rubberduck.Interaction.csproj b/Rubberduck.Interaction/Rubberduck.Interaction.csproj index ca639854aa..73944fb38e 100644 --- a/Rubberduck.Interaction/Rubberduck.Interaction.csproj +++ b/Rubberduck.Interaction/Rubberduck.Interaction.csproj @@ -20,4 +20,9 @@ 4.6.4 + + + Form + + \ No newline at end of file diff --git a/Rubberduck.Core/Common/IExportable.cs b/Rubberduck.JunkDrawer/Output/IExportable.cs similarity index 100% rename from Rubberduck.Core/Common/IExportable.cs rename to Rubberduck.JunkDrawer/Output/IExportable.cs diff --git a/Rubberduck.Core/Common/StringExtensions.cs b/Rubberduck.JunkDrawer/Output/StringExtensions.cs similarity index 100% rename from Rubberduck.Core/Common/StringExtensions.cs rename to Rubberduck.JunkDrawer/Output/StringExtensions.cs diff --git a/Rubberduck.JunkDrawer/Properties/AssemblyInfo.cs b/Rubberduck.JunkDrawer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..0d9df4ec3a --- /dev/null +++ b/Rubberduck.JunkDrawer/Properties/AssemblyInfo.cs @@ -0,0 +1,13 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d7a3f7a3-bd90-4845-b098-ac3afbf0e16f")] +[assembly: InternalsVisibleTo("RubberduckTests")] +[assembly: InternalsVisibleTo("Rubberduck")] \ No newline at end of file diff --git a/Rubberduck.JunkDrawer/Rubberduck.JunkDrawer.csproj b/Rubberduck.JunkDrawer/Rubberduck.JunkDrawer.csproj new file mode 100644 index 0000000000..23dc469462 --- /dev/null +++ b/Rubberduck.JunkDrawer/Rubberduck.JunkDrawer.csproj @@ -0,0 +1,11 @@ + + + + Rubberduck.JunkDrawer + Rubberduck.JunkDrawer + Copyright © 2016-2018 + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F} + Rubberduck.JunkDrawer + + + \ No newline at end of file diff --git a/Rubberduck.Main/Extension.cs b/Rubberduck.Main/Extension.cs index 6b385fcf61..98aeb50c99 100644 --- a/Rubberduck.Main/Extension.cs +++ b/Rubberduck.Main/Extension.cs @@ -157,7 +157,7 @@ private void InitializeAddIn() }; var configProvider = new GeneralConfigProvider(configLoader); - _initialSettings = configProvider.Create(); + _initialSettings = configProvider.Load(); if (_initialSettings != null) { try diff --git a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs index a80fca8931..54fbce2cfd 100644 --- a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs +++ b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs @@ -259,11 +259,11 @@ private void RegisterConfiguration(IWindsorContainer container, Assembly[] assem .ImplementedBy(typeof(XmlContractPersistanceService<>)) .LifestyleSingleton()); - container.Register(Component.For>() + container.Register(Component.For>() .ImplementedBy() .LifestyleSingleton()); - container.Register(Component.For>() + container.Register(Component.For>() .ImplementedBy() .LifestyleSingleton()); } @@ -786,8 +786,8 @@ private void RegisterSmartIndenter(IWindsorContainer container) .ImplementedBy() .LifestyleSingleton()); container.Register(Component.For>() - .UsingFactoryMethod(kernel => (Func)(() => kernel.Resolve() - .LoadConfiguration().UserSettings.IndenterSettings)) + .UsingFactoryMethod(kernel => (Func)(() => kernel.Resolve>() + .Load().UserSettings.IndenterSettings)) .LifestyleTransient()); //todo: clean up this registration } diff --git a/Rubberduck.SettingsProvider/ConfigurationServiceBase.cs b/Rubberduck.SettingsProvider/ConfigurationServiceBase.cs new file mode 100644 index 0000000000..0b5ccb6565 --- /dev/null +++ b/Rubberduck.SettingsProvider/ConfigurationServiceBase.cs @@ -0,0 +1,40 @@ +using System; + +namespace Rubberduck.SettingsProvider +{ + public class ConfigurationServiceBase : IConfigurationService + where T : class, new() + { + protected readonly IPersistanceService persister; + + public ConfigurationServiceBase(IPersistanceService persister) + { + this.persister = persister; + } + + protected void OnSettingsChanged() + { + var eventArgs = new ConfigurationChangedEventArgs(false, false, false, false); + SettingsChanged?.Invoke(this, eventArgs); + } + + public event EventHandler SettingsChanged; + + public virtual T Load() + { + var defaults = (T) typeof(T).GetConstructor(new Type[] { }).Invoke(new object[] { }); + return persister.Load(defaults) ?? defaults; + } + + public virtual T LoadDefaults() + { + return (T)typeof(T).GetConstructor(new Type[] { }).Invoke(new object[] { }); + } + + public virtual void Save(T settings) + { + persister.Save(settings); + OnSettingsChanged(); + } + } +} diff --git a/Rubberduck.SettingsProvider/DefaultSettings.cs b/Rubberduck.SettingsProvider/DefaultSettings.cs new file mode 100644 index 0000000000..c72acc4506 --- /dev/null +++ b/Rubberduck.SettingsProvider/DefaultSettings.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace Rubberduck.Settings +{ + public class DefaultSettings + where S : System.Configuration.ApplicationSettingsBase + { + public IEnumerable Defaults { get; } + public T Default => Defaults.First(); + + public DefaultSettings() + { + var properties = typeof(S).GetProperties().Where(prop => prop.PropertyType == typeof(T)); + var defaultInstance = typeof(S).GetProperty("Default", BindingFlags.Static | BindingFlags.Public).GetValue(null); + + Defaults = properties.Select(prop => prop.GetValue(defaultInstance)).Cast(); + } + } +} diff --git a/Rubberduck.SettingsProvider/IConfigProvider.cs b/Rubberduck.SettingsProvider/IConfigProvider.cs index 522577df3c..401fd55ed3 100644 --- a/Rubberduck.SettingsProvider/IConfigProvider.cs +++ b/Rubberduck.SettingsProvider/IConfigProvider.cs @@ -1,10 +1,30 @@ -namespace Rubberduck.SettingsProvider +using System; + +namespace Rubberduck.SettingsProvider { - public interface IConfigProvider + public interface IConfigurationService { - T Create(); - T CreateDefaults(); + T Load(); + T LoadDefaults(); void Save(T settings); + + event EventHandler SettingsChanged; + } + + public class ConfigurationChangedEventArgs : EventArgs + { + public bool LanguageChanged { get; } + public bool InspectionSettingsChanged { get; } + public bool RunInspectionsOnReparse { get; } + public bool AutoCompleteSettingsChanged { get; } + + public ConfigurationChangedEventArgs(bool runInspections, bool languageChanged, bool inspectionSettingsChanged, bool autoCompleteSettingsChanged) + { + AutoCompleteSettingsChanged = autoCompleteSettingsChanged; + RunInspectionsOnReparse = runInspections; + LanguageChanged = languageChanged; + InspectionSettingsChanged = inspectionSettingsChanged; + } } } \ No newline at end of file diff --git a/Rubberduck.SettingsProvider/Rubberduck.SettingsProvider.csproj b/Rubberduck.SettingsProvider/Rubberduck.SettingsProvider.csproj index e47f248f5b..93697d636e 100644 --- a/Rubberduck.SettingsProvider/Rubberduck.SettingsProvider.csproj +++ b/Rubberduck.SettingsProvider/Rubberduck.SettingsProvider.csproj @@ -19,4 +19,8 @@ 4.5.0 + + + + \ No newline at end of file diff --git a/Rubberduck.SmartIndenter/IndenterConfigProvider.cs b/Rubberduck.SmartIndenter/IndenterConfigProvider.cs index d80f17ea03..c1c4d23800 100644 --- a/Rubberduck.SmartIndenter/IndenterConfigProvider.cs +++ b/Rubberduck.SmartIndenter/IndenterConfigProvider.cs @@ -1,8 +1,9 @@ -using Rubberduck.SettingsProvider; +using System; +using Rubberduck.SettingsProvider; namespace Rubberduck.SmartIndenter { - public class IndenterConfigProvider : IConfigProvider + public class IndenterConfigProvider : IConfigurationService { private readonly IPersistanceService _persister; @@ -11,13 +12,15 @@ public IndenterConfigProvider(IPersistanceService persister) _persister = persister; } - public IndenterSettings Create() + public event EventHandler SettingsChanged; + + public IndenterSettings Load() { var prototype = new IndenterSettings(false); return _persister.Load(prototype) ?? prototype; } - public IndenterSettings CreateDefaults() + public IndenterSettings LoadDefaults() { return new IndenterSettings(false); } diff --git a/Rubberduck.UnitTesting/CodeGeneration/TestCodeGenerator.cs b/Rubberduck.UnitTesting/CodeGeneration/TestCodeGenerator.cs index 4e57280df7..c9ad06a9b5 100644 --- a/Rubberduck.UnitTesting/CodeGeneration/TestCodeGenerator.cs +++ b/Rubberduck.UnitTesting/CodeGeneration/TestCodeGenerator.cs @@ -20,7 +20,7 @@ public partial class TestCodeGenerator : ITestCodeGenerator protected static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly bool _isAccess; - private readonly IConfigProvider _settings; + private readonly IConfigurationService _settings; private readonly RubberduckParserState _state; private readonly IMessageBox _messageBox; private readonly IIndenter _indenter; @@ -32,7 +32,7 @@ public TestCodeGenerator( RubberduckParserState state, IMessageBox messageBox, IVBEInteraction interaction, - IConfigProvider settings, + IConfigurationService settings, IIndenter indenter, ICompilationArgumentsProvider argumentsProvider) { @@ -62,7 +62,7 @@ private void AddTestModule(IVBProject project, Declaration stubSource) return; } - var settings = _settings.Create(); + var settings = _settings.Load(); AddReferenceIfNeeded(project, settings); @@ -133,7 +133,7 @@ private void AddReferenceIfNeeded(IVBProject project, IUnitTestSettings settings private string GetNewTestModuleCode(IVBComponent component) { - var settings = _settings.Create(); + var settings = _settings.Load(); var baseModule = (GetBaseTestModule(settings) + Environment.NewLine); if (settings.DefaultTestStubInNewModule) @@ -162,7 +162,7 @@ private string GetBaseTestModule(UnitTestSettings settings = null) { if (settings is null) { - settings = _settings.Create(); + settings = _settings.Load(); } string declaration; diff --git a/Rubberduck.UnitTesting/Rubberduck.UnitTesting.csproj b/Rubberduck.UnitTesting/Rubberduck.UnitTesting.csproj index 394c62a361..b516fe7557 100644 --- a/Rubberduck.UnitTesting/Rubberduck.UnitTesting.csproj +++ b/Rubberduck.UnitTesting/Rubberduck.UnitTesting.csproj @@ -12,6 +12,7 @@ + diff --git a/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs b/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs index 33fbbbfb0a..9aa23fd6b8 100644 --- a/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs +++ b/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs @@ -2,16 +2,15 @@ namespace Rubberduck.UnitTesting.Settings { - public class UnitTestConfigProvider : IConfigProvider + public class UnitTestConfigProvider : ConfigurationServiceBase { - private readonly IPersistanceService _persister; - private readonly UnitTestSettings _defaultSettings; + private readonly UnitTestSettings defaultSettings; public UnitTestConfigProvider(IPersistanceService persister) + : base(persister) { - _persister = persister; - _defaultSettings = new UnitTestSettings + defaultSettings = new UnitTestSettings { BindingMode = BindingMode.LateBinding, AssertMode = AssertMode.StrictAssert, @@ -21,19 +20,14 @@ public UnitTestConfigProvider(IPersistanceService persister) }; } - public UnitTestSettings Create() + public override UnitTestSettings Load() { - return _persister.Load(_defaultSettings) ?? _defaultSettings; + return persister.Load(defaultSettings) ?? defaultSettings; } - public UnitTestSettings CreateDefaults() + public override UnitTestSettings LoadDefaults() { - return _defaultSettings; - } - - public void Save(UnitTestSettings settings) - { - _persister.Save(settings); + return defaultSettings; } } } diff --git a/Rubberduck.sln b/Rubberduck.sln index e4833bcb7e..61ab1bc41b 100644 --- a/Rubberduck.sln +++ b/Rubberduck.sln @@ -95,6 +95,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rubberduck.Interaction", "R EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rubberduck.UnitTesting", "Rubberduck.UnitTesting\Rubberduck.UnitTesting.csproj", "{68F55404-32CA-4414-96B8-E284F3B1F846}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rubberduck.JunkDrawer", "Rubberduck.JunkDrawer\Rubberduck.JunkDrawer.csproj", "{D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -601,6 +603,36 @@ Global {68F55404-32CA-4414-96B8-E284F3B1F846}.Release64|x64.Build.0 = Release|Any CPU {68F55404-32CA-4414-96B8-E284F3B1F846}.Release64|x86.ActiveCfg = Release|Any CPU {68F55404-32CA-4414-96B8-E284F3B1F846}.Release64|x86.Build.0 = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug|x64.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug|x64.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug|x86.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug|x86.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug64|x64.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug64|x64.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug64|x86.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Debug64|x86.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.DebugAccess|Any CPU.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.DebugAccess|Any CPU.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.DebugAccess|x64.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.DebugAccess|x64.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.DebugAccess|x86.ActiveCfg = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.DebugAccess|x86.Build.0 = Debug|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release|Any CPU.Build.0 = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release|x64.ActiveCfg = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release|x64.Build.0 = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release|x86.ActiveCfg = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release|x86.Build.0 = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release64|Any CPU.ActiveCfg = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release64|Any CPU.Build.0 = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release64|x64.ActiveCfg = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release64|x64.Build.0 = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release64|x86.ActiveCfg = Release|Any CPU + {D7A3F7A3-BD90-4845-B098-AC3AFBF0E16F}.Release64|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs b/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs index c178640602..b592843f28 100644 --- a/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs +++ b/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs @@ -94,17 +94,17 @@ public static ReferenceSettings GetNonDefaultReferenceSettings() return settings; } - public static IConfigProvider GetReferenceSettingsProvider(ReferenceSettings settings = null) + public static IConfigurationService GetReferenceSettingsProvider(ReferenceSettings settings = null) { return GetMockReferenceSettingsProvider(settings).Object; } - public static Mock> GetMockReferenceSettingsProvider(ReferenceSettings settings = null) + public static Mock> GetMockReferenceSettingsProvider(ReferenceSettings settings = null) { - var output = new Mock>(); + var output = new Mock>(); - output.Setup(m => m.Create()).Returns(() => settings ?? GetDefaultReferenceSettings()); - output.Setup(m => m.CreateDefaults()).Returns(GetDefaultReferenceSettings); + output.Setup(m => m.Load()).Returns(() => settings ?? GetDefaultReferenceSettings()); + output.Setup(m => m.LoadDefaults()).Returns(GetDefaultReferenceSettings); output.Setup(m => m.Save(It.IsAny())); return output; diff --git a/RubberduckTests/CodeExplorer/MockedCodeExplorer.cs b/RubberduckTests/CodeExplorer/MockedCodeExplorer.cs index 516a97bbb5..9950715001 100644 --- a/RubberduckTests/CodeExplorer/MockedCodeExplorer.cs +++ b/RubberduckTests/CodeExplorer/MockedCodeExplorer.cs @@ -34,18 +34,18 @@ internal class MockedCodeExplorer : IDisposable private readonly GeneralSettings _generalSettings = new GeneralSettings(); private readonly Mock _uiDispatcher = new Mock(); - private readonly Mock> _generalSettingsProvider = new Mock>(); - private readonly Mock> _windowSettingsProvider = new Mock>(); - private readonly Mock> _unitTestSettingsProvider = new Mock>(); + private readonly Mock> _generalSettingsProvider = new Mock>(); + private readonly Mock> _windowSettingsProvider = new Mock>(); + private readonly Mock> _unitTestSettingsProvider = new Mock>(); private readonly Mock _configLoader = new Mock(null, null, null, null, null, null, null, null); private readonly Mock _interaction = new Mock(); public MockedCodeExplorer() { - _generalSettingsProvider.Setup(s => s.Create()).Returns(_generalSettings); - _windowSettingsProvider.Setup(s => s.Create()).Returns(WindowSettings); - _configLoader.Setup(c => c.LoadConfiguration()).Returns(GetDefaultUnitTestConfig()); - _unitTestSettingsProvider.Setup(s => s.Create()) + _generalSettingsProvider.Setup(s => s.Load()).Returns(_generalSettings); + _windowSettingsProvider.Setup(s => s.Load()).Returns(WindowSettings); + _configLoader.Setup(c => c.Load()).Returns(GetDefaultUnitTestConfig()); + _unitTestSettingsProvider.Setup(s => s.Load()) .Returns(new UnitTestSettings(BindingMode.LateBinding,AssertMode.StrictAssert, true, true, false)); _uiDispatcher.Setup(m => m.Invoke(It.IsAny())).Callback((Action argument) => argument.Invoke()); diff --git a/RubberduckTests/Commands/UnitTestCommandTests.cs b/RubberduckTests/Commands/UnitTestCommandTests.cs index 208c905409..5d7e141ebd 100644 --- a/RubberduckTests/Commands/UnitTestCommandTests.cs +++ b/RubberduckTests/Commands/UnitTestCommandTests.cs @@ -459,10 +459,10 @@ End Enum private ITestCodeGenerator ArrangeCodeGenerator(IVBE vbe, RubberduckParserState state) { var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings()); - var settings = new Mock>(); + var settings = new Mock>(); var arguments = new Mock(); - settings.Setup(s => s.Create()).Returns(new UnitTestSettings(BindingMode.LateBinding, AssertMode.StrictAssert, true, true, false)); + settings.Setup(s => s.Load()).Returns(new UnitTestSettings(BindingMode.LateBinding, AssertMode.StrictAssert, true, true, false)); arguments.Setup(m => m.UserDefinedCompilationArguments(It.IsAny())) .Returns(new Dictionary()); diff --git a/RubberduckTests/ConfigurationTests.cs b/RubberduckTests/ConfigurationTests.cs index f2360bcc8a..5aeed536ec 100644 --- a/RubberduckTests/ConfigurationTests.cs +++ b/RubberduckTests/ConfigurationTests.cs @@ -5,6 +5,7 @@ using Rubberduck.Parsing.Inspections.Abstract; using Rubberduck.Settings; using Rubberduck.Parsing.Inspections; +using Rubberduck.CodeAnalysis.Settings; namespace RubberduckTests { diff --git a/RubberduckTests/Inspections/InspectionProviderTests.cs b/RubberduckTests/Inspections/InspectionProviderTests.cs index 7dcd5e5072..20b3723d3e 100644 --- a/RubberduckTests/Inspections/InspectionProviderTests.cs +++ b/RubberduckTests/Inspections/InspectionProviderTests.cs @@ -5,6 +5,7 @@ using Rubberduck.Parsing.Inspections.Abstract; using Rubberduck.Parsing.Inspections; using Rubberduck.Settings; +using Rubberduck.CodeAnalysis.Settings; namespace RubberduckTests.Inspections { @@ -15,7 +16,7 @@ public class InspectionProviderTests [Test] public void InspectionTypeIsAssignedFromDefaultSettingInConstructor() { - var defaultSettings = new DefaultSettings().Default; + var defaultSettings = new DefaultSettings().Default; var defaultSetting = defaultSettings.CodeInspections.First(); defaultSetting.InspectionType = CodeInspectionType.Performance; diff --git a/RubberduckTests/Inspections/InspectionsHelper.cs b/RubberduckTests/Inspections/InspectionsHelper.cs index 28f26579e8..64ae08132d 100644 --- a/RubberduckTests/Inspections/InspectionsHelper.cs +++ b/RubberduckTests/Inspections/InspectionsHelper.cs @@ -1,9 +1,10 @@ using Moq; using Rubberduck.Parsing.Inspections.Abstract; -using Rubberduck.Settings; using System.Linq; using Rubberduck.CodeAnalysis.Inspections; using Rubberduck.Inspections.Rubberduck.Inspections; +using Rubberduck.SettingsProvider; +using Rubberduck.CodeAnalysis.Settings; namespace RubberduckTests.Inspections { @@ -17,16 +18,16 @@ public static IInspector GetInspector(IInspection inspection, params IInspection return new Inspector(GetSettings(inspection), inspectionProviderMock.Object); } - public static IGeneralConfigService GetSettings(IInspection inspection) + public static IConfigurationService GetSettings(IInspection inspection) { - var settings = new Mock(); + var settings = new Mock>(); var config = GetTestConfig(inspection); - settings.Setup(x => x.LoadConfiguration()).Returns(config); + settings.Setup(x => x.Load()).Returns(config); return settings.Object; } - private static Configuration GetTestConfig(IInspection inspection) + private static CodeInspectionSettings GetTestConfig(IInspection inspection) { var settings = new CodeInspectionSettings(); settings.CodeInspections.Add(new CodeInspectionSetting @@ -35,10 +36,7 @@ private static Configuration GetTestConfig(IInspection inspection) Severity = inspection.Severity, Name = inspection.ToString() }); - return new Configuration - { - UserSettings = new UserSettings(null, null, null, null, settings, null, null, null) - }; + return settings; } } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs b/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs index ba0cd99831..627dae65c2 100644 --- a/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs +++ b/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs @@ -8,6 +8,7 @@ using Rubberduck.SettingsProvider; using Rubberduck.VBEditor.SafeComWrappers; using RubberduckTests.Mocks; +using Rubberduck.CodeAnalysis.Settings; namespace RubberduckTests.Inspections { diff --git a/RubberduckTests/RubberduckTests.csproj b/RubberduckTests/RubberduckTests.csproj index 5ba260dd6a..bfed96fd20 100644 --- a/RubberduckTests/RubberduckTests.csproj +++ b/RubberduckTests/RubberduckTests.csproj @@ -55,6 +55,7 @@ + diff --git a/RubberduckTests/Settings/AutoCompleteSettingsTests.cs b/RubberduckTests/Settings/AutoCompleteSettingsTests.cs index 029384335f..f7206dd854 100644 --- a/RubberduckTests/Settings/AutoCompleteSettingsTests.cs +++ b/RubberduckTests/Settings/AutoCompleteSettingsTests.cs @@ -68,7 +68,7 @@ private static Configuration GetNonDefaultConfig() [Test] public void AutoCompleteDisabledByDefault() { - var defaultSettings = new DefaultSettings().Default; + var defaultSettings = new DefaultSettings().Default; Assert.IsFalse(defaultSettings.IsEnabled); } diff --git a/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs b/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs index aa47eca309..fa91d520a9 100644 --- a/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs +++ b/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs @@ -7,6 +7,7 @@ using Rubberduck.Parsing.Inspections.Abstract; using Rubberduck.Settings; using Rubberduck.SettingsProvider; +using Rubberduck.CodeAnalysis.Settings; namespace RubberduckTests.Settings { @@ -24,7 +25,7 @@ public void SettingsForFoundInspectionsAreAddedToDefaultSettings() var configProvider = new CodeInspectionConfigProvider(null, inspectionProviderMock.Object); - var defaults = configProvider.CreateDefaults(); + var defaults = configProvider.LoadDefaults(); Assert.NotNull(defaults.GetSetting(inspectionMock.Object.GetType())); } @@ -49,8 +50,8 @@ public void UserSettingsAreCombinedWithDefaultSettings() var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); - var settings = configProvider.Create().CodeInspections; - var defaultSettings = configProvider.CreateDefaults().CodeInspections; + var settings = configProvider.Load().CodeInspections; + var defaultSettings = configProvider.LoadDefaults().CodeInspections; Assert.Contains(userSetting, settings.ToArray()); Assert.IsTrue(defaultSettings.All(s => settings.Contains(s))); @@ -75,9 +76,9 @@ public void UserSettingsAreNotDuplicatedWithDefaultSettings() persisterMock.Setup(persister => persister.Load(It.IsAny(), null)).Returns(userSettings); var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); - var settings = configProvider.Create().CodeInspections; + var settings = configProvider.Load().CodeInspections; - Assert.AreEqual(configProvider.CreateDefaults().CodeInspections.Count, settings.Count); + Assert.AreEqual(configProvider.LoadDefaults().CodeInspections.Count, settings.Count); } @@ -101,7 +102,7 @@ public void UserSettingForUnknownInspectionIsIgnored() var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); - var settings = configProvider.Create().CodeInspections; + var settings = configProvider.Load().CodeInspections; Assert.IsNull(settings.FirstOrDefault(setting => setting.Name == "Bar")); } diff --git a/RubberduckTests/Settings/GeneralSettingsTests.cs b/RubberduckTests/Settings/GeneralSettingsTests.cs index 6fef3a1794..5d6df91715 100644 --- a/RubberduckTests/Settings/GeneralSettingsTests.cs +++ b/RubberduckTests/Settings/GeneralSettingsTests.cs @@ -178,8 +178,8 @@ public void UserSettingsLoadedUsingDefaultWhenMissingFile() persisterMock.CallBase = true; var configProvider = new GeneralConfigProvider(persisterMock.Object); - var settings = configProvider.Create(); - var defaultSettings = configProvider.CreateDefaults(); + var settings = configProvider.Load(); + var defaultSettings = configProvider.LoadDefaults(); Assert.AreEqual(defaultSettings, settings); } diff --git a/RubberduckTests/Settings/InspectionSettingsTests.cs b/RubberduckTests/Settings/InspectionSettingsTests.cs index 069e542dfb..e17777050e 100644 --- a/RubberduckTests/Settings/InspectionSettingsTests.cs +++ b/RubberduckTests/Settings/InspectionSettingsTests.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using NUnit.Framework; +using Rubberduck.CodeAnalysis.Settings; using Rubberduck.Parsing.Inspections; using Rubberduck.Settings; using Rubberduck.UI.Settings; diff --git a/RubberduckTests/TodoExplorer/TodoExplorerTests.cs b/RubberduckTests/TodoExplorer/TodoExplorerTests.cs index 60018af2c9..a5050705d1 100644 --- a/RubberduckTests/TodoExplorer/TodoExplorerTests.cs +++ b/RubberduckTests/TodoExplorer/TodoExplorerTests.cs @@ -191,7 +191,7 @@ public void RemoveRemovesComment() var cs = GetConfigService(new[] { "TODO", "NOTE", "BUG" }); var vm = new ToDoExplorerViewModel(state, cs, null, selectionService, GetMockedUiDispatcher()) { - RefreshCommand = new ReparseCommand(vbe.Object, new Mock>().Object, state, null, null, null) + RefreshCommand = new ReparseCommand(vbe.Object, new Mock>().Object, state, null, null, null) }; parser.Parse(new CancellationTokenSource()); @@ -208,10 +208,10 @@ public void RemoveRemovesComment() } } - private IGeneralConfigService GetConfigService(string[] markers) + private IConfigurationService GetConfigService(string[] markers) { - var configService = new Mock(); - configService.Setup(c => c.LoadConfiguration()).Returns(GetTodoConfig(markers)); + var configService = new Mock>(); + configService.Setup(c => c.Load()).Returns(GetTodoConfig(markers)); return configService.Object; } From fd9aa7834b57cdaf98b8591365c920f3ec2a985c Mon Sep 17 00:00:00 2001 From: Vogel612 Date: Sat, 13 Apr 2019 15:36:13 +0200 Subject: [PATCH 2/5] Move UnitTestSettings defaults to UnitTesting assembly --- .../Properties/Settings.Designer.cs | 158 --------- Rubberduck.Core/Properties/Settings.settings | 98 ------ Rubberduck.Core/app.config | 315 ++++++++++++------ .../Properties/UnitTestDefaults.Designer.cs | 42 +++ .../Properties/UnitTestDefaults.settings | 16 + .../Settings/UnitTestConfigProvider.cs | 13 +- 6 files changed, 280 insertions(+), 362 deletions(-) create mode 100644 Rubberduck.UnitTesting/Properties/UnitTestDefaults.Designer.cs create mode 100644 Rubberduck.UnitTesting/Properties/UnitTestDefaults.settings diff --git a/Rubberduck.Core/Properties/Settings.Designer.cs b/Rubberduck.Core/Properties/Settings.Designer.cs index 50d5fbc15f..8c8481cb14 100644 --- a/Rubberduck.Core/Properties/Settings.Designer.cs +++ b/Rubberduck.Core/Properties/Settings.Designer.cs @@ -40,147 +40,6 @@ public static Settings Default { } } - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n " + - "\r\n \r\n \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n " + - "\r\n \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n \r\n \r\n \r\n " + - " \r\n \r\n \r\n <" + - "CodeInspection Name=\"IsMissingWithNonArgumentParameterInspection\" Severity=\"Warn" + - "ing\" InspectionType=\"CodeQualityIssues\" />\r\n \r\n \r\n " + - " \r\n \r" + - "\n \r\n true\r\n \r\n ")] - public string CodeInspectionSettings { - get { - return ((string)(this["CodeInspectionSettings"])); - } - } - [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute(@" @@ -428,23 +287,6 @@ public string CodeInspectionSettings { } } - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - LateBinding - StrictAssert - true - true - false - - ")] - public string UnitTestSettings { - get { - return ((string)(this["UnitTestSettings"])); - } - } - [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute(@" diff --git a/Rubberduck.Core/Properties/Settings.settings b/Rubberduck.Core/Properties/Settings.settings index 3403de0b7c..b713abc203 100644 --- a/Rubberduck.Core/Properties/Settings.settings +++ b/Rubberduck.Core/Properties/Settings.settings @@ -13,93 +13,6 @@ <CommandTypeName>IndentCurrentModuleCommand</CommandTypeName> </HotkeySetting> - - - <CodeInspectionSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <CodeInspections> - <CodeInspection Name="BooleanAssignedInIfElseInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteErrorSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StopKeywordInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnhandledOnErrorResumeNextInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="EmptyStringLiteralInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitByRefModifierInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="FunctionReturnValueNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IllegalAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="RedundantByRefModifierInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="MissingAttributeInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="AttributeOutOfSyncInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="MissingAnnotationArgumentInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ModuleScopeDimKeywordInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="MultilineParameterInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="MultipleDeclarationsInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteCallStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteCommentSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteLetStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="OptionBaseInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="RedundantOptionInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="OptionExplicitInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ProcedureCanBeWrittenAsFunctionInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ApplicationWorksheetFunctionInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="AssignedByValParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="EmptyModuleInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="LineLabelNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IntegerDataTypeInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ShadowedDeclarationInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ConstantNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DefaultProjectNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyCaseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyDoWhileBlockInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyElseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyForEachBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyForLoopBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyIfBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyWhileWendBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EncapsulatePublicFieldInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="HostSpecificExpressionInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="HungarianNotationInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ImplicitActiveSheetReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitActiveWorkbookReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitDefaultMemberAssignmentInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitPublicMemberInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitVariantReturnTypeInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="MemberNotOnInterfaceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="MoveFieldCloserToUsageInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="NonReturningFunctionInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ObjectVariableNotSetInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ObsoleteGlobalInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteTypeHintInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ParameterCanBeByValInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ParameterNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ProcedureNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="SelfAssignedDeclarationInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnassignedVariableUsageInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UndeclaredVariableInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UntypedFunctionUsageInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="UseMeaningfulNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="VariableNotAssignedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="VariableNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="VariableTypeNotDeclaredInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="WriteOnlyPropertyInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DefTypeStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StepIsNotSpecifiedInspection" Severity="DoNotShow" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StepOneIsRedundantInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="SheetAccessedUsingStringInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteMemberUsageInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteCallingConventionInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DuplicatedAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="ModuleWithoutFolderInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="OnLocalErrorInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="IsMissingOnInappropriateArgumentInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IsMissingWithNonArgumentParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="AssignmentNotUsedInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnderscoreInPublicClassModuleMemberInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ExcelUdfNameIsValidCellReferenceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - </CodeInspections> - <WhitelistedIdentifiers /> - <RunInspectionsOnSuccessfulParse>true</RunInspectionsOnSuccessfulParse> - </CodeInspectionSettings> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> @@ -260,17 +173,6 @@ </WindowSettings> - - - <UnitTestSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <BindingMode>LateBinding</BindingMode> - <AssertMode>StrictAssert</AssertMode> - <ModuleInit>true</ModuleInit> - <MethodInit>true</MethodInit> - <DefaultTestStubInNewModule>false</DefaultTestStubInNewModule> - </UnitTestSettings> - - <GeneralSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> diff --git a/Rubberduck.Core/app.config b/Rubberduck.Core/app.config index d6700ea159..d590deafe7 100644 --- a/Rubberduck.Core/app.config +++ b/Rubberduck.Core/app.config @@ -16,102 +16,225 @@ - - - <CodeInspectionSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <CodeInspections> - <CodeInspection Name="BooleanAssignedInIfElseInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteErrorSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StopKeywordInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnhandledOnErrorResumeNextInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="EmptyStringLiteralInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitByRefModifierInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="FunctionReturnValueNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IllegalAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="RedundantByRefModifierInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="MissingAttributeInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="AttributeOutOfSyncInspection" Severity="Warning" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="MissingAnnotationArgumentInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ModuleScopeDimKeywordInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="MultilineParameterInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="MultipleDeclarationsInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteCallStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteCommentSyntaxInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteLetStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="OptionBaseInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="RedundantOptionInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="OptionExplicitInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ProcedureCanBeWrittenAsFunctionInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ApplicationWorksheetFunctionInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="AssignedByValParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="EmptyModuleInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="LineLabelNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IntegerDataTypeInspection" Severity="Hint" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ShadowedDeclarationInspection" Severity="DoNotShow" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ConstantNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DefaultProjectNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyCaseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyDoWhileBlockInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyElseBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyForEachBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyForLoopBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyIfBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EmptyWhileWendBlockInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="EncapsulatePublicFieldInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="HostSpecificExpressionInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="HungarianNotationInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ImplicitActiveSheetReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitActiveWorkbookReferenceInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitDefaultMemberAssignmentInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitPublicMemberInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ImplicitVariantReturnTypeInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="MemberNotOnInterfaceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="MoveFieldCloserToUsageInspection" Severity="Hint" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="NonReturningFunctionInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ObjectVariableNotSetInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ObsoleteGlobalInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteTypeHintInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ParameterCanBeByValInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ParameterNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ProcedureNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="SelfAssignedDeclarationInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnassignedVariableUsageInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UndeclaredVariableInspection" Severity="Error" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UntypedFunctionUsageInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="UseMeaningfulNameInspection" Severity="Suggestion" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="VariableNotAssignedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="VariableNotUsedInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="VariableTypeNotDeclaredInspection" Severity="Warning" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="WriteOnlyPropertyInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DefTypeStatementInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StepIsNotSpecifiedInspection" Severity="DoNotShow" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="StepOneIsRedundantInspection" Severity="Hint" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="SheetAccessedUsingStringInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="ObsoleteMemberUsageInspection" Severity="Warning" InspectionType="MaintainabilityAndReadabilityIssues" /> - <CodeInspection Name="ObsoleteCallingConventionInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="DuplicatedAnnotationInspection" Severity="Error" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="ModuleWithoutFolderInspection" Severity="Suggestion" InspectionType="RubberduckOpportunities" /> - <CodeInspection Name="OnLocalErrorInspection" Severity="Suggestion" InspectionType="LanguageOpportunities" /> - <CodeInspection Name="IsMissingOnInappropriateArgumentInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="IsMissingWithNonArgumentParameterInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="AssignmentNotUsedInspection" Severity="Suggestion" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="UnderscoreInPublicClassModuleMemberInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - <CodeInspection Name="ExcelUdfNameIsValidCellReferenceInspection" Severity="Warning" InspectionType="CodeQualityIssues" /> - </CodeInspections> - <WhitelistedIdentifiers /> - <RunInspectionsOnSuccessfulParse>true</RunInspectionsOnSuccessfulParse> - </CodeInspectionSettings> - - - - - <UnitTestSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <BindingMode>LateBinding</BindingMode> - <AssertMode>StrictAssert</AssertMode> - <ModuleInit>true</ModuleInit> - <MethodInit>true</MethodInit> - <DefaultTestStubInNewModule>false</DefaultTestStubInNewModule> - </UnitTestSettings> + + + + M + true + false + false + true + IndentCurrentModuleCommand + + + + + + + R + true + true + false + true + CodePaneRefactorRenameCommand + + + + + + + F + true + true + false + true + RefactorEncapsulateFieldCommand + + + + + + + M + true + true + false + true + RefactorExtractMethodCommand + + + + + + + C + true + true + false + true + RefactorMoveCloserToUsageCommand + + + + + + + R + true + false + false + true + CodeExplorerCommand + + + + + + + E + true + true + false + true + ExportAllCommand + + + + + + + T + true + false + false + true + FindSymbolCommand + + + + + + + P + true + false + false + true + IndentCurrentProcedureCommand + + + + + + + I + true + true + false + true + InspectionResultsCommand + + + + + + + ` + true + false + false + true + ReparseCommand + + + + + + + T + true + true + false + true + TestExplorerCommand + + + + + + + + + + + + + + + + + + + + + + false + false + false + false + true + false + false + + + + + + + + true + true + true + false + false + 10 + false + 0 + false + + + + + + + + + None + 25 + + + + diff --git a/Rubberduck.UnitTesting/Properties/UnitTestDefaults.Designer.cs b/Rubberduck.UnitTesting/Properties/UnitTestDefaults.Designer.cs new file mode 100644 index 0000000000..3b14c0e167 --- /dev/null +++ b/Rubberduck.UnitTesting/Properties/UnitTestDefaults.Designer.cs @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Rubberduck.UnitTesting.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] + internal sealed partial class UnitTestDefaults : global::System.Configuration.ApplicationSettingsBase { + + private static UnitTestDefaults defaultInstance = ((UnitTestDefaults)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new UnitTestDefaults()))); + + public static UnitTestDefaults Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + LateBinding + StrictAssert + true + true + false +")] + public global::Rubberduck.UnitTesting.Settings.UnitTestSettings UnitTestSettings { + get { + return ((global::Rubberduck.UnitTesting.Settings.UnitTestSettings)(this["UnitTestSettings"])); + } + } + } +} diff --git a/Rubberduck.UnitTesting/Properties/UnitTestDefaults.settings b/Rubberduck.UnitTesting/Properties/UnitTestDefaults.settings new file mode 100644 index 0000000000..9b31410a22 --- /dev/null +++ b/Rubberduck.UnitTesting/Properties/UnitTestDefaults.settings @@ -0,0 +1,16 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<UnitTestSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <BindingMode>LateBinding</BindingMode> + <AssertMode>StrictAssert</AssertMode> + <ModuleInit>true</ModuleInit> + <MethodInit>true</MethodInit> + <DefaultTestStubInNewModule>false</DefaultTestStubInNewModule> +</UnitTestSettings> + + + \ No newline at end of file diff --git a/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs b/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs index 9aa23fd6b8..6bb7a8ff1e 100644 --- a/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs +++ b/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs @@ -1,4 +1,5 @@ -using Rubberduck.SettingsProvider; +using Rubberduck.Settings; +using Rubberduck.SettingsProvider; namespace Rubberduck.UnitTesting.Settings { @@ -9,15 +10,7 @@ public class UnitTestConfigProvider : ConfigurationServiceBase public UnitTestConfigProvider(IPersistanceService persister) : base(persister) { - - defaultSettings = new UnitTestSettings - { - BindingMode = BindingMode.LateBinding, - AssertMode = AssertMode.StrictAssert, - ModuleInit = true, - MethodInit = true, - DefaultTestStubInNewModule = false - }; + defaultSettings = new DefaultSettings().Default; } public override UnitTestSettings Load() From 1e9a6a17770ac357aa8d6ea3e1c471a6648a5d82 Mon Sep 17 00:00:00 2001 From: Vogel612 Date: Mon, 15 Apr 2019 20:08:27 +0200 Subject: [PATCH 3/5] Make SettingsProvider responsible for settings This moves the Consumer-Visible interfaces for Settings into the SettingsProvider project. Additionally a base-implementation for a ConfigurationService is provided. It uses a clear reflection-based mechanism to load the defaults for a given settings type from a settings class. The type is provided as a Type-Argument to the constructor. This structure should allow easily extensible and customizable settings loading with caching and defaults. --- .../Inspections/Inspector.cs | 4 +- .../Settings/CodeInspectionConfigProvider.cs | 33 +- Rubberduck.Core/App.cs | 4 +- .../AutoComplete/AutoCompleteService.cs | 4 +- Rubberduck.Core/Common/RubberduckHooks.cs | 2 +- .../Properties/Settings.Designer.cs | 293 +++++++++--------- Rubberduck.Core/Properties/Settings.settings | 293 +++++++++--------- .../Settings/AutoCompleteConfigProvider.cs | 19 +- .../Settings/ConfigurationLoader.cs | 42 +-- .../Settings/GeneralConfigProvider.cs | 39 +-- .../Settings/HotkeyConfigProvider.cs | 10 +- .../Settings/ReferenceConfigProvider.cs | 18 +- .../Settings/ToDoListConfigProvider.cs | 14 +- .../Settings/WindowConfigProvider.cs | 19 +- .../Templates/TemplateFileHandler.cs | 2 +- .../AddRemoveReferencesPresenterFactory.cs | 2 +- Rubberduck.Core/UI/Command/ReparseCommand.cs | 2 +- .../UI/DockableToolwindowPresenter.cs | 2 +- .../Inspections/InspectionResultsViewModel.cs | 4 +- ...ddRemoveReferencesUserSettingsViewModel.cs | 4 +- .../Settings/AutoCompleteSettingsViewModel.cs | 2 +- Rubberduck.Core/UI/Settings/Settings.cs | 2 +- .../UI/Settings/SettingsControlViewModel.cs | 2 +- Rubberduck.Core/UI/Settings/SettingsForm.cs | 2 +- .../UI/ToDoItems/ToDoExplorerViewModel.cs | 2 +- Rubberduck.Main/Extension.cs | 2 +- .../Root/RubberduckIoCInstaller.cs | 2 +- .../ConfigurationServiceBase.cs | 40 --- .../Facade/ConfigurationServiceBase.cs | 70 +++++ .../{ => Facade}/DefaultSettings.cs | 14 +- .../{ => Facade}/IConfigProvider.cs | 4 +- Rubberduck.SettingsProvider/IPersistable.cs | 8 - .../IPersistencePathProvider.cs} | 2 +- .../IPersistenceService.cs} | 4 +- .../PersistencePathProvider.cs} | 12 +- .../XmlContractPersistenceService.cs} | 4 +- .../XmlPersistenceService.cs} | 4 +- .../XmlPersistenceServiceBase.cs} | 4 +- .../Properties/AssemblyInfo.cs | 3 + .../IndenterConfigProvider.cs | 4 +- .../CodeGeneration/TestCodeGenerator.cs | 6 +- .../Rubberduck.UnitTesting.csproj | 13 + .../Settings/UnitTestConfigProvider.cs | 17 +- .../AddRemoveReferencesSetup.cs | 4 +- .../CodeExplorer/MockedCodeExplorer.cs | 8 +- .../Commands/UnitTestCommandTests.cs | 2 +- .../Inspections/InspectionsHelper.cs | 2 +- .../CodeInspectionConfigProviderTests.cs | 12 +- .../Settings/GeneralSettingsTests.cs | 4 +- .../TodoExplorer/TodoExplorerTests.cs | 2 +- 50 files changed, 505 insertions(+), 562 deletions(-) delete mode 100644 Rubberduck.SettingsProvider/ConfigurationServiceBase.cs create mode 100644 Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs rename Rubberduck.SettingsProvider/{ => Facade}/DefaultSettings.cs (59%) rename Rubberduck.SettingsProvider/{ => Facade}/IConfigProvider.cs (95%) delete mode 100644 Rubberduck.SettingsProvider/IPersistable.cs rename Rubberduck.SettingsProvider/{IPersistancePathProvider.cs => Persistence/IPersistencePathProvider.cs} (75%) rename Rubberduck.SettingsProvider/{IPersistanceService.cs => Persistence/IPersistenceService.cs} (67%) rename Rubberduck.SettingsProvider/{PersistancePathProvider.cs => Persistence/PersistencePathProvider.cs} (56%) rename Rubberduck.SettingsProvider/{XmlContractPersistanceService.cs => Persistence/XmlContractPersistenceService.cs} (92%) rename Rubberduck.SettingsProvider/{XmlPersistanceService.cs => Persistence/XmlPersistenceService.cs} (94%) rename Rubberduck.SettingsProvider/{XmlPersistanceServiceBase.cs => Persistence/XmlPersistenceServiceBase.cs} (93%) diff --git a/Rubberduck.CodeAnalysis/Inspections/Inspector.cs b/Rubberduck.CodeAnalysis/Inspections/Inspector.cs index 4f4915d1ec..e2892762bc 100644 --- a/Rubberduck.CodeAnalysis/Inspections/Inspector.cs +++ b/Rubberduck.CodeAnalysis/Inspections/Inspector.cs @@ -40,7 +40,7 @@ public Inspector(IConfigurationService configService, II private void ConfigServiceSettingsChanged(object sender, EventArgs e) { - var config = _configService.Load(); + var config = _configService.Read(); UpdateInspectionSeverity(config); } @@ -71,7 +71,7 @@ public async Task> FindIssuesAsync(RubberduckPars var allIssues = new ConcurrentBag(); token.ThrowIfCancellationRequested(); - var config = _configService.Load(); + var config = _configService.Read(); UpdateInspectionSeverity(config); token.ThrowIfCancellationRequested(); diff --git a/Rubberduck.CodeAnalysis/Settings/CodeInspectionConfigProvider.cs b/Rubberduck.CodeAnalysis/Settings/CodeInspectionConfigProvider.cs index e886c7c29a..999b5f680b 100644 --- a/Rubberduck.CodeAnalysis/Settings/CodeInspectionConfigProvider.cs +++ b/Rubberduck.CodeAnalysis/Settings/CodeInspectionConfigProvider.cs @@ -10,38 +10,30 @@ namespace Rubberduck.CodeAnalysis.Settings { public class CodeInspectionConfigProvider : ConfigurationServiceBase { - private readonly CodeInspectionSettings defaultSettings; private readonly HashSet foundInspectionNames; - public CodeInspectionConfigProvider(IPersistanceService persister, IInspectionProvider inspectionProvider) - : base(persister) + public CodeInspectionConfigProvider(IPersistenceService persister, IInspectionProvider inspectionProvider) + : base(persister, new DefaultSettings()) { foundInspectionNames = inspectionProvider.Inspections.Select(inspection => inspection.Name).ToHashSet(); - defaultSettings = new DefaultSettings().Default; // Ignore settings for unknown inspections, for example when using the Experimental attribute - defaultSettings.CodeInspections = defaultSettings.CodeInspections.Where(setting => foundInspectionNames.Contains(setting.Name)).ToHashSet(); + Defaults.Default.CodeInspections = Defaults.Default.CodeInspections.Where(setting => foundInspectionNames.Contains(setting.Name)).ToHashSet(); - var defaultNames = defaultSettings.CodeInspections.Select(x => x.Name); + var defaultNames = Defaults.Default.CodeInspections.Select(x => x.Name); var nonDefaultInspections = inspectionProvider.Inspections.Where(inspection => !defaultNames.Contains(inspection.Name)); - defaultSettings.CodeInspections.UnionWith(nonDefaultInspections.Select(inspection => new CodeInspectionSetting(inspection))); + Defaults.Default.CodeInspections.UnionWith(nonDefaultInspections.Select(inspection => new CodeInspectionSetting(inspection))); } - public override CodeInspectionSettings Load() + public override CodeInspectionSettings Read() { - var loaded = persister.Load(defaultSettings); - - if (loaded == null) - { - return defaultSettings; - } - + var loaded = LoadCacheValue(); // Loaded settings don't contain defaults, so we need to combine user settings with defaults. var settings = new HashSet(); foreach (var loadedSetting in loaded.CodeInspections.Where(inspection => foundInspectionNames.Contains(inspection.Name))) { - var matchingDefaultSetting = defaultSettings.CodeInspections.FirstOrDefault(inspection => inspection.Equals(loadedSetting)); + var matchingDefaultSetting = Defaults.Default.CodeInspections.FirstOrDefault(inspection => inspection.Equals(loadedSetting)); if (matchingDefaultSetting != null) { loadedSetting.InspectionType = matchingDefaultSetting.InspectionType; @@ -49,17 +41,10 @@ public override CodeInspectionSettings Load() settings.Add(loadedSetting); } - - settings.UnionWith(defaultSettings.CodeInspections.Where(inspection => !settings.Contains(inspection))); + settings.UnionWith(Defaults.Default.CodeInspections.Where(inspection => !settings.Contains(inspection))); loaded.CodeInspections = settings; - return loaded; } - - public override CodeInspectionSettings LoadDefaults() - { - return defaultSettings; - } } } diff --git a/Rubberduck.Core/App.cs b/Rubberduck.Core/App.cs index 168b4206b1..0c5401bcc1 100644 --- a/Rubberduck.Core/App.cs +++ b/Rubberduck.Core/App.cs @@ -54,7 +54,7 @@ public App(IMessageBox messageBox, private void _configService_SettingsChanged(object sender, ConfigurationChangedEventArgs e) { - _config = _configService.Load(); + _config = _configService.Read(); _hooks.HookHotkeys(); UpdateLoggingLevel(); @@ -160,7 +160,7 @@ public void Shutdown() private void ApplyCultureConfig() { - _config = _configService.Load(); + _config = _configService.Read(); var currentCulture = Resources.RubberduckUI.Culture; try diff --git a/Rubberduck.Core/AutoComplete/AutoCompleteService.cs b/Rubberduck.Core/AutoComplete/AutoCompleteService.cs index 957941bc8c..4bd1604117 100644 --- a/Rubberduck.Core/AutoComplete/AutoCompleteService.cs +++ b/Rubberduck.Core/AutoComplete/AutoCompleteService.cs @@ -43,7 +43,7 @@ private void InitializeConfig() { if (!_initialized) { - var config = _configService.Load(); + var config = _configService.Read(); ApplyAutoCompleteSettings(config); } } @@ -86,7 +86,7 @@ private void HandleIntelliSenseChanged(object sender, IntelliSenseEventArgs e) private void ConfigServiceSettingsChanged(object sender, ConfigurationChangedEventArgs e) { - var config = _configService.Load(); + var config = _configService.Read(); ApplyAutoCompleteSettings(config); } diff --git a/Rubberduck.Core/Common/RubberduckHooks.cs b/Rubberduck.Core/Common/RubberduckHooks.cs index 85360a1e99..c908de876a 100644 --- a/Rubberduck.Core/Common/RubberduckHooks.cs +++ b/Rubberduck.Core/Common/RubberduckHooks.cs @@ -43,7 +43,7 @@ public void HookHotkeys() Detach(); _hooks.Clear(); - var config = _config.Load(); + var config = _config.Read(); var settings = config.UserSettings.HotkeySettings; foreach (var hotkeySetting in settings.Settings.Where(hotkeySetting => hotkeySetting.IsEnabled)) diff --git a/Rubberduck.Core/Properties/Settings.Designer.cs b/Rubberduck.Core/Properties/Settings.Designer.cs index 8c8481cb14..d818feb763 100644 --- a/Rubberduck.Core/Properties/Settings.Designer.cs +++ b/Rubberduck.Core/Properties/Settings.Designer.cs @@ -42,16 +42,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - R - true - true - false - true - CodePaneRefactorRenameCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + R + true + true + false + true + CodePaneRefactorRenameCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_CodePaneRefactorRenameCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_CodePaneRefactorRenameCommand"])); @@ -60,16 +59,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - F - true - true - false - true - RefactorEncapsulateFieldCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + F + true + true + false + true + RefactorEncapsulateFieldCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_RefactorEncapsulateFieldCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_RefactorEncapsulateFieldCommand"])); @@ -78,16 +76,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - M - true - true - false - true - RefactorExtractMethodCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + M + true + true + false + true + RefactorExtractMethodCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_RefactorExtractMethodCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_RefactorExtractMethodCommand"])); @@ -96,16 +93,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - C - true - true - false - true - RefactorMoveCloserToUsageCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + C + true + true + false + true + RefactorMoveCloserToUsageCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_RefactorMoveCloserToUsageCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_RefactorMoveCloserToUsageCommand"])); @@ -114,16 +110,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - R - true - false - false - true - CodeExplorerCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + R + true + false + false + true + CodeExplorerCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_CodeExplorerCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_CodeExplorerCommand"])); @@ -132,16 +127,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - E - true - true - false - true - ExportAllCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + E + true + true + false + true + ExportAllCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_ExportAllCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_ExportAllCommand"])); @@ -150,16 +144,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - T - true - false - false - true - FindSymbolCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + T + true + false + false + true + FindSymbolCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_FindSymbolCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_FindSymbolCommand"])); @@ -168,16 +161,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - P - true - false - false - true - IndentCurrentProcedureCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + P + true + false + false + true + IndentCurrentProcedureCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_IndentCurrentProcedureCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_IndentCurrentProcedureCommand"])); @@ -186,16 +178,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - I - true - true - false - true - InspectionResultsCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + I + true + true + false + true + InspectionResultsCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_InspectionResultsCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_InspectionResultsCommand"])); @@ -204,16 +195,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - ` - true - false - false - true - ReparseCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + ` + true + false + false + true + ReparseCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_ReparseCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_ReparseCommand"])); @@ -222,16 +212,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - T - true - true - false - true - TestExplorerCommand - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + T + true + true + false + true + TestExplorerCommand +")] public global::Rubberduck.Settings.HotkeySetting DefaultHotkey_TestExplorerCommand { get { return ((global::Rubberduck.Settings.HotkeySetting)(this["DefaultHotkey_TestExplorerCommand"])); @@ -240,8 +229,9 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n ")] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n")] public global::Rubberduck.Settings.ToDoMarker ToDoMarker_ToDo { get { return ((global::Rubberduck.Settings.ToDoMarker)(this["ToDoMarker_ToDo"])); @@ -250,8 +240,9 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n ")] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n")] public global::Rubberduck.Settings.ToDoMarker ToDoMarker_Note { get { return ((global::Rubberduck.Settings.ToDoMarker)(this["ToDoMarker_Note"])); @@ -260,8 +251,9 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n ")] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n")] public global::Rubberduck.Settings.ToDoMarker ToDoMarker_Bug { get { return ((global::Rubberduck.Settings.ToDoMarker)(this["ToDoMarker_Bug"])); @@ -270,17 +262,16 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - false - false - false - false - true - false - false - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + false + false + false + false + true + false + false +")] public global::Rubberduck.Settings.WindowSettings WindowSettings { get { return ((global::Rubberduck.Settings.WindowSettings)(this["WindowSettings"])); @@ -289,21 +280,20 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - - true - true - true - false - false - 10 - false - 0 - false - - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + + true + true + true + false + false + 10 + false + 0 + false + +")] public global::Rubberduck.Settings.GeneralSettings GeneralSettings { get { return ((global::Rubberduck.Settings.GeneralSettings)(this["GeneralSettings"])); @@ -312,16 +302,15 @@ public static Settings Default { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" - - - None - 25 - - - - - ")] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + + None + 25 + + + +")] public global::Rubberduck.Settings.AutoCompleteSettings AutoCompleteSettings { get { return ((global::Rubberduck.Settings.AutoCompleteSettings)(this["AutoCompleteSettings"])); diff --git a/Rubberduck.Core/Properties/Settings.settings b/Rubberduck.Core/Properties/Settings.settings index b713abc203..79344a8730 100644 --- a/Rubberduck.Core/Properties/Settings.settings +++ b/Rubberduck.Core/Properties/Settings.settings @@ -14,193 +14,176 @@ </HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>R</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>CodePaneRefactorRenameCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>R</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>CodePaneRefactorRenameCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>F</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>RefactorEncapsulateFieldCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>F</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>RefactorEncapsulateFieldCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>M</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>RefactorExtractMethodCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>M</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>RefactorExtractMethodCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>C</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>RefactorMoveCloserToUsageCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>C</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>RefactorMoveCloserToUsageCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>R</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>CodeExplorerCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>R</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>false</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>CodeExplorerCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>E</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>ExportAllCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>E</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>ExportAllCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>T</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>FindSymbolCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>T</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>false</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>FindSymbolCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>P</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>IndentCurrentProcedureCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>P</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>false</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>IndentCurrentProcedureCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>I</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>InspectionResultsCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>I</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>InspectionResultsCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>`</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>false</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>ReparseCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>`</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>false</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>ReparseCommand</CommandTypeName> +</HotkeySetting> - - <HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Key1>T</Key1> - <IsEnabled>true</IsEnabled> - <HasShiftModifier>true</HasShiftModifier> - <HasAltModifier>false</HasAltModifier> - <HasCtrlModifier>true</HasCtrlModifier> - <CommandTypeName>TestExplorerCommand</CommandTypeName> - </HotkeySetting> - + <?xml version="1.0" encoding="utf-16"?> +<HotkeySetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Key1>T</Key1> + <IsEnabled>true</IsEnabled> + <HasShiftModifier>true</HasShiftModifier> + <HasAltModifier>false</HasAltModifier> + <HasCtrlModifier>true</HasCtrlModifier> + <CommandTypeName>TestExplorerCommand</CommandTypeName> +</HotkeySetting> - - <ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="TODO" /> - + <?xml version="1.0" encoding="utf-16"?> +<ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="TODO" /> - - <ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="NOTE" /> - + <?xml version="1.0" encoding="utf-16"?> +<ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="NOTE" /> - - <ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="BUG" /> - + <?xml version="1.0" encoding="utf-16"?> +<ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="BUG" /> - - <WindowSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <CodeExplorerVisibleOnStartup>false</CodeExplorerVisibleOnStartup> - <CodeInspectionsVisibleOnStartup>false</CodeInspectionsVisibleOnStartup> - <TestExplorerVisibleOnStartup>false</TestExplorerVisibleOnStartup> - <TodoExplorerVisibleOnStartup>false</TodoExplorerVisibleOnStartup> - <CodeExplorer_SortByName>true</CodeExplorer_SortByName> - <CodeExplorer_SortByCodeOrder>false</CodeExplorer_SortByCodeOrder> - <CodeExplorer_GroupByType>false</CodeExplorer_GroupByType> - </WindowSettings> - + <?xml version="1.0" encoding="utf-16"?> +<WindowSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <CodeExplorerVisibleOnStartup>false</CodeExplorerVisibleOnStartup> + <CodeInspectionsVisibleOnStartup>false</CodeInspectionsVisibleOnStartup> + <TestExplorerVisibleOnStartup>false</TestExplorerVisibleOnStartup> + <TodoExplorerVisibleOnStartup>false</TodoExplorerVisibleOnStartup> + <CodeExplorer_SortByName>true</CodeExplorer_SortByName> + <CodeExplorer_SortByCodeOrder>false</CodeExplorer_SortByCodeOrder> + <CodeExplorer_GroupByType>false</CodeExplorer_GroupByType> +</WindowSettings> - - <GeneralSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <Language Code="en-US" /> - <CanShowSplash>true</CanShowSplash> - <CanCheckVersion>true</CanCheckVersion> - <CompileBeforeParse>true</CompileBeforeParse> - <IsSmartIndenterPrompted>false</IsSmartIndenterPrompted> - <IsAutoSaveEnabled>false</IsAutoSaveEnabled> - <AutoSavePeriod>10</AutoSavePeriod> - <UserEditedLogLevel>false</UserEditedLogLevel> - <MinimumLogLevel>0</MinimumLogLevel> - <SetDpiUnaware>false</SetDpiUnaware> - <EnableExperimentalFeatures /> - </GeneralSettings> - + <?xml version="1.0" encoding="utf-16"?> +<GeneralSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Language Code="en-US" /> + <CanShowSplash>true</CanShowSplash> + <CanCheckVersion>true</CanCheckVersion> + <CompileBeforeParse>true</CompileBeforeParse> + <IsSmartIndenterPrompted>false</IsSmartIndenterPrompted> + <IsAutoSaveEnabled>false</IsAutoSaveEnabled> + <AutoSavePeriod>10</AutoSavePeriod> + <UserEditedLogLevel>false</UserEditedLogLevel> + <MinimumLogLevel>0</MinimumLogLevel> + <SetDpiUnaware>false</SetDpiUnaware> + <EnableExperimentalFeatures /> +</GeneralSettings> - - <AutoCompleteSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" IsEnabled="false"> - <SmartConcat IsEnabled="false"> - <ConcatVbNewLineModifier>None</ConcatVbNewLineModifier> - <ConcatMaxLines>25</ConcatMaxLines> - </SmartConcat> - <SelfClosingPairs IsEnabled="false" /> - <BlockCompletion IsEnabled="false" CompleteOnEnter="false" CompleteOnTab="false" /> - </AutoCompleteSettings> - + <?xml version="1.0" encoding="utf-16"?> +<AutoCompleteSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" IsEnabled="false"> + <SmartConcat IsEnabled="false"> + <ConcatVbNewLineModifier>None</ConcatVbNewLineModifier> + <ConcatMaxLines>25</ConcatMaxLines> + </SmartConcat> + <SelfClosingPairs IsEnabled="false" /> + <BlockCompletion IsEnabled="false" CompleteOnEnter="false" CompleteOnTab="false" /> +</AutoCompleteSettings> \ No newline at end of file diff --git a/Rubberduck.Core/Settings/AutoCompleteConfigProvider.cs b/Rubberduck.Core/Settings/AutoCompleteConfigProvider.cs index 5b179aa642..ee69fcc2ad 100644 --- a/Rubberduck.Core/Settings/AutoCompleteConfigProvider.cs +++ b/Rubberduck.Core/Settings/AutoCompleteConfigProvider.cs @@ -4,22 +4,7 @@ namespace Rubberduck.Settings { public class AutoCompleteConfigProvider : ConfigurationServiceBase { - private readonly AutoCompleteSettings _defaultSettings; - - public AutoCompleteConfigProvider(IPersistanceService persister) - : base(persister) - { - _defaultSettings = new DefaultSettings().Default; - } - - public override AutoCompleteSettings Load() - { - return persister.Load(_defaultSettings) ?? _defaultSettings; - } - - public override AutoCompleteSettings LoadDefaults() - { - return _defaultSettings; - } + public AutoCompleteConfigProvider(IPersistenceService persister) + : base(persister, new DefaultSettings()) { } } } diff --git a/Rubberduck.Core/Settings/ConfigurationLoader.cs b/Rubberduck.Core/Settings/ConfigurationLoader.cs index d746b14924..09dd4677e7 100644 --- a/Rubberduck.Core/Settings/ConfigurationLoader.cs +++ b/Rubberduck.Core/Settings/ConfigurationLoader.cs @@ -42,52 +42,52 @@ public ConfigurationLoader(IConfigurationService generalProvide /// Loads the configuration from Rubberduck.config xml file. /// // marked virtual for Mocking - public virtual Configuration Load() + public virtual Configuration Read() { var config = new Configuration { UserSettings = new UserSettings ( - _generalProvider.Load(), - _hotkeyProvider.Load(), - _autoCompleteProvider.Load(), - _todoProvider.Load(), - _inspectionProvider.Load(), - _unitTestProvider.Load(), - _indenterProvider.Load(), - _windowProvider.Load() + _generalProvider.Read(), + _hotkeyProvider.Read(), + _autoCompleteProvider.Read(), + _todoProvider.Read(), + _inspectionProvider.Read(), + _unitTestProvider.Read(), + _indenterProvider.Read(), + _windowProvider.Read() ) }; return config; } - public Configuration LoadDefaults() + public Configuration ReadDefaults() { return new Configuration { UserSettings = new UserSettings ( - _generalProvider.LoadDefaults(), - _hotkeyProvider.LoadDefaults(), - _autoCompleteProvider.LoadDefaults(), - _todoProvider.LoadDefaults(), - _inspectionProvider.LoadDefaults(), - _unitTestProvider.LoadDefaults(), - _indenterProvider.LoadDefaults(), - _windowProvider.LoadDefaults() + _generalProvider.ReadDefaults(), + _hotkeyProvider.ReadDefaults(), + _autoCompleteProvider.ReadDefaults(), + _todoProvider.ReadDefaults(), + _inspectionProvider.ReadDefaults(), + _unitTestProvider.ReadDefaults(), + _indenterProvider.ReadDefaults(), + _windowProvider.ReadDefaults() ) }; } public void Save(Configuration toSerialize) { - var langChanged = _generalProvider.Load().Language.Code != toSerialize.UserSettings.GeneralSettings.Language.Code; - var oldInspectionSettings = _inspectionProvider.Load().CodeInspections.Select(s => Tuple.Create(s.Name, s.Severity)); + var langChanged = _generalProvider.Read().Language.Code != toSerialize.UserSettings.GeneralSettings.Language.Code; + var oldInspectionSettings = _inspectionProvider.Read().CodeInspections.Select(s => Tuple.Create(s.Name, s.Severity)); var newInspectionSettings = toSerialize.UserSettings.CodeInspectionSettings.CodeInspections.Select(s => Tuple.Create(s.Name, s.Severity)); var inspectionsChanged = !oldInspectionSettings.SequenceEqual(newInspectionSettings); var inspectOnReparse = toSerialize.UserSettings.CodeInspectionSettings.RunInspectionsOnSuccessfulParse; - var oldAutoCompleteSettings = _autoCompleteProvider.Load(); + var oldAutoCompleteSettings = _autoCompleteProvider.Read(); var newAutoCompleteSettings = toSerialize.UserSettings.AutoCompleteSettings; var autoCompletesChanged = oldAutoCompleteSettings.Equals(newAutoCompleteSettings); diff --git a/Rubberduck.Core/Settings/GeneralConfigProvider.cs b/Rubberduck.Core/Settings/GeneralConfigProvider.cs index cb5eb52a15..b5bde9e393 100644 --- a/Rubberduck.Core/Settings/GeneralConfigProvider.cs +++ b/Rubberduck.Core/Settings/GeneralConfigProvider.cs @@ -5,46 +5,37 @@ namespace Rubberduck.Settings { public class GeneralConfigProvider : ConfigurationServiceBase { - private GeneralSettings current; - private readonly GeneralSettings defaultSettings; - public GeneralConfigProvider(IPersistanceService persister) - : base(persister) + public GeneralConfigProvider(IPersistenceService persister) + : base(persister, new DefaultSettings()) { - defaultSettings = new DefaultSettings().Default; } - public override GeneralSettings Load() + public override GeneralSettings Read() { - var updated = persister.Load(defaultSettings) ?? defaultSettings; - - CheckForEventsToRaise(updated); - current = updated; - - return current; - } - - public override GeneralSettings LoadDefaults() - { - return defaultSettings; + var before = CurrentValue; + var updated = LoadCacheValue(); + CheckForEventsToRaise(before, updated); + return updated; } public override void Save(GeneralSettings settings) { - CheckForEventsToRaise(settings); + var before = CurrentValue; + PersistValue(settings); + CheckForEventsToRaise(before, settings); OnSettingsChanged(); - persister.Save(settings); } - private void CheckForEventsToRaise(GeneralSettings other) + private void CheckForEventsToRaise(GeneralSettings before, GeneralSettings after) { - if (current == null || !Equals(other.Language, current.Language)) + if (before == null || !Equals(after.Language, before.Language)) { OnLanguageChanged(EventArgs.Empty); } - if (current == null || - other.IsAutoSaveEnabled != current.IsAutoSaveEnabled || - other.AutoSavePeriod != current.AutoSavePeriod) + if (before == null || + after.IsAutoSaveEnabled != before.IsAutoSaveEnabled || + after.AutoSavePeriod != before.AutoSavePeriod) { OnAutoSaveSettingsChanged(EventArgs.Empty); } diff --git a/Rubberduck.Core/Settings/HotkeyConfigProvider.cs b/Rubberduck.Core/Settings/HotkeyConfigProvider.cs index ffa4b1c738..02dd91aea7 100644 --- a/Rubberduck.Core/Settings/HotkeyConfigProvider.cs +++ b/Rubberduck.Core/Settings/HotkeyConfigProvider.cs @@ -7,18 +7,18 @@ public class HotkeyConfigProvider : ConfigurationServiceBase { private readonly IEnumerable _defaultHotkeys; - public HotkeyConfigProvider(IPersistanceService persister) - : base(persister) + public HotkeyConfigProvider(IPersistenceService persister) + : base(persister, new DefaultSettings()) { _defaultHotkeys = new DefaultSettings().Defaults; } - public override HotkeySettings Load() + public override HotkeySettings Read() { var prototype = new HotkeySettings(_defaultHotkeys); // Loaded settings don't contain defaults, so we need to use the `Settings` property to combine user settings with defaults. - var loaded = persister.Load(prototype); + var loaded = LoadCacheValue(); if (loaded != null) { prototype.Settings = loaded.Settings; @@ -27,7 +27,7 @@ public override HotkeySettings Load() return prototype; } - public override HotkeySettings LoadDefaults() + public override HotkeySettings ReadDefaults() { return new HotkeySettings(_defaultHotkeys); } diff --git a/Rubberduck.Core/Settings/ReferenceConfigProvider.cs b/Rubberduck.Core/Settings/ReferenceConfigProvider.cs index 294287549c..0b97d0b804 100644 --- a/Rubberduck.Core/Settings/ReferenceConfigProvider.cs +++ b/Rubberduck.Core/Settings/ReferenceConfigProvider.cs @@ -19,14 +19,14 @@ public class ReferenceConfigProvider : ConfigurationServiceBase persister, IEnvironmentProvider environment, IVBEEvents events) - : base(persister) + public ReferenceConfigProvider(IPersistenceService persister, IEnvironmentProvider environment, IVBEEvents events) + : base(persister, new DefaultSettings()) { _environment = environment; _events = events; - var settings = Load(); + var settings = Read(); _listening = settings.AddToRecentOnReferenceEvents; if (_listening && _events != null) { @@ -34,13 +34,7 @@ public ReferenceConfigProvider(IPersistanceService persister, } } - public override ReferenceSettings Load() - { - var defaults = LoadDefaults(); - return persister.Load(defaults) ?? defaults; - } - - public override ReferenceSettings LoadDefaults() + public override ReferenceSettings ReadDefaults() { var defaults = new ReferenceSettings { @@ -90,7 +84,7 @@ public override void Save(ReferenceSettings settings) _listening = true; } OnSettingsChanged(); - persister.Save(settings); + PersistValue(settings); } private void ReferenceAddedHandler(object sender, ReferenceEventArgs e) @@ -100,7 +94,7 @@ private void ReferenceAddedHandler(object sender, ReferenceEventArgs e) return; } - var settings = Load(); + var settings = Read(); settings.TrackUsage(e.Reference, e.Type == ReferenceKind.Project ? HostApplication : null); Save(settings); } diff --git a/Rubberduck.Core/Settings/ToDoListConfigProvider.cs b/Rubberduck.Core/Settings/ToDoListConfigProvider.cs index a12a99fd2f..958e7cd2c6 100644 --- a/Rubberduck.Core/Settings/ToDoListConfigProvider.cs +++ b/Rubberduck.Core/Settings/ToDoListConfigProvider.cs @@ -7,19 +7,13 @@ public class ToDoListConfigProvider : ConfigurationServiceBase { private readonly IEnumerable defaultMarkers; - public ToDoListConfigProvider(IPersistanceService persister) - : base(persister) + public ToDoListConfigProvider(IPersistenceService persister) + : base(persister, new DefaultSettings()) { defaultMarkers = new DefaultSettings().Defaults; } - - public override ToDoListSettings Load() - { - var prototype = new ToDoListSettings(defaultMarkers); - return persister.Load(prototype) ?? prototype; - } - - public override ToDoListSettings LoadDefaults() + + public override ToDoListSettings ReadDefaults() { return new ToDoListSettings(defaultMarkers); } diff --git a/Rubberduck.Core/Settings/WindowConfigProvider.cs b/Rubberduck.Core/Settings/WindowConfigProvider.cs index b895bd5e54..02fd82e732 100644 --- a/Rubberduck.Core/Settings/WindowConfigProvider.cs +++ b/Rubberduck.Core/Settings/WindowConfigProvider.cs @@ -4,22 +4,7 @@ namespace Rubberduck.Settings { public class WindowConfigProvider : ConfigurationServiceBase { - private readonly WindowSettings _defaultSettings; - - public WindowConfigProvider(IPersistanceService persister) - : base(persister) - { - _defaultSettings = new DefaultSettings().Default; - } - - public override WindowSettings Load() - { - return persister.Load(_defaultSettings) ?? _defaultSettings; - } - - public override WindowSettings LoadDefaults() - { - return _defaultSettings; - } + public WindowConfigProvider(IPersistenceService persister) + : base(persister, new DefaultSettings()) { } } } diff --git a/Rubberduck.Core/Templates/TemplateFileHandler.cs b/Rubberduck.Core/Templates/TemplateFileHandler.cs index b093b114d9..5c2a38e855 100644 --- a/Rubberduck.Core/Templates/TemplateFileHandler.cs +++ b/Rubberduck.Core/Templates/TemplateFileHandler.cs @@ -16,7 +16,7 @@ public class TemplateFileHandlerProvider : ITemplateFileHandlerProvider { private readonly string _rootPath; - public TemplateFileHandlerProvider(IPersistancePathProvider pathProvider) + public TemplateFileHandlerProvider(IPersistencePathProvider pathProvider) { _rootPath = pathProvider.DataFolderPath("Templates"); } diff --git a/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs b/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs index f883e6b088..f9e836b629 100644 --- a/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs +++ b/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs @@ -116,7 +116,7 @@ public AddRemoveReferencesPresenter Create(ProjectDeclaration project) models.Add(reference.Key, new ReferenceModel(reference.Value)); } - var settings = _settings.Load(); + var settings = _settings.Read(); model = new AddRemoveReferencesModel(_state, project, models.Values, settings); if (AddRemoveReferencesViewModel.HostHasProjects) { diff --git a/Rubberduck.Core/UI/Command/ReparseCommand.cs b/Rubberduck.Core/UI/Command/ReparseCommand.cs index 6820f661e2..cb8b8f85ea 100644 --- a/Rubberduck.Core/UI/Command/ReparseCommand.cs +++ b/Rubberduck.Core/UI/Command/ReparseCommand.cs @@ -37,7 +37,7 @@ public ReparseCommand(IVBE vbe, IConfigurationService settingsP _vbeSettings = vbeSettings; _typeLibApi = typeLibApi; _state = state; - _settings = settingsProvider.Load(); + _settings = settingsProvider.Read(); _messageBox = messageBox; AddToCanExecuteEvaluation(SpecialEvaluateCanExecute); diff --git a/Rubberduck.Core/UI/DockableToolwindowPresenter.cs b/Rubberduck.Core/UI/DockableToolwindowPresenter.cs index 510f507e5d..4b91ff7630 100644 --- a/Rubberduck.Core/UI/DockableToolwindowPresenter.cs +++ b/Rubberduck.Core/UI/DockableToolwindowPresenter.cs @@ -36,7 +36,7 @@ protected DockableToolwindowPresenter(IVBE vbe, IAddIn addin, IDockableUserContr UserControl = view as UserControl; if (settingsProvider != null) { - _settings = settingsProvider.Load(); + _settings = settingsProvider.Read(); } _window = CreateToolWindow(view); } diff --git a/Rubberduck.Core/UI/Inspections/InspectionResultsViewModel.cs b/Rubberduck.Core/UI/Inspections/InspectionResultsViewModel.cs index 9f4ad80397..b1b8ce9e9b 100644 --- a/Rubberduck.Core/UI/Inspections/InspectionResultsViewModel.cs +++ b/Rubberduck.Core/UI/Inspections/InspectionResultsViewModel.cs @@ -121,7 +121,7 @@ public InspectionResultsViewModel( _configService.SettingsChanged += _configService_SettingsChanged; // todo: remove I/O work in constructor - _runInspectionsOnReparse = _configService.Load().UserSettings.CodeInspectionSettings.RunInspectionsOnSuccessfulParse; + _runInspectionsOnReparse = _configService.Read().UserSettings.CodeInspectionSettings.RunInspectionsOnSuccessfulParse; if (CollectionViewSource.GetDefaultView(_results) is ListCollectionView results) { @@ -540,7 +540,7 @@ private void ExecuteDisableInspectionCommand(object parameter) return; } - var config = _configService.Load(); + var config = _configService.Read(); var setting = config.UserSettings.CodeInspectionSettings.CodeInspections.Single(e => e.Name == _selectedInspection.Name); setting.Severity = CodeInspectionSeverity.DoNotShow; diff --git a/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs index 0af68fd23c..497c8ab89b 100644 --- a/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs @@ -25,7 +25,7 @@ public AddRemoveReferencesUserSettingsViewModel( { _provider = provider; _browserFactory = browserFactory; - _clean = _provider.Load(); + _clean = _provider.Read(); TransferSettingsToView(_clean); @@ -118,7 +118,7 @@ public void UpdateConfig(Configuration config) public void SetToDefaults(Configuration config) { - var temp = _provider.LoadDefaults(); + var temp = _provider.ReadDefaults(); var user = new ReferenceSettings(_clean) { RecentReferencesTracked = temp.RecentReferencesTracked, diff --git a/Rubberduck.Core/UI/Settings/AutoCompleteSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/AutoCompleteSettingsViewModel.cs index aed0fd0a13..d8b62efed6 100644 --- a/Rubberduck.Core/UI/Settings/AutoCompleteSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/AutoCompleteSettingsViewModel.cs @@ -9,7 +9,7 @@ namespace Rubberduck.UI.Settings { public sealed class AutoCompleteSettingsViewModel : SettingsViewModelBase, ISettingsViewModel { - public AutoCompleteSettingsViewModel(Configuration config, IFilePersistanceService service) + public AutoCompleteSettingsViewModel(Configuration config, IFilePersistenceService service) : base(service) { TransferSettingsToView(config.UserSettings.AutoCompleteSettings); diff --git a/Rubberduck.Core/UI/Settings/Settings.cs b/Rubberduck.Core/UI/Settings/Settings.cs index d8833f4c22..2504d924e1 100644 --- a/Rubberduck.Core/UI/Settings/Settings.cs +++ b/Rubberduck.Core/UI/Settings/Settings.cs @@ -49,7 +49,7 @@ private static void LoadLanguage() try { - var config = _configService.Load(); + var config = _configService.Read(); _cultureInfo = CultureInfo.GetCultureInfo(config.UserSettings.GeneralSettings.Language.Code); Dispatcher.CurrentDispatcher.Thread.CurrentUICulture = _cultureInfo; diff --git a/Rubberduck.Core/UI/Settings/SettingsControlViewModel.cs b/Rubberduck.Core/UI/Settings/SettingsControlViewModel.cs index 22b80049d8..eb9ab78dad 100644 --- a/Rubberduck.Core/UI/Settings/SettingsControlViewModel.cs +++ b/Rubberduck.Core/UI/Settings/SettingsControlViewModel.cs @@ -101,7 +101,7 @@ private void ResetSettings() return; } - var defaultConfig = _configService.LoadDefaults(); + var defaultConfig = _configService.ReadDefaults(); foreach (var vm in SettingsViews.Select(v => v.Control.ViewModel)) { vm.SetToDefaults(defaultConfig); diff --git a/Rubberduck.Core/UI/Settings/SettingsForm.cs b/Rubberduck.Core/UI/Settings/SettingsForm.cs index 99c8557751..f512ace54b 100644 --- a/Rubberduck.Core/UI/Settings/SettingsForm.cs +++ b/Rubberduck.Core/UI/Settings/SettingsForm.cs @@ -33,7 +33,7 @@ public SettingsForm(IConfigurationService configService, SettingsViews activeView = SettingsViews.GeneralSettings) : this() { - var config = configService.Load(); + var config = configService.Read(); ViewModel = new SettingsControlViewModel(messageBox, configService, config, diff --git a/Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs b/Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs index 66f10e357d..62b81952fb 100644 --- a/Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs +++ b/Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs @@ -225,7 +225,7 @@ public void ExecuteOpenTodoSettingsCommand(object obj) private IEnumerable GetToDoMarkers(CommentNode comment) { - var markers = _configService.Load().UserSettings.ToDoListSettings.ToDoMarkers; + var markers = _configService.Read().UserSettings.ToDoListSettings.ToDoMarkers; return markers.Where(marker => !string.IsNullOrEmpty(marker.Text) && Regex.IsMatch(comment.CommentText, @"\b" + Regex.Escape(marker.Text) + @"\b", RegexOptions.IgnoreCase)) .Select(marker => new ToDoItem(marker.Text, comment)); diff --git a/Rubberduck.Main/Extension.cs b/Rubberduck.Main/Extension.cs index 98aeb50c99..d5726c184e 100644 --- a/Rubberduck.Main/Extension.cs +++ b/Rubberduck.Main/Extension.cs @@ -157,7 +157,7 @@ private void InitializeAddIn() }; var configProvider = new GeneralConfigProvider(configLoader); - _initialSettings = configProvider.Load(); + _initialSettings = configProvider.Read(); if (_initialSettings != null) { try diff --git a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs index 54fbce2cfd..ec81bc4320 100644 --- a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs +++ b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs @@ -787,7 +787,7 @@ private void RegisterSmartIndenter(IWindsorContainer container) .LifestyleSingleton()); container.Register(Component.For>() .UsingFactoryMethod(kernel => (Func)(() => kernel.Resolve>() - .Load().UserSettings.IndenterSettings)) + .Read().UserSettings.IndenterSettings)) .LifestyleTransient()); //todo: clean up this registration } diff --git a/Rubberduck.SettingsProvider/ConfigurationServiceBase.cs b/Rubberduck.SettingsProvider/ConfigurationServiceBase.cs deleted file mode 100644 index 0b5ccb6565..0000000000 --- a/Rubberduck.SettingsProvider/ConfigurationServiceBase.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; - -namespace Rubberduck.SettingsProvider -{ - public class ConfigurationServiceBase : IConfigurationService - where T : class, new() - { - protected readonly IPersistanceService persister; - - public ConfigurationServiceBase(IPersistanceService persister) - { - this.persister = persister; - } - - protected void OnSettingsChanged() - { - var eventArgs = new ConfigurationChangedEventArgs(false, false, false, false); - SettingsChanged?.Invoke(this, eventArgs); - } - - public event EventHandler SettingsChanged; - - public virtual T Load() - { - var defaults = (T) typeof(T).GetConstructor(new Type[] { }).Invoke(new object[] { }); - return persister.Load(defaults) ?? defaults; - } - - public virtual T LoadDefaults() - { - return (T)typeof(T).GetConstructor(new Type[] { }).Invoke(new object[] { }); - } - - public virtual void Save(T settings) - { - persister.Save(settings); - OnSettingsChanged(); - } - } -} diff --git a/Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs b/Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs new file mode 100644 index 0000000000..79f0432bab --- /dev/null +++ b/Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs @@ -0,0 +1,70 @@ +using Rubberduck.Settings; +using System; +using System.Threading; + +namespace Rubberduck.SettingsProvider +{ + public class ConfigurationServiceBase : IConfigurationService + where T : class, new() + { + private readonly IPersistenceService persister; + protected readonly IDefaultSettings Defaults; + + private readonly object valueLock = new object(); + protected T CurrentValue; + + public ConfigurationServiceBase(IPersistenceService persister, IDefaultSettings defaultSettings) + { + this.persister = persister; + Defaults = defaultSettings; + } + + protected void OnSettingsChanged() + { + var eventArgs = new ConfigurationChangedEventArgs(false, false, false, false); + SettingsChanged?.Invoke(this, eventArgs); + } + + public event EventHandler SettingsChanged; + + protected T LoadCacheValue() + { + lock(valueLock) + { + if (CurrentValue == null) + { + T defaults = ReadDefaults(); + T newValue = persister.Load(defaults) ?? defaults; + CurrentValue = newValue; + } + return CurrentValue; + } + } + + public virtual T Read() + { + return LoadCacheValue(); + } + + public virtual T ReadDefaults() + { + return Defaults.Default; + } + + protected void PersistValue(T settings) + { + lock (valueLock) + { + // purge current value + CurrentValue = null; + persister.Save(settings); + } + } + + public virtual void Save(T settings) + { + PersistValue(settings); + OnSettingsChanged(); + } + } +} diff --git a/Rubberduck.SettingsProvider/DefaultSettings.cs b/Rubberduck.SettingsProvider/Facade/DefaultSettings.cs similarity index 59% rename from Rubberduck.SettingsProvider/DefaultSettings.cs rename to Rubberduck.SettingsProvider/Facade/DefaultSettings.cs index c72acc4506..933d6c7803 100644 --- a/Rubberduck.SettingsProvider/DefaultSettings.cs +++ b/Rubberduck.SettingsProvider/Facade/DefaultSettings.cs @@ -4,7 +4,13 @@ namespace Rubberduck.Settings { - public class DefaultSettings + public interface IDefaultSettings + { + IEnumerable Defaults { get; } + T Default { get; } + } + + public class DefaultSettings : IDefaultSettings where S : System.Configuration.ApplicationSettingsBase { public IEnumerable Defaults { get; } @@ -17,5 +23,11 @@ public DefaultSettings() Defaults = properties.Select(prop => prop.GetValue(defaultInstance)).Cast(); } + + public DefaultSettings(S settingsInstance) + { + var properties = typeof(S).GetProperties().Where(prop => prop.PropertyType == typeof(T)); + Defaults = properties.Select(prop => prop.GetValue(settingsInstance)).Cast(); + } } } diff --git a/Rubberduck.SettingsProvider/IConfigProvider.cs b/Rubberduck.SettingsProvider/Facade/IConfigProvider.cs similarity index 95% rename from Rubberduck.SettingsProvider/IConfigProvider.cs rename to Rubberduck.SettingsProvider/Facade/IConfigProvider.cs index 401fd55ed3..68cca3835b 100644 --- a/Rubberduck.SettingsProvider/IConfigProvider.cs +++ b/Rubberduck.SettingsProvider/Facade/IConfigProvider.cs @@ -4,8 +4,8 @@ namespace Rubberduck.SettingsProvider { public interface IConfigurationService { - T Load(); - T LoadDefaults(); + T Read(); + T ReadDefaults(); void Save(T settings); diff --git a/Rubberduck.SettingsProvider/IPersistable.cs b/Rubberduck.SettingsProvider/IPersistable.cs deleted file mode 100644 index a41117e748..0000000000 --- a/Rubberduck.SettingsProvider/IPersistable.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Rubberduck.SettingsProvider -{ - public interface IPersistable where T : class - { - void Persist(string path, T tree); - T Load(string path); - } -} \ No newline at end of file diff --git a/Rubberduck.SettingsProvider/IPersistancePathProvider.cs b/Rubberduck.SettingsProvider/Persistence/IPersistencePathProvider.cs similarity index 75% rename from Rubberduck.SettingsProvider/IPersistancePathProvider.cs rename to Rubberduck.SettingsProvider/Persistence/IPersistencePathProvider.cs index 72e1100d43..6dd5e59e85 100644 --- a/Rubberduck.SettingsProvider/IPersistancePathProvider.cs +++ b/Rubberduck.SettingsProvider/Persistence/IPersistencePathProvider.cs @@ -1,6 +1,6 @@ namespace Rubberduck.SettingsProvider { - public interface IPersistancePathProvider + public interface IPersistencePathProvider { string DataRootPath { get; } string DataFolderPath(string folderName); diff --git a/Rubberduck.SettingsProvider/IPersistanceService.cs b/Rubberduck.SettingsProvider/Persistence/IPersistenceService.cs similarity index 67% rename from Rubberduck.SettingsProvider/IPersistanceService.cs rename to Rubberduck.SettingsProvider/Persistence/IPersistenceService.cs index d1ff9afbe8..56a00e6d16 100644 --- a/Rubberduck.SettingsProvider/IPersistanceService.cs +++ b/Rubberduck.SettingsProvider/Persistence/IPersistenceService.cs @@ -1,12 +1,12 @@ namespace Rubberduck.SettingsProvider { - public interface IPersistanceService where T : new() + public interface IPersistenceService where T : new() { void Save(T settings, string nonDefaultFilePath = null); T Load(T settings, string nonDefaultFilePath = null); } - public interface IFilePersistanceService : IPersistanceService where T : new() + public interface IFilePersistenceService : IPersistenceService where T : new() { string FilePath { get; set; } } diff --git a/Rubberduck.SettingsProvider/PersistancePathProvider.cs b/Rubberduck.SettingsProvider/Persistence/PersistencePathProvider.cs similarity index 56% rename from Rubberduck.SettingsProvider/PersistancePathProvider.cs rename to Rubberduck.SettingsProvider/Persistence/PersistencePathProvider.cs index c8e6bb054b..4e72d08562 100644 --- a/Rubberduck.SettingsProvider/PersistancePathProvider.cs +++ b/Rubberduck.SettingsProvider/Persistence/PersistencePathProvider.cs @@ -3,17 +3,17 @@ namespace Rubberduck.SettingsProvider { - public class PersistancePathProvider : IPersistancePathProvider + internal class PersistencePathProvider : IPersistencePathProvider { - private static readonly Lazy LazyInstance; + private static readonly Lazy LazyInstance; - static PersistancePathProvider() + static PersistencePathProvider() { - LazyInstance = new Lazy(() => new PersistancePathProvider()); + LazyInstance = new Lazy(() => new PersistencePathProvider()); } // Disallow instancing of the class except via static method - private PersistancePathProvider() { } + private PersistencePathProvider() { } public string DataRootPath => Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @@ -24,6 +24,6 @@ public string DataFolderPath(string folderName) return Path.Combine(DataRootPath, folderName); } - public static IPersistancePathProvider Instance => LazyInstance.Value; + public static IPersistencePathProvider Instance => LazyInstance.Value; } } diff --git a/Rubberduck.SettingsProvider/XmlContractPersistanceService.cs b/Rubberduck.SettingsProvider/Persistence/XmlContractPersistenceService.cs similarity index 92% rename from Rubberduck.SettingsProvider/XmlContractPersistanceService.cs rename to Rubberduck.SettingsProvider/Persistence/XmlContractPersistenceService.cs index 058dd1d7b6..bb0c19bd35 100644 --- a/Rubberduck.SettingsProvider/XmlContractPersistanceService.cs +++ b/Rubberduck.SettingsProvider/Persistence/XmlContractPersistenceService.cs @@ -5,7 +5,7 @@ namespace Rubberduck.SettingsProvider { - public class XmlContractPersistanceService : XmlPersistanceServiceBase where T : class, IEquatable, new() + internal class XmlContractPersistenceService : XmlPersistenceServiceBase where T : class, IEquatable, new() { private const string DefaultConfigFile = "rubberduck.references"; @@ -15,7 +15,7 @@ namespace Rubberduck.SettingsProvider RootNamespace = XmlDictionaryString.Empty }; - public XmlContractPersistanceService(IPersistancePathProvider pathProvider) : base(pathProvider) { } + public XmlContractPersistenceService(IPersistencePathProvider pathProvider) : base(pathProvider) { } private string _filePath; public override string FilePath diff --git a/Rubberduck.SettingsProvider/XmlPersistanceService.cs b/Rubberduck.SettingsProvider/Persistence/XmlPersistenceService.cs similarity index 94% rename from Rubberduck.SettingsProvider/XmlPersistanceService.cs rename to Rubberduck.SettingsProvider/Persistence/XmlPersistenceService.cs index 51aae670cd..b5f5928f9d 100644 --- a/Rubberduck.SettingsProvider/XmlPersistanceService.cs +++ b/Rubberduck.SettingsProvider/Persistence/XmlPersistenceService.cs @@ -7,10 +7,10 @@ namespace Rubberduck.SettingsProvider { - public class XmlPersistanceService : XmlPersistanceServiceBase + internal class XmlPersistenceService : XmlPersistenceServiceBase where T : class, IEquatable, new() { - public XmlPersistanceService(IPersistancePathProvider pathProvider) : base(pathProvider) { } + public XmlPersistenceService(IPersistencePathProvider pathProvider) : base(pathProvider) { } public override T Load(T toDeserialize, string nonDefaultFilePath = null) { diff --git a/Rubberduck.SettingsProvider/XmlPersistanceServiceBase.cs b/Rubberduck.SettingsProvider/Persistence/XmlPersistenceServiceBase.cs similarity index 93% rename from Rubberduck.SettingsProvider/XmlPersistanceServiceBase.cs rename to Rubberduck.SettingsProvider/Persistence/XmlPersistenceServiceBase.cs index 0cabdd4fb7..4eb43c7e97 100644 --- a/Rubberduck.SettingsProvider/XmlPersistanceServiceBase.cs +++ b/Rubberduck.SettingsProvider/Persistence/XmlPersistenceServiceBase.cs @@ -9,7 +9,7 @@ // ReSharper disable StaticMemberInGenericType namespace Rubberduck.SettingsProvider { - public abstract class XmlPersistanceServiceBase : IFilePersistanceService where T : class, IEquatable, new() + internal abstract class XmlPersistenceServiceBase : IFilePersistenceService where T : class, IEquatable, new() { private const string DefaultConfigFile = "rubberduck.config"; @@ -28,7 +28,7 @@ namespace Rubberduck.SettingsProvider protected T Cached { get; set; } - protected XmlPersistanceServiceBase(IPersistancePathProvider pathProvider) + protected XmlPersistenceServiceBase(IPersistencePathProvider pathProvider) { RootPath = pathProvider.DataRootPath; } diff --git a/Rubberduck.SettingsProvider/Properties/AssemblyInfo.cs b/Rubberduck.SettingsProvider/Properties/AssemblyInfo.cs index 5307bbae72..ac1ad8ea83 100644 --- a/Rubberduck.SettingsProvider/Properties/AssemblyInfo.cs +++ b/Rubberduck.SettingsProvider/Properties/AssemblyInfo.cs @@ -3,6 +3,9 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("RubberduckTests")] +[assembly: InternalsVisibleTo("Rubberduck")] +// Moq needs this to access the types +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM diff --git a/Rubberduck.SmartIndenter/IndenterConfigProvider.cs b/Rubberduck.SmartIndenter/IndenterConfigProvider.cs index c1c4d23800..7ff8e62b92 100644 --- a/Rubberduck.SmartIndenter/IndenterConfigProvider.cs +++ b/Rubberduck.SmartIndenter/IndenterConfigProvider.cs @@ -14,13 +14,13 @@ public IndenterConfigProvider(IPersistanceService persister) public event EventHandler SettingsChanged; - public IndenterSettings Load() + public IndenterSettings Read() { var prototype = new IndenterSettings(false); return _persister.Load(prototype) ?? prototype; } - public IndenterSettings LoadDefaults() + public IndenterSettings ReadDefaults() { return new IndenterSettings(false); } diff --git a/Rubberduck.UnitTesting/CodeGeneration/TestCodeGenerator.cs b/Rubberduck.UnitTesting/CodeGeneration/TestCodeGenerator.cs index c9ad06a9b5..5fe7a20e1e 100644 --- a/Rubberduck.UnitTesting/CodeGeneration/TestCodeGenerator.cs +++ b/Rubberduck.UnitTesting/CodeGeneration/TestCodeGenerator.cs @@ -62,7 +62,7 @@ private void AddTestModule(IVBProject project, Declaration stubSource) return; } - var settings = _settings.Load(); + var settings = _settings.Read(); AddReferenceIfNeeded(project, settings); @@ -133,7 +133,7 @@ private void AddReferenceIfNeeded(IVBProject project, IUnitTestSettings settings private string GetNewTestModuleCode(IVBComponent component) { - var settings = _settings.Load(); + var settings = _settings.Read(); var baseModule = (GetBaseTestModule(settings) + Environment.NewLine); if (settings.DefaultTestStubInNewModule) @@ -162,7 +162,7 @@ private string GetBaseTestModule(UnitTestSettings settings = null) { if (settings is null) { - settings = _settings.Load(); + settings = _settings.Read(); } string declaration; diff --git a/Rubberduck.UnitTesting/Rubberduck.UnitTesting.csproj b/Rubberduck.UnitTesting/Rubberduck.UnitTesting.csproj index b516fe7557..725c06497e 100644 --- a/Rubberduck.UnitTesting/Rubberduck.UnitTesting.csproj +++ b/Rubberduck.UnitTesting/Rubberduck.UnitTesting.csproj @@ -30,4 +30,17 @@ 4.5.0 + + + True + True + UnitTestDefaults.settings + + + + + SettingsSingleFileGenerator + UnitTestDefaults.Designer.cs + + \ No newline at end of file diff --git a/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs b/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs index 6bb7a8ff1e..846632c660 100644 --- a/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs +++ b/Rubberduck.UnitTesting/Settings/UnitTestConfigProvider.cs @@ -5,22 +5,9 @@ namespace Rubberduck.UnitTesting.Settings { public class UnitTestConfigProvider : ConfigurationServiceBase { - private readonly UnitTestSettings defaultSettings; - - public UnitTestConfigProvider(IPersistanceService persister) - : base(persister) - { - defaultSettings = new DefaultSettings().Default; - } - - public override UnitTestSettings Load() - { - return persister.Load(defaultSettings) ?? defaultSettings; - } - - public override UnitTestSettings LoadDefaults() + public UnitTestConfigProvider(IPersistenceService persister) + : base(persister, new DefaultSettings()) { - return defaultSettings; } } } diff --git a/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs b/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs index b592843f28..c8741d823d 100644 --- a/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs +++ b/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs @@ -103,8 +103,8 @@ public static Mock> GetMockReferenceSet { var output = new Mock>(); - output.Setup(m => m.Load()).Returns(() => settings ?? GetDefaultReferenceSettings()); - output.Setup(m => m.LoadDefaults()).Returns(GetDefaultReferenceSettings); + output.Setup(m => m.Read()).Returns(() => settings ?? GetDefaultReferenceSettings()); + output.Setup(m => m.ReadDefaults()).Returns(GetDefaultReferenceSettings); output.Setup(m => m.Save(It.IsAny())); return output; diff --git a/RubberduckTests/CodeExplorer/MockedCodeExplorer.cs b/RubberduckTests/CodeExplorer/MockedCodeExplorer.cs index 9950715001..0b4948aa8a 100644 --- a/RubberduckTests/CodeExplorer/MockedCodeExplorer.cs +++ b/RubberduckTests/CodeExplorer/MockedCodeExplorer.cs @@ -42,10 +42,10 @@ internal class MockedCodeExplorer : IDisposable public MockedCodeExplorer() { - _generalSettingsProvider.Setup(s => s.Load()).Returns(_generalSettings); - _windowSettingsProvider.Setup(s => s.Load()).Returns(WindowSettings); - _configLoader.Setup(c => c.Load()).Returns(GetDefaultUnitTestConfig()); - _unitTestSettingsProvider.Setup(s => s.Load()) + _generalSettingsProvider.Setup(s => s.Read()).Returns(_generalSettings); + _windowSettingsProvider.Setup(s => s.Read()).Returns(WindowSettings); + _configLoader.Setup(c => c.Read()).Returns(GetDefaultUnitTestConfig()); + _unitTestSettingsProvider.Setup(s => s.Read()) .Returns(new UnitTestSettings(BindingMode.LateBinding,AssertMode.StrictAssert, true, true, false)); _uiDispatcher.Setup(m => m.Invoke(It.IsAny())).Callback((Action argument) => argument.Invoke()); diff --git a/RubberduckTests/Commands/UnitTestCommandTests.cs b/RubberduckTests/Commands/UnitTestCommandTests.cs index 5d7e141ebd..a7842ee075 100644 --- a/RubberduckTests/Commands/UnitTestCommandTests.cs +++ b/RubberduckTests/Commands/UnitTestCommandTests.cs @@ -462,7 +462,7 @@ private ITestCodeGenerator ArrangeCodeGenerator(IVBE vbe, RubberduckParserState var settings = new Mock>(); var arguments = new Mock(); - settings.Setup(s => s.Load()).Returns(new UnitTestSettings(BindingMode.LateBinding, AssertMode.StrictAssert, true, true, false)); + settings.Setup(s => s.Read()).Returns(new UnitTestSettings(BindingMode.LateBinding, AssertMode.StrictAssert, true, true, false)); arguments.Setup(m => m.UserDefinedCompilationArguments(It.IsAny())) .Returns(new Dictionary()); diff --git a/RubberduckTests/Inspections/InspectionsHelper.cs b/RubberduckTests/Inspections/InspectionsHelper.cs index 64ae08132d..bb932b03c4 100644 --- a/RubberduckTests/Inspections/InspectionsHelper.cs +++ b/RubberduckTests/Inspections/InspectionsHelper.cs @@ -22,7 +22,7 @@ public static IConfigurationService GetSettings(IInspect { var settings = new Mock>(); var config = GetTestConfig(inspection); - settings.Setup(x => x.Load()).Returns(config); + settings.Setup(x => x.Read()).Returns(config); return settings.Object; } diff --git a/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs b/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs index fa91d520a9..d9a798cd07 100644 --- a/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs +++ b/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs @@ -25,7 +25,7 @@ public void SettingsForFoundInspectionsAreAddedToDefaultSettings() var configProvider = new CodeInspectionConfigProvider(null, inspectionProviderMock.Object); - var defaults = configProvider.LoadDefaults(); + var defaults = configProvider.ReadDefaults(); Assert.NotNull(defaults.GetSetting(inspectionMock.Object.GetType())); } @@ -50,8 +50,8 @@ public void UserSettingsAreCombinedWithDefaultSettings() var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); - var settings = configProvider.Load().CodeInspections; - var defaultSettings = configProvider.LoadDefaults().CodeInspections; + var settings = configProvider.Read().CodeInspections; + var defaultSettings = configProvider.ReadDefaults().CodeInspections; Assert.Contains(userSetting, settings.ToArray()); Assert.IsTrue(defaultSettings.All(s => settings.Contains(s))); @@ -76,9 +76,9 @@ public void UserSettingsAreNotDuplicatedWithDefaultSettings() persisterMock.Setup(persister => persister.Load(It.IsAny(), null)).Returns(userSettings); var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); - var settings = configProvider.Load().CodeInspections; + var settings = configProvider.Read().CodeInspections; - Assert.AreEqual(configProvider.LoadDefaults().CodeInspections.Count, settings.Count); + Assert.AreEqual(configProvider.ReadDefaults().CodeInspections.Count, settings.Count); } @@ -102,7 +102,7 @@ public void UserSettingForUnknownInspectionIsIgnored() var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); - var settings = configProvider.Load().CodeInspections; + var settings = configProvider.Read().CodeInspections; Assert.IsNull(settings.FirstOrDefault(setting => setting.Name == "Bar")); } diff --git a/RubberduckTests/Settings/GeneralSettingsTests.cs b/RubberduckTests/Settings/GeneralSettingsTests.cs index 5d6df91715..86f85ef3fd 100644 --- a/RubberduckTests/Settings/GeneralSettingsTests.cs +++ b/RubberduckTests/Settings/GeneralSettingsTests.cs @@ -178,8 +178,8 @@ public void UserSettingsLoadedUsingDefaultWhenMissingFile() persisterMock.CallBase = true; var configProvider = new GeneralConfigProvider(persisterMock.Object); - var settings = configProvider.Load(); - var defaultSettings = configProvider.LoadDefaults(); + var settings = configProvider.Read(); + var defaultSettings = configProvider.ReadDefaults(); Assert.AreEqual(defaultSettings, settings); } diff --git a/RubberduckTests/TodoExplorer/TodoExplorerTests.cs b/RubberduckTests/TodoExplorer/TodoExplorerTests.cs index a5050705d1..44a6311c13 100644 --- a/RubberduckTests/TodoExplorer/TodoExplorerTests.cs +++ b/RubberduckTests/TodoExplorer/TodoExplorerTests.cs @@ -211,7 +211,7 @@ public void RemoveRemovesComment() private IConfigurationService GetConfigService(string[] markers) { var configService = new Mock>(); - configService.Setup(c => c.Load()).Returns(GetTodoConfig(markers)); + configService.Setup(c => c.Read()).Returns(GetTodoConfig(markers)); return configService.Object; } From 3ec19e69bcfca72c68b67a5f4a0bc9b2876a61c3 Mon Sep 17 00:00:00 2001 From: Vogel612 Date: Mon, 15 Apr 2019 20:09:11 +0200 Subject: [PATCH 4/5] Fix Persistance -> Persistence typo --- .../Concrete/HungarianNotationInspection.cs | 4 ++-- .../Concrete/UseMeaningfulNameInspection.cs | 4 ++-- .../QuickFixes/AddIdentifierToWhiteListQuickFix.cs | 4 ++-- .../AddRemoveReferencesUserSettingsViewModel.cs | 2 +- .../UI/Settings/GeneralSettingsViewModel.cs | 6 +++--- .../UI/Settings/IndenterSettingsViewModel.cs | 2 +- .../UI/Settings/InspectionSettingsViewModel.cs | 2 +- Rubberduck.Core/UI/Settings/SettingsViewModelBase.cs | 4 ++-- Rubberduck.Core/UI/Settings/TodoSettingsViewModel.cs | 2 +- .../UI/Settings/UnitTestSettingsViewModel.cs | 2 +- Rubberduck.Core/UI/Settings/WindowSettingsViewModel.cs | 2 +- Rubberduck.Main/Extension.cs | 4 ++-- Rubberduck.Main/Root/RubberduckIoCInstaller.cs | 10 +++++----- .../ComReflection/XmlComProjectSerializer.cs | 2 +- Rubberduck.SmartIndenter/IndenterConfigProvider.cs | 4 ++-- .../Inspections/UseMeaningfulNameInspectionTests.cs | 4 ++-- .../Settings/CodeInspectionConfigProviderTests.cs | 6 +++--- RubberduckTests/Settings/GeneralSettingsTests.cs | 4 ++-- 18 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs b/Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs index 2fe5357468..476f45dfa7 100644 --- a/Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs +++ b/Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs @@ -104,9 +104,9 @@ public sealed class HungarianNotationInspection : InspectionBase #endregion - private readonly IPersistanceService _settings; + private readonly IPersistenceService _settings; - public HungarianNotationInspection(RubberduckParserState state, IPersistanceService settings) + public HungarianNotationInspection(RubberduckParserState state, IPersistenceService settings) : base(state) { _settings = settings; diff --git a/Rubberduck.CodeAnalysis/Inspections/Concrete/UseMeaningfulNameInspection.cs b/Rubberduck.CodeAnalysis/Inspections/Concrete/UseMeaningfulNameInspection.cs index fe16f062ad..8d5184a42c 100644 --- a/Rubberduck.CodeAnalysis/Inspections/Concrete/UseMeaningfulNameInspection.cs +++ b/Rubberduck.CodeAnalysis/Inspections/Concrete/UseMeaningfulNameInspection.cs @@ -17,9 +17,9 @@ namespace Rubberduck.Inspections.Concrete { public sealed class UseMeaningfulNameInspection : InspectionBase { - private readonly IPersistanceService _settings; + private readonly IPersistenceService _settings; - public UseMeaningfulNameInspection(RubberduckParserState state, IPersistanceService settings) + public UseMeaningfulNameInspection(RubberduckParserState state, IPersistenceService settings) : base(state) { _settings = settings; diff --git a/Rubberduck.CodeAnalysis/QuickFixes/AddIdentifierToWhiteListQuickFix.cs b/Rubberduck.CodeAnalysis/QuickFixes/AddIdentifierToWhiteListQuickFix.cs index 1598a232fe..0673977924 100644 --- a/Rubberduck.CodeAnalysis/QuickFixes/AddIdentifierToWhiteListQuickFix.cs +++ b/Rubberduck.CodeAnalysis/QuickFixes/AddIdentifierToWhiteListQuickFix.cs @@ -10,9 +10,9 @@ namespace Rubberduck.Inspections.QuickFixes { public sealed class AddIdentifierToWhiteListQuickFix : QuickFixBase { - private readonly IPersistanceService _settings; + private readonly IPersistenceService _settings; - public AddIdentifierToWhiteListQuickFix(IPersistanceService settings) + public AddIdentifierToWhiteListQuickFix(IPersistenceService settings) : base(typeof(HungarianNotationInspection), typeof(UseMeaningfulNameInspection)) { _settings = settings; diff --git a/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs index 497c8ab89b..c03e131b50 100644 --- a/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs @@ -20,7 +20,7 @@ public class AddRemoveReferencesUserSettingsViewModel : SettingsViewModelBase provider, IFileSystemBrowserFactory browserFactory, - IFilePersistanceService service) + IFilePersistenceService service) : base(service) { _provider = provider; diff --git a/Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs index 7f1888d226..b38c22dd9b 100644 --- a/Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs @@ -26,7 +26,7 @@ public sealed class GeneralSettingsViewModel : SettingsViewModelBase _hotkeyService; + private readonly IFilePersistenceService _hotkeyService; private bool _indenterPrompted; private readonly IReadOnlyList _experimentalFeatureTypes; @@ -37,8 +37,8 @@ public GeneralSettingsViewModel( IMessageBox messageBox, IVbeSettings vbeSettings, IExperimentalTypesProvider experimentalTypesProvider, - IFilePersistanceService service, - IFilePersistanceService hotkeyService) + IFilePersistenceService service, + IFilePersistenceService hotkeyService) : base(service) { _operatingSystem = operatingSystem; diff --git a/Rubberduck.Core/UI/Settings/IndenterSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/IndenterSettingsViewModel.cs index 258194bd87..4b751a8d38 100644 --- a/Rubberduck.Core/UI/Settings/IndenterSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/IndenterSettingsViewModel.cs @@ -12,7 +12,7 @@ namespace Rubberduck.UI.Settings { public sealed class IndenterSettingsViewModel : SettingsViewModelBase, ISettingsViewModel { - public IndenterSettingsViewModel(Configuration config, IFilePersistanceService service) + public IndenterSettingsViewModel(Configuration config, IFilePersistenceService service) : base(service) { _alignCommentsWithCode = config.UserSettings.IndenterSettings.AlignCommentsWithCode; diff --git a/Rubberduck.Core/UI/Settings/InspectionSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/InspectionSettingsViewModel.cs index b4ae454525..d0573d0479 100644 --- a/Rubberduck.Core/UI/Settings/InspectionSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/InspectionSettingsViewModel.cs @@ -17,7 +17,7 @@ namespace Rubberduck.UI.Settings { public sealed class InspectionSettingsViewModel : SettingsViewModelBase, ISettingsViewModel { - public InspectionSettingsViewModel(Configuration config, IFilePersistanceService service) + public InspectionSettingsViewModel(Configuration config, IFilePersistenceService service) : base(service) { InspectionSettings = new ListCollectionView( diff --git a/Rubberduck.Core/UI/Settings/SettingsViewModelBase.cs b/Rubberduck.Core/UI/Settings/SettingsViewModelBase.cs index 68138e1d64..7ef1eb09f3 100644 --- a/Rubberduck.Core/UI/Settings/SettingsViewModelBase.cs +++ b/Rubberduck.Core/UI/Settings/SettingsViewModelBase.cs @@ -8,9 +8,9 @@ namespace Rubberduck.UI.Settings public abstract class SettingsViewModelBase : ViewModelBase where TSettings : new() { - protected readonly IFilePersistanceService Service; + protected readonly IFilePersistenceService Service; - protected SettingsViewModelBase(IFilePersistanceService service) + protected SettingsViewModelBase(IFilePersistenceService service) { Service = service; } diff --git a/Rubberduck.Core/UI/Settings/TodoSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/TodoSettingsViewModel.cs index 53236ead92..7c8f3af391 100644 --- a/Rubberduck.Core/UI/Settings/TodoSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/TodoSettingsViewModel.cs @@ -11,7 +11,7 @@ namespace Rubberduck.UI.Settings { public sealed class TodoSettingsViewModel : SettingsViewModelBase, ISettingsViewModel { - public TodoSettingsViewModel(Configuration config, IFilePersistanceService service) + public TodoSettingsViewModel(Configuration config, IFilePersistenceService service) : base(service) { TodoSettings = new ObservableCollection(config.UserSettings.ToDoListSettings.ToDoMarkers); diff --git a/Rubberduck.Core/UI/Settings/UnitTestSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/UnitTestSettingsViewModel.cs index 4f6d7a676b..be410e47ea 100644 --- a/Rubberduck.Core/UI/Settings/UnitTestSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/UnitTestSettingsViewModel.cs @@ -9,7 +9,7 @@ namespace Rubberduck.UI.Settings { public sealed class UnitTestSettingsViewModel : SettingsViewModelBase, ISettingsViewModel { - public UnitTestSettingsViewModel(Configuration config, IFilePersistanceService service) + public UnitTestSettingsViewModel(Configuration config, IFilePersistenceService service) : base(service) { BindingMode = config.UserSettings.UnitTestSettings.BindingMode; diff --git a/Rubberduck.Core/UI/Settings/WindowSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/WindowSettingsViewModel.cs index ef9432d6d5..c6e4ad4680 100644 --- a/Rubberduck.Core/UI/Settings/WindowSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/WindowSettingsViewModel.cs @@ -8,7 +8,7 @@ namespace Rubberduck.UI.Settings { public sealed class WindowSettingsViewModel : SettingsViewModelBase, ISettingsViewModel { - public WindowSettingsViewModel(Configuration config, IFilePersistanceService service) + public WindowSettingsViewModel(Configuration config, IFilePersistenceService service) : base(service) { CodeExplorerVisibleOnStartup = config.UserSettings.WindowSettings.CodeExplorerVisibleOnStartup; diff --git a/Rubberduck.Main/Extension.cs b/Rubberduck.Main/Extension.cs index d5726c184e..93471e50f2 100644 --- a/Rubberduck.Main/Extension.cs +++ b/Rubberduck.Main/Extension.cs @@ -148,8 +148,8 @@ private void InitializeAddIn() return; } - var pathProvider = PersistancePathProvider.Instance; - var configLoader = new XmlPersistanceService(pathProvider) + var pathProvider = PersistencePathProvider.Instance; + var configLoader = new XmlPersistenceService(pathProvider) { FilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), diff --git a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs index ec81bc4320..76cd5d10cf 100644 --- a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs +++ b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs @@ -251,12 +251,12 @@ private void RegisterConfiguration(IWindsorContainer container, Assembly[] assem container.Register(Component.For() .ImplementedBy() .LifestyleTransient()); - container.Register(Component.For(typeof(IPersistanceService<>), typeof(IFilePersistanceService<>)) - .ImplementedBy(typeof(XmlPersistanceService<>)) + container.Register(Component.For(typeof(IPersistenceService<>), typeof(IFilePersistenceService<>)) + .ImplementedBy(typeof(XmlPersistenceService<>)) .LifestyleSingleton()); - container.Register(Component.For(typeof(IPersistanceService), typeof(IFilePersistanceService<>)) - .ImplementedBy(typeof(XmlContractPersistanceService<>)) + container.Register(Component.For(typeof(IPersistenceService), typeof(IFilePersistenceService<>)) + .ImplementedBy(typeof(XmlContractPersistenceService<>)) .LifestyleSingleton()); container.Register(Component.For>() @@ -991,7 +991,7 @@ private void RegisterInstances(IWindsorContainer container) container.Register(Component.For().Instance(UiContextProvider.Instance()).LifestyleSingleton()); container.Register(Component.For().Instance(VBEEvents.Initialize(_vbe)).LifestyleSingleton()); container.Register(Component.For().Instance(_vbe.TempSourceFileHandler).LifestyleSingleton()); - container.Register(Component.For().Instance(PersistancePathProvider.Instance).LifestyleSingleton()); + container.Register(Component.For().Instance(PersistencePathProvider.Instance).LifestyleSingleton()); container.Register(Component.For().Instance(_vbeNativeApi).LifestyleSingleton()); } } diff --git a/Rubberduck.Parsing/ComReflection/XmlComProjectSerializer.cs b/Rubberduck.Parsing/ComReflection/XmlComProjectSerializer.cs index 5b1e6a9986..87f01a846b 100644 --- a/Rubberduck.Parsing/ComReflection/XmlComProjectSerializer.cs +++ b/Rubberduck.Parsing/ComReflection/XmlComProjectSerializer.cs @@ -12,7 +12,7 @@ public class XmlComProjectSerializer : IComProjectSerializationProvider { public readonly string DefaultSerializationPath; - public XmlComProjectSerializer(IPersistancePathProvider pathProvider) + public XmlComProjectSerializer(IPersistencePathProvider pathProvider) { DefaultSerializationPath = pathProvider.DataFolderPath("Declarations"); } diff --git a/Rubberduck.SmartIndenter/IndenterConfigProvider.cs b/Rubberduck.SmartIndenter/IndenterConfigProvider.cs index 7ff8e62b92..35d4c7be49 100644 --- a/Rubberduck.SmartIndenter/IndenterConfigProvider.cs +++ b/Rubberduck.SmartIndenter/IndenterConfigProvider.cs @@ -5,9 +5,9 @@ namespace Rubberduck.SmartIndenter { public class IndenterConfigProvider : IConfigurationService { - private readonly IPersistanceService _persister; + private readonly IPersistenceService _persister; - public IndenterConfigProvider(IPersistanceService persister) + public IndenterConfigProvider(IPersistenceService persister) { _persister = persister; } diff --git a/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs b/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs index 627dae65c2..8fb78b40c9 100644 --- a/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs +++ b/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs @@ -172,9 +172,9 @@ private void AssertVbaFragmentYieldsExpectedInspectionResultCount(string inputCo } } - internal static Mock> GetInspectionSettings() + internal static Mock> GetInspectionSettings() { - var settings = new Mock>(); + var settings = new Mock>(); settings.Setup(s => s.Load(It.IsAny(), null)) .Returns(new CodeInspectionSettings(Enumerable.Empty(), new[] { diff --git a/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs b/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs index d9a798cd07..6c1aa4f5b2 100644 --- a/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs +++ b/RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs @@ -45,7 +45,7 @@ public void UserSettingsAreCombinedWithDefaultSettings() CodeInspections = new HashSet(new[] { userSetting }) }; - var persisterMock = new Mock>(); + var persisterMock = new Mock>(); persisterMock.Setup(persister => persister.Load(It.IsAny(), null)).Returns(userSettings); var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); @@ -72,7 +72,7 @@ public void UserSettingsAreNotDuplicatedWithDefaultSettings() CodeInspections = new HashSet(new[] { userSetting }) }; - var persisterMock = new Mock>(); + var persisterMock = new Mock>(); persisterMock.Setup(persister => persister.Load(It.IsAny(), null)).Returns(userSettings); var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); @@ -97,7 +97,7 @@ public void UserSettingForUnknownInspectionIsIgnored() CodeInspections = new HashSet(new[] { userSetting }) }; - var persisterMock = new Mock>(); + var persisterMock = new Mock>(); persisterMock.Setup(persister => persister.Load(It.IsAny(), null)).Returns(userSettings); var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, inspectionProviderMock.Object); diff --git a/RubberduckTests/Settings/GeneralSettingsTests.cs b/RubberduckTests/Settings/GeneralSettingsTests.cs index 86f85ef3fd..0ac5ad249d 100644 --- a/RubberduckTests/Settings/GeneralSettingsTests.cs +++ b/RubberduckTests/Settings/GeneralSettingsTests.cs @@ -167,13 +167,13 @@ public void AutoSavePeriodIsSetInCtor() [Test] public void UserSettingsLoadedUsingDefaultWhenMissingFile() { - var pathProviderMock = new Mock(); + var pathProviderMock = new Mock(); pathProviderMock.Setup(x => x.DataRootPath).Returns("C:\\rubberduck\\"); pathProviderMock.Setup(x => x.DataFolderPath(It.IsAny())).Returns(x => x); // For this test, we need to use the actual object. Fortunately, the path is virtual, so we // can override that property and force it to use an non-existent path to prove that settings // will be still created using defaults without the file present. - var persisterMock = new Mock>(pathProviderMock.Object); + var persisterMock = new Mock>(pathProviderMock.Object); persisterMock.Setup(x => x.FilePath).Returns("C:\\some\\non\\existent\\path\\rubberduck"); persisterMock.CallBase = true; var configProvider = new GeneralConfigProvider(persisterMock.Object); From 5da44ae8f77c617a49d61f828c76bd88f5fe06c8 Mon Sep 17 00:00:00 2001 From: Vogel612 Date: Wed, 17 Apr 2019 02:32:57 +0200 Subject: [PATCH 5/5] Fix DI registration for Settings --- .../Root/RubberduckIoCInstaller.cs | 20 ++++++------- .../Facade/ConfigurationServiceBase.cs | 1 - .../Facade/DefaultSettings.cs | 14 ++++++++- ...igProvider.cs => IConfigurationService.cs} | 0 .../IndenterConfigProvider.cs | 29 +++---------------- 5 files changed, 26 insertions(+), 38 deletions(-) rename Rubberduck.SettingsProvider/Facade/{IConfigProvider.cs => IConfigurationService.cs} (100%) diff --git a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs index 76cd5d10cf..c9ad1aa690 100644 --- a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs +++ b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs @@ -231,11 +231,13 @@ private void RegisterConfiguration(IWindsorContainer container, Assembly[] assem foreach (var assembly in assembliesToRegister) { container.Register(Classes.FromAssembly(assembly) - .IncludeNonPublicTypes() - .Where(type => type.Namespace == typeof(Configuration).Namespace - && type.NotDisabledOrExperimental(_initialSettings) - && type != typeof(ExperimentalTypesProvider)) - .WithService.AllInterfaces() + .BasedOn(typeof(ConfigurationServiceBase<>)) + .WithServiceSelect((type, hierarchy) => + { + // select closed generic interface + return type.GetInterfaces().Where(iface => iface.IsGenericType + && iface.GetGenericTypeDefinition() == typeof(IConfigurationService<>)); + }) .LifestyleSingleton()); experimentalTypes.AddRange(assembly.GetTypes() @@ -259,12 +261,8 @@ private void RegisterConfiguration(IWindsorContainer container, Assembly[] assem .ImplementedBy(typeof(XmlContractPersistenceService<>)) .LifestyleSingleton()); - container.Register(Component.For>() - .ImplementedBy() - .LifestyleSingleton()); - - container.Register(Component.For>() - .ImplementedBy() + container.Register(Component.For(typeof(IConfigurationService)) + .ImplementedBy(typeof(ConfigurationLoader)) .LifestyleSingleton()); } diff --git a/Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs b/Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs index 79f0432bab..97700f26b6 100644 --- a/Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs +++ b/Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs @@ -1,6 +1,5 @@ using Rubberduck.Settings; using System; -using System.Threading; namespace Rubberduck.SettingsProvider { diff --git a/Rubberduck.SettingsProvider/Facade/DefaultSettings.cs b/Rubberduck.SettingsProvider/Facade/DefaultSettings.cs index 933d6c7803..34e7370372 100644 --- a/Rubberduck.SettingsProvider/Facade/DefaultSettings.cs +++ b/Rubberduck.SettingsProvider/Facade/DefaultSettings.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Reflection; @@ -10,6 +11,17 @@ public interface IDefaultSettings T Default { get; } } + public class FixedValueDefault : IDefaultSettings + { + public IEnumerable Defaults { get => new[] { Default }; } + public T Default { get; } + + public FixedValueDefault(T value) + { + Default = value; + } + } + public class DefaultSettings : IDefaultSettings where S : System.Configuration.ApplicationSettingsBase { diff --git a/Rubberduck.SettingsProvider/Facade/IConfigProvider.cs b/Rubberduck.SettingsProvider/Facade/IConfigurationService.cs similarity index 100% rename from Rubberduck.SettingsProvider/Facade/IConfigProvider.cs rename to Rubberduck.SettingsProvider/Facade/IConfigurationService.cs diff --git a/Rubberduck.SmartIndenter/IndenterConfigProvider.cs b/Rubberduck.SmartIndenter/IndenterConfigProvider.cs index 35d4c7be49..9ec31f830e 100644 --- a/Rubberduck.SmartIndenter/IndenterConfigProvider.cs +++ b/Rubberduck.SmartIndenter/IndenterConfigProvider.cs @@ -1,33 +1,12 @@ -using System; +using Rubberduck.Settings; using Rubberduck.SettingsProvider; namespace Rubberduck.SmartIndenter { - public class IndenterConfigProvider : IConfigurationService + public class IndenterConfigProvider : ConfigurationServiceBase { - private readonly IPersistenceService _persister; - public IndenterConfigProvider(IPersistenceService persister) - { - _persister = persister; - } - - public event EventHandler SettingsChanged; - - public IndenterSettings Read() - { - var prototype = new IndenterSettings(false); - return _persister.Load(prototype) ?? prototype; - } - - public IndenterSettings ReadDefaults() - { - return new IndenterSettings(false); - } - - public void Save(IndenterSettings settings) - { - _persister.Save(settings); - } + : base (persister, new FixedValueDefault(new IndenterSettings(false))) + { } } }