Merge: doc: fixed some typos and other misc. corrections
[nit.git] / src / nitpackage.nit
index bb6fb42..7f4c5f2 100644 (file)
@@ -19,6 +19,10 @@ import frontend
 import doc::commands::commands_main
 
 redef class ToolContext
+
+       # nitpackage phase
+       var nitpackage_phase: Phase = new NitPackagePhase(self, null)
+
        # --expand
        var opt_expand = new OptionBool("Move singleton packages to their own directory", "--expand")
 
@@ -37,21 +41,22 @@ redef class ToolContext
        # --gen-makefile
        var opt_gen_makefile = new OptionBool("Generate Makefile files", "--gen-makefile")
 
-       # nitpackage phase
-       var nitpackage_phase: Phase = new NitPackagePhase(self, null)
-
        # --check-man
        var opt_check_man = new OptionBool("Check manpages files", "--check-man")
 
        # --gen-man
        var opt_gen_man = new OptionBool("Generate manpages files", "--gen-man")
 
+       # --check-readme
+       var opt_check_readme = new OptionBool("Check README.md files", "--check-readme")
+
        redef init do
                super
                option_context.add_option(opt_expand, opt_force)
                option_context.add_option(opt_check_ini, opt_gen_ini)
                option_context.add_option(opt_check_makefile, opt_gen_makefile)
                option_context.add_option(opt_check_man, opt_gen_man)
+               option_context.add_option(opt_check_readme)
        end
 end
 
@@ -87,6 +92,12 @@ private class NitPackagePhase
                                continue
                        end
 
+                       # Check README.md
+                       if toolcontext.opt_check_readme.value then
+                               mpackage.check_readme(toolcontext)
+                               continue
+                       end
+
                        # Expand packages
                        if toolcontext.opt_expand.value and not mpackage.is_expanded then
                                var path = mpackage.expand
@@ -242,14 +253,14 @@ redef class MPackage
                var ini_path = ini_path
                if ini_path == null then return
 
-               var ini = new ConfigTree(ini_path)
+               var ini = new IniFile.from_file(ini_path)
 
-               ini.check_key(toolcontext, self, "package.name", name)
-               ini.check_key(toolcontext, self, "package.desc")
-               ini.check_key(toolcontext, self, "package.tags")
+               ini.check_key(ini_path, toolcontext, self, "package.name", name)
+               ini.check_key(ini_path, toolcontext, self, "package.desc")
+               ini.check_key(ini_path, toolcontext, self, "package.tags")
 
                # FIXME since `git reflog --follow` seems bugged
-               ini.check_key(toolcontext, self, "package.maintainer")
+               ini.check_key(ini_path, toolcontext, self, "package.maintainer")
                # var maint = mpackage.maintainer
                # if maint != null then
                        # ini.check_key(toolcontext, self, "package.maintainer", maint)
@@ -261,24 +272,24 @@ redef class MPackage
                        # ini.check_key(toolcontext, self, "package.more_contributors", contribs.join(", "))
                # end
 
-               ini.check_key(toolcontext, self, "package.license", license)
-               ini.check_key(toolcontext, self, "upstream.browse", browse_url)
-               ini.check_key(toolcontext, self, "upstream.git", git_url)
-               ini.check_key(toolcontext, self, "upstream.git.directory", git_dir)
-               ini.check_key(toolcontext, self, "upstream.homepage", homepage_url)
-               ini.check_key(toolcontext, self, "upstream.issues", issues_url)
+               ini.check_key(ini_path, toolcontext, self, "package.license", license)
+               ini.check_key(ini_path, toolcontext, self, "upstream.browse", browse_url)
+               ini.check_key(ini_path, toolcontext, self, "upstream.git", git_url)
+               ini.check_key(ini_path, toolcontext, self, "upstream.git.directory", git_dir)
+               ini.check_key(ini_path, toolcontext, self, "upstream.homepage", homepage_url)
+               ini.check_key(ini_path, toolcontext, self, "upstream.issues", issues_url)
 
