cuelang.org/go@v0.10.1/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  					TemplateExtensions:      []string{},
    48  					StandaloneTags:          []string{"ignore"},
    49  				},
    50  				UIOptions: UIOptions{
    51  					DiagnosticOptions: DiagnosticOptions{
    52  						Annotations: map[Annotation]bool{
    53  							Bounds: true,
    54  							Escape: true,
    55  							Inline: true,
    56  							Nil:    true,
    57  						},
    58  						DiagnosticsDelay:          1 * time.Second,
    59  						DiagnosticsTrigger:        DiagnosticsOnEdit,
    60  						AnalysisProgressReporting: true,
    61  					},
    62  					InlayHintOptions: InlayHintOptions{},
    63  					DocumentationOptions: DocumentationOptions{
    64  						HoverKind:    FullDocumentation,
    65  						LinkTarget:   "pkg.go.dev",
    66  						LinksInHover: true,
    67  					},
    68  					NavigationOptions: NavigationOptions{
    69  						ImportShortcut: BothShortcuts,
    70  						SymbolMatcher:  SymbolFastFuzzy,
    71  						SymbolStyle:    DynamicSymbols,
    72  						SymbolScope:    AllSymbolScope,
    73  					},
    74  					CompletionOptions: CompletionOptions{
    75  						Matcher:                        Fuzzy,
    76  						CompletionBudget:               100 * time.Millisecond,
    77  						ExperimentalPostfixCompletions: true,
    78  						CompleteFunctionCalls:          true,
    79  					},
    80  					Codelenses: map[string]bool{
    81  						string(command.Generate):          true,
    82  						string(command.RegenerateCgo):     true,
    83  						string(command.Tidy):              true,
    84  						string(command.GCDetails):         false,
    85  						string(command.UpgradeDependency): true,
    86  						string(command.Vendor):            true,
    87  					},
    88  				},
    89  			},
    90  			InternalOptions: InternalOptions{
    91  				CompleteUnimported:          true,
    92  				CompletionDocumentation:     true,
    93  				DeepCompletion:              true,
    94  				SubdirWatchPatterns:         SubdirWatchPatternsAuto,
    95  				ReportAnalysisProgressAfter: 5 * time.Second,
    96  				TelemetryPrompt:             false,
    97  				LinkifyShowMessage:          false,
    98  				IncludeReplaceInWorkspace:   true,
    99  				ZeroConfig:                  true,
   100  			},
   101  			Hooks: Hooks{
   102  				URLRegexp:            urlRegexp(),
   103  				DefaultAnalyzers:     analyzers(),
   104  				StaticcheckAnalyzers: map[string]*Analyzer{},
   105  			},
   106  		}
   107  	})
   108  	options := defaultOptions.Clone()
   109  	for _, override := range overrides {
   110  		if override != nil {
   111  			override(options)
   112  		}
   113  	}
   114  	return options
   115  }