q/src/scanner/Scan.go
Eduard Urbach ed6ae1d306
All checks were successful
/ test (push) Successful in 14s
Added core tests
2025-06-20 15:52:13 +02:00

60 lines
No EOL
1 KiB
Go

package scanner
import (
"git.urbach.dev/cli/q/src/build"
"git.urbach.dev/cli/q/src/core"
"git.urbach.dev/cli/q/src/fs"
)
// Scan scans all the files included in the build.
func Scan(b *build.Build) (*core.Environment, error) {
s := scanner{
functions: make(chan *core.Function),
files: make(chan *fs.File),
errors: make(chan error),
build: b,
}
go func() {
s.queue(b.Files...)
s.group.Wait()
close(s.functions)
close(s.files)
close(s.errors)
}()
all := &core.Environment{
Files: make([]*fs.File, 0, 8),
Functions: make(map[string]*core.Function, 32),
}
for s.functions != nil || s.files != nil || s.errors != nil {
select {
case f, ok := <-s.functions:
if !ok {
s.functions = nil
continue
}
all.Functions[f.UniqueName] = f
case file, ok := <-s.files:
if !ok {
s.files = nil
continue
}
all.Files = append(all.Files, file)
case err, ok := <-s.errors:
if !ok {
s.errors = nil
continue
}
return all, err
}
}
return all, nil
}