diff --git a/compiler/sem.nim b/compiler/sem.nim index 7e59f20866720..f4b6d06b82dc0 100644 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -500,6 +500,21 @@ proc semAfterMacroCall(c: PContext, call, macroResult: PNode, dec(c.config.evalTemplateCounter) discard c.friendModules.pop() +proc getLineInfo(n: PNode): TLineInfo = + case n.kind + of nkPostfix: + if len(n) > 1: + result = getLineInfo(n[1]) + else: + result = n.info + of nkAccQuoted, nkPragmaExpr: + if len(n) > 0: + result = getLineInfo(n[0]) + else: + result = n.info + else: + result = n.info + const errMissingGenericParamsForTemplate = "'$1' has unspecified generic parameters" diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 41154f5962786..c4cd623d9bb95 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -492,19 +492,8 @@ proc semIdentDef(c: PContext, n: PNode, kind: TSymKind, reportToNimsuggest = tru incl(result.flags, sfGlobal) result.options = c.config.options - proc getLineInfo(n: PNode): TLineInfo = - case n.kind - of nkPostfix: - if len(n) > 1: - return getLineInfo(n[1]) - of nkAccQuoted, nkPragmaExpr: - if len(n) > 0: - return getLineInfo(n[0]) - else: - discard - result = n.info - let info = getLineInfo(n) if reportToNimsuggest: + let info = getLineInfo(n) suggestSym(c.graph, info, result, c.graph.usageSym) proc checkNilable(c: PContext; v: PSym) = diff --git a/compiler/semtempl.nim b/compiler/semtempl.nim index 9954e3c1239b6..7732e097ecb55 100644 --- a/compiler/semtempl.nim +++ b/compiler/semtempl.nim @@ -691,6 +691,9 @@ proc semTemplateDef(c: PContext, n: PNode): PNode = s = semIdentVis(c, skTemplate, n[namePos], {}) assert s.kind == skTemplate + let info = getLineInfo(n[namePos]) + suggestSym(c.graph, info, s, c.graph.usageSym) + styleCheckDef(c, s) onDef(n[namePos].info, s) # check parameter list: diff --git a/nimsuggest/tests/t21923.nim b/nimsuggest/tests/t21923.nim new file mode 100644 index 0000000000000..7e1d144e4f648 --- /dev/null +++ b/nimsuggest/tests/t21923.nim @@ -0,0 +1,15 @@ +discard """ +$nimsuggest --tester $file +>outline $file +outline;;skProc;;t21923.foo;;proc (x: int){.gcsafe, raises: [].};;$file;;8;;5;;"";;100 +outline;;skTemplate;;t21923.foo2;;;;$file;;11;;9;;"";;100 +""" + +proc foo(x: int) = + echo "foo" + +template foo2(x: int) = + echo "foo2" + +foo(12) +foo2(12) diff --git a/nimsuggest/tests/tsug_template.nim b/nimsuggest/tests/tsug_template.nim index da494d279d896..24b430c0ae461 100644 --- a/nimsuggest/tests/tsug_template.nim +++ b/nimsuggest/tests/tsug_template.nim @@ -6,7 +6,7 @@ tmp#[!]# discard """ $nimsuggest --tester $file >sug $1 +sug;;skTemplate;;tsug_template.tmpa;;template ();;$file;;1;;9;;"";;100;;Prefix sug;;skMacro;;tsug_template.tmpb;;macro (){.noSideEffect, gcsafe, raises: [].};;$file;;2;;6;;"";;100;;Prefix sug;;skConverter;;tsug_template.tmpc;;converter ();;$file;;3;;10;;"";;100;;Prefix -sug;;skTemplate;;tsug_template.tmpa;;template ();;$file;;1;;9;;"";;100;;Prefix """