From a6f539d50f8ecd97441282d3fe6181daa23b1b01 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Thu, 27 Jun 2024 15:41:01 +0100 Subject: [PATCH] TypeProviders: Add inner base-exception description (#17251) * TypeProviders: Add inner base-exception description * Release notes docs updated * Update src/Compiler/TypedTree/tainted.fs Thanks @abelbraaksma Co-authored-by: Abel Braaksma * Update docs/release-notes/.FSharp.Compiler.Service/8.0.400.md Co-authored-by: Abel Braaksma * Added @abelbraaksma's suggestion --------- Co-authored-by: Abel Braaksma Co-authored-by: Vlad Zarytovskii Co-authored-by: Petr --- docs/release-notes/.FSharp.Compiler.Service/8.0.400.md | 1 + src/Compiler/TypedTree/tainted.fs | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md b/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md index 471fb842ab5..5bda852e8f4 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md +++ b/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md @@ -25,6 +25,7 @@ * Allow #nowarn to support the FS prefix on error codes to disable warnings ([Issue #17206](https://github.com/dotnet/fsharp/issues/16447), [PR #17209](https://github.com/dotnet/fsharp/pull/17209)) * Allow ParsedHashDirectives to have argument types other than strings ([Issue #17240](https://github.com/dotnet/fsharp/issues/16447), [PR #17209](https://github.com/dotnet/fsharp/pull/17209)) * Parser: better recovery for unfinished patterns ([PR #17231](https://github.com/dotnet/fsharp/pull/17231)) +* Expose inner exception information of TypeProviders to help diagnostics in IDE ([PR #17251](https://github.com/dotnet/fsharp/pull/17251)) * Parser: recover on empty match clause ([PR #17233](https://github.com/dotnet/fsharp/pull/17233)) ### Changed diff --git a/src/Compiler/TypedTree/tainted.fs b/src/Compiler/TypedTree/tainted.fs index f586f99a3cd..609e66fe0d4 100644 --- a/src/Compiler/TypedTree/tainted.fs +++ b/src/Compiler/TypedTree/tainted.fs @@ -101,11 +101,12 @@ type internal Tainted<'T> (context: TaintedContext, value: 'T) = | :? TypeProviderError -> reraise() | :? AggregateException as ae -> let errNum,_ = FSComp.SR.etProviderError("", "") - let messages = [for e in ae.InnerExceptions -> e.Message] + let messages = [for e in ae.InnerExceptions -> if isNull e.InnerException then e.Message else (e.Message + ": " + e.GetBaseException().Message)] raise <| TypeProviderError(errNum, this.TypeProviderDesignation, range, messages) | e -> let errNum,_ = FSComp.SR.etProviderError("", "") - raise <| TypeProviderError((errNum, e.Message), this.TypeProviderDesignation, range) + let error = if isNull e.InnerException then e.Message else (e.Message + ": " + e.GetBaseException().Message) + raise <| TypeProviderError((errNum, error), this.TypeProviderDesignation, range) member _.TypeProvider = Tainted<_>(context, context.TypeProvider)