diff --git a/src/Argu/Argu.fsproj b/src/Argu/Argu.fsproj index 7fa3785a..ba0dc289 100644 --- a/src/Argu/Argu.fsproj +++ b/src/Argu/Argu.fsproj @@ -64,6 +64,7 @@ + diff --git a/src/Argu/Attributes.fs b/src/Argu/Attributes.fs new file mode 100644 index 00000000..cb772f3d --- /dev/null +++ b/src/Argu/Attributes.fs @@ -0,0 +1,137 @@ +/// Argu Attribute declaration module +[] +module Argu.ArguAttributes + +open System + +/// Parse multiple parameters in AppSettings as comma separated values. OBSOLETE +[] +[] +type ParseCSVAttribute () = inherit Attribute () + +/// Consume all remaining CLI tokens using this parameter wherever it might occur. OBSOLETE +[] +[] +type RestAttribute () = inherit Attribute () + +/// Hides argument from command line argument usage string. +[] +type HiddenAttribute () = inherit Attribute () + +/// Demands at least one parsed result for this argument; a parse exception is raised otherwise. +[] +type MandatoryAttribute () = inherit Attribute () + +/// Demands that the argument should be specified at most once; a parse exception is raised otherwise. +[] +type UniqueAttribute () = inherit Attribute () + +/// Demands that the argument should be specified exactly once; a parse exception is raised otherwise. +/// Equivalent to attaching both the Mandatory and Unique attribute on the parameter. +[] +type ExactlyOnceAttribute () = inherit Attribute () + +/// Denotes that the given argument should be inherited in the scope of any subcommands. +[] +type InheritAttribute() = inherit Attribute() + +/// Demands that at least one subcommand is specified in the CLI; a parse exception is raised otherwise. +[] +type RequireSubcommandAttribute () = inherit Attribute() + +/// Requires that CLI parameters should not override AppSettings parameters. +/// Will return parsed results from both AppSettings and CLI. +[] +type GatherAllSourcesAttribute () = inherit Attribute () + +/// Disable CLI parsing for this argument. Use for AppSettings parsing only. +[] +type NoCommandLineAttribute () = inherit Attribute () + +/// Disable AppSettings parsing for this branch. Use for CLI parsing only. +[] +type NoAppSettingsAttribute () = inherit Attribute () + +/// Specifies a custom set of Help/Usage switches for the CLI. +[] +type HelpFlagsAttribute ([] names : string []) = + inherit Attribute() + member __.Names = names + +/// Specifies that Help/Usage switches should be disabled for the CLI. +[] +type DisableHelpFlagsAttribute () = inherit HelpFlagsAttribute () + +/// Specifies a custom description text for the Help/Usage switches in the usage string. +[] +type HelpDescriptionAttribute (description : string) = + inherit Attribute() + member __.Description = description + +/// Declares that argument can only be placed at the beginning of the CLI syntax. +/// A parse exception will be raised if that is not the case. +[] +type FirstAttribute () = inherit Attribute () + +/// Print F# 3.1 field labels in usage string. OBSOLETE +[] +[] +type PrintLabelsAttribute () = inherit Attribute () + +/// Use '--param=arg' or '--param key=value' assignment syntax in CLI. +/// Requires that the argument should have parameters of arity 1 or 2 only. +/// Can be used to specify any assignment separator. +[] +type CustomAssignmentAttribute (separator : string) = + inherit Attribute () + member __.Separator = separator + +/// Use '--param=arg' or '--param key=value' assignment syntax in CLI. +/// Requires that the argument should have parameters of arity 1 or 2 only. +[] +type EqualsAssignmentAttribute () = + inherit CustomAssignmentAttribute("=") + +/// Use '--param:arg' or '--param key:value' assignment syntax in CLI. +/// Requires that the argument should have parameters of arity 1 or 2 only. +[] +type ColonAssignmentAttribute () = + inherit CustomAssignmentAttribute(":") + +/// Declares a custom default CLI identifier for the current parameter. +/// Replaces the auto-generated identifier name. +[] +type CustomCommandLineAttribute (name : string) = + inherit Attribute () + member __.Name = name + +/// Declares a set of secondary CLI identifiers for the current parameter. +/// Does not replace the default identifier which is either auto-generated +/// or specified by the CustomCommandLine attribute. +[] +type AltCommandLineAttribute ([] names :string []) = + inherit Attribute () + member __.Names = names + +/// Declares a custom key identifier for the current parameter in AppSettings parsing. +/// Replaces the auto-generated identifier name. +[] +type CustomAppSettingsAttribute (name : string) = + inherit Attribute () + member __.Name = name + +/// Specify a custom value separator in AppSettings parsing parameters. +/// Used in CSV or list-based parameter parsing. +[] +type AppSettingsSeparatorAttribute ([] separators : string [], splitOptions : StringSplitOptions) = + inherit Attribute() + new (separator : char) = new AppSettingsSeparatorAttribute([|string separator|], StringSplitOptions.None) + member __.Separators = separators + member __.SplitOptions = splitOptions + +/// Specifies a custom prefix for auto-generated CLI names. +/// This defaults to double dash ('--'). +[] +type CliPrefixAttribute(prefix : string) = + inherit Attribute() + member __.Prefix = prefix \ No newline at end of file diff --git a/src/Argu/Types.fs b/src/Argu/Types.fs index 3b9705b8..4fcf01fb 100644 --- a/src/Argu/Types.fs +++ b/src/Argu/Types.fs @@ -3,142 +3,10 @@ open System open FSharp.Reflection -// Attribute declarations - -[] -module ArguAttributes = - - /// Parse multiple parameters in AppSettings as comma separated values. OBSOLETE - [] - [] - type ParseCSVAttribute () = inherit Attribute () - - /// Consume all remaining CLI tokens using this parameter wherever it might occur. OBSOLETE - [] - [] - type RestAttribute () = inherit Attribute () - - /// Hides argument from command line argument usage string. - [] - type HiddenAttribute () = inherit Attribute () - - /// Demands at least one parsed result for this argument; a parse exception is raised otherwise. - [] - type MandatoryAttribute () = inherit Attribute () - - /// Demands that the argument should be specified at most once; a parse exception is raised otherwise. - [] - type UniqueAttribute () = inherit Attribute () - - /// Demands that the argument should be specified exactly once; a parse exception is raised otherwise. - /// Equivalent to attaching both the Mandatory and Unique attribute on the parameter. - [] - type ExactlyOnceAttribute () = inherit Attribute () - - /// Denotes that the given argument should be inherited in the scope of any subcommands. - [] - type InheritAttribute() = inherit Attribute() - - /// Demands that at least one subcommand is specified in the CLI; a parse exception is raised otherwise. - [] - type RequireSubcommandAttribute () = inherit Attribute() - - /// Requires that CLI parameters should not override AppSettings parameters. - /// Will return parsed results from both AppSettings and CLI. - [] - type GatherAllSourcesAttribute () = inherit Attribute () - - /// Disable CLI parsing for this argument. Use for AppSettings parsing only. - [] - type NoCommandLineAttribute () = inherit Attribute () - - /// Disable AppSettings parsing for this branch. Use for CLI parsing only. - [] - type NoAppSettingsAttribute () = inherit Attribute () - - /// Specifies a custom set of Help/Usage switches for the CLI. - [] - type HelpFlagsAttribute ([] names : string []) = - inherit Attribute() - member __.Names = names - - /// Specifies that Help/Usage switches should be disabled for the CLI. - [] - type DisableHelpFlagsAttribute () = inherit HelpFlagsAttribute () - - /// Specifies a custom description text for the Help/Usage switches in the usage string. - [] - type HelpDescriptionAttribute (description : string) = - inherit Attribute() - member __.Description = description - - /// Declares that argument can only be placed at the beginning of the CLI syntax. - /// A parse exception will be raised if that is not the case. - [] - type FirstAttribute () = inherit Attribute () - - /// Print F# 3.1 field labels in usage string. OBSOLETE - [] - [] - type PrintLabelsAttribute () = inherit Attribute () - - /// Use '--param=arg' or '--param key=value' assignment syntax in CLI. - /// Requires that the argument should have parameters of arity 1 or 2 only. - /// Can be used to specify any assignment separator. - [] - type CustomAssignmentAttribute (separator : string) = - inherit Attribute () - member __.Separator = separator - - /// Use '--param=arg' or '--param key=value' assignment syntax in CLI. - /// Requires that the argument should have parameters of arity 1 or 2 only. - [] - type EqualsAssignmentAttribute () = - inherit CustomAssignmentAttribute("=") - - /// Use '--param:arg' or '--param key:value' assignment syntax in CLI. - /// Requires that the argument should have parameters of arity 1 or 2 only. - [] - type ColonAssignmentAttribute () = - inherit CustomAssignmentAttribute(":") - - /// Declares a custom default CLI identifier for the current parameter. - /// Replaces the auto-generated identifier name. - [] - type CustomCommandLineAttribute (name : string) = - inherit Attribute () - member __.Name = name - - /// Declares a set of secondary CLI identifiers for the current parameter. - /// Does not replace the default identifier which is either auto-generated - /// or specified by the CustomCommandLine attribute. - [] - type AltCommandLineAttribute ([] names :string []) = - inherit Attribute () - member __.Names = names - - /// Declares a custom key identifier for the current parameter in AppSettings parsing. - /// Replaces the auto-generated identifier name. - [] - type CustomAppSettingsAttribute (name : string) = - inherit Attribute () - member __.Name = name - - /// Specify a custom value separator in AppSettings parsing parameters. - /// Used in CSV or list-based parameter parsing. - [] - type AppSettingsSeparatorAttribute ([] separators : string [], splitOptions : StringSplitOptions) = - inherit Attribute() - new (separator : char) = new AppSettingsSeparatorAttribute([|string separator|], StringSplitOptions.None) - member __.Separators = separators - member __.SplitOptions = splitOptions - - /// Specifies a custom prefix for auto-generated CLI names. - /// This defaults to double dash ('--'). - [] - type CliPrefixAttribute(prefix : string) = - inherit Attribute() - member __.Prefix = prefix +/// Interface that must be implemented by all Argu template types +type IArgParserTemplate = + /// returns a usage string for every union case + abstract Usage : string /// Predefined CLI prefixes to be added [] @@ -164,11 +32,6 @@ type ErrorCode = | CommandLine = 2 | PostProcess = 3 -/// Interface that must be implemented by all Argu template types -type IArgParserTemplate = - /// returns a usage string for every union case - abstract Usage : string - /// Exception raised by Argu type ArguException internal (message : string) = inherit Exception(message)