+ var root = self.root
+ 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