Exemplo n.º 1
0
class Project(OnePerWindow):
    def __init__(self, window):
        self.window = window
        self.settings = SBTSettings(window)
        self.error_report = ErrorReport()
        self.error_reporter = ErrorReporter(window, self.error_report,
                                            self.settings)

    def project_root(self):
        for folder in self.window.folders():
            if self._is_sbt_folder(folder):
                return folder

    def is_sbt_project(self):
        return self.project_root() is not None

    def is_play_project(self):
        for root in maybe(self.project_root()):
            if self._play_build_files(root):
                return True

    def sbt_command(self):
        if self.is_play_project():
            return self.settings.play_command()
        else:
            return self.settings.sbt_command()

    def setting(self, name):
        return self.settings.get(name)

    def expand_filename(self, filename):
        if len(os.path.dirname(filename)) > 0:
            return filename
        else:
            return self._find_in_project(filename)

    def relative_path(self, filename):
        return os.path.relpath(filename, self.project_root())

    def open_project_file(self, filename, line):
        full_path = os.path.join(self.project_root(), filename)
        self.window.open_file('%s:%i' % (full_path, line),
                              sublime.ENCODED_POSITION)

    def _is_sbt_folder(self, folder):
        if self._sbt_build_files(folder) or self._scala_build_files(folder):
            return True

    def _sbt_build_files(self, folder):
        return glob(os.path.join(folder, '*.sbt'))

    def _scala_build_files(self, folder):
        return glob(os.path.join(folder, 'project', '*.scala'))

    def _play_build_files(self, folder):
        return list(
            filter(self._is_play_build, self._scala_build_files(folder)))

    def _is_play_build(self, build_path):
        try:
            with open(build_path, 'r') as build_file:
                for line in build_file.readlines():
                    if re.search(r'\b(?:play\.|Play)Project\b', line):
                        return True
        except:
            return False

    def _find_in_project(self, filename):
        for path, _, files in os.walk(self.project_root()):
            if filename in files:
                return os.path.join(path, filename)
Exemplo n.º 2
0
class Project(object):

    projects = {}

    @classmethod
    def get_project(cls, window):
        if window.id() not in cls.projects:
            cls.projects[window.id()] = Project(window)
        return cls.projects[window.id()]

    def __init__(self, window):
        self.window = window
        self.settings = SBTSettings(window)
        self.error_report = ErrorReport()
        self.error_reporter = ErrorReporter(window,
                                            self.error_report,
                                            self.settings)

    def project_root(self):
        for folder in self.window.folders():
            if self._is_sbt_folder(folder):
                return folder

    def is_sbt_project(self):
        return self.project_root() is not None

    def is_play_project(self):
        if not self.is_sbt_project():
            return False
        build_path = os.path.join(self.project_root(), 'project', 'Build.scala')
        return os.path.exists(build_path) and self._is_play_build(build_path)

    def sbt_command(self):
        if self.is_play_project():
            return self.settings.play_command()
        else:
            return self.settings.sbt_command()

    def setting(self, name):
        return self.settings.get(name)

    def expand_filename(self, filename):
        if len(os.path.dirname(filename)) > 0:
            return filename
        else:
            return self._find_in_project(filename)

    def relative_path(self, filename):
        return os.path.relpath(filename, self.project_root())

    def open_project_file(self, filename, line):
        full_path = os.path.join(self.project_root(), filename)
        self.window.open_file('%s:%i' % (full_path, line),
                              sublime.ENCODED_POSITION)

    def _is_sbt_folder(self, folder):
        return (os.path.exists(os.path.join(folder, 'build.sbt')) or
                os.path.exists(os.path.join(folder, 'project', 'Build.scala')))

    def _is_play_build(self, build_path):
        try:
            build_file = open(build_path, 'r').readlines()
            for line in build_file:
                if re.search(r'\bPlayProject\b', line):
                    return True
            build_file.close()
        except:
            return False

    def _find_in_project(self, filename):
        for path, _, files in os.walk(self.project_root()):
            if filename in files:
                return os.path.join(path, filename)
Exemplo n.º 3
0
class Project(OnePerWindow):

    def __init__(self, window):
        self.window = window
        self.settings = SBTSettings(window)
        self.error_report = ErrorReport()
        self.error_reporter = ErrorReporter(window,
                                            self.error_report,
                                            self.settings)

    def project_root(self):
        for folder in self.window.folders():
            if self._is_sbt_folder(folder):
                return folder

    def is_sbt_project(self):
        return self.project_root() is not None

    def is_play_project(self):
        for root in maybe(self.project_root()):
            if self._play_build_files(root):
                return True

    def sbt_command(self):
        if self.is_play_project():
            return self.settings.play_command()
        else:
            return self.settings.sbt_command()

    def setting(self, name):
        return self.settings.get(name)

    def expand_filename(self, filename):
        if len(os.path.dirname(filename)) > 0:
            return filename
        else:
            return self._find_in_project(filename)

    def relative_path(self, filename):
        return os.path.relpath(filename, self.project_root())

    def open_project_file(self, filename, line):
        full_path = os.path.join(self.project_root(), filename)
        self.window.open_file('%s:%i' % (full_path, line),
                              sublime.ENCODED_POSITION)

    def _is_sbt_folder(self, folder):
        if self._sbt_build_files(folder) or self._scala_build_files(folder):
            return True

    def _sbt_build_files(self, folder):
        return glob(os.path.join(folder, '*.sbt'))

    def _scala_build_files(self, folder):
        return glob(os.path.join(folder, 'project', '*.scala'))

    def _play_build_files(self, folder):
        return list(filter(self._is_play_build, self._scala_build_files(folder)))

    def _is_play_build(self, build_path):
        try:
            with open(build_path, 'r') as build_file:
                for line in build_file.readlines():
                    if re.search(r'\b(?:play\.|Play)Project\b', line):
                        return True
        except:
            return False

    def _find_in_project(self, filename):
        for path, _, files in os.walk(self.project_root()):
            if filename in files:
                return os.path.join(path, filename)