refactor: use partial to simplify parsers function maps
All checks were successful
build / build (push) Successful in 2m2s

This commit is contained in:
张泊明518370910136 2025-03-17 19:19:50 -04:00
parent df14ad801b
commit 75558700b4
GPG Key ID: D47306D7062CDA9D

View File

@ -1,5 +1,6 @@
import re import re
import shlex import shlex
from functools import partial
from pathlib import Path from pathlib import Path
from typing import Any, Callable, Dict, List, Tuple from typing import Any, Callable, Dict, List, Tuple
@ -28,29 +29,25 @@ def get_conf_stage(
), ),
parsers=([result.Parser(name=parser) for parser in task_stage.parsers]), parsers=([result.Parser(name=parser) for parser in task_stage.parsers]),
) )
processed_dict = get_processed_dict(task_stage) parser_handler_map = get_parser_handler_map(
task_stage,
conf_stage.executor,
JOJ3_CONFIG_ROOT / task_conf.path.parent,
)
for idx, parser in enumerate(task_stage.parsers): for idx, parser in enumerate(task_stage.parsers):
if parser in processed_dict: if parser not in parser_handler_map:
fn, parser_model = processed_dict[parser] raise ValueError(f"Unknown parser {parser}")
fn(parser_model, conf_stage.parsers[idx]) fn, parser_model = parser_handler_map[parser]
elif parser == ParserEnum.DIFF: fn(parser_model, conf_stage.parsers[idx])
fix_diff(
task_stage,
conf_stage.parsers[idx],
conf_stage.executor,
JOJ3_CONFIG_ROOT / task_conf.path.parent,
)
else:
continue
return conf_stage return conf_stage
def get_processed_dict( def get_parser_handler_map(
task_stage: task.Stage, task_stage: task.Stage,
diff_executor_config: result.Executor,
base_dir: Path,
) -> Dict[ParserEnum, Tuple[Callable[[Any, result.Parser], None], Any]]: ) -> Dict[ParserEnum, Tuple[Callable[[Any, result.Parser], None], Any]]:
processed_dict: Dict[ return {
ParserEnum, Tuple[Callable[[Any, result.Parser], None], Any]
] = {
ParserEnum.CLANG_TIDY: (fix_keyword, task_stage.clangtidy), ParserEnum.CLANG_TIDY: (fix_keyword, task_stage.clangtidy),
ParserEnum.KEYWORD: (fix_keyword, task_stage.keyword), ParserEnum.KEYWORD: (fix_keyword, task_stage.keyword),
ParserEnum.CPPCHECK: (fix_keyword, task_stage.cppcheck), ParserEnum.CPPCHECK: (fix_keyword, task_stage.cppcheck),
@ -59,8 +56,16 @@ def get_processed_dict(
ParserEnum.DUMMY: (fix_dummy, task_stage.dummy), ParserEnum.DUMMY: (fix_dummy, task_stage.dummy),
ParserEnum.RESULT_STATUS: (fix_dummy, task_stage.result_status), ParserEnum.RESULT_STATUS: (fix_dummy, task_stage.result_status),
ParserEnum.FILE: (fix_file, task_stage.file), ParserEnum.FILE: (fix_file, task_stage.file),
ParserEnum.DIFF: (
partial(
fix_diff,
task_stage=task_stage,
diff_executor_config=diff_executor_config,
base_dir=base_dir,
),
task_stage.diff,
),
} }
return processed_dict
def get_executor_with( def get_executor_with(
@ -150,8 +155,9 @@ def fix_file(file_parser_config: task.ParserFile, file_parser: result.Parser) ->
def fix_diff( def fix_diff(
task_stage: task.Stage, _: task.ParserDiff,
diff_parser_config: result.Parser, diff_parser_config: result.Parser,
task_stage: task.Stage,
diff_executor_config: result.Executor, diff_executor_config: result.Executor,
base_dir: Path, base_dir: Path,
) -> None: ) -> None: