From f56a6c683626a5d3126afe68e37199be023f844a Mon Sep 17 00:00:00 2001 From: Frederik Hennig <frederik.hennig@fau.de> Date: Thu, 30 Nov 2023 12:01:52 +0100 Subject: [PATCH] refactored indentation --- src/pystencilssfg/configuration.py | 6 +++--- src/pystencilssfg/context.py | 15 +++++++++++---- src/pystencilssfg/emitters/cpu/basic_cpu.py | 11 +++-------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/pystencilssfg/configuration.py b/src/pystencilssfg/configuration.py index 355be5e..cee313f 100644 --- a/src/pystencilssfg/configuration.py +++ b/src/pystencilssfg/configuration.py @@ -7,11 +7,10 @@ from os import path from enum import Enum, auto from dataclasses import dataclass, replace, asdict, InitVar from argparse import ArgumentParser +from textwrap import indent from importlib import util as iutil -from jinja2.filters import do_indent - from .exceptions import SfgException HEADER_FILE_EXTENSIONS = {'h', 'hpp'} @@ -39,7 +38,8 @@ class SfgCodeStyle: indent_width: int = 2 def indent(self, s: str): - return do_indent(s, self.indent_width, first=True) + prefix = " " * self.indent_width + return indent(s, prefix) @dataclass diff --git a/src/pystencilssfg/context.py b/src/pystencilssfg/context.py index 96649db..e7c5ddf 100644 --- a/src/pystencilssfg/context.py +++ b/src/pystencilssfg/context.py @@ -15,7 +15,7 @@ class SfgContext: self._code_namespace: str | None = None # Source Components - self._prelude: list[str] = [] + self._prelude: str = "" self._includes: set[SfgHeaderInclude] = set() self._definitions: list[str] = [] self._kernel_namespaces = {self._default_kernel_namespace.name: self._default_kernel_namespace} @@ -58,12 +58,19 @@ class SfgContext: # Prelude, Includes, Definitions, Namespace # ---------------------------------------------------------------------------------------------- - def prelude(self) -> Generator[str, None, None]: + @property + def prelude_comment(self) -> str: """The prelude is a comment block printed at the top of both generated files.""" - yield from self._prelude + return self._prelude def append_to_prelude(self, code_str: str): - self._prelude.append(code_str) + if self._prelude: + self._prelude += "\n" + + self._prelude += code_str + + if not code_str.endswith("\n"): + self._prelude += "\n" def includes(self) -> Generator[SfgHeaderInclude, None, None]: """Includes of headers. Public includes are added to the header file, private includes diff --git a/src/pystencilssfg/emitters/cpu/basic_cpu.py b/src/pystencilssfg/emitters/cpu/basic_cpu.py index 25c952c..d49addd 100644 --- a/src/pystencilssfg/emitters/cpu/basic_cpu.py +++ b/src/pystencilssfg/emitters/cpu/basic_cpu.py @@ -1,5 +1,6 @@ from typing import cast from jinja2 import Environment, PackageLoader, StrictUndefined +from textwrap import indent from os import path @@ -59,13 +60,7 @@ class BasicCpuEmitter: def get_prelude_comment(ctx: SfgContext): - prelude_lines = [] - for p in ctx.prelude(): - prelude_lines += p.splitlines() - prelude_lines += [""] # empty line in-between - prelude_lines = prelude_lines[:-1] - - if not prelude_lines: + if not ctx.prelude_comment: return "" - return "\n".join(["/**"] + [f"* {line}" for line in prelude_lines] + ["*/"]) + return "/*\n" + indent(ctx.prelude_comment, "* ", predicate=lambda _: True) + "*/\n" -- GitLab