@@ -84,18 +84,41 @@ def cmap(d, lc=None, fn=None): # type: (Union[int, float, str, unicode, Dict, L
84
84
lc = [0 , 0 , 0 , 0 ]
85
85
if fn is None :
86
86
fn = "test"
87
+
88
+ if isinstance (d , CommentedMap ):
89
+ for k ,v in d .iteritems ():
90
+ if k in d .lc .data :
91
+ d [k ] = cmap (v , lc = d .lc .data [k ], fn = d .lc .filename )
92
+ else :
93
+ d [k ] = cmap (v , lc , fn = d .lc .filename )
94
+ return d
95
+ if isinstance (d , CommentedSeq ):
96
+ for k ,v in enumerate (d ):
97
+ if k in d .lc .data :
98
+ d [k ] = cmap (v , lc = d .lc .data [k ], fn = d .lc .filename )
99
+ else :
100
+ d [k ] = cmap (v , lc , fn = d .lc .filename )
101
+ return d
87
102
if isinstance (d , dict ):
88
103
cm = CommentedMap ()
89
104
for k ,v in d .iteritems ():
105
+ if isinstance (v , CommentedBase ):
106
+ uselc = [v .lc .line , v .lc .col , v .lc .line , v .lc .col ]
107
+ else :
108
+ uselc = lc
90
109
cm [k ] = cmap (v )
91
- cm .lc .add_kv_line_col (k , lc )
110
+ cm .lc .add_kv_line_col (k , uselc )
92
111
cm .lc .filename = fn
93
112
return cm
94
113
if isinstance (d , list ):
95
114
cs = CommentedSeq ()
96
115
for k ,v in enumerate (d ):
116
+ if isinstance (v , CommentedBase ):
117
+ uselc = [v .lc .line , v .lc .col , v .lc .line , v .lc .col ]
118
+ else :
119
+ uselc = lc
97
120
cs .append (cmap (v ))
98
- cs .lc .add_kv_line_col (k , lc )
121
+ cs .lc .add_kv_line_col (k , uselc )
99
122
cs .lc .filename = fn
100
123
return cs
101
124
else :
@@ -119,7 +142,7 @@ def makeError(self, msg): # type: (Text) -> Any
119
142
if not isinstance (self .item , ruamel .yaml .comments .CommentedBase ):
120
143
return self .raise_type (msg )
121
144
errs = []
122
- if self .key is None :
145
+ if self .key is None or self . item . lc . data is None or self . key not in self . item . lc . data :
123
146
lead = "%s:%i:%i:" % (self .item .lc .filename ,
124
147
self .item .lc .line + 1 ,
125
148
self .item .lc .col + 1 )
0 commit comments