diff --git a/nimsuggest/nimsuggest.nim b/nimsuggest/nimsuggest.nim index 0d8921905c..e772ef171a 100644 --- a/nimsuggest/nimsuggest.nim +++ b/nimsuggest/nimsuggest.nim @@ -1156,13 +1156,14 @@ proc executeNoHooksV3(cmd: IdeCmd, file: AbsoluteFile, dirtyfile: AbsoluteFile, graph.suggestResult(s.sym, s.sym.info) of ideType: let s = graph.findSymData(file, line, col) - if not s.isNil: + if not s.isNil and s.sym.typ != nil: let typeSym = s.sym.typ.sym if typeSym != nil: graph.suggestResult(typeSym, typeSym.info, ideType) - elif s.sym.typ.len != 0: + elif s.sym.typ.len != 0 and s.sym.typ[0] != nil: let genericType = s.sym.typ[0].sym - graph.suggestResult(genericType, genericType.info, ideType) + if genericType != nil: + graph.suggestResult(genericType, genericType.info, ideType) of ideUse, ideDus: let symbol = graph.findSymData(file, line, col) if not symbol.isNil: diff --git a/nimsuggest/tests/tv3_typeDefinition.nim b/nimsuggest/tests/tv3_typeDefinition.nim index f86d12cc67..2da86d060c 100644 --- a/nimsuggest/tests/tv3_typeDefinition.nim +++ b/nimsuggest/tests/tv3_typeDefinition.nim @@ -20,6 +20,13 @@ echo fo#[!]#oGeneric.bar # bad type echo unde#[!]#fined +# type of a void proc: typ[0] (return type) is nil, must not crash +var s = "" +s.a#[!]#dd('x') + +# type of a module symbol: typ is nil, must not crash +import std/str#[!]#utils + discard """ $nimsuggest --v3 --tester $file >type $1 @@ -29,4 +36,6 @@ type skType tv3_typeDefinition.Foo2 Foo2 $file 11 2 "" 100 >type $3 type skType tv3_typeDefinition.FooGeneric FooGeneric $file 14 2 "" 100 >type $4 +>type $5 +>type $6 """