X-Git-Url: http://nitlanguage.org diff --git a/src/loader.nit b/src/loader.nit index 0ae8ff0..967d335 100644 --- a/src/loader.nit +++ b/src/loader.nit @@ -42,13 +42,13 @@ import ini redef class ToolContext # Option --path - var opt_path = new OptionArray("Set include path for loaders (may be used more than once)", "-I", "--path") + var opt_path = new OptionArray("Add an additional include path (may be used more than once)", "-I", "--path") # Option --only-metamodel var opt_only_metamodel = new OptionBool("Stop after meta-model processing", "--only-metamodel") # Option --only-parse - var opt_only_parse = new OptionBool("Only proceed to parse step of loaders", "--only-parse") + var opt_only_parse = new OptionBool("Only proceed to parse files", "--only-parse") redef init do @@ -104,7 +104,7 @@ redef class ModelBuilder if toolcontext.opt_only_parse.value then self.toolcontext.info("*** ONLY PARSE...", 1) - exit(0) + self.toolcontext.quit end return mmodules.to_a @@ -130,6 +130,7 @@ redef class ModelBuilder if stat != null and stat.is_dir then self.toolcontext.info("look in directory {a}", 2) var fs = a.files + alpha_comparator.sort(fs) # Try each entry as a group or a module for f in fs do var af = a/f @@ -151,6 +152,11 @@ redef class ModelBuilder var mmodule = identify_module(a) if mmodule == null then + if a.file_exists then + toolcontext.error(null, "Error: `{a}` is not a Nit source file.") + else + toolcontext.error(null, "Error: cannot find module `{a}`.") + end continue end @@ -193,7 +199,7 @@ redef class ModelBuilder if toolcontext.opt_only_parse.value then self.toolcontext.info("*** ONLY PARSE...", 1) - exit(0) + self.toolcontext.quit end return mmodules.to_a @@ -237,7 +243,9 @@ redef class ModelBuilder end end - var candidate = search_module_in_paths(anode.hot_location, name, lookpaths) + var loc = null + if anode != null then loc = anode.hot_location + var candidate = search_module_in_paths(loc, name, lookpaths) if candidate == null then if mgroup != null then @@ -373,9 +381,9 @@ redef class ModelBuilder if mgroup == null then # singleton package - var mpackage = new MPackage(pn, model) - mgroup = new MGroup(pn, mpackage, null) # same name for the root group - mgroup.filepath = path + var loc = new Location.opaque_file(path) + var mpackage = new MPackage(pn, model, loc) + mgroup = new MGroup(pn, loc, mpackage, null) # same name for the root group mpackage.root = mgroup toolcontext.info("found singleton package `{pn}` at {path}", 2) @@ -387,10 +395,8 @@ redef class ModelBuilder end end - var src = new SourceFile.from_string(path, "") - var loc = new Location(src, 0, 0, 0, 0) + var loc = new Location.opaque_file(path) var res = new MModule(model, mgroup, pn, loc) - res.filepath = path identified_modules_by_path[rp] = res identified_modules_by_path[path] = res @@ -475,17 +481,18 @@ redef class ModelBuilder end end + var loc = new Location.opaque_file(dirpath) var mgroup if parent == null then # no parent, thus new package if ini != null then pn = ini["package.name"] or else pn - var mpackage = new MPackage(pn, model) - mgroup = new MGroup(pn, mpackage, null) # same name for the root group + var mpackage = new MPackage(pn, model, loc) + mgroup = new MGroup(pn, loc, mpackage, null) # same name for the root group mpackage.root = mgroup toolcontext.info("found package `{mpackage}` at {dirpath}", 2) mpackage.ini = ini else - mgroup = new MGroup(pn, parent.mpackage, parent) + mgroup = new MGroup(pn, loc, parent.mpackage, parent) toolcontext.info("found sub group `{mgroup.full_name}` at {dirpath}", 2) end @@ -499,7 +506,6 @@ redef class ModelBuilder mdoc.original_mentity = mgroup end - mgroup.filepath = dirpath mgroups[rdp] = mgroup return mgroup end @@ -539,7 +545,9 @@ redef class ModelBuilder var p = mgroup.filepath # a virtual group has nothing to scan if p == null then return - for f in p.files do + var files = p.files + alpha_comparator.sort(files) + for f in files do var fp = p/f var g = identify_group(fp) # Recursively scan for groups of the same package @@ -602,6 +610,11 @@ redef class ModelBuilder var keep = new Array[String] var res = new Array[String] for a in args do + var stat = a.to_path.stat + if stat != null and stat.is_dir then + res.add a + continue + end var l = identify_module(a) if l == null then keep.add a @@ -647,6 +660,7 @@ redef class ModelBuilder var mmodule = new MModule(model, mgroup, mod_name, nmodule.location) nmodule.mmodule = mmodule nmodules.add(nmodule) + parsed_modules.add mmodule self.mmodule2nmodule[mmodule] = nmodule if parent!= null then @@ -705,8 +719,6 @@ redef class ModelBuilder var mdoc = ndoc.to_mdoc mmodule.mdoc = mdoc mdoc.original_mentity = mmodule - else - advice(decl, "missing-doc", "Documentation warning: Undocumented module `{mmodule}`") end # Is the module a test suite? mmodule.is_test_suite = not decl.get_annotations("test_suite").is_empty @@ -1002,9 +1014,6 @@ redef class ModelBuilder end redef class MModule - # The path of the module source - var filepath: nullable String = null - # Force the parsing of the module using `modelbuilder`. # # If the module was already parsed, the existing ASI is returned. @@ -1028,6 +1037,7 @@ redef class MModule # build the mmodule nmodule.mmodule = self + self.location = nmodule.location modelbuilder.build_a_mmodule(mgroup, nmodule) modelbuilder.parsed_modules.add self