in src/ulsp/controller/scip/scip.go [368:412]
func (c *controller) initialized(ctx context.Context, params *protocol.InitializedParams) error {
sesh, err := c.sessions.GetFromContext(ctx)
if err != nil {
return err
}
c.registriesMu.Lock()
_, hasIndex := c.registries[sesh.WorkspaceRoot]
c.registriesMu.Unlock()
c.once.Do(func() {
go c.handleChanges(c.watchCloser)
})
if c.watcher != nil {
scipDirs := []string{}
cfg, ok, isDefault := c.configForMonorepo(sesh.Monorepo)
if isDefault {
scipDirs = cfg.Scip.Directories
c.logger.Infof("No SCIP configuration found for repo %q, using default config", sesh.Monorepo)
} else if !ok {
c.logger.Infof("No SCIP configuration found for repo %q, skipping SCIP loading", sesh.Monorepo)
return nil
} else {
scipDirs = cfg.Scip.Directories
}
for _, d := range scipDirs {
scipDirPath := path.Join(sesh.WorkspaceRoot, d)
err = c.fs.MkdirAll(scipDirPath)
if err != nil {
c.logger.Warnf("Failed to create directory %q: %v", scipDirPath, err)
return err
}
err = c.watcher.Add(scipDirPath)
if err != nil {
c.logger.Warnf("Failed to watch for changes in %q: %v", sesh.WorkspaceRoot, err)
return err
}
}
}
if !hasIndex {
return c.loadIndices(ctx, sesh)
}
return nil
}