opts: added some obvious comments and fixed some syntax
[nit.git] / lib / opts.nit
index f383a32..97a2a1f 100644 (file)
@@ -60,10 +60,10 @@ abstract class Option
 
        # Add new aliases for this option
        fun add_aliases(names: String...) do names.add_all(names)
-       
+
        # An help text for this option with default settings
        redef fun to_s do return pretty(2)
-       
+
        # A pretty print for this help
        fun pretty(off: Int): String
        do
@@ -91,6 +91,7 @@ abstract class Option
        end
 end
 
+# Not really an option. Just add a line of text when displaying the usage
 class OptionText
        super Option
        init(text: String) do super(text, null, null)
@@ -100,6 +101,7 @@ class OptionText
        redef fun to_s do return helptext
 end
 
+# A boolean option, `true` when present, `false` if not
 class OptionBool
        super Option
        redef type VALUE: Bool
@@ -113,6 +115,7 @@ class OptionBool
        end
 end
 
+# A count option. Count the number of time this option is present
 class OptionCount
        super Option
        redef type VALUE: Int
@@ -148,6 +151,7 @@ abstract class OptionParameter
        end
 end
 
+# An option with a String as parameter
 class OptionString
        super OptionParameter
        redef type VALUE: nullable String
@@ -157,6 +161,9 @@ class OptionString
        redef fun convert(str) do return str
 end
 
+# An option with an enum as parameter
+# In the code, declaring an option enum (-e) with an enum like `["zero", "one", "two"]
+# In the command line, typing `myprog -e one` is giving 1 as value
 class OptionEnum
        super OptionParameter
        redef type VALUE: Int
@@ -189,27 +196,31 @@ class OptionEnum
                else
                        return ""
                end
-       end     
+       end
 end
 
+# An option with an Int as parameter
 class OptionInt
        super OptionParameter
        redef type VALUE: Int
 
        init(help: String, default: Int, names: String...) do super(help, default, names)
-       
+
        redef fun convert(str) do return str.to_i
 end
 
+# An option with a Float as parameter
 class OptionFloat
        super OptionParameter
        redef type VALUE: Float
 
        init(help: String, default: Float, names: String...) do super(help, default, names)
-       
+
        redef fun convert(str) do return str.to_f
 end
 
+# An option with an array as parameter
+# `myprog -optA arg1 -optA arg2` is giving an Array `["arg1", "arg2"]`
 class OptionArray
        super OptionParameter
        redef type VALUE: Array[String]
@@ -228,13 +239,33 @@ class OptionArray
        end
 end
 
+# Context where the options process
 class OptionContext
+       # Options present in the context
        var options: Array[Option]
+
+       # Rest of the options after `parse` is called
        var rest: Array[String]
+
+       # Errors found in the context after parsing
        var errors: Array[String]
 
        private var optmap: Map[String, Option]
-       
+
+       init
+       do
+               options = new Array[Option]
+               optmap = new HashMap[String, Option]
+               rest = new Array[String]
+               errors = new Array[String]
+       end
+
+       # Add one or more options to the context
+       fun add_option(opts: Option...) do
+                       options.add_all(opts)
+       end
+
+       # Display all the options available
        fun usage
        do
                var lmax = 1
@@ -251,13 +282,15 @@ class OptionContext
                end
        end
 
-       # Parse ans assign options everywhere is the argument list
+       # Parse and assign options everywhere in the argument list
        fun parse(argv: Collection[String])
        do
                var it = argv.iterator
                parse_intern(it)
        end
 
+       # Parse the command line
+       # FIXME: avoir crashing on a command line like : `myprog -foo` (more than one letter after a single `-`)
        protected fun parse_intern(it: Iterator[String])
        do
                var parseargs = true
@@ -306,21 +339,6 @@ class OptionContext
                end
        end
 
-       fun add_option(opts: Option...)
-       do
-               for opt in opts do
-                       options.add(opt)
-               end
-       end
-
-       init
-       do
-               options = new Array[Option]
-               optmap = new HashMap[String, Option]
-               rest = new Array[String]
-               errors = new Array[String]
-       end
-
        private fun build
        do
                for o in options do
@@ -333,15 +351,12 @@ class OptionContext
        fun get_errors: Array[String]
        do
                var errors: Array[String] = new Array[String]
-
                errors.add_all(errors)
-
                for o in options do
                        for e in o.errors do
                                errors.add(e)
                        end
                end
-
                return errors
        end
 end