Implemented basic macro expand functionality (#20579)
* Implemented level based macro expand functionality - it can handle single macro call or expand whole function/proc/etc and it - In addition, I have altered the parser to provide the endInfo for the node. The usefulness of the `endInfo` is not limited to the `expandMacro` functionality but also it is useful for `ideOutline` functionality and I have altered the ideOutline functionality to use `endInfo`. Note `endInfo` most of the time is lost during the AST transformation thus in `nimsuggest.nim` I am using freshly parsed tree to get the location information. * Make sure we stop expanding correctly * Test CI * Fix tv3_outline.nim
This commit is contained in:
parent
4647c7b596
commit
7031ea65cd
13 changed files with 345 additions and 60 deletions
|
|
@ -16,10 +16,6 @@ def skField tv3.Foo.bar string $file 5 4 "" 100
|
|||
use skField tv3.Foo.bar string $file 8 9 "" 100
|
||||
>def $1
|
||||
def skField tv3.Foo.bar string $file 5 4 "" 100
|
||||
>outline $1
|
||||
outline skType tv3.Foo Foo $file 4 2 "" 100
|
||||
outline skField tv3.Foo.bar string $file 5 4 "" 100
|
||||
outline skProc tv3.test proc (f: Foo){.gcsafe.} $file 7 5 "" 100
|
||||
>sug $1
|
||||
sug skField bar string $file 5 4 "" 100 Prefix
|
||||
>globalSymbols test
|
||||
|
|
|
|||
45
nimsuggest/tests/tv3_outline.nim
Normal file
45
nimsuggest/tests/tv3_outline.nim
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# tests v3 outline
|
||||
|
||||
type
|
||||
Foo* = ref object of RootObj
|
||||
bar*: string
|
||||
FooEnum = enum value1, value2
|
||||
FooPrivate = ref object of RootObj
|
||||
barPrivate: string
|
||||
|
||||
macro m(arg: untyped): untyped = discard
|
||||
template t(arg: untyped): untyped = discard
|
||||
proc p(): void = discard
|
||||
iterator i(): int = discard
|
||||
converter c(s: string): int = discard
|
||||
method m(f: Foo): void = discard
|
||||
func f(): void = discard
|
||||
|
||||
let a = 1
|
||||
var b = 2
|
||||
const con = 2
|
||||
|
||||
proc outer(): void =
|
||||
proc inner() = discard
|
||||
|
||||
proc procWithLocal(): void =
|
||||
let local = 10
|
||||
|
||||
discard """
|
||||
$nimsuggest --v3 --tester $file
|
||||
>outline $file
|
||||
outline skType tv3_outline.Foo Foo $file 4 2 "" 100 5 16
|
||||
outline skType tv3_outline.FooEnum FooEnum $file 6 2 "" 100 6 31
|
||||
outline skEnumField tv3_outline.FooEnum.value1 FooEnum $file 6 17 "" 100 6 23
|
||||
outline skEnumField tv3_outline.FooEnum.value2 FooEnum $file 6 25 "" 100 6 31
|
||||
outline skType tv3_outline.FooPrivate FooPrivate $file 7 2 "" 100 8 22
|
||||
outline skMacro tv3_outline.m macro (arg: untyped): untyped{.noSideEffect, gcsafe.} $file 10 6 "" 100 10 40
|
||||
outline skTemplate tv3_outline.t template (arg: untyped): untyped $file 11 9 "" 100 11 43
|
||||
outline skProc tv3_outline.p proc (){.noSideEffect, gcsafe.} $file 12 5 "" 100 12 24
|
||||
outline skConverter tv3_outline.c converter (s: string): int{.noSideEffect, gcsafe.} $file 14 10 "" 100 14 37
|
||||
outline skFunc tv3_outline.f proc (){.noSideEffect, gcsafe.} $file 16 5 "" 100 16 24
|
||||
outline skConst tv3_outline.con int literal(2) $file 20 6 "" 100 20 13
|
||||
outline skProc tv3_outline.outer proc (){.noSideEffect, gcsafe.} $file 22 5 "" 100 23 24
|
||||
outline skProc tv3_outline.outer.inner proc (){.noSideEffect, gcsafe.} $file 23 7 "" 100 23 24
|
||||
outline skProc tv3_outline.procWithLocal proc (){.noSideEffect, gcsafe.} $file 25 5 "" 100 26 16
|
||||
"""
|
||||
Loading…
Add table
Add a link
Reference in a new issue