From 78aceac89569bbb22b9e8c252ba74de5c65acc0b Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Wed, 5 Jan 2022 13:55:51 +0100 Subject: [PATCH] In typescript short hand property can be treated as key item or value (#381) Co-authored-by: Pokey Rule --- src/languages/typescript.ts | 4 +-- .../languages/typescript/takeEveryKey2.yml | 35 +++++++++++++++++++ .../languages/typescript/takeEveryValue2.yml | 35 +++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 src/test/suite/fixtures/recorded/languages/typescript/takeEveryKey2.yml create mode 100644 src/test/suite/fixtures/recorded/languages/typescript/takeEveryValue2.yml diff --git a/src/languages/typescript.ts b/src/languages/typescript.ts index 529eebe522..57f0d789b9 100644 --- a/src/languages/typescript.ts +++ b/src/languages/typescript.ts @@ -129,7 +129,7 @@ function typeMatcher(): NodeMatcher { } function valueMatcher() { - const pFinder = patternFinder("assignment_expression[right]", "*[value]"); + const pFinder = patternFinder("assignment_expression[right]", "*[value]", "shorthand_property_identifier"); return matcher( (node: SyntaxNode) => node.type === "jsx_attribute" ? node.lastChild : pFinder(node), @@ -145,7 +145,7 @@ const nodeMatchers: Partial> = { list: listTypes, string: ["string", "template_string"], collectionKey: trailingMatcher( - ["pair[key]", "jsx_attribute.property_identifier!"], + ["pair[key]", "jsx_attribute.property_identifier!", "shorthand_property_identifier"], [":"] ), collectionItem: argumentMatcher(...mapTypes, ...listTypes), diff --git a/src/test/suite/fixtures/recorded/languages/typescript/takeEveryKey2.yml b/src/test/suite/fixtures/recorded/languages/typescript/takeEveryKey2.yml new file mode 100644 index 0000000000..ec3cca391e --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/typescript/takeEveryKey2.yml @@ -0,0 +1,35 @@ +languageId: typescript +command: + version: 1 + spokenForm: take every key + action: setSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: collectionKey, includeSiblings: true} +initialState: + documentContents: |- + { + foo: "hello", + bar, + } + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + marks: {} +finalState: + documentContents: |- + { + foo: "hello", + bar, + } + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 7} + - anchor: {line: 2, character: 4} + active: {line: 2, character: 7} + thatMark: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 7} + - anchor: {line: 2, character: 4} + active: {line: 2, character: 7} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: collectionKey, includeSiblings: true}}] diff --git a/src/test/suite/fixtures/recorded/languages/typescript/takeEveryValue2.yml b/src/test/suite/fixtures/recorded/languages/typescript/takeEveryValue2.yml new file mode 100644 index 0000000000..ebb2a4e51d --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/typescript/takeEveryValue2.yml @@ -0,0 +1,35 @@ +languageId: typescript +command: + version: 1 + spokenForm: take every value + action: setSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: value, includeSiblings: true} +initialState: + documentContents: |- + { + foo: "hello", + bar, + } + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + marks: {} +finalState: + documentContents: |- + { + foo: "hello", + bar, + } + selections: + - anchor: {line: 1, character: 9} + active: {line: 1, character: 16} + - anchor: {line: 2, character: 4} + active: {line: 2, character: 7} + thatMark: + - anchor: {line: 1, character: 9} + active: {line: 1, character: 16} + - anchor: {line: 2, character: 4} + active: {line: 2, character: 7} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: value, includeSiblings: true}}]