• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

rjfarmer / gfModParser / 18542693371

15 Oct 2025 09:07PM UTC coverage: 88.199% (-0.6%) from 88.811%
18542693371

push

github

rjfarmer
Fix string test

1009 of 1144 relevant lines covered (88.2%)

0.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.16
/gfModParser/modules/components.py
1
# SPDX-License-Identifier: GPL-2.0+
2

3
from .. import utils
1✔
4
from . import attributes
1✔
5
from . import expressions
1✔
6
from . import arrays
1✔
7
from . import procedures
1✔
8

9

10
class Components:
1✔
11
    def __init__(self, components, *, version):
1✔
12
        self._components = {}
1✔
13
        self.version = version
1✔
14
        for c in components:
1✔
15
            self._components[utils.string_clean(c[1])] = c
1✔
16

17
    def __len__(self):
1✔
18
        return len(self._components)
1✔
19

20
    def __contains__(self, key):
1✔
21
        return key in self._components
1✔
22

23
    def keys(self) -> list[str]:
1✔
24
        return self._components.keys()
1✔
25

26
    def __getitem__(self, key):
1✔
27
        if key in self._components:
1✔
28
            if isinstance(self._components[key], list):
1✔
29
                self._components[key] = component(
1✔
30
                    self._components[key], version=self.version
31
                )
32
            return self._components[key]
1✔
33
        else:
34
            raise KeyError(f"No key {key} found")
1✔
35

36

37
class component:
1✔
38
    def __init__(self, component, *, version):
1✔
39
        self._component = component
1✔
40
        self.version = version
1✔
41

42
    @property
1✔
43
    def id(self) -> int:
1✔
44
        return int(self._component[0])
1✔
45

46
    @property
1✔
47
    def name(self) -> str:
1✔
48
        return utils.string_clean(self._component[1])
1✔
49

50
    @property
1✔
51
    def typespec(self) -> expressions.typespec:
1✔
52
        return expressions.typespec(self._component[2], version=self.version)
1✔
53

54
    @property
1✔
55
    def array(self) -> arrays.arrayspec:
1✔
56
        return arrays.arrayspec(self._component[3], version=self.version)
1✔
57

58
    @property
1✔
59
    def pdt_expression(self) -> expressions.Expression:
1✔
60
        return expressions.Expression(self._component[4], version=self.version)
×
61

62
    # PDT component specification
63
    @property
1✔
64
    def pdt_arglist(self):
1✔
65
        return procedures.actual_arglist(self._component[5], version=self.version)
×
66

67
    @property
1✔
68
    def attribute(self) -> attributes.Attributes:
1✔
69
        return attributes.Attributes(self._component[6], version=self.version)
1✔
70

71
    @property
1✔
72
    def access(self) -> str:
1✔
73
        return utils.string_clean(self._component[7])
1✔
74

75
    @property
1✔
76
    def initializer(self) -> expressions.Expression | None:
1✔
77
        # also check for vtype?
78
        if self.name == "_final" or self.name == "_hash":
×
79
            return expressions.Expression(self._component[8], version=self.version)
×
80
        return None
×
81

82
    @property
1✔
83
    def proc_pointer(self) -> procedures.typebound_proc | None:
1✔
84
        if self.attribute.proc_pointer:
1✔
85
            # The initializer might be in slot 8 so instead of looking at 8 or 9 just look at the final one
86
            return procedures.typebound_proc(self._component[-1], version=self.version)
1✔
87
        return None
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc