Source code for champollion.parser.js_module

# :coding: utf-8


[docs]def fetch_environment(file_id, files=None, module_names=None): """Return module environment dictionary from *file_id*. *file_id* represent the identifier of the file. *files* is an optional list of the other file names stored in the same directory as the one analyzed. *module_names* is an optional list of all the other module name previously fetched to help determine the module name of the current file. The environment is in the form of:: { "id": "module.test", "name": test, "file_id": "module/test/index.js" } """ if module_names is None: module_names = [] hierarchy = file_id.split("/") file_name = hierarchy.pop() if file_name == "index.js": module_id = ".".join(hierarchy) module_name = _guess_module_name( hierarchy[-1], hierarchy_folders=hierarchy[:-1], module_names=module_names ) elif "index.js" in files: name = file_name.split(".js")[0] module_id = ".".join(hierarchy + [name]) module_name = _guess_module_name( ".".join([hierarchy[-1], name]), hierarchy_folders=hierarchy[:-1], module_names=module_names ) else: name = file_name.split(".js")[0] module_id = ".".join(hierarchy + [name]) module_name = name return { "id": module_id, "name": module_name, "path": module_id.replace(".", "/"), "file_id": file_id }
def _guess_module_name(name, hierarchy_folders, module_names): """Return the full module *name* from *hierarchy_folders*. *module_names* is the list of modules already fetched. """ for i in range(len(hierarchy_folders)): root_module = ".".join(hierarchy_folders[i:]) if root_module in module_names: return ".".join([root_module, name]) return name