Coverage for src/pystencilssfg/lang/headers.py: 100%

23 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-04 07:16 +0000

1from __future__ import annotations 

2from dataclasses import dataclass 

3 

4 

5@dataclass(frozen=True) 

6class HeaderFile: 

7 """Represents a C++ header file.""" 

8 

9 filepath: str 

10 """(Relative) path of this header file""" 

11 

12 system_header: bool = False 

13 """Whether or not this is a system header.""" 

14 

15 def __str__(self) -> str: 

16 if self.system_header: 

17 return f"<{self.filepath}>" 

18 else: 

19 return self.filepath 

20 

21 @staticmethod 

22 def parse(header: str | HeaderFile): 

23 if isinstance(header, HeaderFile): 

24 return header 

25 

26 system_header = False 

27 if header.startswith('"') and header.endswith('"'): 

28 header = header[1:-1] 

29 

30 if header.startswith("<") and header.endswith(">"): 

31 header = header[1:-1] 

32 system_header = True 

33 

34 return HeaderFile(header, system_header=system_header)