@@ -75,13 +75,34 @@ def yaml_comments(d):
7575
7676 return set (comments )
7777
78+ @staticmethod
79+ def __get_element_code (start_token , end_token , code ):
80+ if isinstance (end_token , list ) and len (end_token ) > 0 :
81+ end_token = end_token [- 1 ]
82+ elif isinstance (end_token , list ) or isinstance (end_token , str ):
83+ end_token = start_token
84+
85+ if start_token .start_mark .line == end_token .end_mark .line :
86+ res = code [start_token .start_mark .line ][start_token .start_mark .column : end_token .end_mark .column ]
87+ else :
88+ res = code [start_token .start_mark .line ]
89+
90+ for line in range (start_token .start_mark .line + 1 , end_token .end_mark .line ):
91+ res += code [line ]
92+
93+ if start_token .start_mark .line != end_token .end_mark .line :
94+ res += code [end_token .end_mark .line ][:end_token .end_mark .column ]
95+
96+ return res
97+
7898 @staticmethod
7999 def __parse_vars (unit_block , cur_name , token , code ):
80100 def create_variable (name , value ):
81101 has_variable = ("{{" in value ) and ("}}" in value )
82102 if (value in ["null" , "~" ]): value = ""
83103 v = Variable (name , value , has_variable )
84104 v .line = token .start_mark .line + 1
105+ v .code = AnsibleParser .__get_element_code (token , value , code )
85106 v .code = '' .join (code [token .start_mark .line : token .end_mark .line + 1 ])
86107 unit_block .add_variable (v )
87108
@@ -111,7 +132,7 @@ def create_attribute(token, name, value):
111132 if (value in ["null" , "~" ]): value = ""
112133 a = Attribute (name , value , has_variable )
113134 a .line = token .start_mark .line + 1
114- a .code = '' . join ( code [ token . start_mark . line : token . end_mark . line + 1 ] )
135+ a .code = AnsibleParser . __get_element_code ( token , val , code )
115136 attributes .append (a )
116137
117138 attributes = []
@@ -966,7 +987,18 @@ def __process_unitblock_component(ce, unit_block: UnitBlock):
966987 @staticmethod
967988 def __process_codeelement (codeelement , path , code ):
968989 def get_code (ce ):
969- return '' .join (code [ce .line - 1 : ce .end_line ])
990+ if ce .line == ce .end_line :
991+ res = code [ce .line - 1 ][ce .col - 1 : ce .end_col - 1 ]
992+ else :
993+ res = code [ce .line - 1 ]
994+
995+ for line in range (ce .line , ce .end_line - 1 ):
996+ res += code [line ]
997+
998+ if ce .line != ce .end_line :
999+ res += code [ce .end_line - 1 ][:ce .end_col - 1 ]
1000+
1001+ return res
9701002
9711003 if (isinstance (codeelement , puppetmodel .Value )):
9721004 if isinstance (codeelement , puppetmodel .Hash ):
0 commit comments