Added a function scanner
This commit is contained in:
parent
ac157e580c
commit
b6be9357bf
@ -1,3 +1,7 @@
|
|||||||
package build
|
package build
|
||||||
|
|
||||||
type Function struct{}
|
import "git.akyoto.dev/cli/q/src/token"
|
||||||
|
|
||||||
|
type Function struct {
|
||||||
|
Tokens token.List
|
||||||
|
}
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"git.akyoto.dev/cli/q/src/directory"
|
"git.akyoto.dev/cli/q/src/directory"
|
||||||
"git.akyoto.dev/cli/q/src/log"
|
|
||||||
"git.akyoto.dev/cli/q/src/token"
|
"git.akyoto.dev/cli/q/src/token"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -60,8 +59,39 @@ func scanFile(path string, functions chan<- *Function) error {
|
|||||||
|
|
||||||
tokens := token.Tokenize(contents)
|
tokens := token.Tokenize(contents)
|
||||||
|
|
||||||
for _, t := range tokens {
|
var (
|
||||||
log.Info.Println(t.Kind, t.Position, strings.TrimSpace(t.String()))
|
groupLevel = 0
|
||||||
|
blockLevel = 0
|
||||||
|
functionStart = -1
|
||||||
|
)
|
||||||
|
|
||||||
|
for i, t := range tokens {
|
||||||
|
switch t.Kind {
|
||||||
|
case token.Identifier:
|
||||||
|
if blockLevel == 0 && groupLevel == 0 {
|
||||||
|
functionStart = i
|
||||||
|
}
|
||||||
|
|
||||||
|
case token.GroupStart:
|
||||||
|
groupLevel++
|
||||||
|
|
||||||
|
case token.GroupEnd:
|
||||||
|
groupLevel--
|
||||||
|
|
||||||
|
case token.BlockStart:
|
||||||
|
blockLevel++
|
||||||
|
|
||||||
|
case token.BlockEnd:
|
||||||
|
blockLevel--
|
||||||
|
|
||||||
|
if blockLevel == 0 {
|
||||||
|
function := &Function{
|
||||||
|
Tokens: tokens[functionStart : i+1],
|
||||||
|
}
|
||||||
|
|
||||||
|
functions <- function
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user