Exemple #1
0
        private void AddAdditionalText(BoolOptionViewModel boolOption, RichText additionalText, int indent)
        {
            var textOptionEntity = AddText(additionalText);

            boolOption.IsEnabledProperty.FlowInto(myLifetime, textOptionEntity.GetIsEnabledProperty());
            SetIndent(textOptionEntity, indent + 1);
        }
Exemple #2
0
 private void SetUpDependentOption(IOptionEntity option, BoolOptionViewModel parentOption)
 {
     // Note: The `Compose(parentOption.IsEnabledProperty)` starts to become important at the second "level".
     parentOption.CheckedProperty.Compose(myLifetime, parentOption.IsEnabledProperty)
     .Select(myLifetime, "checked and enabled", pair => pair.First && pair.Second)
     .FlowInto(myLifetime, option.GetIsEnabledProperty());
 }
Exemple #3
0
        private BoolOptionViewModel AddNullabilityBoolOption(
            Expression <Func <ImplicitNullabilitySettings, bool> > settingExpression,
            RichText text,
            [CanBeNull] RichText additionalText,
            BoolOptionViewModel parentOption,
            int indent)
        {
            var result = AddBoolOption(settingExpression, text, additionalText, indent);

            SetUpDependentOption(result, parentOption);
            return(result);
        }
Exemple #4
0
        private void AddNullabilityBoolOption <TEntryMemberType>(
            Expression <Func <ImplicitNullabilitySettings, TEntryMemberType> > settingExpression,
            TEntryMemberType trueValue,
            TEntryMemberType falseValue,
            RichText text,
            [CanBeNull] RichText additionalText,
            BoolOptionViewModel parentOption,
            int indent)
        {
            var result = AddBoolOption(settingExpression, trueValue, falseValue, text, additionalText, indent);

            SetUpDependentOption(result, parentOption);
        }
Exemple #5
0
        /// <summary>
        /// Initializes a new instance of the StyleCopOptionsPage class.
        /// </summary>
        /// <param name="lifetime">
        /// The lifetime of the options page.
        /// </param>
        /// <param name="settingsSmartContext">
        /// Our settings context.
        /// </param>
        /// <param name="container">
        /// The component container
        /// </param>
        public StyleCopOptionsPage(
            Lifetime lifetime,
            OptionsSettingsSmartContext settingsSmartContext,
            IComponentContainer container)
            : base(lifetime, settingsSmartContext)
        {
            IContextBoundSettingsStoreLive settingsContext =
                this.OptionsSettingsSmartContext.StoreOptionsTransactionContext;

            this.originalEnablePlugins =
                settingsContext.GetValue((StyleCopOptionsSettingsKey options) => options.PluginsEnabled);
            this.originalPluginsPath =
                settingsContext.GetValue((StyleCopOptionsSettingsKey options) => options.PluginsPath);

            this.AddHeader("Version");

            Assembly assembly            = typeof(StyleCopEnvironment).Assembly;
            string   styleCopFileVersion = GetFileVersionInfo(assembly);

            this.AddText(string.Format("StyleCop.dll {0} ({1})", assembly.GetName().Version, styleCopFileVersion));

            assembly = this.GetType().Assembly;
            string ourFileVersion = GetFileVersionInfo(assembly);

            this.AddText(string.Format("StyleCop.ReSharper.dll {0} ({1})", assembly.GetName().Version, ourFileVersion));

            if (ourFileVersion != styleCopFileVersion)
            {
                TextStyle style = new TextStyle(FontStyle.Bold, Color.Empty, Color.Empty);
                this.AddRichText(
                    new RichText(
                        "Mismatched StyleCop.dll version! Are you running an older version of the Visual Studio plugin?",
                        style));
            }

            this.AddHeader("Options");

            // Note that we have to check to see if the lifetime is terminated before accessing the
            // settings context because WPF will continue to call our CanExecute until a garbage collection
            // breaks the weak reference that WPF holds on command
            this.AddButton(
                "Reset code style options",
                new DelegateCommand(
                    () => CodeStyleOptions.CodeStyleOptionsReset(settingsSmartContext),
                    () => !lifetime.IsTerminated && !CodeStyleOptions.CodeStyleOptionsValid(settingsSmartContext)));

            this.AddHeader("Analysis Performance");
            if (DoesHostSupportRoslynAnalzyers(container))
            {
                this.AddText(
                    "Note: Analysis is automatically disabled if the project references the StyleCop.Analyzers NuGet package, which provides StyleCop analysis for Visual Studio 2015 and C# 6.");
            }

            this.AddBoolOption(
                (StyleCopOptionsSettingsKey options) => options.AnalysisEnabled,
                "Run StyleCop as you type");
            BoolOptionViewModel nonUserFiles =
                this.AddBoolOption(
                    (StyleCopOptionsSettingsKey options) => options.AnalyzeReadOnlyFiles,
                    "Analyze non-user files (not recommended)");

            this.AddBinding(
                nonUserFiles,
                BindingStyle.IsEnabledProperty,
                (StyleCopOptionsSettingsKey options) => options.AnalysisEnabled,
                JetFunc <object> .Identity);

            this.AddHeader("Headers");
            this.AddBoolOption(
                (StyleCopOptionsSettingsKey options) => options.InsertTextIntoDocumentation,
                "Insert text into documentation and file headers");
            this.AddBoolOption(
                (StyleCopOptionsSettingsKey options) => options.UseSingleLineDeclarationComments,
                "Use single lines for declaration headers");
            this.AddBoolOption(
                (StyleCopOptionsSettingsKey options) => options.InsertToDoText,
                "Insert TODO into headers");
            this.AddIntOption(
                (StyleCopOptionsSettingsKey options) => options.DashesCountInFileHeader,
                "Number of dashes in file header text:");

            this.AddHeader("StyleCop Plugins");
            this.AddBoolOption(
                (StyleCopOptionsSettingsKey options) => options.PluginsEnabled,
                "Enable StyleCop plugins");
            this.AddText("Location of StyleCop plugins:");
            Property <FileSystemPath> pluginsPath = this.SetupPluginsPathProperty(lifetime);
            FileChooserViewModel      fileChooser = this.AddFolderChooserOption(
                pluginsPath,
                "Location of StyleCop plugins",
                FileSystemPath.Empty);

            fileChooser.IsEnabledProperty.SetValue(true);
            this.AddBinding(
                fileChooser,
                BindingStyle.IsEnabledProperty,
                (StyleCopOptionsSettingsKey options) => options.PluginsEnabled,
                JetFunc <object> .Identity);

            this.AddHeader("Misc");
            this.AddBoolOption(
                (StyleCopOptionsSettingsKey options) => options.UseExcludeFromStyleCopSetting,
                "Use ExcludeFromStyleCop setting in csproj files");
            this.AddStringOption(
                (StyleCopOptionsSettingsKey options) => options.SuppressStyleCopAttributeJustificationText,
                "Justification for SuppressMessage attribute:");

            // TODO: Add "update file header style" that used to be in code cleanup
            this.FinishPage();
        }