diff --git a/docs/source/_util/sfg_monkeypatch.py b/docs/source/_util/sfg_monkeypatch.py index 127760338002be1edd0490a2887c819290fdbcf3..91a96233b0af6831dbd0c8ac4db06d862517d994 100644 --- a/docs/source/_util/sfg_monkeypatch.py +++ b/docs/source/_util/sfg_monkeypatch.py @@ -30,8 +30,9 @@ class DocsPatchedGenerator(pystencilssfg.SourceFileGenerator): def __exit__(self, exc_type, exc_value, traceback): if exc_type is None: self._finish_files() + emitter = self._get_emitter() - header_code = self._emitter.dumps(self._header_file) + header_code = emitter.dumps(self._header_file) header_ext = splitext(self._header_file.name)[1] mdcode = ":::::{tab-set}\n" @@ -42,7 +43,7 @@ class DocsPatchedGenerator(pystencilssfg.SourceFileGenerator): mdcode += "\n:::\n::::\n" if self._impl_file is not None: - impl_code = self._emitter.dumps(self._impl_file) + impl_code = emitter.dumps(self._impl_file) impl_ext = splitext(self._impl_file.name)[1] mdcode += f"::::{{tab-item}} Generated Implementation ({impl_ext})\n" diff --git a/src/pystencilssfg/context.py b/src/pystencilssfg/context.py index 3ea82f2b2698d240b28af6b280ef8ffad8b7ac25..5773455198187fef7d670ca1f4f9232fb1d7adde 100644 --- a/src/pystencilssfg/context.py +++ b/src/pystencilssfg/context.py @@ -2,7 +2,7 @@ from __future__ import annotations from typing import Sequence, Any, Generator from contextlib import contextmanager -from .config import CodeStyle +from .config import CodeStyle, ClangFormatOptions from .ir import ( SfgSourceFile, SfgNamespace, @@ -23,6 +23,7 @@ class SfgContext: impl_file: SfgSourceFile | None, namespace: str | None = None, codestyle: CodeStyle | None = None, + clang_format_opts: ClangFormatOptions | None = None, argv: Sequence[str] | None = None, project_info: Any = None, ): @@ -33,6 +34,9 @@ class SfgContext: self._inner_namespace: str | None = None self._codestyle = codestyle if codestyle is not None else CodeStyle() + self._clang_format: ClangFormatOptions = ( + clang_format_opts if clang_format_opts is not None else ClangFormatOptions() + ) self._header_file = header_file self._impl_file = impl_file @@ -73,6 +77,10 @@ class SfgContext: """The code style object for this generation context.""" return self._codestyle + @property + def clang_format(self) -> ClangFormatOptions: + return self._clang_format + @property def header_file(self) -> SfgSourceFile: return self._header_file diff --git a/src/pystencilssfg/generator.py b/src/pystencilssfg/generator.py index c314d67bbc45d5da639d3b7a2b2f92667cc77586..fe4eb99d4cf15056e457fd14a7976d54bb0db6ae 100644 --- a/src/pystencilssfg/generator.py +++ b/src/pystencilssfg/generator.py @@ -95,9 +95,7 @@ class SourceFileGenerator: self._impl_file = SfgSourceFile( output_files[1].name, SfgSourceFileType.TRANSLATION_UNIT ) - self._impl_file.includes.append( - HeaderFile.parse(self._header_file.name) - ) + self._impl_file.includes.append(HeaderFile.parse(self._header_file.name)) # TODO: Find a way to not hard-code the restrict qualifier in pystencils self._header_file.elements.append("#define RESTRICT __restrict__") @@ -115,14 +113,11 @@ class SourceFileGenerator: self._impl_file, namespace, config.codestyle, + config.clang_format, argv=script_args, project_info=cli_params.get_project_info(), ) - self._emitter = SfgCodeEmitter( - self._output_dir, config.codestyle, config.clang_format - ) - sort_key = config.codestyle.get_option("includes_sorting_key") if sort_key is None: @@ -161,6 +156,13 @@ class SourceFileGenerator: ) self._impl_file.includes.sort(key=self._include_sort_key) + def _get_emitter(self): + return SfgCodeEmitter( + self._output_dir, + self._context.codestyle, + self._context.clang_format, + ) + def __enter__(self) -> SfgComposer: self.clean_files() return SfgComposer(self._context) @@ -169,6 +171,7 @@ class SourceFileGenerator: if exc_type is None: self._finish_files() - self._emitter.emit(self._header_file) + emitter = self._get_emitter() + emitter.emit(self._header_file) if self._impl_file is not None: - self._emitter.emit(self._impl_file) + emitter.emit(self._impl_file)