Skip to content

Commit 0cc971d

Browse files
refactor: classes (#23)
1 parent 50b6e80 commit 0cc971d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+744
-554
lines changed

README.md

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -135,21 +135,23 @@ pre-commit install
135135
### Plugin architecture
136136
```mermaid
137137
classDiagram
138-
TCodeRunner "1" o--> "1" IConfigManager : aggregates
138+
TCodeRunner "1" o--> "1" IConfig : aggregates
139139
TCodeRunner "1" o--> "1" ICommandsExecutor : aggregates
140140
TCodeRunner "1" o--> "1" IMessagePrinter : aggregates
141141
TCodeRunner "1" o--> "1" TBasicEditorServiceForCodeRunner : aggregates
142142
TCodeRunner "1" o--> "1" TBasicCommandDispatcherStrategySelector : aggregates
143-
IConfigManager "1" o--> "1" IConfigGetter : aggregates
144-
IConfigManager "1" o--> "1" TBasicConfigValidator : aggregates
143+
TBasicConfig ..|> IConfig : implements
144+
TBasicConfig "1" o--> "n" TConfigField : aggregates
145+
TConfigField "1" o--> "1" IConfigValueGetter : aggregates
146+
TConfigField "1" o--> "1" IValidator : aggregates
145147
TBasicEditorServiceForCodeRunner "1" o--> "1" IEditor : aggregates
146-
TBasicEditorServiceForCodeRunner "1" o--> "1" IConfigManager : aggregates
147-
ICommandsExecutor "1" o--> "1" IConfigManager : aggregates
148+
TBasicEditorServiceForCodeRunner "1" o--> "1" IConfig : aggregates
149+
ICommandsExecutor "1" o--> "1" IConfig : aggregates
148150
TBasicCommandDispatcherStrategySelector "1" o--> "1" TShebangCommandBuildersDispatcher : aggregates
149151
TBasicCommandDispatcherStrategySelector "1" o--> "1" TGlobCommandBuildersDispatcher : aggregates
150152
TBasicCommandDispatcherStrategySelector "1" o--> "1" TFileExtCommandBuildersDispatcher : aggregates
151153
TBasicCommandDispatcherStrategySelector "1" o--> "1" TFileTypeCommandBuildersDispatcher : aggregates
152-
TBasicCommandDispatcherStrategySelector "1" o--> "1" IConfigManager : aggregates
154+
TBasicCommandDispatcherStrategySelector "1" o--> "1" IConfig : aggregates
153155
TShebangCommandBuildersDispatcher ..|> ICommandBuildersDispatcher : implements
154156
TShebangCommandBuildersDispatcher "1" o--> "1" IFileInfoExtractor : aggregates
155157
TGlobCommandBuildersDispatcher ..|> ICommandBuildersDispatcher : implements
@@ -166,7 +168,7 @@ TBaseFileInfoExtractor ..|> IFileInfoExtractor : implements
166168
167169
168170
class TCodeRunner {
169-
# config_manager: IConfigManager
171+
# config: IConfig
170172
# editor_service: TBasicEditorServiceForCodeRunner
171173
# command_dispatcher_strategy_selector: TBasicCommandDispatcherStrategySelector
172174
# commands_executor: ICommandsExecutor
@@ -180,40 +182,48 @@ class TCodeRunner {
180182
}
181183
182184
183-
184-
class IConfigManager {
185+
class IConfig {
185186
<<interface>>
186-
+ get_dispatchers_order() list[str]
187+
+ get_by_file_ext() Dict[str, str]
188+
+ get_by_file_type() Dict[str, str]
189+
+ get_by_glob() Dict[str, str]
190+
+ get_dispatchers_order() List[EDispatchersTypes]
191+
+ get_coderunner_tempfile_prefix() str
187192
+ get_executor() str
188193
+ get_ignore_selection() bool
189194
+ get_respect_shebang() bool
190-
+ get_save_all_files() bool
191-
+ get_save_file() bool
195+
+ get_remove_coderunner_tempfiles_on_exit() bool
196+
+ get_save_all_files_before_run() bool
197+
+ get_save_file_before_run() bool
192198
}
193199
194200
195-
class IConfigGetter {
196-
<<interface>>
197-
+ get_dispatchers_order() Any
198-
+ get_executor() Any
199-
+ get_ignore_selection() Any
200-
+ get_respect_shebang() Any
201-
+ get_save_all_files() Any
202-
+ get_save_file() Any
201+
class TConfigField {
202+
# name: str
203+
# getter: IConfigValueGetter
204+
# validator: IValidator
205+
# allowed_values_description: str
206+
+ get() ValueType
207+
}
208+
209+
210+
class IConfigValueGetter {
211+
<<interface>>
212+
+ __call__() Any
203213
}
204214
205215
206-
class TBasicConfigValidator {
207-
+ validate_bool() bool
208-
+ validate_str() str
209-
+ validate_dispatcher() Dict[str, str]
210-
+ validate_dispatchers_order() List[EDispatchersTypes]
216+
class IValidator {
217+
<<interface>>
218+
+ __call__(value: Any) ValueType
219+
211220
}
212221
213222
214223
class TBasicEditorServiceForCodeRunner {
215224
# editor: IEditor
216-
# config_manager: IConfigManager
225+
# config:IConfig
226+
# file_info_extractor: IFileInfoExtractor
217227
Creates context which will delete file if it's temporary
218228
+ get_file_for_run() Context[str]
219229
Runs save_file or save_all_files if the command_builder is found,
@@ -240,13 +250,14 @@ class ICommandsExecutor {
240250
241251
242252
class IMessagePrinter {
253+
<<interface>>
243254
+ info(text: str) None
244255
+ error(text: str) None
245256
}
246257
247258
248259
class TBasicCommandDispatcherStrategySelector {
249-
# config_manager: IConfigManager
260+
# config: IConfig
250261
# shebang_dispatcher: TShebangCommandBuildersDispatcher
251262
# file_type_dispatcher: TFileExtCommandBuildersDispatcher
252263
# file_ext_dispatcher: TFileTypeCommandBuildersDispatcher

python_coderunner/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ disable = [
8181
"too-few-public-methods",
8282
"too-many-arguments",
8383
"too-many-positional-arguments",
84+
"too-many-instance-attributes",
8485
"raise-missing-from",
8586
"line-too-long",
8687
]

python_coderunner/src/coderunner/coderunner.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
TBasicCommandDispatcherStrategySelector,
66
)
77
from ..commands_executor import ICommandsExecutor
8-
from ..config_manager import TBasicConfigManager
8+
from ..config import IConfig
99
from ..editor_service_for_coderunner import TBasicEditorServiceForCodeRunner
1010
from ..message_printer import IMessagePrinter
1111

@@ -14,13 +14,13 @@ class TCodeRunner:
1414
def __init__(
1515
self,
1616
*,
17-
config_manager: TBasicConfigManager,
17+
config: IConfig,
1818
editor_service: TBasicEditorServiceForCodeRunner,
1919
command_dispatcher_strategy_selector: TBasicCommandDispatcherStrategySelector,
2020
commands_executor: ICommandsExecutor,
2121
message_printer: IMessagePrinter,
2222
):
23-
self._config_manager: TBasicConfigManager = config_manager
23+
self._config: IConfig = config
2424
self._editor_service: TBasicEditorServiceForCodeRunner = editor_service
2525
self._command_dispatcher_strategy_selector: TBasicCommandDispatcherStrategySelector = (
2626
command_dispatcher_strategy_selector
@@ -53,5 +53,5 @@ def remove_coderunner_tempfiles(self) -> None:
5353
self._editor_service.remove_coderunner_tempfiles()
5454

5555
def on_exit(self) -> None:
56-
if self._config_manager.get_remove_coderunner_tempfiles_on_exit():
56+
if self._config.get_remove_coderunner_tempfiles_on_exit():
5757
self.remove_coderunner_tempfiles()

python_coderunner/src/coderunner_factory/vim_coderunner_factory.py

Lines changed: 105 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,25 @@
1414
TBasicCommandDispatcherStrategySelector,
1515
)
1616
from ..commands_executor import TVimCommandsExecutor
17-
from ..config_manager import (
18-
TBasicConfigValidator,
19-
TVimConfigGetter,
20-
TVimConfigManager,
17+
from ..config import EDispatchersTypes, TConfigField, TVimConfig
18+
from ..config.getter import (
19+
TVimByFileExtConfigValueGetter,
20+
TVimByFileTypeConfigValueGetter,
21+
TVimByGlobConfigValueGetter,
22+
TVimCoderunnerTempfilePrefixConfigValueGetter,
23+
TVimDispatchersOrderConfigValueGetter,
24+
TVimExecutorConfigValueGetter,
25+
TVimIgnoreSelectionConfigValueGetter,
26+
TVimRemoveCoderunnerTempfilesOnExitConfigValueGetter,
27+
TVimRespectShebangConfigValueGetter,
28+
TVimSaveAllFilesBeforeRunConfigValueGetter,
29+
TVimSaveFileBeforeRunConfigValueGetter,
30+
)
31+
from ..config.validator import (
32+
TBoolValidator,
33+
TDispatchersOrderValidator,
34+
TDispatchersValidator,
35+
TStrValidator,
2136
)
2237
from ..editor import TVimEditor
2338
from ..editor_service_for_coderunner import TBasicEditorServiceForCodeRunner
@@ -29,7 +44,7 @@
2944

3045
class TVimCodeRunnerFactory(ICodeRunnerFactory):
3146
def create(self) -> Optional[TCodeRunner]:
32-
config_manager: TVimConfigManager = TVimConfigManager(TVimConfigGetter(), TBasicConfigValidator())
47+
config: TVimConfig = self._create_config()
3348
message_printer: TVimMessagePrinter = TVimMessagePrinter()
3449

3550
try:
@@ -38,18 +53,16 @@ def create(self) -> Optional[TCodeRunner]:
3853

3954
editor: TVimEditor = TVimEditor()
4055
editor_service_for_coderunner: TBasicEditorServiceForCodeRunner = TBasicEditorServiceForCodeRunner(
41-
config_manager, editor, file_info_extractor
56+
config, editor, file_info_extractor
4257
)
4358

4459
command_dispatcher_strategy_selector: TBasicCommandDispatcherStrategySelector = (
45-
self._create_command_dispatcher_strategy_selector(
46-
config_manager, file_info_extractor, project_info_extractor
47-
)
60+
self._create_command_dispatcher_strategy_selector(config, file_info_extractor, project_info_extractor)
4861
)
49-
commands_executor: TVimCommandsExecutor = TVimCommandsExecutor(config_manager)
62+
commands_executor: TVimCommandsExecutor = TVimCommandsExecutor(config)
5063

5164
return TCodeRunner(
52-
config_manager=config_manager,
65+
config=config,
5366
editor_service=editor_service_for_coderunner,
5467
command_dispatcher_strategy_selector=command_dispatcher_strategy_selector,
5568
commands_executor=commands_executor,
@@ -61,72 +74,138 @@ def create(self) -> Optional[TCodeRunner]:
6174

6275
return None
6376

77+
def _create_config(self) -> TVimConfig:
78+
return TVimConfig(
79+
by_file_ext_field=TConfigField(
80+
name="g:coderunner_by_file_ext",
81+
getter=TVimByFileExtConfigValueGetter(),
82+
validator=TDispatchersValidator(),
83+
allowed_values_description="Dict[str, str] value",
84+
),
85+
by_file_type_field=TConfigField(
86+
name="g:coderunner_by_file_type",
87+
getter=TVimByFileTypeConfigValueGetter(),
88+
validator=TDispatchersValidator(),
89+
allowed_values_description="Dict[str, str] value",
90+
),
91+
by_glob_field=TConfigField(
92+
name="g:coderunner_by_glob",
93+
getter=TVimByGlobConfigValueGetter(),
94+
validator=TDispatchersValidator(),
95+
allowed_values_description="Dict[str, str] value",
96+
),
97+
dispatchers_order_field=TConfigField(
98+
name="g:coderunner_runners_order",
99+
getter=TVimDispatchersOrderConfigValueGetter(),
100+
validator=TDispatchersOrderValidator(),
101+
allowed_values_description=", ".join(dispatcher_type.value for dispatcher_type in EDispatchersTypes),
102+
),
103+
coderunner_tempfile_prefix_field=TConfigField(
104+
name="g:coderunner_tempfile_prefix",
105+
getter=TVimCoderunnerTempfilePrefixConfigValueGetter(),
106+
validator=TStrValidator(),
107+
allowed_values_description="str value",
108+
),
109+
executor_field=TConfigField(
110+
name="g:coderunner_executor",
111+
getter=TVimExecutorConfigValueGetter(),
112+
validator=TStrValidator(),
113+
allowed_values_description="str value",
114+
),
115+
ignore_selection_field=TConfigField(
116+
name="g:coderunner_ignore_selection",
117+
getter=TVimIgnoreSelectionConfigValueGetter(),
118+
validator=TBoolValidator(),
119+
allowed_values_description="0 or 1",
120+
),
121+
respect_shebang_field=TConfigField(
122+
name="g:coderunner_respect_shebang",
123+
getter=TVimRespectShebangConfigValueGetter(),
124+
validator=TBoolValidator(),
125+
allowed_values_description="0 or 1",
126+
),
127+
remove_coderunner_tempfiles_on_exit_field=TConfigField(
128+
name="g:coderunner_remove_coderunner_tempfiles_on_exit",
129+
getter=TVimRemoveCoderunnerTempfilesOnExitConfigValueGetter(),
130+
validator=TBoolValidator(),
131+
allowed_values_description="0 or 1",
132+
),
133+
save_all_files_before_run_field=TConfigField(
134+
name="g:coderunner_save_all_files_before_run",
135+
getter=TVimSaveAllFilesBeforeRunConfigValueGetter(),
136+
validator=TBoolValidator(),
137+
allowed_values_description="0 or 1",
138+
),
139+
save_file_before_run_field=TConfigField(
140+
name="g:coderunner_save_file_before_run",
141+
getter=TVimSaveFileBeforeRunConfigValueGetter(),
142+
validator=TBoolValidator(),
143+
allowed_values_description="0 or 1",
144+
),
145+
)
146+
64147
def _create_command_dispatcher_strategy_selector(
65148
self,
66-
config_manager: TVimConfigManager,
149+
config: TVimConfig,
67150
file_info_extractor: TVimFileInfoExtractor,
68151
project_info_extractor: TVimProjectInfoExtractor,
69152
) -> TBasicCommandDispatcherStrategySelector:
70153
shebang_command_builders_dispatcher: TShebangCommandBuildersDispatcher = TShebangCommandBuildersDispatcher(
71154
file_info_extractor
72155
)
73156
file_ext_command_builders_dispatcher: TFileExtCommandBuildersDispatcher = (
74-
self._create_file_ext_command_builders_dispatcher(
75-
config_manager, file_info_extractor, project_info_extractor
76-
)
157+
self._create_file_ext_command_builders_dispatcher(config, file_info_extractor, project_info_extractor)
77158
)
78159
file_type_command_builders_dispatcher: TFileTypeCommandBuildersDispatcher = (
79-
self._create_file_type_command_builders_dispatcher(
80-
config_manager, file_info_extractor, project_info_extractor
81-
)
160+
self._create_file_type_command_builders_dispatcher(config, file_info_extractor, project_info_extractor)
82161
)
83162
glob_command_builders_dispatcher: TGlobCommandBuildersDispatcher = (
84-
self._create_glob_command_builders_dispatcher(config_manager, file_info_extractor, project_info_extractor)
163+
self._create_glob_command_builders_dispatcher(config, file_info_extractor, project_info_extractor)
85164
)
86165

87166
return TBasicCommandDispatcherStrategySelector(
167+
config=config,
88168
shebang_command_builders_dispatcher=shebang_command_builders_dispatcher,
89169
glob_command_builders_dispatcher=glob_command_builders_dispatcher,
90170
file_ext_command_builders_dispatcher=file_ext_command_builders_dispatcher,
91171
file_type_command_builders_dispatcher=file_type_command_builders_dispatcher,
92-
config_manager=config_manager,
93172
)
94173

95174
def _create_file_ext_command_builders_dispatcher(
96175
self,
97-
config_manager: TVimConfigManager,
176+
config: TVimConfig,
98177
file_info_extractor: TVimFileInfoExtractor,
99178
project_info_extractor: TVimProjectInfoExtractor,
100179
) -> TFileExtCommandBuildersDispatcher:
101180
return TFileExtCommandBuildersDispatcher(
102181
{
103182
key: TInterpolatorCommandBuilder(val, project_info_extractor, file_info_extractor)
104-
for key, val in config_manager.get_by_file_ext().items()
183+
for key, val in config.get_by_file_ext().items()
105184
},
106185
file_info_extractor,
107186
)
108187

109188
def _create_file_type_command_builders_dispatcher(
110189
self,
111-
config_manager: TVimConfigManager,
190+
config: TVimConfig,
112191
file_info_extractor: TVimFileInfoExtractor,
113192
project_info_extractor: TVimProjectInfoExtractor,
114193
) -> TFileTypeCommandBuildersDispatcher:
115194
return TFileTypeCommandBuildersDispatcher(
116195
{
117196
key: TInterpolatorCommandBuilder(val, project_info_extractor, file_info_extractor)
118-
for key, val in config_manager.get_by_file_type().items()
197+
for key, val in config.get_by_file_type().items()
119198
},
120199
file_info_extractor,
121200
)
122201

123202
def _create_glob_command_builders_dispatcher(
124203
self,
125-
config_manager: TVimConfigManager,
204+
config: TVimConfig,
126205
file_info_extractor: TVimFileInfoExtractor,
127206
project_info_extractor: TVimProjectInfoExtractor,
128207
) -> TGlobCommandBuildersDispatcher:
129-
dict_with_commands: Dict[str, str] = config_manager.get_by_glob()
208+
dict_with_commands: Dict[str, str] = config.get_by_glob()
130209
return TGlobCommandBuildersDispatcher(
131210
tuple(
132211
(

0 commit comments

Comments
 (0)