Skip to content

Commit

Permalink
textDocumentPositionParams: add optional range
Browse files Browse the repository at this point in the history
This change adds an optional range field to textDocumentPositionParams
so that clients can, for example, query a subexpression such as
x.f within a larger expression g(x.f[i]).

Also, clarify the text about cursor bias.

Fixes #377
Fixes #1029
  • Loading branch information
adonovan committed Sep 22, 2024
1 parent 0046ca2 commit e75c6c8
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions _specifications/lsp/3.18/types/textDocumentPositionParams.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,18 @@

Was `TextDocumentPosition` in 1.0 with inlined parameters.

A parameter literal used in requests to pass a text document and a position inside that document. It is up to the client to decide how a selection is converted into a position when issuing a request for a text document. The client can, for example, honor or ignore the selection direction to make LSP request consistent with features implemented internally.
A parameter literal used in requests to pass a text document and a
position or optional range within that document.

To be consistent with features implemented internally, the client is
free to choose for each LSP request how a cursor position or text
selection is converted into a position or range.
For example, some editors display the cursor as a caret at the current
insertion point between characters (`A|BC`), whereas others display it
as a box around the character after the insertion point (`A🄱C`).
Depending on the operation, in the absence of a selection range,
editors of the second kind may choose to interpret the cursor position
as an implicit selection of the character _after_ the position.

```typescript
interface TextDocumentPositionParams {
Expand All @@ -12,8 +23,14 @@ interface TextDocumentPositionParams {
textDocument: TextDocumentIdentifier;

/**
* The position inside the text document.
* The cursor position within the text document.
*/
position: Position;

/**
* The selected range within the text document, if any.
* The position is typically one of the endpoints of the range.
*/
range?: Range;
}
```

0 comments on commit e75c6c8

Please sign in to comment.