Skip to content

Commit

Permalink
fixes #21923; nimsuggest "outline" output does not list templates (#2…
Browse files Browse the repository at this point in the history
…4643)

fixes #21923

---------

Co-authored-by: Louis Berube <[email protected]>
(cherry picked from commit 67f9bc2)
  • Loading branch information
ringabout authored and narimiran committed Jan 27, 2025
1 parent 8fe518e commit ae011ea
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 13 deletions.
15 changes: 15 additions & 0 deletions compiler/sem.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
13 changes: 1 addition & 12 deletions compiler/semstmts.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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) =
Expand Down
3 changes: 3 additions & 0 deletions compiler/semtempl.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
15 changes: 15 additions & 0 deletions nimsuggest/tests/t21923.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
discard """
$nimsuggest --tester $file
>outline $file
outline;;skProc;;t21923.foo;;proc (x: int){.gcsafe, raises: <inferred> [].};;$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)
2 changes: 1 addition & 1 deletion nimsuggest/tests/tsug_template.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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: <inferred> [].};;$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
"""

0 comments on commit ae011ea

Please sign in to comment.