1from tkinter import ttk
2
3from thonny import get_workbench, ui_utils
4from thonny.config_ui import ConfigurationPage
5from thonny.languages import tr
6from thonny.tktextext import TextFrame
7from thonny.ui_utils import scrollbar_style
8
9
10class AssistantConfigPage(ConfigurationPage):
11    def __init__(self, master):
12        super().__init__(master)
13
14        self.add_checkbox(
15            "assistance.open_assistant_on_errors",
16            tr("Open Assistant automatically when program crashes with an exception"),
17            row=2,
18            columnspan=2,
19        )
20
21        self.add_checkbox(
22            "assistance.open_assistant_on_warnings",
23            tr("Open Assistant automatically when it has warnings for your code"),
24            row=3,
25            columnspan=2,
26        )
27
28        if get_workbench().get_option("assistance.use_pylint", "missing") != "missing":
29            self.add_checkbox(
30                "assistance.use_pylint", tr("Perform selected Pylint checks"), row=4, columnspan=2
31            )
32
33        if get_workbench().get_option("assistance.use_mypy", "missing") != "missing":
34            self.add_checkbox("assistance.use_mypy", tr("Perform MyPy checks"), row=5, columnspan=2)
35
36        disabled_checks_label = ttk.Label(self, text=tr("Disabled checks (one id per line)"))
37        disabled_checks_label.grid(row=8, sticky="nw", pady=(10, 0), columnspan=2)
38
39        self.disabled_checks_box = TextFrame(
40            self,
41            vertical_scrollbar_style=scrollbar_style("Vertical"),
42            horizontal_scrollbar_style=scrollbar_style("Horizontal"),
43            horizontal_scrollbar_class=ui_utils.AutoScrollbar,
44            wrap="word",
45            font="TkDefaultFont",
46            # cursor="arrow",
47            padx=5,
48            pady=5,
49            height=4,
50            borderwidth=1,
51            relief="groove",
52        )
53        self.disabled_checks_box.grid(row=9, sticky="nsew", pady=(0, 10), columnspan=2)
54        self.disabled_checks_box.text.insert(
55            "1.0", "\n".join(get_workbench().get_option("assistance.disabled_checks"))
56        )
57
58        self.columnconfigure(1, weight=1)
59        self.rowconfigure(9, weight=1)
60
61    def apply(self):
62        disabled_checks_str = (
63            self.disabled_checks_box.text.get("1.0", "end")
64            .replace("\r", "")
65            .replace('"', "")
66            .replace("'", "")
67            .strip()
68        )
69        get_workbench().set_option("assistance.disabled_checks", disabled_checks_str.splitlines())
70
71
72def load_plugin():
73    get_workbench().add_configuration_page("assistant", tr("Assistant"), AssistantConfigPage, 80)
74