@@ -173,7 +173,7 @@ func ParseAny(
173173 pluginSubparsers []SubparserOp , pluginSemantics SemanticsOp ,
174174) (* ParseData , interface {}) {
175175 orgPos := pd .Source .pos
176- allFeedback := make ([]* FeedbackItem , 0 , len (pluginSubparsers ))
176+ subresults := make ([]* ParseResult , 0 , len (pluginSubparsers ))
177177 lastPos := 0
178178
179179 for _ , subparser := range pluginSubparsers {
@@ -183,7 +183,7 @@ func ParseAny(
183183 }
184184 lastPos = max (lastPos , pd .Result .Pos )
185185 pd .Source .pos = orgPos
186- allFeedback = append (allFeedback , pd .Result . Feedback ... )
186+ subresults = append (subresults , pd .Result )
187187 pd .Result = nil
188188 }
189189
@@ -198,7 +198,7 @@ func ParseAny(
198198 ),
199199 nil ,
200200 )
201- pd . Result . Feedback = append (pd . Result . Feedback , allFeedback ... )
201+ saveBestFeedback (pd , subresults )
202202 return pd , ctx
203203}
204204
@@ -290,6 +290,31 @@ func saveAllFeedback(pd *ParseData, tmpSubresults []*ParseResult) {
290290 }
291291}
292292
293+ func saveBestFeedback (pd * ParseData , tmpSubresults []* ParseResult ) {
294+ maxFBPos := - 1
295+ bestFeedback := []* FeedbackItem {}
296+ for _ , subres := range tmpSubresults {
297+ fbPos := maxFeedbackPos (subres .Feedback )
298+ if fbPos > maxFBPos {
299+ maxFBPos = fbPos
300+ bestFeedback = subres .Feedback
301+ } else if fbPos == maxFBPos {
302+ bestFeedback = append (bestFeedback , subres .Feedback ... )
303+ }
304+ }
305+ pd .Result .Feedback = append (pd .Result .Feedback , bestFeedback ... )
306+ }
307+
308+ func maxFeedbackPos (feedback []* FeedbackItem ) int {
309+ maxPos := - 1
310+ for _ , fb := range feedback {
311+ if fb .Pos > maxPos {
312+ maxPos = fb .Pos
313+ }
314+ }
315+ return maxPos
316+ }
317+
293318func addPotentialProblems (feedback []* FeedbackItem , potentialFeedback []* FeedbackItem ) []* FeedbackItem {
294319 if potentialFeedback == nil {
295320 return feedback
0 commit comments