Ejemplo n.º 1
0
	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 + "'")
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
    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