예제 #1
0
    def show_debugger_layout(self):
        if not self.debugger_model:
            self.debugger_model = DebuggerModel(self.debugger)

        self.debug_views = dict([
            (key, None) for key in self.debugger_model.get_data().keys()
        ])
        ViewHelper.init_debug_layout(self.window, self.debug_views)
예제 #2
0
    def start_command_async(self, file_path, use_bundler, *args):
        if self.debugger:
            self.debugger.run_command(DebuggerModel.COMMAND_STOP)

        # Initialize variables
        self.debugger = RubyDebugger(self, use_bundler)
        self.debugger_model = DebuggerModel(self.debugger)

        # Intialize debugger layout
        self.show_debugger_layout()

        # Start debugging
        self.debugger.run_command(DebuggerModel.COMMAND_START,
                                  PathHelper.get_pwd(file_path), file_path,
                                  *args)

        # Register all breakpoint
        self.register_breakpoints()
예제 #3
0
    def run(self, command, **args):
        # Allow only known commands
        if command not in DebuggerModel.COMMANDS:
            sublime.message_dialog("Unknown command: " + command)
            return
        # Allow only start command when inactive
        if not self.debugger and command not in DebuggerModel.STARTERS_COMMANDS:
            return

        # Cursor movement commands
        if command == DebuggerModel.COMMAND_JUMP:
            current_line = ViewHelper.get_current_cursor(
                self.window, self.debugger_model.get_current_file())

            if current_line:
                self.clear_cursor()
                self.debugger.run_command(command, str(current_line + 1))
                self.debugger.run_command(DebuggerModel.COMMAND_GET_LOCATION)
        elif command == DebuggerModel.COMMAND_GO_TO:
            file_name = self.debugger_model.get_current_file()
            current_line = ViewHelper.get_current_cursor(
                self.window, file_name)

            if current_line:
                self.clear_cursor()
                self.debugger.run_command(
                    DebuggerModel.COMMAND_SET_BREAKPOINT,
                    file_name + ":" + str(current_line + 1))
                self.debugger.run_command(DebuggerModel.COMMAND_CONTINUTE)
                self.register_breakpoints()
        elif command in DebuggerModel.MOVEMENT_COMMANDS:
            self.clear_cursor()
            self.debugger.run_command(command, **args)
            self.debugger.run_command(DebuggerModel.COMMAND_GET_LOCATION)
        # Input commands
        elif command == DebuggerModel.COMMAND_DEBUG_LAYOUT:
            self.show_debugger_layout()
        elif command == DebuggerModel.COMMAND_RESET_LAYOUT:
            if not self.debugger_model:
                self.debugger_model = DebuggerModel(self.debugger)

            if not self.debug_views:
                self.debug_views = dict([
                    (key, None)
                    for key in self.debugger_model.get_data().keys()
                ])

            ViewHelper.reset_debug_layout(self.window, self.debug_views)
        elif command == DebuggerModel.COMMAND_SEND_INPUT:
            self.window.show_input_panel(
                "Enter input", '',
                lambda input_line: self.on_input_entered(input_line), None,
                None)
        elif command == DebuggerModel.COMMAND_GET_EXPRESSION:
            self.window.show_input_panel(
                "Enter expression", '',
                lambda exp: self.on_expression_entered(exp), None, None)
        elif command == DebuggerModel.COMMAND_ADD_WATCH:
            self.window.show_input_panel(
                "Enter watch expression", '',
                lambda exp: self.on_watch_entered(exp), None, None)
        # Start command
        elif command == DebuggerModel.COMMAND_START_RAILS:
            if PathHelper.file_exists("script/rails", self.window):
                self.start_command("script/rails s")
            elif PathHelper.file_exists("bin/rails",
                                        self.window):  # Rails 4 support
                self.start_command("bin/rails s")
            else:
                sublime.message_dialog(
                    "Cannot find file. Are you sure you're in a rails project?"
                )
        elif command == DebuggerModel.COMMAND_START_CURRENT_FILE:
            self.start_command(self.window.active_view().file_name())
        elif command == DebuggerModel.COMMAND_START:
            self.window.show_input_panel(
                "Enter file name", '',
                lambda file_name: self.start_command(file_name), None, None)
        # Register breakpoints command
        elif command == DebuggerModel.COMMAND_SET_BREAKPOINT:
            self.register_breakpoints()
        # All othe commands
        else:
            self.debugger.run_command(command)