-               for key in ini.to_map.keys do
+               for key in ini.flatten.keys do
                        if not allowed_ini_keys.has(key) then
                                toolcontext.warning(location, "unknown-ini-key",
-                                       "Warning: ignoring unknown `{key}` key in `{ini.ini_file}`")
+                                       "Warning: ignoring unknown `{key}` key in `{ini_path}`")
                        end
                end
        end
 
        private fun gen_ini: String do
                var ini_path = self.ini_path.as(not null)
-               var ini = new ConfigTree(ini_path)
+               var ini = new IniFile.from_file(ini_path)
 
                ini.update_value("package.name", name)
                ini.update_value("package.desc", "")
@@ -293,7 +304,7 @@ redef class MPackage
                ini.update_value("upstream.homepage", homepage_url)
                ini.update_value("upstream.issues", issues_url)
 
-               ini.save
+               ini.write_to_file(ini_path)
                return ini_path
        end
 
@@ -317,9 +328,8 @@ redef class MPackage
        private fun check_makefile(toolcontext: ToolContext, mainmodule: MModule) do
                var model = toolcontext.modelbuilder.model
                var filter = new ModelFilter(accept_example = false, accept_test = false)
-               var view = new ModelView(model, mainmodule, filter)
 
-               var cmd_bin = new CmdMains(view, mentity = self)
+               var cmd_bin = new CmdMains(model, filter, mentity = self)
                var res_bin = cmd_bin.init_command
                if not res_bin isa CmdSuccess then return
 
@@ -335,13 +345,12 @@ redef class MPackage
 
        private fun gen_makefile(model: Model, mainmodule: MModule): nullable String do
                var filter = new ModelFilter(accept_example = false, accept_test = false)
-               var view = new ModelView(model, mainmodule, filter)
 
                var pkg_path = package_path.as(not null)
                var makefile_path = makefile_path.as(not null)
 
                var bins = new Array[String]
-               var cmd_bin = new CmdMains(view, mentity = self)
+               var cmd_bin = new CmdMains(model, filter, mentity = self)
                var res_bin = cmd_bin.init_command
                if res_bin isa CmdSuccess then
                        for mmodule in cmd_bin.results.as(not null) do
@@ -389,9 +398,7 @@ redef class MPackage
        private fun check_man(toolcontext: ToolContext, mainmodule: MModule) do
                var model = toolcontext.modelbuilder.model
                var filter = new ModelFilter(accept_example = false, accept_test = false)
-               var view = new ModelView(model, mainmodule, filter)
-
-               var cmd = new CmdMains(view, mentity = self)
+               var cmd = new CmdMains(model, filter, mentity = self)
                var res = cmd.init_command
                if not res isa CmdSuccess then return
 
@@ -404,9 +411,7 @@ redef class MPackage
        private fun gen_man(toolcontext: ToolContext, mainmodule: MModule) do
                var model = toolcontext.modelbuilder.model
                var filter = new ModelFilter(accept_example = false, accept_test = false)
-               var view = new ModelView(model, mainmodule, filter)
-
-               var cmd = new CmdMains(view, mentity = self)
+               var cmd = new CmdMains(model, filter, mentity = self)
                var res = cmd.init_command
                if not res isa CmdSuccess then return
 
@@ -417,6 +422,15 @@ redef class MPackage
                        mmodule.gen_man(toolcontext)
                end
        end
+
+       # README
+
+       private fun check_readme(toolcontext: ToolContext) do
+               if not has_readme then
+                       toolcontext.error(location, "No `README.md` file for `{name}`")
+                       return
+               end
+       end
 end
 
 redef class MModule
@@ -514,8 +528,8 @@ redef class MModule
        end
 end
 
-redef class ConfigTree
-       private fun check_key(toolcontext: ToolContext, mpackage: MPackage, key: String, value: nullable String) do
+redef class IniFile
+       private fun check_key(ini_file: String, toolcontext: ToolContext, mpackage: MPackage, key: String, value: nullable String) do
                if not has_key(key) then
                        toolcontext.warning(mpackage.location, "missing-ini-key",
                                "Warning: missing `{key}` key in `{ini_file}`")