modelize_property: Split model build of AAttrPropdef
[nit.git] / src / frontend / no_warning.nit
index c862075..54d9a01 100644 (file)
@@ -30,36 +30,50 @@ private class NoWarningPhase
        do
                # Get the mmodule
                var mmodule = nmodule.mmodule
-               assert mmodule != null
+               if mmodule == null then return
+
+               var source = nmodule.location.file
 
-               # If no decl block then quit
                var nmoduledecl = nmodule.n_moduledecl
+               if nmoduledecl == null or nmoduledecl.n_doc == null then
+                       # Disable `missing-doc` if there is no `module` clause
+                       # Rationale: the presence of a `module` clause is a good heuristic to
+                       # discriminate quick and dirty prototypes from nice and clean modules
+                       if source != null then toolcontext.warning_blacklist[source].add("missing-doc")
+
+               end
+
+               # If no decl block then quit
                if nmoduledecl == null then return
 
                var modelbuilder = toolcontext.modelbuilder
 
-               # Get all the new annotations
+               # Disable `missing-doc` for `test`
+               if source != null and not nmoduledecl.get_annotations("test").is_empty then
+                       toolcontext.warning_blacklist[source].add("missing-doc")
+               end
+
+               # Get all the `no_warning` annotations
                var name = "no_warning"
                var annots = nmoduledecl.get_annotations(name)
 
                if annots.is_empty then return
 
-               var source = nmodule.location.file
                if source == null then
-                       modelbuilder.warning(annots.first, "file-less-module", "Warning: annotation `{name}` does not currently work on file-less modules.")
+                       modelbuilder.warning(annots.first, "file-less-module", "Warning: `{name}` does not currently work on file-less modules.")
                        return
                end
 
                for annot in annots do
                        var args = annot.n_args
                        if args.is_empty then
-                               modelbuilder.error(annot, "Annotation error: `{name}` needs a list of warnings. Use `\"all\"` to disable all warnings.")
+                               modelbuilder.error(annot, "Syntax Error: `{name}` expects a list of warnings. Use `\"all\"` to disable all warnings.")
                                continue
                        end
                        for arg in args do
                                var tag = arg.as_string
                                if tag == null then
-                                       modelbuilder.error(arg, "Annotation error: `{name}` expects String as arguments.")
+                                       modelbuilder.error(arg, "Syntax Error: `{name}` expects String as arguments.")
                                        continue
                                end