def evaluate_settings(self): # validate final project directory (by settings) project_directory = os.path.join(self.directory, self.get_setting("PROJECT_DIRECTORY")) if os.path.exists(project_directory): self.project_directory = Path.posix(project_directory) else: self.project_directory = Path.posix(self.directory) warn(ID, "project directory in settings in not a valid folder") # setup project cache triggers = self.settings.get("scopes", self.get_setting("TRIGGER")) valid_file_extensions = get_valid_extensions(triggers) folders_to_exclude = self.get_setting("EXCLUDE_FOLDERS") self.filecache = FileCache(valid_file_extensions, folders_to_exclude, self.project_directory) # evaluate base directory self.base_directory = Validate.sanitize_base_directory( self.settings.get("BASE_DIRECTORY", ""), self.project_directory, self.directory ) verbose(ID, "new project created", self.project_directory) verbose(ID, "Base directory at", "'" + self.base_directory + "'")
def update(): """ call me anytime a new view has gained focus. This includes activation of a new window, which should have an active view """ global valid, is_enabled if not is_enabled: return False temp = False window = sublime.active_window() if window is None: logger.log(ID, "Abort -- no active window") valid = False return valid view = window.active_view() if view is None: logger.log(ID, "Abort -- no active view") valid = False return valid file = Path.posix(view.file_name()) if not file: logger.log(ID, "Abort -- view has not yet been saved to file") temp = True return valid if state.get("file") == file: logger.log(ID, "Abort -- view already updated") return valid folders = list(map(lambda f: Path.posix(f), window.folders())) project_folder = get_closest_folder(file, folders) if project_folder is False: logger.log(ID, "Abort -- file not part of a project (folder)") valid = False return valid # notify settings of new project folder if state.get("project_folder") != project_folder: settings.update_project_settings() settings.update_project_folder_settings(project_folder) valid = True # @TODO cache state["file"] = file state["directory"] = sanitize_directory(file, project_folder) state["folders"] = folders state["project_folder"] = project_folder state["cache"] = get_file_cache(project_folder) logger.start_block() logger.verbose(ID, "Updated", state) return valid
def rebuild_filecache(folder=None): if not folder: if state.get("cache"): logger.verbose( ID, "rebuild current filecache of folder " + state.get("project_folder")) state.get("cache").rebuild() return folder = Path.posix(folder) if not folder in file_caches: logger.log( ID, "Abort rebuild filecache -- folder " + folder + " not cached") return False logger.verbose(ID, "rebuild current filecache of folder " + folder) file_caches.get(folder).rebuild()
def evaluate_current(view, project): cache = CurrentFile.cache.get(view.id()) if cache: verbose(ID, "file cached", cache) CurrentFile.current = cache return cache if not project: # not a project verbose(ID, "no project set") CurrentFile.current = CurrentFile.default return file_name = Path.posix(view.file_name()) if not file_name: # not saved on disk CurrentFile.current = get_default() CurrentFile.current["is_temp"] = True CurrentFile.cache[view.id()] = CurrentFile.current verbose(ID, "file not saved") return project_directory = project.get_directory() if project_directory not in file_name: # not within project CurrentFile.current = CurrentFile.default verbose(ID, "file not within a project") return # add current view to cache CurrentFile.current = get_default() CurrentFile.current["project_directory"] = project_directory CurrentFile.current["directory"] = re.sub(project_directory, "", file_name) CurrentFile.current["directory"] = re.sub("^[\\\\/\.]*", "", CurrentFile.current["directory"]) CurrentFile.current["directory"] = os.path.dirname(CurrentFile.current["directory"]) verbose(ID, "File cached", file_name) CurrentFile.cache[view.id()] = CurrentFile.current