summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorNikolay Nikolov <nickysn@gmail.com>2023-12-04 08:17:42 +0200
committerGitHub <noreply@github.com>2023-12-04 07:17:42 +0100
commit618ccb6b6a60f9a315997f95cbbd81be9e9d7f53 (patch)
tree46440438f9fc9ef23646e7deaa5437dbe1d67841
parentb8fa78939398397f557dbae1c905800850829e29 (diff)
downloadNim-618ccb6b6a60f9a315997f95cbbd81be9e9d7f53.tar.gz
Also show the `raises` pragma when converting proc types to string (#23026)
This affects also nimsuggest hints (e.g. on mouse hover), as well as
compiler messages.
-rw-r--r--compiler/types.nim10
-rw-r--r--tests/effects/teffects1.nim2
2 files changed, 10 insertions, 2 deletions
diff --git a/compiler/types.nim b/compiler/types.nim
index 7bb29405f..f10d5aa86 100644
--- a/compiler/types.nim
+++ b/compiler/types.nim
@@ -11,7 +11,7 @@
 
 import
   ast, astalgo, trees, msgs, platform, renderer, options,
-  lineinfos, int128, modulegraphs, astmsgs
+  lineinfos, int128, modulegraphs, astmsgs, wordrecg
 
 import std/[intsets, strutils]
 
@@ -762,6 +762,14 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
       result.add(')')
       if t.len > 0 and t[0] != nil: result.add(": " & typeToString(t[0]))
       var prag = if t.callConv == ccNimCall and tfExplicitCallConv notin t.flags: "" else: $t.callConv
+      if not isNil(t.owner) and not isNil(t.owner.ast) and (t.owner.ast.len - 1) >= pragmasPos:
+        let pragmasNode = t.owner.ast[pragmasPos]
+        let raisesSpec = effectSpec(pragmasNode, wRaises)
+        if not isNil(raisesSpec):
+          addSep(prag)
+          prag.add("raises: ")
+          prag.add($raisesSpec)
+
       if tfNoSideEffect in t.flags:
         addSep(prag)
         prag.add("noSideEffect")
diff --git a/tests/effects/teffects1.nim b/tests/effects/teffects1.nim
index 49c904029..1d267b5fa 100644
--- a/tests/effects/teffects1.nim
+++ b/tests/effects/teffects1.nim
@@ -39,7 +39,7 @@ proc foo(x: int): string {.nimcall, raises: [ValueError].} =
 
 var p: MyProcType = foo #[tt.Error
                     ^
-type mismatch: got <proc (x: int): string{.nimcall, noSideEffect, gcsafe.}> but expected 'MyProcType = proc (x: int): string{.closure.}'
+type mismatch: got <proc (x: int): string{.nimcall, raises: [ValueError], noSideEffect, gcsafe.}> but expected 'MyProcType = proc (x: int): string{.closure.}'
   Calling convention mismatch: got '{.nimcall.}', but expected '{.closure.}'.
 .raise effects differ
 ]#