Hi,

I wrote this func to load a program,
its faster but it has drawbacks about error managements.
It might hide some messages.

the first time i ran this function,
without a special typechecker error handler,
I felt overwhelmed by the amount of errors generated.

in this func s is an import path, 
and only that path should be loaded (so far).
The import is very superficial.

Is there a better/correct way to write a conf 
that achieves similar speed goal 
but with good error triage ?

Should i use another api ?

I m mostly interested into 
inspecting the definitions,
create new definitions,
update some definitions in place,
to be able to process the source even if it contains errors,
unless they are critical.

Thanks


// GetFastProgramLoader returns a fast program loader
func GetFastProgramLoader(s string) loader.Config {
    var conf loader.Config
    conf.ParserMode = parser.ParseComments
    conf.TypeChecker.IgnoreFuncBodies = true
    conf.TypeChecker.DisableUnusedImportCheck = true
    conf.TypeChecker.Error = func(err error) {
        if !err.(*types.Error).Soft {
            panic(err)
        }
        if strings.Index(err.Error(), "could not import") == -1 ||
            strings.Index(err.Error(), "undeclared name:") == -1 {
            return
        }
        log.Println(err)
    }

    // this really matters otherise its a pain to generate a partial 
program.
    conf.AllowErrors = true
    originalPkgFinder := (*build.Context).Import
    conf.FindPackage = func(ctxt *build.Context, fromDir, importPath string, 
mode build.ImportMode) (*build.Package, error) {
        if fromDir == s {
            return originalPkgFinder(ctxt, fromDir, importPath, mode)
        }
        return nil, fmt.Errorf("skipped %v %v", fromDir, importPath)
    }
    return conf
}



-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to