func()

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
}