X-Git-Url: http://nitlanguage.org diff --git a/src/model/mpackage.nit b/src/model/mpackage.nit index bb6856b..f014ac9 100644 --- a/src/model/mpackage.nit +++ b/src/model/mpackage.nit @@ -19,6 +19,7 @@ import model_base private import more_collections import poset import mdoc +import graph::digraph # A Nit package, that encompass a product class MPackage @@ -47,6 +48,8 @@ class MPackage init do model.mpackages.add(self) + # Add `self` to the importation graph + model.mpackage_importation_graph.add_vertex(self) model.mpackage_by_name.add_one(name, self) end @@ -61,6 +64,52 @@ class MPackage if root != null then return root.mdoc_or_fallback return null end + + # Does `self` have a source file? + fun has_source: Bool do return location.file != null + + # The path to `self` + fun package_path: nullable String do + if not has_source then return null + return location.file.as(not null).filename + end + + # Is `self` in its own directory? + fun is_expanded: Bool do + var path = package_path + if path == null then return false + return not path.has_suffix(".nit") + end + + # The path to `self` ini file + fun ini_path: nullable String do + var path = package_path + if path == null then return null + if is_expanded then return path / "package.ini" + return path.dirname / "{name}.ini" + end + + # Does `self` have a ini file? + fun has_ini: Bool do + var ini_path = self.ini_path + if ini_path == null then return false + return ini_path.file_exists + end + + # The path to `self` README.md + fun readme_path: nullable String do + var path = package_path + if path == null then return null + if not is_expanded then return null + return path / "README.md" + end + + # Does `self` have a README.md file? + fun has_readme: Bool do + var readme_path = self.readme_path + if readme_path == null then return false + return readme_path.file_exists + end end # A group of modules in a package @@ -131,6 +180,11 @@ class MGroup end redef class Model + + # Full package importation graph + # Each package is in relation with itself + var mpackage_importation_graph = new HashDigraph[MPackage] + # packages of the model var mpackages = new Array[MPackage]