@@ -21,15 +21,17 @@ namespace Nitra
2121 public class CollectSymbolErrorsVisitor : IAstVisitor
2222 {
2323 public CompilerMessages : CompilerMessageList;
24+ public UseHintMl : bool ;
2425
25- public this ()
26+ public this (useHintMl : bool )
2627 {
27- this (CompilerMessageList())
28+ this (CompilerMessageList(), useHintMl )
2829 }
2930
30- public this (compilerMessages : CompilerMessageList)
31+ public this (compilerMessages : CompilerMessageList, useHintMl : bool )
3132 {
3233 CompilerMessages = compilerMessages;
34+ UseHintMl = useHintMl;
3335 }
3436
3537 public Visit(parseTree : IAst) : void
@@ -50,11 +52,32 @@ namespace Nitra
5052 CompilerMessages.Error(reference, $" Unresolved reference '$reference'" );
5153 else when (r.IsAmbiguous && !r.IgnoreAmbiguities)
5254 {
53- def builder = StringBuilder(64 )
54- .Append(" <hint>'" ).HintMlEscape(reference).Append(" ' is an ambiguous reference between " )
55- .JoinAnd(r.Ambiguities, HintML.MakeHintMlPath(_ , _ , " ." , true)).Append(" </hint>" );
55+ def message =
56+ if (UseHintMl)
57+ {
58+ StringBuilder(64 ).Append(" <hint>'" ).HintMlEscape(reference).Append(" ' is an ambiguous reference between " )
59+ .JoinAnd(r.Ambiguities, HintML.MakeHintMlPath(_ , _ , " ." , true)).Append(" </hint>" ).ToString();
60+ }
61+ else
62+ {
63+ def format(symbol : DeclarationSymbol) : string
64+ {
65+ if (symbol.IsFullNameEvaluated)
66+ symbol.FullName
67+ else if (symbol.IsDeclaredInOptEvaluated)
68+ match (symbol.DeclaredInOpt)
69+ {
70+ | VSome(parentSymbol) => format(parentSymbol) + " ." + symbol.Name
71+ | VNone => symbol.Name
72+ }
73+ else
74+ symbol.Name
75+ }
5676
57- CompilerMessages.Error(reference, builder.ToString());
77+ $" '$(reference)' is an ambiguous reference between ..$(r.Ambiguities.Select(format))"
78+ };
79+
80+ CompilerMessages.Error(reference, message);
5881 }
5982 }
6083
0 commit comments