Reference Guide  2.5.0
commentable_mixin.py
1 # -----------------------------------------------------------------------------
2 # BSD 3-Clause License
3 #
4 # Copyright (c) 2021-2024, Science and Technology Facilities Council.
5 # All rights reserved.
6 #
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions are met:
9 #
10 # * Redistributions of source code must retain the above copyright notice, this
11 # list of conditions and the following disclaimer.
12 #
13 # * Redistributions in binary form must reproduce the above copyright notice,
14 # this list of conditions and the following disclaimer in the documentation
15 # and/or other materials provided with the distribution.
16 #
17 # * Neither the name of the copyright holder nor the names of its
18 # contributors may be used to endorse or promote products derived from
19 # this software without specific prior written permission.
20 #
21 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 # POSSIBILITY OF SUCH DAMAGE.
33 # -----------------------------------------------------------------------------
34 # Author S. Siso and N. Nobre, STFC Daresbury Lab
35 # -----------------------------------------------------------------------------
36 
37 ''' This module contains the CommentableMixin implementation.'''
38 
39 
41  '''
42  Mixin that adds the Commentable trait into a PSyIR node. It provides
43  two attributes that store preceding and inline comments and their
44  respective property getters and setters.
45  '''
46 
47  # By default classes with the Commentable trait will have empty strings
48  # provided by the class attributes below. Once an instance is given a
49  # comment using the property setter this class attributes will be shadowed
50  # by an instance attribute storing the string for that specific instance.
51  _preceding_comment = ""
52  _inline_comment = ""
53 
54  @property
55  def preceding_comment(self):
56  '''
57  :returns: comment preceding this statement.
58  :rtype: str
59  '''
60  return self._preceding_comment_preceding_comment_preceding_comment
61 
62  @preceding_comment.setter
63  def preceding_comment(self, comment):
64  '''
65  :param str comment: comment preceding this statement.
66  '''
67  if not isinstance(comment, str):
68  raise TypeError(f"The preceding_comment must be a string but"
69  f" found '{type(comment).__name__}'.")
70  self._preceding_comment_preceding_comment_preceding_comment = comment
71 
72  @property
73  def inline_comment(self):
74  '''
75  :returns: inline comment associated with this statement.
76  :rtype: str
77  '''
78  return self._inline_comment_inline_comment_inline_comment
79 
80  @inline_comment.setter
81  def inline_comment(self, comment):
82  '''
83  :param str comment: inline comment associated with this statement.
84  '''
85  if not isinstance(comment, str):
86  raise TypeError(f"The inline_comment must be a string but"
87  f" found '{type(comment).__name__}'.")
88  self._inline_comment_inline_comment_inline_comment = comment
89 
90 
91 # For automatic API documentation generation
92 __all__ = ["CommentableMixin"]