Skip to content

Commit 302d80b

Browse files
chaemonkyuridenamida
authored andcommitted
Make default code style configurable at language level (kyuridenamida#154)
* default code styleを変更 * add default_code_style * add default code style * code_style_config.pyのNIM importを削除 * check_autopep8を削除 * CodeStyleをdictではなくclassに
1 parent 636aa9b commit 302d80b

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

atcodertools/codegen/code_style_config.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def __init__(self,
2626
workspace_dir: Optional[str] = None,
2727
lang: str = "cpp",
2828
):
29-
from atcodertools.common.language import Language, LanguageNotFoundError, ALL_LANGUAGE_NAMES, NIM
29+
from atcodertools.common.language import Language, LanguageNotFoundError, ALL_LANGUAGE_NAMES
3030

3131
code_generator_file = normalize_path(code_generator_file)
3232
template_file = normalize_path(template_file)
@@ -59,9 +59,10 @@ def __init__(self,
5959

6060
if indent_width is not None:
6161
self.indent_width = indent_width
62+
elif lang.default_code_style is not None and lang.default_code_style.indent_width is not None:
63+
self.indent_width = lang.default_code_style.indent_width
6264
else:
63-
# nim has a special default value
64-
self.indent_width = 2 if lang == NIM else 4
65+
self.indent_width = 4
6566

6667
if code_generator_file is not None:
6768
try:

atcodertools/common/language.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,30 @@ class LanguageNotFoundError(Exception):
1010
pass
1111

1212

13-
class Language:
13+
class CodeStyle:
14+
def __init__(self,
15+
indent_width=None
16+
):
17+
self.indent_width = indent_width
1418

19+
20+
class Language:
1521
def __init__(self,
1622
name: str,
1723
display_name: str,
1824
extension: str,
1925
submission_lang_pattern: Pattern[str],
2026
default_code_generator: Callable[[CodeGenArgs], str],
2127
default_template_path: str,
28+
default_code_style=None
2229
):
2330
self.name = name
2431
self.display_name = display_name
2532
self.extension = extension
2633
self.submission_lang_pattern = submission_lang_pattern
2734
self.default_code_generator = default_code_generator
2835
self.default_template_path = default_template_path
36+
self.default_code_style = default_code_style
2937

3038
def source_code_name(self, name_without_extension: str) -> str:
3139
# put extension to the name
@@ -92,6 +100,7 @@ def from_name(cls, name: str):
92100
submission_lang_pattern=re.compile(".*Nim \\(0.*"),
93101
default_code_generator=nim.main,
94102
default_template_path=get_default_template_path('nim'),
103+
default_code_style=CodeStyle(indent_width=2)
95104
)
96105

97106
ALL_LANGUAGES = [CPP, JAVA, RUST, PYTHON, NIM, DLANG]

tests/test_codegen.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,11 @@ def _compile_and_run(self, lang, format, template_file, expected_generated_code_
221221
code_file = os.path.join(self.temp_dir, lang.source_code_name("main"))
222222
exec_file, exec_args = self._exec_file_and_args(lang)
223223
compile_cmd = self._compile_command(lang, code_file)
224-
if lang == NIM:
225-
cfg = CodeStyleConfig(indent_width=2)
226-
else:
227-
cfg = CodeStyleConfig()
228224
args = CodeGenArgs(
229225
template=load_text_file(template_file),
230226
format_=format,
231227
constants=ProblemConstantSet(123, "yes", "NO"),
232-
config=cfg
228+
config=CodeStyleConfig(lang=lang.name)
233229
)
234230
code = lang.default_code_generator(args)
235231
# to remove version strings from test resources
@@ -277,7 +273,6 @@ def verify(self,
277273
self.assertEqual(
278274
load_intermediate_types(py_test_name),
279275
str(response.types))
280-
281276
self.assertEqual(
282277
load_generated_code(py_test_name, lang),
283278
self.lang_to_code_generator_func[lang](

0 commit comments

Comments
 (0)