separate_options: improves separate options (.nit.args files) handling
authorAlexis Laferrière <alexis.laf@xymus.net>
Wed, 11 Jul 2012 16:44:16 +0000 (12:44 -0400)
committerJean Privat <jean@pryen.org>
Thu, 25 Oct 2012 18:40:50 +0000 (14:40 -0400)
- Reports errors in .nit.args files as fatal errors
- Correctly report module name in errors
- Adds error test

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

src/separate_options.nit
tests/error_separate_options.nit [new file with mode: 0644]
tests/error_separate_options.nit.args [new file with mode: 0644]
tests/sav/error_separate_options.res [new file with mode: 0644]
tests/sav/error_separate_options.sav [new file with mode: 0644]

index 4e33f29..a318724 100644 (file)
@@ -22,13 +22,15 @@ redef class ToolContext
                separate_options.add_option( opt_cc_include_paths )
        end
 
-       fun integrate_separate_options( options : String )
+       fun integrate_separate_options( options : String, mod : MMModule )
        do
                for line in options.split do
                        line = line.strip_extension( "\n" )
                        separate_options.parse( line.split_with( ' ' ) )
-                       if separate_options.rest.length > 0 then
-                               warning( null, "module {self} args file has unknown args: {separate_options.rest.join(", ")}" )
+                       var rest = new Array[String]
+                       for s in separate_options.rest do if s.length > 0 then rest.add( s )
+                       if rest.length > 0 then
+                               error( null, "module \"{mod}\" args file has unknown args: {rest.join(", ")}" )
                        end
                end
 
@@ -51,7 +53,8 @@ redef class MMSrcModule
                        var option_content = option_file.read_all
                        option_file.close
 
-                       cprogram.program.tc.integrate_separate_options( option_content )
+                       cprogram.program.tc.integrate_separate_options( option_content, self )
+                       cprogram.program.tc.check_errors
                end
        end
 end
diff --git a/tests/error_separate_options.nit b/tests/error_separate_options.nit
new file mode 100644 (file)
index 0000000..c508be3
--- /dev/null
@@ -0,0 +1 @@
+print "arg is wrong"
diff --git a/tests/error_separate_options.nit.args b/tests/error_separate_options.nit.args
new file mode 100644 (file)
index 0000000..a0912ed
--- /dev/null
@@ -0,0 +1,2 @@
+--foo    
+--invalid-arg other_invalid_arg
diff --git a/tests/sav/error_separate_options.res b/tests/sav/error_separate_options.res
new file mode 100644 (file)
index 0000000..c99f852
--- /dev/null
@@ -0,0 +1 @@
+arg is wrong
diff --git a/tests/sav/error_separate_options.sav b/tests/sav/error_separate_options.sav
new file mode 100644 (file)
index 0000000..511378c
--- /dev/null
@@ -0,0 +1,3 @@
+module "error_separate_options" args file has unknown args: --foo
+module "error_separate_options" args file has unknown args: --foo, --invalid-arg, other_invalid_arg
+module "error_separate_options" args file has unknown args: --foo, --invalid-arg, other_invalid_arg