Repository: microsoft/garnet
File: libs/host/Configuration/Options.cs (C#)

Code before:
        public bool? RevivInChainOnly { get; set; }

        [IntRangeValidation(0, int.MaxValue)]
        [Option("reviv-obj-bin-record-count", Required = false,
            HelpText = "Number of records in the single free record bin for the object store. The Object store has only a single bin, unlike the main store." +
                       "        Ignored unless the main store is using the free record list.")]
        public int RevivObjBinRecordCount { get; set; }

        [IntRangeValidation(0, int.MaxValue)]
        [Option("object-scan-count-limit", Required = false, HelpText = "Limit of items to return in one iteration of *SCAN command")]
        public int ObjectScanCountLimit { get; set; }

        [OptionValidation]
        [Option("enable-debug-command", Required = false, HelpText = "Enable DEBUG command for 'no', 'local' or 'all' connections")]
        public ConnectionProtectionOption EnableDebugCommand { get; set; }

        [OptionValidation]
        [Option("enable-module-command", Required = false, Hidden = true, HelpText = "Enable MODULE command for 'no', 'local' or 'all' connections")]
        public ConnectionProtectionOption EnableModuleCommand { get; set; }

        [OptionValidation]
        [Option("protected-mode", Required = false, HelpText = "Enable protected mode.")]
        public CommandLineBooleanOption ProtectedMode { get; set; }

        [DirectoryPathsValidation(true, false)]
        [Option("extension-bin-paths", Separator = ',', Required = false, HelpText = "Set directories on server from which custom command binaries can be loaded by admin users from list")]
        public IEnumerable<string> ExtensionBinPaths { get; set; }

        [ModuleFilePathValidation(true, true, false)]
        [Option("loadmodulecs", Separator = ',', Required = false, HelpText = "Load modules from list")]
        public IEnumerable<string> LoadModuleCS { get; set; }

        [Option("extension-allow-unsigned", Required = false, HelpText = "Allow loading custom commands from digitally unsigned assemblies (not recommended)")]
        public bool? ExtensionAllowUnsignedAssemblies { get; set; }

        [IntRangeValidation(1, int.MaxValue, isRequired: false)]
        [Option("index-resize-freq", Required = false, HelpText = "Index resize check frequency in seconds")]
        public int IndexResizeFrequencySecs { get; set; }

        [IntRangeValidation(1, 100, isRequired: false)]
        [Option("index-resize-threshold", Required = false, HelpText = "Overflow bucket count over total index size in percentage to trigger index resize")]
        public int IndexResizeThreshold { get; set; }

        [OptionValidation]
        [Option("fail-on-recovery-error", Required = false, HelpText = "Server bootup should fail if errors happen during bootup of AOF and checkpointing")]
        public bool? FailOnRecoveryError { get; set; }

        [OptionValidation]
        [Option("skip-rdb-restore-checksum-validation", Required = false, HelpText = "Skip RDB restore checksum validation")]
        public bool? SkipRDBRestoreChecksumValidation { get; set; }


Review comment (suggestion):
nit: I don't see a reason to change this (and LoadModuleCS's) HelpText, I think it was better explained that we're expecting a list in these places. We should add that `EnableModuleCommand` should be turned on (in both cases). 

Code after:
        public bool? RevivInChainOnly { get; set; }

        [IntRangeValidation(0, int.MaxValue)]
        [Option("reviv-obj-bin-record-count", Required = false,
            HelpText = "Number of records in the single free record bin for the object store. The Object store has only a single bin, unlike the main store." +
                       "        Ignored unless the main store is using the free record list.")]
        public int RevivObjBinRecordCount { get; set; }

        [IntRangeValidation(0, int.MaxValue)]
        [Option("object-scan-count-limit", Required = false, HelpText = "Limit of items to return in one iteration of *SCAN command")]
        public int ObjectScanCountLimit { get; set; }

        [OptionValidation]
        [Option("enable-debug-command", Required = false, HelpText = "Enable DEBUG command for 'no', 'local' or 'all' connections")]
        public ConnectionProtectionOption EnableDebugCommand { get; set; }

        [OptionValidation]
        [Option("enable-module-command", Required = false, HelpText = "Enable MODULE command for 'no', 'local' or 'all' connections. Command can only load from paths listed in ExtensionBinPaths")]
        public ConnectionProtectionOption EnableModuleCommand { get; set; }

        [OptionValidation]
        [Option("protected-mode", Required = false, HelpText = "Enable protected mode.")]
        public CommandLineBooleanOption ProtectedMode { get; set; }

        [DirectoryPathsValidation(true, false)]
        [Option("extension-bin-paths", Separator = ',', Required = false, HelpText = "List of directories on server from which custom command binaries can be loaded by admin users. MODULE command also requires enable-module-command to be set")]
        public IEnumerable<string> ExtensionBinPaths { get; set; }

        [ModuleFilePathValidation(true, true, false)]
        [Option("loadmodulecs", Separator = ',', Required = false, HelpText = "List of modules to be loaded")]
        public IEnumerable<string> LoadModuleCS { get; set; }

        [Option("extension-allow-unsigned", Required = false, HelpText = "Allow loading custom commands from digitally unsigned assemblies (not recommended)")]
        public bool? ExtensionAllowUnsignedAssemblies { get; set; }

        [IntRangeValidation(1, int.MaxValue, isRequired: false)]
        [Option("index-resize-freq", Required = false, HelpText = "Index resize check frequency in seconds")]
        public int IndexResizeFrequencySecs { get; set; }

        [IntRangeValidation(1, 100, isRequired: false)]
        [Option("index-resize-threshold", Required = false, HelpText = "Overflow bucket count over total index size in percentage to trigger index resize")]
        public int IndexResizeThreshold { get; set; }

        [OptionValidation]
        [Option("fail-on-recovery-error", Required = false, HelpText = "Server bootup should fail if errors happen during bootup of AOF and checkpointing")]
        public bool? FailOnRecoveryError { get; set; }

        [OptionValidation]
        [Option("skip-rdb-restore-checksum-validation", Required = false, HelpText = "Skip RDB restore checksum validation")]
        public bool? SkipRDBRestoreChecksumValidation { get; set; }