@@ -250,16 +250,8 @@ trait MessageRendering {
250250 * usually we intend to test `contains` or `coincidesWith`.
251251 *
252252 */
253- def messageAndPos (dia : Diagnostic )(using Context ): String = {
254- import dia .*
255- val pos1 = pos.nonInlined
256- val inlineStack = pos.inlinePosStack.filterNot(_.contains(pos1))
257- val maxLineNumber =
258- if pos.exists then (pos1 :: inlineStack).map(_.endLine).max + 1
259- else 0
260- given Level = Level (level)
261- given Offset = Offset (maxLineNumber.toString.length + 2 )
262- val sb = StringBuilder ()
253+ def messageAndPos (dia : Diagnostic )(using Context ): String =
254+ // adjust a pos at EOF if preceded by newline
263255 def adjust (pos : SourcePosition ): SourcePosition =
264256 if pos.span.isSynthetic
265257 && pos.span.isZeroExtent
@@ -270,53 +262,57 @@ trait MessageRendering {
270262 pos.withSpan(pos.span.shift(- 1 ))
271263 else
272264 pos
273- val adjusted = adjust(pos)
274- val posString = posStr(adjusted, msg, diagnosticLevel(dia))
275- if (posString.nonEmpty) sb.append(posString).append(EOL )
276- if (pos.exists) {
277- if (pos1.exists && pos1.source.file.exists) {
278- val readjusted =
279- if pos1 == pos then adjusted
280- else adjust(pos1)
281- val (srcBefore, srcAfter, offset) = sourceLines(readjusted)
282- val marker = positionMarker(readjusted)
283- val err = errorMsg(readjusted, msg.message)
284- sb.append((srcBefore ::: marker :: err :: srcAfter).mkString(EOL ))
285-
286- if inlineStack.nonEmpty then
287- sb.append(EOL ).append(newBox())
288- sb.append(EOL ).append(offsetBox).append(i " Inline stack trace " )
289- for inlinedPos <- inlineStack if inlinedPos != pos1 do
290- sb.append(EOL ).append(newBox(soft = true ))
291- sb.append(EOL ).append(offsetBox).append(i " This location contains code that was inlined from $pos" )
292- if inlinedPos.source.file.exists then
293- val (srcBefore, srcAfter, _) = sourceLines(inlinedPos)
294- val marker = positionMarker(inlinedPos)
295- sb.append(EOL ).append((srcBefore ::: marker :: srcAfter).mkString(EOL ))
296- sb.append(EOL ).append(endBox)
297- }
298- else sb.append(msg.message)
299- }
265+ val msg = dia.msg
266+ val pos = dia.pos
267+ val pos1 = adjust(pos.nonInlined) // innermost pos contained by call.pos
268+ val outermost = pos.outermost // call.pos
269+ val inlineStack = pos.inlinePosStack.filterNot(outermost.contains(_))
270+ given Level = Level (dia.level)
271+ given Offset =
272+ val maxLineNumber =
273+ if pos.exists then (pos1 :: inlineStack).map(_.endLine).max + 1
274+ else 0
275+ Offset (maxLineNumber.toString.length + 2 )
276+ val sb = StringBuilder ()
277+ val posString = posStr(pos1, msg, diagnosticLevel(dia))
278+ if posString.nonEmpty then sb.append(posString).append(EOL )
279+ if pos.exists && pos1.exists && pos1.source.file.exists then
280+ val (srcBefore, srcAfter, offset) = sourceLines(pos1)
281+ val marker = positionMarker(pos1)
282+ val err = errorMsg(pos1, msg.message)
283+ sb.append((srcBefore ::: marker :: err :: srcAfter).mkString(EOL ))
284+
285+ if inlineStack.nonEmpty then
286+ sb.append(EOL ).append(newBox())
287+ sb.append(EOL ).append(offsetBox).append(i " Inline stack trace " )
288+ for inlinedPos <- inlineStack do
289+ sb.append(EOL ).append(newBox(soft = true ))
290+ sb.append(EOL ).append(offsetBox).append(i " This location contains code that was inlined from $pos" )
291+ if inlinedPos.source.file.exists then
292+ val (srcBefore, srcAfter, _) = sourceLines(inlinedPos)
293+ val marker = positionMarker(inlinedPos)
294+ sb.append(EOL ).append((srcBefore ::: marker :: srcAfter).mkString(EOL ))
295+ sb.append(EOL ).append(endBox)
296+ end if
300297 else sb.append(msg.message)
301- if ( dia.isVerbose)
298+ if dia.isVerbose then
302299 appendFilterHelp(dia, sb)
303300
304301 if Diagnostic .shouldExplain(dia) then
305302 sb.append(EOL ).append(newBox())
306303 sb.append(EOL ).append(offsetBox).append(" Explanation (enabled by `-explain`)" )
307304 sb.append(EOL ).append(newBox(soft = true ))
308- dia.msg.explanation.split(raw " \R " ).foreach { line =>
305+ dia.msg.explanation.split(raw " \R " ).foreach: line =>
309306 sb.append(EOL ).append(offsetBox).append(if line.isEmpty then " " else " " ).append(line)
310- }
311307 sb.append(EOL ).append(endBox)
312308 else if dia.msg.canExplain then
313309 sb.append(EOL ).append(offsetBox)
314310 sb.append(EOL ).append(offsetBox).append(" longer explanation available when compiling with `-explain`" )
315311
316312 sb.toString
317- }
313+ end messageAndPos
318314
319- private def hl (str : String )(using Context , Level ): String =
315+ private def hl (str : String )(using Context , Level ): String =
320316 summon[Level ].value match
321317 case interfaces.Diagnostic .ERROR => Red (str).show
322318 case interfaces.Diagnostic .WARNING => Yellow (str).show
0 commit comments