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

1from __future__ import annotations 

2 

3from pathlib import Path 

4 

5from ..config import CodeStyle, ClangFormatOptions 

6from ..ir import SfgSourceFile 

7 

8from .file_printer import SfgFilePrinter 

9from .clang_format import invoke_clang_format 

10 

11 

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) 

23 

24 def dumps(self, file: SfgSourceFile) -> str: 

25 code = self._printer(file) 

26 

27 if self._code_style.get_option("includes_sorting_key") is not None: 

28 sort_includes = "Never" 

29 else: 

30 sort_includes = None 

31 

32 code = invoke_clang_format( 

33 code, self._clang_format_opts, sort_includes=sort_includes 

34 ) 

35 

36 return code 

37 

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)