newtests/lsp/selectionRange/test.js (2,225 lines of code) (raw):
/*
* @flow
* @noformat
*/
import type {Suite} from 'flow-dev-tools/src/test/Suite';
import type LSPMessage from 'flow-dev-tools/src/test/lsp';
const {suite, test} = require('flow-dev-tools/src/test/Tester');
module.exports = (suite(
({
addFile,
addFiles,
addCode,
lspStartAndConnect,
lspRequestAndWaitUntilResponse,
lspIgnoreStatusAndCancellation,
}) => {
let requestSelectionRange = function(
uri: string,
positions: Array<{|line: number, character: number|}>,
) {
return lspRequestAndWaitUntilResponse('textDocument/selectionRange', {
textDocument: {uri: uri},
positions: positions,
});
};
return [
test('textDocument/selectionRange on jsx', [
addFiles('jsx.js'),
lspStartAndConnect(),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/jsx.js',
[{line: 7, character: 9}], // inside `Text`
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 6,
character: 29,
},
end: {
line: 8,
character: 4,
},
},
parent: {
range: {
start: {
line: 6,
character: 4,
},
end: {
line: 8,
character: 10,
},
},
parent: {
range: {
start: {
line: 5,
character: 7,
},
end: {
line: 9,
character: 2,
},
},
parent: {
range: {
start: {
line: 5,
character: 2,
},
end: {
line: 9,
character: 8,
},
},
parent: {
range: {
start: {
line: 4,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/jsx.js',
[{line: 6, character: 11}], // inside attribute name
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 6,
character: 9,
},
end: {
line: 6,
character: 12,
},
},
parent: {
range: {
start: {
line: 6,
character: 9,
},
end: {
line: 6,
character: 18,
},
},
parent: {
range: {
start: {
line: 6,
character: 4,
},
end: {
line: 6,
character: 29,
},
},
parent: {
range: {
start: {
line: 6,
character: 4,
},
end: {
line: 8,
character: 10,
},
},
parent: {
range: {
start: {
line: 5,
character: 7,
},
end: {
line: 9,
character: 2,
},
},
parent: {
range: {
start: {
line: 5,
character: 2,
},
end: {
line: 9,
character: 8,
},
},
parent: {
range: {
start: {
line: 4,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/jsx.js',
[{line: 6, character: 15}], // inside attribute literal value
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 6,
character: 13,
},
end: {
line: 6,
character: 18,
},
},
parent: {
range: {
start: {
line: 6,
character: 9,
},
end: {
line: 6,
character: 18,
},
},
parent: {
range: {
start: {
line: 6,
character: 4,
},
end: {
line: 6,
character: 29,
},
},
parent: {
range: {
start: {
line: 6,
character: 4,
},
end: {
line: 8,
character: 10,
},
},
parent: {
range: {
start: {
line: 5,
character: 7,
},
end: {
line: 9,
character: 2,
},
},
parent: {
range: {
start: {
line: 5,
character: 2,
},
end: {
line: 9,
character: 8,
},
},
parent: {
range: {
start: {
line: 4,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/jsx.js',
[{line: 6, character: 25}], // inside attribute expression
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 6,
character: 24,
},
end: {
line: 6,
character: 27,
},
},
parent: {
range: {
start: {
line: 6,
character: 23,
},
end: {
line: 6,
character: 28,
},
},
parent: {
range: {
start: {
line: 6,
character: 19,
},
end: {
line: 6,
character: 28,
},
},
parent: {
range: {
start: {
line: 6,
character: 4,
},
end: {
line: 6,
character: 29,
},
},
parent: {
range: {
start: {
line: 6,
character: 4,
},
end: {
line: 8,
character: 10,
},
},
parent: {
range: {
start: {
line: 5,
character: 7,
},
end: {
line: 9,
character: 2,
},
},
parent: {
range: {
start: {
line: 5,
character: 2,
},
end: {
line: 9,
character: 8,
},
},
parent: {
range: {
start: {
line: 4,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 10,
character: 2,
},
},
},
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
]),
test('textDocument/selectionRange on array spread', [
addFiles('array_spread.js'),
lspStartAndConnect(),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/array_spread.js',
[{line: 4, character: 16}], // in baz
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 4,
character: 14,
},
end: {
line: 4,
character: 17,
},
},
parent: {
range: {
start: {
line: 4,
character: 11,
},
end: {
line: 4,
character: 17,
},
},
parent: {
range: {
start: {
line: 4,
character: 0,
},
end: {
line: 4,
character: 18,
},
},
parent: {
range: {
start: {
line: 4,
character: 0,
},
end: {
line: 4,
character: 19,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 4,
character: 19,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 4,
character: 19,
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
]),
test('textDocument/selectionRange on functions', [
addFiles('function.js'),
lspStartAndConnect(),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/function.js',
[{line: 3, character: 0}], // in declaration body
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 2,
character: 48,
},
end: {
line: 4,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 4,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 8,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 8,
character: 2,
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/function.js',
[{line: 7, character: 0}], // in expression body
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 6,
character: 30,
},
end: {
line: 8,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 1,
},
end: {
line: 8,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 8,
character: 2,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 8,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 8,
character: 2,
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/function.js',
[{line: 2, character: 31}], // in arg2 identifier
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 2,
character: 28,
},
end: {
line: 2,
character: 32,
},
},
parent: {
range: {
start: {
line: 2,
character: 28,
},
end: {
line: 2,
character: 40,
},
},
parent: {
range: {
start: {
line: 2,
character: 13,
},
end: {
line: 2,
character: 41,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 2,
character: 47,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 4,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 8,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 8,
character: 2,
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
]),
test('textDocument/selectionRange on var', [
addFiles('var.js'),
lspStartAndConnect(),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/var.js',
[{line: 4, character: 15}], // inside 1234
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 4,
character: 12,
},
end: {
line: 4,
character: 16,
},
},
parent: {
range: {
start: {
line: 4,
character: 4,
},
end: {
line: 4,
character: 16,
},
},
parent: {
range: {
start: {
line: 4,
character: 0,
},
end: {
line: 4,
character: 17,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 4,
character: 17,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 4,
character: 17,
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/var.js',
[{line: 4, character: 9}], // inside T of `var x : T`
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 4,
character: 8,
},
end: {
line: 4,
character: 9,
},
},
parent: {
range: {
start: {
line: 4,
character: 6,
},
end: {
line: 4,
character: 9,
},
},
parent: {
range: {
start: {
line: 4,
character: 4,
},
end: {
line: 4,
character: 9,
},
},
parent: {
range: {
start: {
line: 4,
character: 4,
},
end: {
line: 4,
character: 16,
},
},
parent: {
range: {
start: {
line: 4,
character: 0,
},
end: {
line: 4,
character: 17,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 4,
character: 17,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 4,
character: 17,
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
]),
test('textDocument/selectionRange on declare export', [
addFiles('declare_export.js'),
lspStartAndConnect(),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/declare_export.js',
[{line: 2, character: 17}], // inside `var` in `declare export var ...`
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 2,
character: 30,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 2,
character: 30,
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
]),
test('textDocument/selectionRange on classes', [
addFiles('class.js'),
lspStartAndConnect(),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 6, character: 2}], // in class keyword
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 6, character: 16}], // `A` in `class ... extends A`
)
// TODO: include `extends `? not in the AST but could be useful
// to delete.
.verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 6,
character: 16,
},
end: {
line: 6,
character: 17,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 6, character: 29}], // `I` in `class ... identifier I {`
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 6,
character: 29,
},
end: {
line: 6,
character: 30,
},
},
parent: {
range: {
start: {
line: 6,
character: 18,
},
end: {
line: 6,
character: 30,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 7, character: 11}], // in foo void return type
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 7,
character: 9,
},
end: {
line: 7,
character: 13,
},
},
parent: {
range: {
start: {
line: 7,
character: 7,
},
end: {
line: 7,
character: 13,
},
},
parent: {
range: {
start: {
line: 7,
character: 5,
},
end: {
line: 7,
character: 13,
},
},
parent: {
range: {
start: {
line: 7,
character: 2,
},
end: {
line: 9,
character: 3,
},
},
parent: {
range: {
start: {
line: 6,
character: 31,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 8, character: 0}], // in foo method body
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 7,
character: 14,
},
end: {
line: 9,
character: 3,
},
},
parent: {
range: {
start: {
line: 7,
character: 2,
},
end: {
line: 9,
character: 3,
},
},
parent: {
range: {
start: {
line: 6,
character: 31,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 11, character: 7}], // in bar identifer
)
// TODO: should include signature
.verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 11,
character: 6,
},
end: {
line: 11,
character: 9,
},
},
parent: {
range: {
start: {
line: 11,
character: 2,
},
end: {
line: 13,
character: 3,
},
},
parent: {
range: {
start: {
line: 6,
character: 31,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 15, character: 6}], // in baz's T param
)
// TODO: should include signature
.verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 15,
character: 6,
},
end: {
line: 15,
character: 7,
},
},
parent: {
range: {
start: {
line: 15,
character: 5,
},
end: {
line: 15,
character: 8,
},
},
parent: {
range: {
start: {
line: 15,
character: 5,
},
end: {
line: 15,
character: 16,
},
},
parent: {
range: {
start: {
line: 15,
character: 2,
},
end: {
line: 17,
character: 3,
},
},
parent: {
range: {
start: {
line: 6,
character: 31,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 19, character: 4}], // in propA key
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 19,
character: 2,
},
end: {
line: 19,
character: 7,
},
},
parent: {
range: {
start: {
line: 19,
character: 2,
},
end: {
line: 19,
character: 16,
},
},
parent: {
range: {
start: {
line: 6,
character: 31,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 19, character: 12}], // in propA annot
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 19,
character: 9,
},
end: {
line: 19,
character: 15,
},
},
parent: {
range: {
start: {
line: 19,
character: 7,
},
end: {
line: 19,
character: 15,
},
},
parent: {
range: {
start: {
line: 19,
character: 2,
},
end: {
line: 19,
character: 16,
},
},
parent: {
range: {
start: {
line: 6,
character: 31,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange(
'<PLACEHOLDER_PROJECT_URL>/class.js',
[{line: 21, character: 22}], // in propB initializer
).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 21,
character: 19,
},
end: {
line: 21,
character: 24,
},
},
parent: {
range: {
start: {
line: 21,
character: 2,
},
end: {
line: 21,
character: 25,
},
},
parent: {
range: {
start: {
line: 6,
character: 31,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 6,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 22,
character: 1,
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
]),
test('textDocument/selectionRange on template literals', [
addFiles('template_literal.js'),
lspStartAndConnect(),
requestSelectionRange('<PLACEHOLDER_PROJECT_URL>/template_literal.js', [
{line: 4, character: 0},
]).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 2,
character: 10,
},
end: {
line: 6,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 6,
},
end: {
line: 6,
character: 1,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 6,
character: 2,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 14,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 14,
character: 2,
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange('<PLACEHOLDER_PROJECT_URL>/template_literal.js', [
{line: 10, character: 12},
]).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 10,
character: 10,
},
end: {
line: 10,
character: 13,
},
},
parent: {
range: {
start: {
line: 10,
character: 10,
},
end: {
line: 14,
character: 1,
},
},
parent: {
range: {
start: {
line: 10,
character: 6,
},
end: {
line: 14,
character: 1,
},
},
parent: {
range: {
start: {
line: 10,
character: 0,
},
end: {
line: 14,
character: 2,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 14,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 14,
character: 2,
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
requestSelectionRange('<PLACEHOLDER_PROJECT_URL>/template_literal.js', [
{line: 12, character: 0},
]).verifyAllLSPMessagesInStep(
[
{
method: 'textDocument/selectionRange',
result: [
{
range: {
start: {
line: 10,
character: 13,
},
end: {
line: 14,
character: 1,
},
},
parent: {
range: {
start: {
line: 10,
character: 10,
},
end: {
line: 14,
character: 1,
},
},
parent: {
range: {
start: {
line: 10,
character: 6,
},
end: {
line: 14,
character: 1,
},
},
parent: {
range: {
start: {
line: 10,
character: 0,
},
end: {
line: 14,
character: 2,
},
},
parent: {
range: {
start: {
line: 2,
character: 0,
},
end: {
line: 14,
character: 2,
},
},
parent: {
range: {
start: {
line: 0,
character: 0,
},
end: {
line: 14,
character: 2,
},
},
},
},
},
},
},
},
],
},
],
[
'textDocument/publishDiagnostics',
'window/showStatus',
'$/cancelRequest',
],
),
]),
];
},
): Suite);