From 2bc8a8fb4cba292b1dd3ae00cec3db722a42d09c Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Sat, 25 May 2024 14:55:26 +0100 Subject: [PATCH 1/5] TypeProviders: Add inner base-exception description --- src/Compiler/TypedTree/tainted.fs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Compiler/TypedTree/tainted.fs b/src/Compiler/TypedTree/tainted.fs index f586f99a3cd..b8ec22bd45d 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 e.InnerException = null 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 e.InnerException = null then e.Message else (e.Message + ": " + e.GetBaseException().Message) + raise <| TypeProviderError((errNum, error), this.TypeProviderDesignation, range) member _.TypeProvider = Tainted<_>(context, context.TypeProvider) From 3acb3fee013b7368be153708c4b864232f4e9ec1 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Sat, 25 May 2024 15:05:18 +0100 Subject: [PATCH 2/5] Release notes docs updated --- docs/release-notes/.FSharp.Compiler.Service/8.0.400.md | 1 + 1 file changed, 1 insertion(+) 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 83233af819b..52ccbf5ff08 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md +++ b/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md @@ -20,6 +20,7 @@ * Generate new `Equals` overload to avoid boxing for structural comparison ([PR #16857](https://github.com/dotnet/fsharp/pull/16857)) * Parser: better recovery for unfinished patterns ([PR #17231](https://github.com/dotnet/fsharp/pull/17231)) +* TypeProvider inner exception message added visible to IDE ([PR #17251](https://github.com/dotnet/fsharp/pull/17251)) ### Changed * Enforce `AttributeTargets.Interface` ([PR #17173](https://github.com/dotnet/fsharp/pull/17173)) From 69bd502394bc0e21e3da4e59d90f98dde46c9733 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Sun, 26 May 2024 00:46:53 +0100 Subject: [PATCH 3/5] Update src/Compiler/TypedTree/tainted.fs Thanks @abelbraaksma Co-authored-by: Abel Braaksma --- src/Compiler/TypedTree/tainted.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compiler/TypedTree/tainted.fs b/src/Compiler/TypedTree/tainted.fs index b8ec22bd45d..0b10397e61e 100644 --- a/src/Compiler/TypedTree/tainted.fs +++ b/src/Compiler/TypedTree/tainted.fs @@ -101,7 +101,7 @@ 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 -> if e.InnerException = null then e.Message else (e.Message + ": " + e.GetBaseException().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("", "") From 21b90467d416f8848748778f35ef5d0df8f89952 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Sun, 26 May 2024 00:47:45 +0100 Subject: [PATCH 4/5] Update docs/release-notes/.FSharp.Compiler.Service/8.0.400.md Co-authored-by: Abel Braaksma --- docs/release-notes/.FSharp.Compiler.Service/8.0.400.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 52ccbf5ff08..381e3d2a99d 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md +++ b/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md @@ -20,7 +20,7 @@ * Generate new `Equals` overload to avoid boxing for structural comparison ([PR #16857](https://github.com/dotnet/fsharp/pull/16857)) * Parser: better recovery for unfinished patterns ([PR #17231](https://github.com/dotnet/fsharp/pull/17231)) -* TypeProvider inner exception message added visible to IDE ([PR #17251](https://github.com/dotnet/fsharp/pull/17251)) +* Expose inner exception information of TypeProviders to help diagnostics in IDE ([PR #17251](https://github.com/dotnet/fsharp/pull/17251)) ### Changed * Enforce `AttributeTargets.Interface` ([PR #17173](https://github.com/dotnet/fsharp/pull/17173)) From 5c4a48e97903f8b7ec4a8f5ae944e054d42d0963 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Sun, 26 May 2024 01:15:15 +0100 Subject: [PATCH 5/5] Added @abelbraaksma's suggestion --- src/Compiler/TypedTree/tainted.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compiler/TypedTree/tainted.fs b/src/Compiler/TypedTree/tainted.fs index 0b10397e61e..609e66fe0d4 100644 --- a/src/Compiler/TypedTree/tainted.fs +++ b/src/Compiler/TypedTree/tainted.fs @@ -105,7 +105,7 @@ type internal Tainted<'T> (context: TaintedContext, value: 'T) = raise <| TypeProviderError(errNum, this.TypeProviderDesignation, range, messages) | e -> let errNum,_ = FSComp.SR.etProviderError("", "") - let error = if e.InnerException = null then e.Message else (e.Message + ": " + e.GetBaseException().Message) + 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)