go/internal/lsp
Alan Donovan b929f3bf4d internal/span: make NewRange accept File, not FileSet
span.NewRange now accepts a *token.File and two token.Pos.
It is the caller's responsibility to look up the File
in the FileSet, if necessary (it usually isn't), and to
ensure the Pos values are valid.  Ditto NewMappedRange.

This reduces the creep of Snapshot into functions that
have no need to know about it. Also the bug.Report call
in NewRange has been pushed up into the caller and
logically eliminated in all but one case.

I think we should aim for the invariant that functions that
operate on a single file should accept a *token.File, not
a FileSet; only functions that operate on sets of files
(e.g. type checking, analysis) should use a FileSet.
This is not always possible: some public functions
accept a FileSet only to re-lookup a single file already
known to the caller; if necessary we could provide token.File
variants of these.

This may ultimately allow us to create a new FileSet per
call to the parser, so that Files and FileSets are in
1:1 correspondance and there is no global FileSet.
(It currently grows without bound, on the order of kilobytes
per keystroke.) FileSets containing multiple files,
needed when we interact with the type checker and analysis,
may be temporarily synthesized on demand from a set of Files,
analogous to mmap'ing a few files into a blank address space.

Also:
- replace File.Position(pos).Line by File.Line(pos)
- replace pos == token.NoPos by pos.IsValid()
- avoid fishy token.Pos conversions in link.go
- other minor simplifications

Change-Id: Ia3119e0ac7e193801fbafa81c8f48acfa14e9ae4
Reviewed-on: https://go-review.googlesource.com/c/tools/+/409935
Auto-Submit: Alan Donovan <adonovan@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Run-TryBot: Alan Donovan <adonovan@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2022-07-06 19:40:50 +00:00
..
analysis internal: remove unneeded FileSets 2022-06-06 20:47:10 +00:00
browser all: replace all usages of os/exec with golang.org/x/sys/execabs 2021-01-19 22:25:03 +00:00
bug internal/lsp: add missing bug reporting, and panic during marker tests 2022-05-31 14:14:38 +00:00
cache internal/span: make NewRange accept File, not FileSet 2022-07-06 19:40:50 +00:00
cmd internal/lsp: initial test set up for inlay hints 2022-06-09 20:27:29 +00:00
command gopls/internal/vulncheck: include nonaffecting vulnerability info 2022-06-16 14:42:12 +00:00
debug internal/lsp/debug: reduce critical sections in trace 2022-06-17 20:37:28 +00:00
diff internal/span: eliminate TokenConverter 2022-06-01 19:19:15 +00:00
fake internal/lsp: add InlayHint regtests 2022-06-28 15:22:17 +00:00
fuzzy gopls, internal/lsp: gofmt 2022-04-12 17:41:31 +00:00
helper internal/lsp/protocol: update LSP definitions and stubs 2021-10-05 16:44:45 +00:00
lsppos internal/lsp/lsppos: reduce allocations in NewMapper 2022-07-01 16:40:13 +00:00
lsprpc internal/lsp/regtest: don't run the connection on the test context 2022-06-10 12:48:42 +00:00
mod internal/lsp/mod: fix broken assumptions about file base 2022-06-01 22:04:06 +00:00
progress internal/lsp/progress: detach context for all progress notifications 2022-06-02 20:26:04 +00:00
protocol internal/lsp: add text edits for unkeyed literals 2022-06-30 17:08:31 +00:00
regtest internal/lsp: add InlayHint regtests 2022-06-28 15:22:17 +00:00
safetoken internal/span: eliminate TokenConverter 2022-06-01 19:19:15 +00:00
snippet lsp/completion: fix literal completions with type params 2022-04-26 02:30:39 +00:00
source internal/span: make NewRange accept File, not FileSet 2022-07-06 19:40:50 +00:00
template internal/lsp: fix source.CompareDiagnostic asymmetry 2022-05-11 17:43:03 +00:00
testdata lsp/completion: fix ranking of *types.PkgName candidates 2022-07-01 14:13:48 +00:00
tests internal/lsp: add settings for inlay hints and enable 2022-06-22 17:08:41 +00:00
work internal/lsp/source: eliminate ColumnMapper.PointSpan in favor of Pos 2022-06-01 19:19:59 +00:00
README.md internal/lsp: add READMEs that describe tests, how to run tests 2020-12-03 17:03:53 +00:00
call_hierarchy.go
code_action.go internal/span: make NewRange accept File, not FileSet 2022-07-06 19:40:50 +00:00
code_lens.go internal/lsp: honor the file kind provided by clients for overlays 2022-01-13 20:54:45 +00:00
command.go internal/lsp/progress: detach context for all progress notifications 2022-06-02 20:26:04 +00:00
completion.go internal/lsp/source: remove workaround for newline terminated files 2022-06-01 15:40:59 +00:00
completion_test.go internal/lsp/completion: move postfix completions behind option 2021-03-29 18:55:49 +00:00
debounce.go internal/lsp: adopt bcmills' suggestion for an improved debouncer API 2021-07-13 16:40:23 +00:00
debounce_test.go internal/lsp: adopt bcmills' suggestion for an improved debouncer API 2021-07-13 16:40:23 +00:00
definition.go internal/lsp: use the correct converter for mapped range offsets 2022-06-01 15:32:54 +00:00
diagnostics.go internal/span: make NewRange accept File, not FileSet 2022-07-06 19:40:50 +00:00
folding_range.go all: add copyright notices to files that are missing them 2021-01-06 17:23:47 +00:00
format.go internal/lsp: add support for formatting go.work files 2022-02-15 17:15:32 +00:00
general.go internal/lsp: add settings for inlay hints and enable 2022-06-22 17:08:41 +00:00
highlight.go internal/lsp: honor the file kind provided by clients for overlays 2022-01-13 20:54:45 +00:00
hover.go internal/lsp: add hover for go.work use statements 2022-03-04 19:55:36 +00:00
implementation.go
inlay_hint.go internal/lsp: rename viewport to range 2022-06-23 18:17:15 +00:00
link.go internal/span: make NewRange accept File, not FileSet 2022-07-06 19:40:50 +00:00
lsp_test.go internal/lsp: rename viewport to range 2022-06-23 18:17:15 +00:00
references.go internal/lsp: honor the file kind provided by clients for overlays 2022-01-13 20:54:45 +00:00
rename.go internal/lsp: use placeholders with prepare rename 2022-02-15 00:29:01 +00:00
reset_golden.sh
semantic.go internal/span: make NewRange accept File, not FileSet 2022-07-06 19:40:50 +00:00
server.go internal/lsp/progress: detach context for all progress notifications 2022-06-02 20:26:04 +00:00
server_gen.go internal/lsp: support textDocument/inlayHint for parameter names 2022-06-10 19:31:11 +00:00
signature_help.go internal/lsp: update to latest version of LSP protocol 2021-02-02 11:32:59 +00:00
symbols.go internal/lsp: honor the file kind provided by clients for overlays 2022-01-13 20:54:45 +00:00
text_synchronization.go internal/lsp/progress: detach context for all progress notifications 2022-06-02 20:26:04 +00:00
workspace.go gopls: remove usage of golang.org/x/xerrors 2022-04-20 15:33:22 +00:00
workspace_symbol.go

README.md

lsp

internal/lsp provides much of the Language Server Protocol (lsp) implementation for gopls.

Documentation for users and contributors can be found in the gopls/doc directory.