Coverage for src/pystencilssfg/emission/emitter.py: 100%
24 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-04 07:16 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-04 07:16 +0000
1from __future__ import annotations
3from pathlib import Path
5from ..config import CodeStyle, ClangFormatOptions
6from ..ir import SfgSourceFile
8from .file_printer import SfgFilePrinter
9from .clang_format import invoke_clang_format
12class SfgCodeEmitter:
13 def __init__(
14 self,
15 output_directory: Path,
16 code_style: CodeStyle = CodeStyle(),
17 clang_format: ClangFormatOptions = ClangFormatOptions(),
18 ):
19 self._output_dir = output_directory
20 self._code_style = code_style
21 self._clang_format_opts = clang_format
22 self._printer = SfgFilePrinter(code_style)
24 def dumps(self, file: SfgSourceFile) -> str:
25 code = self._printer(file)
27 if self._code_style.get_option("includes_sorting_key") is not None:
28 sort_includes = "Never"
29 else:
30 sort_includes = None
32 code = invoke_clang_format(
33 code, self._clang_format_opts, sort_includes=sort_includes
34 )
36 return code
38 def emit(self, file: SfgSourceFile):
39 code = self.dumps(file)
40 self._output_dir.mkdir(parents=True, exist_ok=True)
41 fpath = self._output_dir / file.name
42 fpath.write_text(code)