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 }