aboutsummaryrefslogtreecommitdiffstats
path: root/elpa/lsp-mode-20220505.630/lsp-go.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/lsp-mode-20220505.630/lsp-go.el')
-rw-r--r--elpa/lsp-mode-20220505.630/lsp-go.el337
1 files changed, 337 insertions, 0 deletions
diff --git a/elpa/lsp-mode-20220505.630/lsp-go.el b/elpa/lsp-mode-20220505.630/lsp-go.el
new file mode 100644
index 0000000..874b576
--- /dev/null
+++ b/elpa/lsp-mode-20220505.630/lsp-go.el
@@ -0,0 +1,337 @@
+;;; lsp-go.el --- Go Client settings -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2019 Muir Manders
+
+;; Author: Muir Manders <muir@mnd.rs>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; lsp-go client
+
+;;; Code:
+
+(require 'lsp-mode)
+(require 'lsp-completion)
+
+(defgroup lsp-go nil
+ "LSP support for the Go Programming Language, using the gopls language server."
+ :link '(url-link "https://github.com/golang/tools/blob/master/gopls/README.md")
+ :group 'lsp-mode
+ :package-version '(lsp-mode . "6.3.2"))
+
+(define-obsolete-variable-alias
+ 'lsp-gopls-server-path
+ 'lsp-go-gopls-server-path
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-gopls-server-path "gopls"
+ "Path to gopls server binary."
+ :type 'string
+ :group 'lsp-go)
+
+(define-obsolete-variable-alias
+ 'lsp-gopls-server-args
+ 'lsp-go-gopls-server-args
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-gopls-server-args nil
+ "Extra CLI arguments for gopls."
+ :type '(repeat string)
+ :group 'lsp-go)
+
+(define-obsolete-variable-alias
+ 'lsp-gopls-use-placeholders
+ 'lsp-go-use-placeholders
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-use-placeholders t
+ "Cause gopls to provide placeholder parameter snippets when
+completing function calls."
+ :type 'boolean
+ :group 'lsp-go)
+
+(define-obsolete-variable-alias
+ 'lsp-gopls-build-flags
+ 'lsp-go-build-flags
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-build-flags []
+ "A vector of flags passed on to the build system when invoked,
+ applied to queries like `go list'."
+ :type 'lsp-string-vector
+ :group 'lsp-go
+ :risky t
+ :package-version '(lsp-mode "6.2"))
+
+(define-obsolete-variable-alias
+ 'lsp-gopls-env
+ 'lsp-go-env
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-env nil
+ "`gopls' has the unusual ability to set environment variables,
+ intended to affect the behavior of commands invoked by `gopls'
+ on the user's behalf. This variable takes a hash table of env
+ var names to desired values."
+ :type '(alist :key-type (symbol :tag "env var name") :value-type (string :tag "value"))
+ :group 'lsp-go
+ :risky t
+ :package-version '(lsp-mode "6.2"))
+
+(defcustom lsp-go-directory-filters []
+ "A vector of directory filters."
+ :link '(url-link "https://github.com/golang/tools/blob/67e49ef2d0f326051e22a4a55bdf9344ae1a8ed8/gopls/doc/settings.md#directoryfilters-string")
+ :group 'lsp-go
+ :type 'lsp-string-vector
+ :package-version '(lsp-mode "8.0.0"))
+
+(define-obsolete-variable-alias
+ 'lsp-gopls-hover-kind
+ 'lsp-go-hover-kind
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-hover-kind "SynopsisDocumentation"
+ "`gopls' allows the end user to select the desired amount of
+ documentation returned during e.g. hover and thing-at-point
+ operations."
+ :type '(choice (const "SynopsisDocumentation")
+ (const "NoDocumentation")
+ (const "FullDocumentation")
+ (const "SingleLine")
+ (const "Structured"))
+ :group 'lsp-go
+ :risky t
+ :package-version '(lsp-mode "6.2"))
+
+(define-obsolete-variable-alias
+ 'lsp-gopls-available-codelens
+ 'lsp-go-available-codelenses
+ "lsp-mode 7.0.1")
+
+(define-obsolete-variable-alias
+ 'lsp-go-available-codelens
+ 'lsp-go-available-codelenses
+ "lsp-mode 7.0.1")
+
+(defvar lsp-go-available-codelenses
+ '(
+ (gc_details . "Toggle the calculation of gc annotations")
+ (generate . "Run `go generate` for a directory")
+ (regenerate_cgo . "Regenerate cgo definitions")
+ (test . "Run `go test` for a specific set of test or benchmark functions (lgeacy)")
+ (tidy . "Run `go mod tidy` for a module")
+ (upgrade_dependency . "Upgrade a dependency")
+ (vendor . "Runs `go mod vendor' for a module"))
+ "Available codelenses that can be further enabled or disabled
+ through `lsp-go-codelenses'.")
+
+(defun lsp-go--defcustom-available-as-alist-type (alist)
+ "Returns a list suitable for the `:type' field in a `defcustom' used to populate an alist.
+
+The input ALIST has the form `((\"name\" . \"documentation sentence\") [...])'
+
+The returned type provides a tri-state that either:
+ - does not include the element in the alist
+ - sets element to false (actually, :json-false)
+ - sets element to true (actually, t)
+"
+ (let ((list '()))
+ (dolist (v alist)
+ (push `(cons
+ :tag ,(cdr v)
+ (const :format "" ,(car v))
+ (choice (const :tag "Enable" t) (const :tag "Disable" :json-false)))
+ list))
+ (push 'set list)
+ list))
+
+(define-obsolete-variable-alias
+ 'lsp-gopls-codelens
+ 'lsp-go-codelenses
+ "lsp-mode 7.0.1")
+
+(define-obsolete-variable-alias
+ 'lsp-go-codelens
+ 'lsp-go-codelenses
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-codelenses '((gc_details . :json-false)
+ (generate . t)
+ (regenerate_cgo . t)
+ (tidy . t)
+ (upgrade_dependency . t)
+ (test . t)
+ (vendor . t))
+ "Select what codelenses should be enabled or not.
+
+The codelenses can be found at https://github.com/golang/tools/blob/3fa0e8f87c1aae0a9adc2a63af1a1945d16d9359/internal/lsp/source/options.go#L106-L112."
+ :type (lsp-go--defcustom-available-as-alist-type lsp-go-available-codelenses)
+ :group 'lsp-go
+ :risky t
+ :package-version '(lsp-mode "7.0"))
+
+(define-obsolete-variable-alias
+ 'lsp-clients-go-library-directories
+ 'lsp-go-library-directories
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-library-directories '("/usr")
+ "List of directories which will be considered to be libraries."
+ :group 'lsp-go
+ :risky t
+ :type '(repeat string))
+
+(define-obsolete-variable-alias
+ 'lsp-clients-go-library-directories-include-go-modules
+ 'lsp-go-library-directories-include-go-modules
+ "lsp-mode 7.0.1")
+
+(defcustom lsp-go-library-directories-include-go-modules t
+ "Whether or not $GOPATH/pkg/mod should be included as a library directory."
+ :type 'boolean
+ :group 'lsp-go)
+
+(defun lsp-go--library-default-directories (_workspace)
+ "Calculate go library directories.
+
+If `lsp-go-library-directories-include-go-modules' is non-nil
+and the environment variable GOPATH is set this function will return
+$GOPATH/pkg/mod along with the value of
+`lsp-go-library-directories'."
+ (let ((library-dirs lsp-go-library-directories))
+ (when (and lsp-go-library-directories-include-go-modules
+ (or (and (not (file-remote-p default-directory)) (executable-find "go"))
+ (and (version<= "27.0" emacs-version) (with-no-warnings (executable-find "go" (file-remote-p default-directory))))))
+ (with-temp-buffer
+ (when (zerop (process-file "go" nil t nil "env" "GOPATH"))
+ (setq library-dirs
+ (append
+ library-dirs
+ (list
+ (concat
+ (string-trim-right (buffer-substring (point-min) (point-max)))
+ "/pkg/mod")))))))
+ (if (file-remote-p default-directory)
+ (mapcar (lambda (path) (concat (file-remote-p default-directory) path)) library-dirs)
+ library-dirs)))
+
+(defcustom lsp-go-link-target "pkg.go.dev"
+ "Which website to use for displaying Go documentation."
+ :type '(choice (const "pkg.go.dev")
+ (string :tag "A custom website"))
+ :group 'lsp-go
+ :package-version '(lsp-mode "7.0.1"))
+
+(defcustom lsp-go-links-in-hover t
+ "If non-nil, hover documentation includes links."
+ :type 'boolean
+ :group 'lsp-go
+ :package-version '(lsp-mode "8.0.0"))
+
+(defcustom lsp-go-use-gofumpt nil
+ "If non-nil, use gofumpt formatting."
+ :type 'boolean
+ :group 'lsp-go
+ :package-version '(lsp-mode "8.0.0"))
+
+(defcustom lsp-go-goimports-local ""
+ "Equivalent of the goimports -local flag, which puts imports beginning with
+ this string after third-party packages. It should be the prefix of the import
+ path whose imports should be grouped separately."
+ :type 'string
+ :group 'lsp-go
+ :package-version '(lsp-mode "8.0.0"))
+
+(defcustom lsp-go-analyses nil
+ "Specify analyses that the user would like to enable or disable. A map of the
+ names of analysis passes that should be enabled/disabled. A full list of
+ analyzers that gopls uses can be found at
+ https://github.com/golang/tools/blob/master/gopls/doc/analyzers.md"
+ :type '(alist :key-type (string :tag "analyzer name") :value-type (boolean :tag "value"))
+ :group 'lsp-go
+ :risky t
+ :package-version '(lsp-mode "8.0.0"))
+
+(defcustom lsp-go-import-shortcut "Both"
+ "Specifies whether import statements should link to documentation or go to
+ definitions."
+ :type '(choice (const "Both")
+ (const "Link")
+ (const "Definition"))
+ :group 'lsp-go
+ :risky t
+ :package-version '(lsp-mode "8.0.0"))
+
+(defcustom lsp-go-symbol-matcher "Fuzzy"
+ "Sets the algorithm that is used when finding workspace symbols."
+ :type '(choice (const "Fuzzy")
+ (const "CaseInsensitive")
+ (const "CaseSensitive"))
+ :group 'lsp-go
+ :risky t
+ :package-version '(lsp-mode "8.0.0"))
+
+(defcustom lsp-go-symbol-style "Dynamic"
+ "Controls how symbols are qualified in symbol responses.
+
+ 'Dynamic' uses whichever qualifier results in the highest scoring match for
+ the given symbol query. Here a 'qualifier' is any '/' or '.' delimited suffix
+ of the fully qualified symbol. i.e. 'to/pkg.Foo.Field' or just 'Foo.Field'.
+
+ 'Full' is fully qualified symbols, i.e. 'path/to/pkg.Foo.Field'.
+
+ 'Package' is package qualified symbols i.e. 'pkg.Foo.Field'."
+ :type '(choice (const "Dynamic")
+ (const "Full")
+ (const "Package"))
+ :group 'lsp-go
+ :risky t
+ :package-version '(lsp-mode "8.0.0"))
+
+(lsp-register-custom-settings
+ '(("gopls.usePlaceholders" lsp-go-use-placeholders t)
+ ("gopls.hoverKind" lsp-go-hover-kind)
+ ("gopls.buildFlags" lsp-go-build-flags)
+ ("gopls.env" lsp-go-env)
+ ("gopls.linkTarget" lsp-go-link-target)
+ ("gopls.codelenses" lsp-go-codelenses)
+ ("gopls.linksInHover" lsp-go-links-in-hover t)
+ ("gopls.gofumpt" lsp-go-use-gofumpt t)
+ ("gopls.local" lsp-go-goimports-local)
+ ("gopls.directoryFilters" lsp-go-directory-filters)
+ ("gopls.analyses" lsp-go-analyses)
+ ("gopls.importShortcut" lsp-go-import-shortcut)
+ ("gopls.symbolMatcher" lsp-go-symbol-matcher)
+ ("gopls.symbolStyle" lsp-go-symbol-style)))
+
+(lsp-register-client
+ (make-lsp-client :new-connection (lsp-stdio-connection
+ (lambda () (cons lsp-go-gopls-server-path lsp-go-gopls-server-args)))
+ :major-modes '(go-mode go-dot-mod-mode)
+ :language-id "go"
+ :priority 0
+ :server-id 'gopls
+ :completion-in-comments? t
+ :library-folders-fn #'lsp-go--library-default-directories
+ :after-open-fn (lambda ()
+ ;; https://github.com/golang/tools/commit/b2d8b0336
+ (setq-local lsp-completion-filter-on-incomplete nil))))
+
+(lsp-consistency-check lsp-go)
+
+(provide 'lsp-go)
+;;; lsp-go.el ends here