diff --git a/packages/common/src/scopeSupportFacets/getLanguageScopeSupport.ts b/packages/common/src/scopeSupportFacets/getLanguageScopeSupport.ts index e813f8dfc1..b79cbbecc0 100644 --- a/packages/common/src/scopeSupportFacets/getLanguageScopeSupport.ts +++ b/packages/common/src/scopeSupportFacets/getLanguageScopeSupport.ts @@ -1,6 +1,10 @@ import { htmlScopeSupport } from "./html"; +import { javaScopeSupport } from "./java"; import { javascriptScopeSupport } from "./javascript"; +import { pythonScopeSupport } from "./python"; import { LanguageScopeSupportFacetMap } from "./scopeSupportFacets.types"; +import { talonScopeSupport } from "./talon"; +import { typescriptScopeSupport } from "./typescript"; export function getLanguageScopeSupport( languageId: string, @@ -8,8 +12,16 @@ export function getLanguageScopeSupport( switch (languageId) { case "javascript": return javascriptScopeSupport; + case "typescript": + return typescriptScopeSupport; + case "java": + return javaScopeSupport; + case "python": + return pythonScopeSupport; case "html": return htmlScopeSupport; + case "talon": + return talonScopeSupport; } throw Error(`Unsupported language: '${languageId}'`); } diff --git a/packages/common/src/scopeSupportFacets/html.ts b/packages/common/src/scopeSupportFacets/html.ts index d82b7a0683..f0d718c8d9 100644 --- a/packages/common/src/scopeSupportFacets/html.ts +++ b/packages/common/src/scopeSupportFacets/html.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + import { LanguageScopeSupportFacetMap, ScopeSupportFacetLevel, @@ -6,14 +8,67 @@ import { const { supported, notApplicable } = ScopeSupportFacetLevel; export const htmlScopeSupport: LanguageScopeSupportFacetMap = { - ["key.attribute"]: supported, - ["tags"]: supported, + element: supported, + tags: supported, + startTag: supported, + endTag: supported, + attribute: supported, + "key.attribute": supported, + "value.attribute": supported, + "comment.block": supported, + "argument.actual": notApplicable, + "argument.actual.iteration": notApplicable, + "argument.formal": notApplicable, + "argument.formal.iteration": notApplicable, + "branch.if": notApplicable, + "branch.switchCase": notApplicable, + "branch.try": notApplicable, + "comment.line": notApplicable, + "condition.doWhile": notApplicable, + "condition.for": notApplicable, + "condition.if": notApplicable, + "condition.switchCase": notApplicable, + "condition.ternary": notApplicable, + "condition.while": notApplicable, + "functionCall.constructor": notApplicable, + "functionCallee.constructor": notApplicable, + "key.mapPair.iteration": notApplicable, + "key.mapPair": notApplicable, + "name.assignment": notApplicable, + "name.class": notApplicable, + "name.field": notApplicable, + "name.foreach": notApplicable, + "name.function": notApplicable, + "namedFunction.method": notApplicable, + "string.multiLine": notApplicable, + "string.singleLine": notApplicable, + "type.assignment": notApplicable, + "type.field": notApplicable, + "type.foreach": notApplicable, + "type.formalParameter": notApplicable, + "type.interface": notApplicable, + "type.return": notApplicable, + "value.assignment": notApplicable, + "value.field": notApplicable, + "value.foreach": notApplicable, + "value.mapPair.iteration": notApplicable, + "value.mapPair": notApplicable, + "value.return.lambda": notApplicable, + "value.return": notApplicable, + anonymousFunction: notApplicable, + class: notApplicable, + className: notApplicable, + command: notApplicable, + fieldAccess: notApplicable, + functionCall: notApplicable, + functionCallee: notApplicable, + functionName: notApplicable, + ifStatement: notApplicable, + list: notApplicable, + map: notApplicable, namedFunction: notApplicable, - ["name.assignment"]: notApplicable, - ["key.mapPair"]: notApplicable, - ["key.mapPair.iteration"]: notApplicable, - ["value.mapPair"]: notApplicable, - ["value.mapPair.iteration"]: notApplicable, - ["value.assignment"]: notApplicable, + regularExpression: notApplicable, + statement: notApplicable, + switchStatementSubject: notApplicable, }; diff --git a/packages/common/src/scopeSupportFacets/java.ts b/packages/common/src/scopeSupportFacets/java.ts new file mode 100644 index 0000000000..1d4e56c7e8 --- /dev/null +++ b/packages/common/src/scopeSupportFacets/java.ts @@ -0,0 +1,20 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + +import { + LanguageScopeSupportFacetMap, + ScopeSupportFacetLevel, +} from "./scopeSupportFacets.types"; + +const { supported, notApplicable } = ScopeSupportFacetLevel; + +export const javaScopeSupport: LanguageScopeSupportFacetMap = { + "name.foreach": supported, + "value.foreach": supported, + "type.foreach": supported, + + element: notApplicable, + tags: notApplicable, + attribute: notApplicable, + "key.attribute": notApplicable, + "value.attribute": notApplicable, +}; diff --git a/packages/common/src/scopeSupportFacets/javascript.ts b/packages/common/src/scopeSupportFacets/javascript.ts index f00dda2984..42c7f41cd2 100644 --- a/packages/common/src/scopeSupportFacets/javascript.ts +++ b/packages/common/src/scopeSupportFacets/javascript.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + import { LanguageScopeSupportFacetMap, ScopeSupportFacetLevel, @@ -6,14 +8,83 @@ import { const { supported, notApplicable } = ScopeSupportFacetLevel; export const javascriptScopeSupport: LanguageScopeSupportFacetMap = { + list: supported, + map: supported, + statement: supported, + ifStatement: supported, + regularExpression: supported, + switchStatementSubject: supported, + fieldAccess: supported, + + class: supported, + className: supported, + namedFunction: supported, - ["name.assignment"]: supported, - ["key.mapPair"]: supported, - ["key.mapPair.iteration"]: supported, - ["value.mapPair"]: supported, - ["value.mapPair.iteration"]: supported, - ["value.assignment"]: supported, - - ["key.attribute"]: notApplicable, - ["tags"]: notApplicable, + "namedFunction.method": supported, + anonymousFunction: supported, + functionName: supported, + + functionCall: supported, + "functionCall.constructor": supported, + functionCallee: supported, + "functionCallee.constructor": supported, + + "argument.actual": supported, + "argument.actual.iteration": supported, + "argument.formal": supported, + "argument.formal.iteration": supported, + + "comment.line": supported, + "comment.block": supported, + + "string.singleLine": supported, + "string.multiLine": supported, + + "branch.if": supported, + "branch.if.iteration": supported, + "branch.try": supported, + "branch.switchCase": supported, + "branch.switchCase.iteration": supported, + "branch.ternary": supported, + + "condition.if": supported, + "condition.while": supported, + "condition.doWhile": supported, + "condition.for": supported, + "condition.ternary": supported, + "condition.switchCase": supported, + + "name.foreach": supported, + "name.assignment": supported, + "name.assignment.pattern": supported, + "name.function": supported, + "name.class": supported, + "name.field": supported, + + "key.mapPair": supported, + "key.mapPair.iteration": supported, + + "value.mapPair": supported, + "value.mapPair.iteration": supported, + "value.assignment": supported, + "value.foreach": supported, + "value.return": supported, + "value.return.lambda": supported, + "value.field": supported, + + element: supported, + tags: supported, + startTag: supported, + endTag: supported, + attribute: supported, + "key.attribute": supported, + "value.attribute": supported, + + "type.assignment": notApplicable, + "type.formalParameter": notApplicable, + "type.return": notApplicable, + "type.field": notApplicable, + "type.foreach": notApplicable, + "type.interface": notApplicable, + command: notApplicable, }; diff --git a/packages/common/src/scopeSupportFacets/python.ts b/packages/common/src/scopeSupportFacets/python.ts new file mode 100644 index 0000000000..4c6d25572e --- /dev/null +++ b/packages/common/src/scopeSupportFacets/python.ts @@ -0,0 +1,24 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + +import { + LanguageScopeSupportFacetMap, + ScopeSupportFacetLevel, +} from "./scopeSupportFacets.types"; + +const { supported, supportedLegacy, notApplicable } = ScopeSupportFacetLevel; + +export const pythonScopeSupport: LanguageScopeSupportFacetMap = { + "name.foreach": supported, + "value.foreach": supported, + + "argument.actual": supportedLegacy, + "argument.actual.iteration": supportedLegacy, + "argument.formal": supportedLegacy, + "argument.formal.iteration": supportedLegacy, + + element: notApplicable, + tags: notApplicable, + attribute: notApplicable, + "key.attribute": notApplicable, + "value.attribute": notApplicable, +}; diff --git a/packages/common/src/scopeSupportFacets/scopeSupportFacetInfos.ts b/packages/common/src/scopeSupportFacets/scopeSupportFacetInfos.ts index c50c1d6fe2..13aa23dcae 100644 --- a/packages/common/src/scopeSupportFacets/scopeSupportFacetInfos.ts +++ b/packages/common/src/scopeSupportFacets/scopeSupportFacetInfos.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + import { ScopeSupportFacet, ScopeSupportFacetInfo, @@ -7,42 +9,297 @@ export const scopeSupportFacetInfos: Record< ScopeSupportFacet, ScopeSupportFacetInfo > = { + command: { + description: "A command, for example Talon spoken command or bash", + scopeType: "command", + }, + + element: { + description: "An xml/html element. Also used for LaTeX environments", + scopeType: "xmlElement", + }, + startTag: { + description: "The start tag of an xml element", + scopeType: "xmlStartTag", + }, + endTag: { + description: "The end tag of an xml element", + scopeType: "xmlEndTag", + }, + tags: { + description: "Both tags in an xml element", + scopeType: "xmlBothTags", + }, + attribute: { + description: "A attribute, eg of an html element or a C++ attribute", + scopeType: "attribute", + }, + + list: { + description: "A list/array", + scopeType: "list", + }, + map: { + description: "A map/dictionary", + scopeType: "map", + }, + statement: { + description: "A statement, eg assignment, for loop, etc", + scopeType: "statement", + }, + ifStatement: { + description: "An if statement", + scopeType: "ifStatement", + }, + regularExpression: { + description: "A regular expression", + scopeType: "regularExpression", + }, + switchStatementSubject: { + description: "The subject of a switch statement", + scopeType: "private.switchStatementSubject", + }, + fieldAccess: { + description: "A field access", + scopeType: "private.fieldAccess", + }, + + class: { + description: "A class in an object-oriented language", + scopeType: "class", + }, + className: { + description: "The name of a class", + scopeType: "className", + }, + namedFunction: { - description: "A named function", + description: "A named function declaration", + scopeType: "namedFunction", + }, + "namedFunction.method": { + description: "A named method declaration in a class", scopeType: "namedFunction", }, - ["name.assignment"]: { - description: "Name(LHS) of an assignment", + anonymousFunction: { + description: + "An anonymous function, eg a lambda function, an arrow function, etc", + scopeType: "anonymousFunction", + }, + functionName: { + description: "The name of a function", + scopeType: "functionName", + }, + + functionCall: { + description: "A function call", + scopeType: "functionCall", + }, + "functionCall.constructor": { + description: "A constructor call", + scopeType: "functionCall", + }, + functionCallee: { + description: "The function being called in a function call", + scopeType: "functionCallee", + }, + "functionCallee.constructor": { + description: + "The class being constructed in a class instantiation, including the `new` keyword", + scopeType: "functionCallee", + }, + + "argument.actual": { + description: "An argument/parameter in a function call", + scopeType: "argumentOrParameter", + }, + "argument.actual.iteration": { + description: + "Iteration scope of arguments in a function call, should be inside the parens of the argument list", + scopeType: "argumentOrParameter", + isIteration: true, + }, + "argument.formal": { + description: "A parameter in a function declaration", + scopeType: "argumentOrParameter", + }, + "argument.formal.iteration": { + description: + "Iteration scope of the formal parameters of a function declaration; should be the whole parameter list", + scopeType: "argumentOrParameter", + isIteration: true, + }, + + "comment.line": { + description: "A line comment", + scopeType: "comment", + }, + "comment.block": { + description: "A block comment", + scopeType: "comment", + }, + + "string.singleLine": { + description: "A single-line string", + scopeType: "string", + }, + "string.multiLine": { + description: "A multi-line string", + scopeType: "string", + }, + + "branch.if": { + description: "An if/elif/else branch", + scopeType: "branch", + }, + + "branch.if.iteration": { + description: + "Iteration scope for if/elif/else branch; should be the entire if-else statement", + scopeType: "branch", + isIteration: true, + }, + "branch.try": { + description: "A try/catch/finally branch", + scopeType: "branch", + }, + "branch.switchCase": { + description: "A case/default branch in a switch/match statement", + scopeType: "branch", + }, + "branch.switchCase.iteration": { + description: + "Iteration scope for branches in a switch/match statement; should contain all the cases", + scopeType: "branch", + isIteration: true, + }, + "branch.ternary": { + description: "A branch in a ternary expression", + scopeType: "branch", + }, + + "condition.if": { + description: "A condition in an if statement", + scopeType: "condition", + }, + "condition.while": { + description: "A condition in a while loop", + scopeType: "condition", + }, + "condition.doWhile": { + description: "A condition in a do while loop", + scopeType: "condition", + }, + "condition.for": { + description: "A condition in a for loop", + scopeType: "condition", + }, + "condition.ternary": { + description: "A condition in a ternary expression", + scopeType: "condition", + }, + "condition.switchCase": { + description: "A condition in a switch statement", + scopeType: "condition", + }, + + "name.assignment": { + description: "Name (LHS) of an assignment", + scopeType: "name", + }, + "name.assignment.pattern": { + description: "LHS of an assignment with pattern destructuring", + scopeType: "name", + }, + "name.foreach": { + description: "Iteration variable name in a for each loop", + scopeType: "name", + }, + "name.function": { + description: "Name of a function", + scopeType: "name", + }, + "name.class": { + description: "Name of a class", + scopeType: "name", + }, + "name.field": { + description: "Name (LHS) of a field in a class / interface", scopeType: "name", }, - ["key.attribute"]: { - description: "Key(LHS) of an attribute", + + "key.attribute": { + description: "Key (LHS) of an attribute eg in an xml element", scopeType: "collectionKey", }, - ["key.mapPair"]: { - description: "Key(LHS) of a map pair", + "key.mapPair": { + description: "Key (LHS) of a key-value pair of a map", scopeType: "collectionKey", }, - ["key.mapPair.iteration"]: { - description: "Iteration of map pair keys", + "key.mapPair.iteration": { + description: + "Iteration scope of key-value pairs in a map; should be between the braces", scopeType: "collectionKey", isIteration: true, }, - ["value.assignment"]: { - description: "Value(RHS) of an assignment", + + "value.assignment": { + description: "Value (RHS) of an assignment", scopeType: "value", }, - ["value.mapPair"]: { - description: "Key(RHS) of a map pair", + "value.mapPair": { + description: "Value (RHS) of a key-value pair in a map", scopeType: "value", }, - ["value.mapPair.iteration"]: { - description: "Iteration of map pair values", + "value.mapPair.iteration": { + description: + "Iteration scope of key-value pairs in a map; should be between the braces", scopeType: "value", isIteration: true, }, - ["tags"]: { - description: "Both tags in an xml element", - scopeType: "xmlBothTags", + "value.foreach": { + description: "Iterable in a for each loop", + scopeType: "value", + }, + "value.attribute": { + description: "Value (RHS) of an attribute eg in an xml element", + scopeType: "value", + }, + "value.return": { + description: "Return value of a function", + scopeType: "value", + }, + "value.return.lambda": { + description: "Implicit return value from a lambda", + scopeType: "value", + }, + "value.field": { + description: "Value (RHS) of a field in a class / interface", + scopeType: "value", + }, + + "type.assignment": { + description: "Type of variable in an assignment", + scopeType: "type", + }, + "type.formalParameter": { + description: "Type of formal parameter in a function declaration", + scopeType: "type", + }, + "type.return": { + description: "Type of return value in a function declaration", + scopeType: "type", + }, + "type.field": { + description: "Type of field in a class / interface", + scopeType: "type", + }, + "type.foreach": { + description: "Type of variable in a for each loop", + scopeType: "type", + }, + "type.interface": { + description: "An interface declaration", + scopeType: "type", }, }; diff --git a/packages/common/src/scopeSupportFacets/scopeSupportFacets.types.ts b/packages/common/src/scopeSupportFacets/scopeSupportFacets.types.ts index c7fcaa681e..ec4c7f99a7 100644 --- a/packages/common/src/scopeSupportFacets/scopeSupportFacets.types.ts +++ b/packages/common/src/scopeSupportFacets/scopeSupportFacets.types.ts @@ -1,61 +1,107 @@ import { SimpleScopeTypeType } from "../types/command/PartialTargetDescriptor.types"; const scopeSupportFacets = [ - // "list", - // "list.interior", - // "map", - // "map.interior", - // "collectionKey", + "command", + + "element", + "tags", + "startTag", + "endTag", + "attribute", + + "list", + "map", + "statement", + "ifStatement", + "regularExpression", + "switchStatementSubject", + "fieldAccess", + + "class", + "className", "namedFunction", - // "namedFunction.interior", - // "functionName", - // "anonymousFunction", - // "anonymousFunction.interior", + "namedFunction.method", + "anonymousFunction", + "functionName", + + "functionCall", + "functionCall.constructor", + "functionCallee", + "functionCallee.constructor", + + "argument.actual", + "argument.actual.iteration", + "argument.formal", + "argument.formal.iteration", + + "comment.line", + "comment.block", + + "string.singleLine", + "string.multiLine", + + "branch.if", + "branch.if.iteration", + "branch.try", + "branch.switchCase", + "branch.switchCase.iteration", + "branch.ternary", + + "condition.if", + "condition.while", + "condition.doWhile", + "condition.for", + "condition.ternary", + "condition.switchCase", + "name.assignment", + "name.assignment.pattern", + "name.foreach", + "name.function", + "name.class", + "name.field", + "key.attribute", "key.mapPair", "key.mapPair.iteration", + "value.assignment", "value.mapPair", "value.mapPair.iteration", - // "value.assignment.removal", - // "value.return", - // "value.return.removal", - // "value.collectionItem", - // "value.collectionItem.removal", - // "statement", - // "ifStatement", - // "condition.if", - // "condition.while", - // "condition.doWhile", - // "condition.for", - // "condition.ternary", - // "branch", - // "comment.line", - // "comment.block", - // "string.singleLine", - // "string.multiLine", - // "textFragment", - // "functionCall", - // "functionCallee", - // "argumentOrParameter.argument", - // "argumentOrParameter.argument.removal", - // "argumentOrParameter.parameter", - // "argumentOrParameter.parameter.removal", - // "class", - // "class.interior", - // "className", - // "type", - "tags", + "value.attribute", + "value.foreach", + "value.return", + "value.return.lambda", + "value.field", + + "type.assignment", + "type.formalParameter", + "type.return", + "type.field", + "type.foreach", + "type.interface", + + // FIXME: Still in legacy + // section + // selector + // unit + // collectionItem + // textFragment ] as const; const textualScopeSupportFacets = [ "character", "word", "token", + "identifier", "line", + "sentence", "paragraph", "document", + "nonWhitespaceSequence", + // FIXME: Still in legacy + // "boundedNonWhitespaceSequence", + "url", ] as const; export interface ScopeSupportFacetInfo { @@ -66,6 +112,7 @@ export interface ScopeSupportFacetInfo { export enum ScopeSupportFacetLevel { supported, + supportedLegacy, unsupported, notApplicable, } diff --git a/packages/common/src/scopeSupportFacets/talon.ts b/packages/common/src/scopeSupportFacets/talon.ts new file mode 100644 index 0000000000..b9cff24296 --- /dev/null +++ b/packages/common/src/scopeSupportFacets/talon.ts @@ -0,0 +1,12 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + +import { + LanguageScopeSupportFacetMap, + ScopeSupportFacetLevel, +} from "./scopeSupportFacets.types"; + +const { supported } = ScopeSupportFacetLevel; + +export const talonScopeSupport: LanguageScopeSupportFacetMap = { + command: supported, +}; diff --git a/packages/common/src/scopeSupportFacets/textualScopeSupportFacetInfos.ts b/packages/common/src/scopeSupportFacets/textualScopeSupportFacetInfos.ts index a2d3f78227..f4b34d5a33 100644 --- a/packages/common/src/scopeSupportFacets/textualScopeSupportFacetInfos.ts +++ b/packages/common/src/scopeSupportFacets/textualScopeSupportFacetInfos.ts @@ -19,10 +19,18 @@ export const textualScopeSupportFacetInfos: Record< description: "A single token in the document", scopeType: "token", }, + identifier: { + description: "A single alphanumeric identifier in the document", + scopeType: "identifier", + }, line: { description: "A single line in the document", scopeType: "line", }, + sentence: { + description: "A single sentence in the document", + scopeType: "sentence", + }, paragraph: { description: "A single paragraph(contiguous block of lines) in the document", @@ -32,4 +40,18 @@ export const textualScopeSupportFacetInfos: Record< description: "The entire document", scopeType: "document", }, + nonWhitespaceSequence: { + description: "A sequence of non-whitespace characters", + scopeType: "nonWhitespaceSequence", + }, + // FIXME: Still in legacy + // boundedNonWhitespaceSequence: { + // description: + // "A sequence of non-whitespace characters bounded by matching pair", + // scopeType: "boundedNonWhitespaceSequence", + // }, + url: { + description: "A url", + scopeType: "url", + }, }; diff --git a/packages/common/src/scopeSupportFacets/typescript.ts b/packages/common/src/scopeSupportFacets/typescript.ts new file mode 100644 index 0000000000..80799538d7 --- /dev/null +++ b/packages/common/src/scopeSupportFacets/typescript.ts @@ -0,0 +1,16 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + +import { + LanguageScopeSupportFacetMap, + ScopeSupportFacetLevel, +} from "./scopeSupportFacets.types"; + +const { supported } = ScopeSupportFacetLevel; + +export const typescriptScopeSupport: LanguageScopeSupportFacetMap = { + "type.assignment": supported, + "type.formalParameter": supported, + "type.return": supported, + "type.field": supported, + "type.interface": supported, +}; diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/javascript/changeName5.yml b/packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/javascript/changeName5.yml index 33b8d2db3c..c94d33aa77 100644 --- a/packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/javascript/changeName5.yml +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/javascript/changeName5.yml @@ -16,4 +16,8 @@ initialState: - anchor: {line: 0, character: 24} active: {line: 0, character: 24} marks: {} -thrownError: {name: NoContainingScopeError} +finalState: + documentContents: for (const of bbb) {} + selections: + - anchor: {line: 0, character: 11} + active: {line: 0, character: 11} diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/javascript/changeValue5.yml b/packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/javascript/changeValue5.yml index 0e6fdfd58e..4ab3abe0e4 100644 --- a/packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/javascript/changeValue5.yml +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/javascript/changeValue5.yml @@ -16,4 +16,8 @@ initialState: - anchor: {line: 0, character: 24} active: {line: 0, character: 24} marks: {} -thrownError: {name: NoContainingScopeError} +finalState: + documentContents: for (const aaa of ) {} + selections: + - anchor: {line: 0, character: 18} + active: {line: 0, character: 18} diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/attribute.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/attribute.scope new file mode 100644 index 0000000000..ef5f5052b5 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/attribute.scope @@ -0,0 +1,17 @@ +
+--- + +[Content] = +[Domain] = 0:5-0:14 +0| + >---------< + +[Removal] = 0:4-0:14 +0| + >----------< + +[Leading delimiter] = 0:4-0:5 +0| + >-< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/comment.block.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/comment.block.scope new file mode 100644 index 0000000000..6c973b0fe9 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/comment.block.scope @@ -0,0 +1,16 @@ + +--- + +[Content] = +[Removal] = +[Domain] = 0:0-2:3 +0| + ---< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/element.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/element.scope new file mode 100644 index 0000000000..13f6bdefc5 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/element.scope @@ -0,0 +1,10 @@ + +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:21 +0| + >---------------------< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/endTag.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/endTag.scope new file mode 100644 index 0000000000..190fd0750f --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/endTag.scope @@ -0,0 +1,13 @@ + +--- + +[Content] = +[Removal] = 0:15-0:21 +0| + >------< + +[Domain] = 0:0-0:21 +0| + >---------------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/key.attribute2.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/key.attribute2.scope new file mode 100644 index 0000000000..16a16f14ca --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/key.attribute2.scope @@ -0,0 +1,17 @@ + +--- + +[Content] = +[Domain] = 0:5-0:13 +0| + >--------< + +[Removal] = 0:4-0:13 +0| + >---------< + +[Leading delimiter] = 0:4-0:5 +0| + >-< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/startTag.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/startTag.scope new file mode 100644 index 0000000000..1fd64adf6f --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/startTag.scope @@ -0,0 +1,13 @@ + +--- + +[Content] = +[Removal] = 0:0-0:15 +0| + >---------------< + +[Domain] = 0:0-0:21 +0| + >---------------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/value.attribute.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/value.attribute.scope new file mode 100644 index 0000000000..46e212934a --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/html/value.attribute.scope @@ -0,0 +1,20 @@ + +--- + +[Content] = 0:8-0:14 +0| + >------< + +[Removal] = 0:7-0:14 +0| + >-------< + +[Leading delimiter] = 0:7-0:8 +0| + >-< + +[Domain] = 0:5-0:14 +0| + >---------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/name.foreach.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/name.foreach.scope new file mode 100644 index 0000000000..61d7ad9369 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/name.foreach.scope @@ -0,0 +1,46 @@ +for (final Item item : items) { + +} +--- + +[Content] = 0:16-0:20 +0| for (final Item item : items) { + >----< +1| + +2| } + + +[Removal] = 0:16-0:21 +0| for (final Item item : items) { + >-----< +1| + +2| } + + +[Leading delimiter] = 0:15-0:16 +0| for (final Item item : items) { + >-< +1| + +2| } + + +[Trailing delimiter] = 0:20-0:21 +0| for (final Item item : items) { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| for (final Item item : items) { + >------------------------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/type.foreach.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/type.foreach.scope new file mode 100644 index 0000000000..7c3c14b568 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/type.foreach.scope @@ -0,0 +1,46 @@ +for (final Item item : items) { + +} +--- + +[Content] = 0:11-0:15 +0| for (final Item item : items) { + >----< +1| + +2| } + + +[Removal] = 0:11-0:16 +0| for (final Item item : items) { + >-----< +1| + +2| } + + +[Leading delimiter] = 0:10-0:11 +0| for (final Item item : items) { + >-< +1| + +2| } + + +[Trailing delimiter] = 0:15-0:16 +0| for (final Item item : items) { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| for (final Item item : items) { + >------------------------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/value.foreach.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/value.foreach.scope new file mode 100644 index 0000000000..f9609888a8 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/java/value.foreach.scope @@ -0,0 +1,38 @@ +for (final Item item : items) { + +} +--- + +[Content] = 0:23-0:28 +0| for (final Item item : items) { + >-----< +1| + +2| } + + +[Removal] = 0:22-0:28 +0| for (final Item item : items) { + >------< +1| + +2| } + + +[Leading delimiter] = 0:22-0:23 +0| for (final Item item : items) { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| for (final Item item : items) { + >------------------------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction.scope new file mode 100644 index 0000000000..4600d8f8e0 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction.scope @@ -0,0 +1,16 @@ +function() { + +} +--- + +[Content] = +[Removal] = +[Domain] = 0:0-2:1 +0| function() { + >------------ +1| + +2| } + -< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction2.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction2.scope new file mode 100644 index 0000000000..2db907099e --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction2.scope @@ -0,0 +1,16 @@ +() => { + +} +--- + +[Content] = +[Removal] = +[Domain] = 0:0-2:1 +0| () => { + >------- +1| + +2| } + -< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction3.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction3.scope new file mode 100644 index 0000000000..fa873c831c --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/anonymousFunction3.scope @@ -0,0 +1,10 @@ +() => 0 +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:7 +0| () => 0 + >-------< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.actual.iteration.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.actual.iteration.scope new file mode 100644 index 0000000000..9d0071fcae --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.actual.iteration.scope @@ -0,0 +1,10 @@ +foo(arg1, arg2); +--- + +[Range] = 0:4-0:14 +0| foo(arg1, arg2); + >----------< + +[Domain] = 0:3-0:15 +0| foo(arg1, arg2); + >------------< diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.actual.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.actual.scope new file mode 100644 index 0000000000..8c0db0d688 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.actual.scope @@ -0,0 +1,10 @@ +foo.bar(value); +--- + +[Content] = +[Removal] = +[Domain] = 0:8-0:13 +0| foo.bar(value); + >-----< + +[Insertion delimiter] = ", " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.formal.iteration.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.formal.iteration.scope new file mode 100644 index 0000000000..9e816c530d --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.formal.iteration.scope @@ -0,0 +1,20 @@ +function myFunk(arg1, arg2) { + +} +--- + +[Range] = 0:16-0:26 +0| function myFunk(arg1, arg2) { + >----------< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| function myFunk(arg1, arg2) { + >----------------------------- +1| + +2| } + -< diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.formal.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.formal.scope new file mode 100644 index 0000000000..dd032ebeac --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/argument.formal.scope @@ -0,0 +1,16 @@ +function myFunk(value) { + +} +--- + +[Content] = +[Removal] = +[Domain] = 0:16-0:21 +0| function myFunk(value) { + >-----< +1| + +2| } + + +[Insertion delimiter] = ", " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/attribute.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/attribute.scope new file mode 100644 index 0000000000..ef5f5052b5 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/attribute.scope @@ -0,0 +1,17 @@ + +--- + +[Content] = +[Domain] = 0:5-0:14 +0| + >---------< + +[Removal] = 0:4-0:14 +0| + >----------< + +[Leading delimiter] = 0:4-0:5 +0| + >-< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.if.iteration.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.if.iteration.scope new file mode 100644 index 0000000000..9f01d167c2 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.if.iteration.scope @@ -0,0 +1,31 @@ +if (true) { + +} +else if (false) { + +} +else { + +} +--- + +[Range] = +[Domain] = 0:0-8:1 +0| if (true) { + >----------- +1| + +2| } + - +3| else if (false) { + ----------------- +4| + +5| } + - +6| else { + ------ +7| + +8| } + -< diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.if.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.if.scope new file mode 100644 index 0000000000..dcfa942f2c --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.if.scope @@ -0,0 +1,103 @@ +if (true) { + +} +else if (false) { + +} +else { + +} +--- + +[#1 Content] = +[#1 Domain] = 0:0-2:1 +0| if (true) { + >----------- +1| + +2| } + -< +3| else if (false) { + +4| + +5| } + +6| else { + +7| + +8| } + + +[#1 Removal] = 0:0-3:5 +0| if (true) { + >----------- +1| + +2| } + - +3| else if (false) { + -----< +4| + +5| } + +6| else { + +7| + +8| } + + +[#1 Insertion delimiter] = "\n" + + +[#2 Content] = +[#2 Removal] = +[#2 Domain] = 3:0-5:1 +0| if (true) { + +1| + +2| } + +3| else if (false) { + >----------------- +4| + +5| } + -< +6| else { + +7| + +8| } + + +[#2 Insertion delimiter] = "\n" + + +[#3 Content] = +[#3 Removal] = +[#3 Domain] = 6:0-8:1 +0| if (true) { + +1| + +2| } + +3| else if (false) { + +4| + +5| } + +6| else { + >------ +7| + +8| } + -< + +[#3 Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.switchCase.iteration.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.switchCase.iteration.scope new file mode 100644 index 0000000000..774b8c0db5 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.switchCase.iteration.scope @@ -0,0 +1,16 @@ +switch (value) { + case 0: { } + case 1: { } +} +--- + +[Range] = +[Domain] = 0:0-3:1 +0| switch (value) { + >---------------- +1| case 0: { } + ------------- +2| case 1: { } + ------------- +3| } + -< diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.switchCase.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.switchCase.scope new file mode 100644 index 0000000000..76e8c4831b --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.switchCase.scope @@ -0,0 +1,31 @@ +switch (value) { + case 0: { } +} +--- + +[Content] = +[Domain] = 1:2-1:13 +0| switch (value) { + +1| case 0: { } + >-----------< +2| } + + +[Removal] = 1:0-1:13 +0| switch (value) { + +1| case 0: { } + >-------------< +2| } + + +[Leading delimiter] = 1:0-1:2 +0| switch (value) { + +1| case 0: { } + >--< +2| } + + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.ternary.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.ternary.scope new file mode 100644 index 0000000000..5ee6957aad --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.ternary.scope @@ -0,0 +1,37 @@ +aaa ? bbb : ccc; +--- + +[#1 Content] = +[#1 Domain] = 0:6-0:9 +0| aaa ? bbb : ccc; + >---< + +[#1 Removal] = 0:6-0:10 +0| aaa ? bbb : ccc; + >----< + +[#1 Leading delimiter] = 0:5-0:6 +0| aaa ? bbb : ccc; + >-< + +[#1 Trailing delimiter] = 0:9-0:10 +0| aaa ? bbb : ccc; + >-< + +[#1 Insertion delimiter] = "\n" + + +[#2 Content] = +[#2 Domain] = 0:12-0:15 +0| aaa ? bbb : ccc; + >---< + +[#2 Removal] = 0:11-0:15 +0| aaa ? bbb : ccc; + >----< + +[#2 Leading delimiter] = 0:11-0:12 +0| aaa ? bbb : ccc; + >-< + +[#2 Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.try.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.try.scope new file mode 100644 index 0000000000..e42c7f19df --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/branch.try.scope @@ -0,0 +1,84 @@ +try { + +} +catch(error) { + +} +finally { + +} +--- + +[#1 Content] = +[#1 Removal] = +[#1 Domain] = 0:0-2:1 +0| try { + >----- +1| + +2| } + -< +3| catch(error) { + +4| + +5| } + +6| finally { + +7| + +8| } + + +[#1 Insertion delimiter] = "\n" + + +[#2 Content] = +[#2 Removal] = +[#2 Domain] = 3:0-5:1 +0| try { + +1| + +2| } + +3| catch(error) { + >-------------- +4| + +5| } + -< +6| finally { + +7| + +8| } + + +[#2 Insertion delimiter] = "\n" + + +[#3 Content] = +[#3 Removal] = +[#3 Domain] = 6:0-8:1 +0| try { + +1| + +2| } + +3| catch(error) { + +4| + +5| } + +6| finally { + >--------- +7| + +8| } + -< + +[#3 Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/class.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/class.scope new file mode 100644 index 0000000000..fcbcf8d9d1 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/class.scope @@ -0,0 +1,16 @@ +class MyClass { + +} +--- + +[Content] = +[Removal] = +[Domain] = 0:0-2:1 +0| class MyClass { + >--------------- +1| + +2| } + -< + +[Insertion delimiter] = "\n\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/className.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/className.scope new file mode 100644 index 0000000000..1e5100981c --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/className.scope @@ -0,0 +1,46 @@ +class MyClass { + +} +--- + +[Content] = 0:6-0:13 +0| class MyClass { + >-------< +1| + +2| } + + +[Removal] = 0:6-0:14 +0| class MyClass { + >--------< +1| + +2| } + + +[Leading delimiter] = 0:5-0:6 +0| class MyClass { + >-< +1| + +2| } + + +[Trailing delimiter] = 0:13-0:14 +0| class MyClass { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| class MyClass { + >--------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.block.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.block.scope new file mode 100644 index 0000000000..c6263b704d --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.block.scope @@ -0,0 +1,16 @@ +/* + Hello world +*/ +--- + +[Content] = +[Removal] = +[Domain] = 0:0-2:2 +0| /* + >-- +1| Hello world + ------------- +2| */ + --< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.block2.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.block2.scope new file mode 100644 index 0000000000..0b1fc29e6e --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.block2.scope @@ -0,0 +1,16 @@ +/** +* Hello world +*/ +--- + +[Content] = +[Removal] = +[Domain] = 0:0-2:2 +0| /** + >--- +1| * Hello world + ------------- +2| */ + --< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.line.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.line.scope new file mode 100644 index 0000000000..517cc2e6e2 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/comment.line.scope @@ -0,0 +1,10 @@ +// Hello world +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:14 +0| // Hello world + >--------------< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.doWhile.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.doWhile.scope new file mode 100644 index 0000000000..2a0e094add --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.doWhile.scope @@ -0,0 +1,23 @@ +do { + +} while (true); +--- + +[Content] = +[Removal] = 2:9-2:13 +0| do { + +1| + +2| } while (true); + >----< + +[Domain] = 0:0-2:15 +0| do { + >---- +1| + +2| } while (true); + ---------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.for.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.for.scope new file mode 100644 index 0000000000..ad27ee3e82 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.for.scope @@ -0,0 +1,38 @@ +for (let i = 0; i < 10; ++i) { + +} +--- + +[Content] = 0:16-0:22 +0| for (let i = 0; i < 10; ++i) { + >------< +1| + +2| } + + +[Removal] = 0:15-0:22 +0| for (let i = 0; i < 10; ++i) { + >-------< +1| + +2| } + + +[Leading delimiter] = 0:15-0:16 +0| for (let i = 0; i < 10; ++i) { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| for (let i = 0; i < 10; ++i) { + >------------------------------ +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.if.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.if.scope new file mode 100644 index 0000000000..2c4b7f91d4 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.if.scope @@ -0,0 +1,23 @@ +if (true) { + +} +--- + +[Content] = +[Removal] = 0:4-0:8 +0| if (true) { + >----< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| if (true) { + >----------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.switchCase.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.switchCase.scope new file mode 100644 index 0000000000..165a5e3380 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.switchCase.scope @@ -0,0 +1,38 @@ +switch (value) { + case 0: { } +} +--- + +[Content] = 1:7-1:8 +0| switch (value) { + +1| case 0: { } + >-< +2| } + + +[Removal] = 1:6-1:8 +0| switch (value) { + +1| case 0: { } + >--< +2| } + + +[Leading delimiter] = 1:6-1:7 +0| switch (value) { + +1| case 0: { } + >-< +2| } + + +[Domain] = 1:2-1:13 +0| switch (value) { + +1| case 0: { } + >-----------< +2| } + + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.ternary.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.ternary.scope new file mode 100644 index 0000000000..da1b504fbd --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.ternary.scope @@ -0,0 +1,20 @@ +true ? 0 : 1 +--- + +[Content] = 0:0-0:4 +0| true ? 0 : 1 + >----< + +[Removal] = 0:0-0:5 +0| true ? 0 : 1 + >-----< + +[Trailing delimiter] = 0:4-0:5 +0| true ? 0 : 1 + >-< + +[Domain] = 0:0-0:12 +0| true ? 0 : 1 + >------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.while.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.while.scope new file mode 100644 index 0000000000..0775aede9d --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/condition.while.scope @@ -0,0 +1,23 @@ +while (true) { + +} +--- + +[Content] = +[Removal] = 0:7-0:11 +0| while (true) { + >----< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| while (true) { + >-------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/element.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/element.scope new file mode 100644 index 0000000000..13f6bdefc5 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/element.scope @@ -0,0 +1,10 @@ + +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:21 +0| + >---------------------< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/endTag.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/endTag.scope new file mode 100644 index 0000000000..190fd0750f --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/endTag.scope @@ -0,0 +1,13 @@ + +--- + +[Content] = +[Removal] = 0:15-0:21 +0| + >------< + +[Domain] = 0:0-0:21 +0| + >---------------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/fieldAccess.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/fieldAccess.scope new file mode 100644 index 0000000000..7fc641bc10 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/fieldAccess.scope @@ -0,0 +1,19 @@ +foo.bar(0); +--- + +[#1 Content] = +[#1 Removal] = +[#1 Domain] = 0:0-0:3 +0| foo.bar(0); + >---< + +[#1 Insertion delimiter] = " " + + +[#2 Content] = +[#2 Removal] = +[#2 Domain] = 0:3-0:10 +0| foo.bar(0); + >-------< + +[#2 Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCall.constructor.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCall.constructor.scope new file mode 100644 index 0000000000..0b3173665f --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCall.constructor.scope @@ -0,0 +1,10 @@ +new Foo.bar(0); +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:14 +0| new Foo.bar(0); + >--------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCall.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCall.scope new file mode 100644 index 0000000000..dcad1f87d9 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCall.scope @@ -0,0 +1,10 @@ +foo.bar(0); +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:10 +0| foo.bar(0); + >----------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCallee.constructor.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCallee.constructor.scope new file mode 100644 index 0000000000..a68bbf2531 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCallee.constructor.scope @@ -0,0 +1,13 @@ +new Foo.bar(0); +--- + +[Content] = +[Removal] = 0:0-0:11 +0| new Foo.bar(0); + >-----------< + +[Domain] = 0:0-0:14 +0| new Foo.bar(0); + >--------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCallee.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCallee.scope new file mode 100644 index 0000000000..920f077880 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionCallee.scope @@ -0,0 +1,13 @@ +foo.bar(0); +--- + +[Content] = +[Removal] = 0:0-0:7 +0| foo.bar(0); + >-------< + +[Domain] = 0:0-0:10 +0| foo.bar(0); + >----------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionName.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionName.scope new file mode 100644 index 0000000000..0534c5c56b --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/functionName.scope @@ -0,0 +1,31 @@ +function myFunk() { + +} +--- + +[Content] = +[Removal] = 0:9-0:15 +0| function myFunk() { + >------< +1| + +2| } + + +[Leading delimiter] = 0:8-0:9 +0| function myFunk() { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| function myFunk() { + >------------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/ifStatement.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/ifStatement.scope new file mode 100644 index 0000000000..c9a4ad04a6 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/ifStatement.scope @@ -0,0 +1,16 @@ +if (true) { + +} +--- + +[Content] = +[Removal] = +[Domain] = 0:0-2:1 +0| if (true) { + >----------- +1| + +2| } + -< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/key.attribute.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/key.attribute.scope new file mode 100644 index 0000000000..6bedb626d7 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/key.attribute.scope @@ -0,0 +1,20 @@ + +--- + +[Content] = 0:5-0:7 +0| + >--< + +[Removal] = 0:5-0:8 +0| + >---< + +[Trailing delimiter] = 0:7-0:8 +0| + >-< + +[Domain] = 0:5-0:14 +0| + >---------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/key.attribute2.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/key.attribute2.scope new file mode 100644 index 0000000000..16a16f14ca --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/key.attribute2.scope @@ -0,0 +1,17 @@ + +--- + +[Content] = +[Domain] = 0:5-0:13 +0| + >--------< + +[Removal] = 0:4-0:13 +0| + >---------< + +[Leading delimiter] = 0:4-0:5 +0| + >-< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/list.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/list.scope new file mode 100644 index 0000000000..80975cf8de --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/list.scope @@ -0,0 +1,10 @@ +[1, 2, 3] +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:9 +0| [1, 2, 3] + >---------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/map.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/map.scope new file mode 100644 index 0000000000..99fad9cd56 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/map.scope @@ -0,0 +1,10 @@ +{ value: 123 } +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:14 +0| { value: 123 } + >--------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.assignment.pattern.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.assignment.pattern.scope new file mode 100644 index 0000000000..c075b0ed1d --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.assignment.pattern.scope @@ -0,0 +1,24 @@ +const { aaa: bbb } = ccc; +--- + +[Content] = 0:6-0:18 +0| const { aaa: bbb } = ccc; + >------------< + +[Removal] = 0:0-0:21 +0| const { aaa: bbb } = ccc; + >---------------------< + +[Leading delimiter] = 0:5-0:6 +0| const { aaa: bbb } = ccc; + >-< + +[Trailing delimiter] = 0:18-0:19 +0| const { aaa: bbb } = ccc; + >-< + +[Domain] = 0:0-0:25 +0| const { aaa: bbb } = ccc; + >-------------------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.class.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.class.scope new file mode 100644 index 0000000000..1e5100981c --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.class.scope @@ -0,0 +1,46 @@ +class MyClass { + +} +--- + +[Content] = 0:6-0:13 +0| class MyClass { + >-------< +1| + +2| } + + +[Removal] = 0:6-0:14 +0| class MyClass { + >--------< +1| + +2| } + + +[Leading delimiter] = 0:5-0:6 +0| class MyClass { + >-< +1| + +2| } + + +[Trailing delimiter] = 0:13-0:14 +0| class MyClass { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| class MyClass { + >--------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.field.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.field.scope new file mode 100644 index 0000000000..7dd96ccff0 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.field.scope @@ -0,0 +1,81 @@ +class MyClass { + value = 0; +} +--- + +[#1 Content] = 0:6-0:13 +0| class MyClass { + >-------< +1| value = 0; + +2| } + + +[#1 Removal] = 0:6-0:14 +0| class MyClass { + >--------< +1| value = 0; + +2| } + + +[#1 Leading delimiter] = 0:5-0:6 +0| class MyClass { + >-< +1| value = 0; + +2| } + + +[#1 Trailing delimiter] = 0:13-0:14 +0| class MyClass { + >-< +1| value = 0; + +2| } + + +[#1 Domain] = 0:0-2:1 +0| class MyClass { + >--------------- +1| value = 0; + ------------ +2| } + -< + +[#1 Insertion delimiter] = " " + + +[#2 Content] = 1:2-1:7 +0| class MyClass { + +1| value = 0; + >-----< +2| } + + +[#2 Removal] = 1:2-1:10 +0| class MyClass { + +1| value = 0; + >--------< +2| } + + +[#2 Trailing delimiter] = 1:7-1:10 +0| class MyClass { + +1| value = 0; + >---< +2| } + + +[#2 Domain] = 1:2-1:12 +0| class MyClass { + +1| value = 0; + >----------< +2| } + + +[#2 Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.foreach.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.foreach.scope new file mode 100644 index 0000000000..519f7e433b --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.foreach.scope @@ -0,0 +1,46 @@ +for (const item of items) { + +} +--- + +[Content] = 0:11-0:15 +0| for (const item of items) { + >----< +1| + +2| } + + +[Removal] = 0:11-0:16 +0| for (const item of items) { + >-----< +1| + +2| } + + +[Leading delimiter] = 0:10-0:11 +0| for (const item of items) { + >-< +1| + +2| } + + +[Trailing delimiter] = 0:15-0:16 +0| for (const item of items) { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| for (const item of items) { + >--------------------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.function.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.function.scope new file mode 100644 index 0000000000..0534c5c56b --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/name.function.scope @@ -0,0 +1,31 @@ +function myFunk() { + +} +--- + +[Content] = +[Removal] = 0:9-0:15 +0| function myFunk() { + >------< +1| + +2| } + + +[Leading delimiter] = 0:8-0:9 +0| function myFunk() { + >-< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| function myFunk() { + >------------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/namedFunction.method.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/namedFunction.method.scope new file mode 100644 index 0000000000..1d218d85bf --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/namedFunction.method.scope @@ -0,0 +1,45 @@ +class MyClass { + myFunk() { + + } +} +--- + +[Content] = +[Domain] = 1:2-3:3 +0| class MyClass { + +1| myFunk() { + >---------- +2| + +3| } + ---< +4| } + + +[Removal] = 1:0-3:3 +0| class MyClass { + +1| myFunk() { + >------------ +2| + +3| } + ---< +4| } + + +[Leading delimiter] = 1:0-1:2 +0| class MyClass { + +1| myFunk() { + >--< +2| + +3| } + +4| } + + +[Insertion delimiter] = "\n\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/namedFunction2.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/namedFunction2.scope new file mode 100644 index 0000000000..8e21e902e0 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/namedFunction2.scope @@ -0,0 +1,16 @@ +const myFunk = function() { + +} +--- + +[Content] = +[Removal] = +[Domain] = 0:0-2:1 +0| const myFunk = function() { + >--------------------------- +1| + +2| } + -< + +[Insertion delimiter] = "\n\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/regularExpression.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/regularExpression.scope new file mode 100644 index 0000000000..48e5c51a92 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/regularExpression.scope @@ -0,0 +1,10 @@ +/^\w+$/g +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:8 +0| /^\w+$/g + >--------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/startTag.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/startTag.scope new file mode 100644 index 0000000000..1fd64adf6f --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/startTag.scope @@ -0,0 +1,13 @@ + +--- + +[Content] = +[Removal] = 0:0-0:15 +0| + >---------------< + +[Domain] = 0:0-0:21 +0| + >---------------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/statement.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/statement.scope new file mode 100644 index 0000000000..62a6b4fd53 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/statement.scope @@ -0,0 +1,10 @@ +const value = 0; +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:16 +0| const value = 0; + >----------------< + +[Insertion delimiter] = "\n" diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/string.multiLine.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/string.multiLine.scope new file mode 100644 index 0000000000..1720e525c9 --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/string.multiLine.scope @@ -0,0 +1,13 @@ +`Hello +world` +--- + +[Content] = +[Removal] = +[Domain] = 0:0-1:6 +0| `Hello + >------ +1| world` + ------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/string.singleLine.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/string.singleLine.scope new file mode 100644 index 0000000000..fdfeaf485b --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/string.singleLine.scope @@ -0,0 +1,10 @@ +"Hello world" +--- + +[Content] = +[Removal] = +[Domain] = 0:0-0:13 +0| "Hello world" + >-------------< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/switchStatementSubject.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/switchStatementSubject.scope new file mode 100644 index 0000000000..d05344ce2f --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/switchStatementSubject.scope @@ -0,0 +1,23 @@ +switch (value) { + +} +--- + +[Content] = +[Removal] = 0:8-0:13 +0| switch (value) { + >-----< +1| + +2| } + + +[Domain] = 0:0-2:1 +0| switch (value) { + >---------------- +1| + +2| } + -< + +[Insertion delimiter] = " " diff --git a/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/tags.scope b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/tags.scope new file mode 100644 index 0000000000..10ab2153df --- /dev/null +++ b/packages/cursorless-vscode-e2e/src/suite/fixtures/scopes/javascript/tags.scope @@ -0,0 +1,20 @@ +