golang.org/x/tools/gopls@v0.15.3/internal/server/workspace_symbol.go (about)

     1  // Copyright 2020 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package server
     6  
     7  import (
     8  	"context"
     9  
    10  	"golang.org/x/tools/gopls/internal/cache"
    11  	"golang.org/x/tools/gopls/internal/golang"
    12  	"golang.org/x/tools/gopls/internal/protocol"
    13  	"golang.org/x/tools/gopls/internal/telemetry"
    14  	"golang.org/x/tools/internal/event"
    15  )
    16  
    17  func (s *server) Symbol(ctx context.Context, params *protocol.WorkspaceSymbolParams) (_ []protocol.SymbolInformation, rerr error) {
    18  	recordLatency := telemetry.StartLatencyTimer("symbol")
    19  	defer func() {
    20  		recordLatency(ctx, rerr)
    21  	}()
    22  
    23  	ctx, done := event.Start(ctx, "lsp.Server.symbol")
    24  	defer done()
    25  
    26  	views := s.session.Views()
    27  	matcher := s.Options().SymbolMatcher
    28  	style := s.Options().SymbolStyle
    29  
    30  	var snapshots []*cache.Snapshot
    31  	for _, v := range views {
    32  		snapshot, release, err := v.Snapshot()
    33  		if err != nil {
    34  			continue // snapshot is shutting down
    35  		}
    36  		// If err is non-nil, the snapshot is shutting down. Skip it.
    37  		defer release()
    38  		snapshots = append(snapshots, snapshot)
    39  	}
    40  	return golang.WorkspaceSymbols(ctx, matcher, style, snapshots, params.Query)
    41  }