cuelang.org/go@v0.13.0/internal/golangorgx/gopls/settings/default.go (about)

     1  // Copyright 2023 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 settings
     6  
     7  import (
     8  	"sync"
     9  	"time"
    10  
    11  	"cuelang.org/go/internal/golangorgx/gopls/protocol"
    12  	"cuelang.org/go/internal/golangorgx/gopls/protocol/command"
    13  )
    14  
    15  var (
    16  	optionsOnce    sync.Once
    17  	defaultOptions *Options
    18  )
    19  
    20  // DefaultOptions is the options that are used for Gopls execution independent
    21  // of any externally provided configuration (LSP initialization, command
    22  // invocation, etc.).
    23  func DefaultOptions(overrides ...func(*Options)) *Options {
    24  	optionsOnce.Do(func() {
    25  		var commands []string
    26  		for _, c := range command.Commands {
    27  			commands = append(commands, c.ID())
    28  		}
    29  		defaultOptions = &Options{
    30  			ClientOptions: ClientOptions{
    31  				InsertTextFormat:                           protocol.PlainTextTextFormat,
    32  				PreferredContentFormat:                     protocol.Markdown,
    33  				ConfigurationSupported:                     true,
    34  				DynamicConfigurationSupported:              true,
    35  				DynamicRegistrationSemanticTokensSupported: true,
    36  				DynamicWatchedFilesSupported:               true,
    37  				LineFoldingOnly:                            false,
    38  				HierarchicalDocumentSymbolSupport:          true,
    39  			},
    40  			ServerOptions: ServerOptions{
    41  				SupportedCommands: commands,
    42  			},
    43  			UserOptions: UserOptions{
    44  				BuildOptions: BuildOptions{
    45  					ExpandWorkspaceToModule: true,
    46  					DirectoryFilters:        []string{"-**/node_modules"},
    47  					StandaloneTags:          []string{"ignore"},
    48  				},
    49  				UIOptions: UIOptions{
    50  					DiagnosticOptions: DiagnosticOptions{
    51  						Annotations: map[Annotation]bool{
    52  							Bounds: true,
    53  							Escape: true,
    54  							Inline: true,
    55  							Nil:    true,
    56  						},
    57  						DiagnosticsDelay:          1 * time.Second,
    58  						DiagnosticsTrigger:        DiagnosticsOnEdit,
    59  						AnalysisProgressReporting: true,
    60  					},
    61  					InlayHintOptions: InlayHintOptions{},
    62  					DocumentationOptions: DocumentationOptions{
    63  						HoverKind:    FullDocumentation,
    64  						LinkTarget:   "pkg.go.dev",
    65  						LinksInHover: true,
    66  					},
    67  					NavigationOptions: NavigationOptions{
    68  						ImportShortcut: BothShortcuts,
    69  						SymbolMatcher:  SymbolFastFuzzy,
    70  						SymbolStyle:    DynamicSymbols,
    71  						SymbolScope:    AllSymbolScope,
    72  					},
    73  					CompletionOptions: CompletionOptions{
    74  						Matcher:                        Fuzzy,
    75  						CompletionBudget:               100 * time.Millisecond,
    76  						ExperimentalPostfixCompletions: true,
    77  						CompleteFunctionCalls:          true,
    78  					},
    79  					Codelenses: map[string]bool{
    80  						string(command.Generate):          true,
    81  						string(command.RegenerateCgo):     true,
    82  						string(command.Tidy):              true,
    83  						string(command.GCDetails):         false,
    84  						string(command.UpgradeDependency): true,
    85  						string(command.Vendor):            true,
    86  					},
    87  				},
    88  			},
    89  			InternalOptions: InternalOptions{
    90  				CompleteUnimported:          true,
    91  				CompletionDocumentation:     true,
    92  				DeepCompletion:              true,
    93  				SubdirWatchPatterns:         SubdirWatchPatternsAuto,
    94  				ReportAnalysisProgressAfter: 5 * time.Second,
    95  				TelemetryPrompt:             false,
    96  				LinkifyShowMessage:          false,
    97  				IncludeReplaceInWorkspace:   true,
    98  				ZeroConfig:                  true,
    99  			},
   100  			Hooks: Hooks{
   101  				URLRegexp:            urlRegexp(),
   102  				DefaultAnalyzers:     analyzers(),
   103  				StaticcheckAnalyzers: map[string]*Analyzer{},
   104  			},
   105  		}
   106  	})
   107  	options := defaultOptions.Clone()
   108  	for _, override := range overrides {
   109  		if override != nil {
   110  			override(options)
   111  		}
   112  	}
   113  	return options
   114  }