diff --git a/lang/collect/export.go b/lang/collect/export.go index 1e16ecbc..41324f74 100644 --- a/lang/collect/export.go +++ b/lang/collect/export.go @@ -161,37 +161,40 @@ func (c *Collector) exportSymbol(repo *uniast.Repository, symbol *DocumentSymbol return id, nil } - name := symbol.Name - if name == "" { - if refName == "" { - e = fmt.Errorf("both symbol %v name and refname is empty", symbol) - return - } - // NOTICE: use refName as id when symbol name is missing - name = refName - } + // Check NeedStdSymbol file := symbol.Location.URI.File() mod, path, err := c.spec.NameSpace(file) if err != nil { e = err return } - if !c.NeedStdSymbol && mod == "" { e = ErrStdSymbol return } - tmp := uniast.NewIdentity(mod, path, name) - id = &tmp - visited[symbol] = id - - // Load eternal symbol on demands + // Load external symbol on demands if !c.LoadExternalSymbol && (!c.internal(symbol.Location) || symbol.Kind == SKUnknown) { e = ErrExternalSymbol return } + // Construct Identity and save to visited + name := symbol.Name + if name == "" { + if refName == "" { + e = fmt.Errorf("both symbol %v name and refname is empty", symbol) + return + } + // NOTICE: use refName as id when symbol name is missing + name = refName + } + tmp := uniast.NewIdentity(mod, path, name) + id = &tmp + // Save to visited ONLY WHEN no errors occur + visited[symbol] = id + + // Walk down from repo struct if repo.Modules[mod] == nil { repo.Modules[mod] = newModule(mod, "", c.Language) } diff --git a/testdata/rust2/src/entity/inter.rs b/testdata/rust2/src/entity/inter.rs index f59188a2..2e81768e 100644 --- a/testdata/rust2/src/entity/inter.rs +++ b/testdata/rust2/src/entity/inter.rs @@ -35,14 +35,14 @@ pub trait Addable { pub struct AnyInt(i64); -impl AnyInt { - pub fn id() -> i64 { - 0 - } - pub fn add(&self, b: i64) -> i64 { - self.0 + b - } -} +//impl AnyInt { +// pub fn id() -> i64 { +// 0 +// } +// pub fn add(&self, b: i64) -> i64 { +// self.0 + b +// } +//} impl Addable for AnyInt { fn add(&self, b: i64) -> i64 {