private void AddGdScriptSection()

in resharper/src/Application/UI/Options/GodotOptionsPage.cs [74:118]


        private void AddGdScriptSection()
        {
            AddHeaderWithoutCapitalization(Strings.GDScriptSupport_Text);
            using (Indent())
            {
                AddComboOption((GodotSettings s) => s.LanguageServerConnectionMode,
                    Strings.GDScript_ConnectingLSPServer_Text, string.Empty, string.Empty,
                    new RadioOptionPoint(LanguageServerConnectionMode.StartEditorHeadless,
                        Strings.GDScript_AutomaticallyStartHeadlessLSPServer_Text),
                    new RadioOptionPoint(LanguageServerConnectionMode.ConnectRunningEditor, 
                        Strings.GDScript_AttemptToConnectTheRunningGodotEditor_Text),
                    new RadioOptionPoint(LanguageServerConnectionMode.Never, Strings.GDScript_NeverUseLSP_Text)
                );
                AddKeyword(Strings.GDScript_LanguageServer_Text);

                // AddTextBox(ourHostNameAccessor, "Host"); // host is always localhot, lets not allow changing it.

                // Godot 4.2.1 and later
                // https://github.com/godotengine/godot/pull/81844/commits/a5b7c4c415ff9bf7e368371ddb88601bcb9e1232
                // and Godot 3.6 https://github.com/godotengine/godot/pull/82025
                var useDynamic = AddBoolOption(ourUseDynamicPort, Strings.GDScript_UseARandomFreePortSupportedInGodot_Text);

                var portOption = AddIntOption(ourHostPortAccessor, Strings.GDScript_LSP_Port_Text);

                // AddBinding(portOption, BindingStyle.IsEnabledProperty, ourUseDynamicPort, enable => !enable);

                var sourceProperty = OptionsSettingsSmartContext.GetValueProperty(Lifetime, ourUseDynamicPort);
                sourceProperty
                    .Change.Advise(Lifetime, () =>
                    {
                        // RIDER-104651 Visibility of a BeControl based on other settings works inconsistently
                        portOption.Enabled.Value = !sourceProperty.Value; // this always works
                        portOption.Visible.Value =
                            sourceProperty.Value
                                ? ControlVisibility.Collapsed
                                : ControlVisibility
                                    .Visible; // this doesn't work initially, but starts working when you change sourceProperty back and forth
                    });

                // AddBinding(portOption, BindingStyle.IsEnabledProperty, ourLanguageServerConnectionMode,
                //     mode => mode is not LanguageServerConnectionMode.Never);
                AddBinding(useDynamic, BindingStyle.IsEnabledProperty, ourLanguageServerConnectionMode,
                    mode => mode is LanguageServerConnectionMode.StartEditorHeadless);
            }
        }