on master help sign in
Finish TODO for error messages on ambiguous names
8403665Evan Czaplicki
src/Reporting/Error/Canonicalize.hs+34−4
@@ -165,16 +165,16 @@ toReport source localizer err =
165 )
165 )
166
166
167 AmbiguousVar region maybePrefix name possibleHomes ->
167 AmbiguousVar region maybePrefix name possibleHomes ->
168− error "TODO" region maybePrefix name possibleHomes
168+ ambiguousName source region maybePrefix name possibleHomes "name"
169
169
170 AmbiguousType region maybePrefix name possibleHomes ->
170 AmbiguousType region maybePrefix name possibleHomes ->
171− error "TODO" region maybePrefix name possibleHomes
171+ ambiguousName source region maybePrefix name possibleHomes "type"
172
172
173 AmbiguousCtor region maybePrefix name possibleHomes ->
173 AmbiguousCtor region maybePrefix name possibleHomes ->
174− error "TODO" region maybePrefix name possibleHomes
174+ ambiguousName source region maybePrefix name possibleHomes "constructor"
175
175
176 AmbiguousBinop region name possibleHomes ->
176 AmbiguousBinop region name possibleHomes ->
177− error "TODO" region name possibleHomes
177+ ambiguousName source region Nothing name possibleHomes "operator"
178
178
179 BadArity region badArityContext name expected actual ->
179 BadArity region badArityContext name expected actual ->
180 let
180 let
@@ -806,6 +806,36 @@ nameClash source r1 r2 messageThatEndsWithPunctuation =
806
806
807
807
808
808
809+-- AMBIGUOUS NAME
810+
811+
812+ambiguousName :: Code.Source -> R.Region -> Maybe N.Name -> N.Name -> [ModuleName.Canonical] -> String -> Report.Report
813+ambiguousName source region maybePrefix name possibleHomes thing =
814+ let
815+ givenName =
816+ maybe N.toString toQualString maybePrefix name
817+
818+ homeToYellowDoc (ModuleName.Canonical _ home) =
819+ H.dullyellow (H.nameToDoc home)
820+
821+ bothOrAll =
822+ if length possibleHomes == 2 then "both" else "all"
823+ in
824+ Report.Report "AMBIGUOUS NAME" region [] $
825+ Report.toCodeSnippet source region Nothing
826+ (
827+ H.reflow $ "This usage of `" ++ givenName ++ "` is ambiguous."
828+ ,
829+ H.stack
830+ [ H.reflow $ "The following modules " ++ bothOrAll ++ " export this " ++ thing ++ ":"
831+ , H.indent 4 $ H.vcat $ map homeToYellowDoc possibleHomes
832+ , H.reflowLink "Read" "imports" "to learn how to clarify which one you want."
833+ ]
834+ )
835+
836+
837+
838+
809-- NOT FOUND
839-- NOT FOUND
810
840
811
841