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 }