From f9a6a290e0ee0d078d689fcb9a93678022c62ba8 Mon Sep 17 00:00:00 2001 From: Andrew Dant Date: Sat, 16 Apr 2022 01:22:23 -0400 Subject: [PATCH 1/9] add generator expressions to matcher for python argumentOrParameter --- src/languages/python.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/languages/python.ts b/src/languages/python.ts index 9159c34048..4810c93d3b 100644 --- a/src/languages/python.ts +++ b/src/languages/python.ts @@ -7,8 +7,11 @@ import { cascadingMatcher, patternMatcher, conditionMatcher, + matcher, } from "../util/nodeMatchers"; +import { patternFinder } from "../util/nodeFinders"; import { NodeMatcherAlternative, ScopeType } from "../typings/Types"; +import { childRangeSelector } from "../util/nodeSelectors"; // Generated by the following command: // > curl https://raw.githubusercontent.com/tree-sitter/tree-sitter-python/d6210ceab11e8d812d4ab59c07c81458ec6e5184/src/node-types.json \ @@ -79,7 +82,10 @@ const nodeMatchers: Partial> = { ), patternMatcher("return_statement.~return!") ), - argumentOrParameter: argumentMatcher("parameters", "argument_list"), + argumentOrParameter: cascadingMatcher( + argumentMatcher("parameters", "argument_list"), + matcher(patternFinder("generator_expression"), childRangeSelector()) + ), }; export default createPatternMatchers(nodeMatchers); From 6e57dba6e9c1c5bfc7c8e4d4b8b8d9c63525b2d1 Mon Sep 17 00:00:00 2001 From: Andrew Dant Date: Sun, 17 Apr 2022 17:15:37 -0400 Subject: [PATCH 2/9] fix: update python matcher for generator expressions in calls --- src/languages/python.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/python.ts b/src/languages/python.ts index 4810c93d3b..b71fe22db0 100644 --- a/src/languages/python.ts +++ b/src/languages/python.ts @@ -9,7 +9,7 @@ import { conditionMatcher, matcher, } from "../util/nodeMatchers"; -import { patternFinder } from "../util/nodeFinders"; +import { ancestorChainNodeFinder, patternFinder } from "../util/nodeFinders"; import { NodeMatcherAlternative, ScopeType } from "../typings/Types"; import { childRangeSelector } from "../util/nodeSelectors"; @@ -84,7 +84,7 @@ const nodeMatchers: Partial> = { ), argumentOrParameter: cascadingMatcher( argumentMatcher("parameters", "argument_list"), - matcher(patternFinder("generator_expression"), childRangeSelector()) + matcher(ancestorChainNodeFinder(1, patternFinder("call"), patternFinder("generator_expression")), childRangeSelector()) ), }; From 20f5e51feebcf40ff4d0d94d071e9b6ec551747e Mon Sep 17 00:00:00 2001 From: Andrew Dant Date: Mon, 18 Apr 2022 00:22:32 -0400 Subject: [PATCH 3/9] add multiple test cases with generator expression arguments --- .../languages/python/chuckArgDrum.yml | 27 +++++++++++++++++++ .../languages/python/chuckArgFine.yml | 27 +++++++++++++++++++ .../languages/python/chuckArgWhale.yml | 27 +++++++++++++++++++ .../recorded/languages/python/takeArgDrum.yml | 27 +++++++++++++++++++ .../recorded/languages/python/takeArgRed.yml | 27 +++++++++++++++++++ .../languages/python/takeArgWhale.yml | 27 +++++++++++++++++++ 6 files changed, 162 insertions(+) create mode 100644 src/test/suite/fixtures/recorded/languages/python/chuckArgDrum.yml create mode 100644 src/test/suite/fixtures/recorded/languages/python/chuckArgFine.yml create mode 100644 src/test/suite/fixtures/recorded/languages/python/chuckArgWhale.yml create mode 100644 src/test/suite/fixtures/recorded/languages/python/takeArgDrum.yml create mode 100644 src/test/suite/fixtures/recorded/languages/python/takeArgRed.yml create mode 100644 src/test/suite/fixtures/recorded/languages/python/takeArgWhale.yml diff --git a/src/test/suite/fixtures/recorded/languages/python/chuckArgDrum.yml b/src/test/suite/fixtures/recorded/languages/python/chuckArgDrum.yml new file mode 100644 index 0000000000..99226b71a0 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/chuckArgDrum.yml @@ -0,0 +1,27 @@ +languageId: python +command: + version: 1 + spokenForm: chuck arg drum + action: remove + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false} + mark: {type: decoratedSymbol, symbolColor: default, character: d} +initialState: + documentContents: "\" \".join((word for word in word_list), (word for word in word_list))" + selections: + - anchor: {line: 0, character: 39} + active: {line: 0, character: 67} + marks: + default.d: + start: {line: 0, character: 19} + end: {line: 0, character: 23} +finalState: + documentContents: "\" \".join((word for word in word_list))" + selections: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 37} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: d}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false}, isImplicit: false}] diff --git a/src/test/suite/fixtures/recorded/languages/python/chuckArgFine.yml b/src/test/suite/fixtures/recorded/languages/python/chuckArgFine.yml new file mode 100644 index 0000000000..6b2b226a2a --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/chuckArgFine.yml @@ -0,0 +1,27 @@ +languageId: python +command: + version: 1 + spokenForm: chuck arg fine + action: remove + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false} + mark: {type: decoratedSymbol, symbolColor: default, character: f} +initialState: + documentContents: "\" \".join((word for word in word_list), \"words\")" + selections: + - anchor: {line: 0, character: 47} + active: {line: 0, character: 47} + marks: + default.f: + start: {line: 0, character: 15} + end: {line: 0, character: 18} +finalState: + documentContents: "\" \".join(\"words\")" + selections: + - anchor: {line: 0, character: 17} + active: {line: 0, character: 17} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: f}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false}, isImplicit: false}] diff --git a/src/test/suite/fixtures/recorded/languages/python/chuckArgWhale.yml b/src/test/suite/fixtures/recorded/languages/python/chuckArgWhale.yml new file mode 100644 index 0000000000..c4c5b66f21 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/chuckArgWhale.yml @@ -0,0 +1,27 @@ +languageId: python +command: + version: 1 + spokenForm: chuck arg whale + action: remove + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false} + mark: {type: decoratedSymbol, symbolColor: default, character: w} +initialState: + documentContents: "\" \".join(word for word in word_list)" + selections: + - anchor: {line: 0, character: 36} + active: {line: 0, character: 36} + marks: + default.w: + start: {line: 0, character: 18} + end: {line: 0, character: 22} +finalState: + documentContents: "\" \".join()" + selections: + - anchor: {line: 0, character: 10} + active: {line: 0, character: 10} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: w}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false}, isImplicit: false}] diff --git a/src/test/suite/fixtures/recorded/languages/python/takeArgDrum.yml b/src/test/suite/fixtures/recorded/languages/python/takeArgDrum.yml new file mode 100644 index 0000000000..f599fa36c3 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/takeArgDrum.yml @@ -0,0 +1,27 @@ +languageId: python +command: + version: 1 + spokenForm: take arg drum + action: setSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false} + mark: {type: decoratedSymbol, symbolColor: default, character: d} +initialState: + documentContents: "\" \".join((word for word in word_list), \"words\")" + selections: + - anchor: {line: 0, character: 47} + active: {line: 0, character: 47} + marks: + default.d: + start: {line: 0, character: 19} + end: {line: 0, character: 23} +finalState: + documentContents: "\" \".join((word for word in word_list), \"words\")" + selections: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 37} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 37} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: d}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false}, isImplicit: false}] diff --git a/src/test/suite/fixtures/recorded/languages/python/takeArgRed.yml b/src/test/suite/fixtures/recorded/languages/python/takeArgRed.yml new file mode 100644 index 0000000000..a13f987eca --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/takeArgRed.yml @@ -0,0 +1,27 @@ +languageId: python +command: + version: 1 + spokenForm: take arg red + action: setSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false} + mark: {type: decoratedSymbol, symbolColor: default, character: r} +initialState: + documentContents: "\" \".join(word for word in word_list)" + selections: + - anchor: {line: 0, character: 36} + active: {line: 0, character: 36} + marks: + default.r: + start: {line: 0, character: 9} + end: {line: 0, character: 13} +finalState: + documentContents: "\" \".join(word for word in word_list)" + selections: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 35} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 35} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: r}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false}, isImplicit: false}] diff --git a/src/test/suite/fixtures/recorded/languages/python/takeArgWhale.yml b/src/test/suite/fixtures/recorded/languages/python/takeArgWhale.yml new file mode 100644 index 0000000000..6cc30ae7d1 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/takeArgWhale.yml @@ -0,0 +1,27 @@ +languageId: python +command: + version: 1 + spokenForm: take arg whale + action: setSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false} + mark: {type: decoratedSymbol, symbolColor: default, character: w} +initialState: + documentContents: "\" \".join((word for word in word_list), (word for word in word_list))" + selections: + - anchor: {line: 0, character: 68} + active: {line: 0, character: 68} + marks: + default.w: + start: {line: 0, character: 49} + end: {line: 0, character: 53} +finalState: + documentContents: "\" \".join((word for word in word_list), (word for word in word_list))" + selections: + - anchor: {line: 0, character: 39} + active: {line: 0, character: 67} + thatMark: + - anchor: {line: 0, character: 39} + active: {line: 0, character: 67} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: w}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: false}, isImplicit: false}] From 99174f815a15e25551850b3bd8a8d25837f1bfd3 Mon Sep 17 00:00:00 2001 From: Andrew Dant Date: Mon, 18 Apr 2022 00:27:10 -0400 Subject: [PATCH 4/9] reformat updated python matcher with prettier --- src/languages/python.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/languages/python.ts b/src/languages/python.ts index b71fe22db0..c9c4f0f81b 100644 --- a/src/languages/python.ts +++ b/src/languages/python.ts @@ -84,7 +84,14 @@ const nodeMatchers: Partial> = { ), argumentOrParameter: cascadingMatcher( argumentMatcher("parameters", "argument_list"), - matcher(ancestorChainNodeFinder(1, patternFinder("call"), patternFinder("generator_expression")), childRangeSelector()) + matcher( + ancestorChainNodeFinder( + 1, + patternFinder("call"), + patternFinder("generator_expression") + ), + childRangeSelector() + ) ), }; From ccd15b67c22503d308c7cc48f2e780b3d48d53aa Mon Sep 17 00:00:00 2001 From: Andrew Dant Date: Sun, 24 Apr 2022 18:31:27 -0400 Subject: [PATCH 5/9] refactor python argument finder --- src/languages/python.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/languages/python.ts b/src/languages/python.ts index c9c4f0f81b..60f8416e8d 100644 --- a/src/languages/python.ts +++ b/src/languages/python.ts @@ -85,11 +85,7 @@ const nodeMatchers: Partial> = { argumentOrParameter: cascadingMatcher( argumentMatcher("parameters", "argument_list"), matcher( - ancestorChainNodeFinder( - 1, - patternFinder("call"), - patternFinder("generator_expression") - ), + patternFinder("call.generator_expression!"), childRangeSelector() ) ), From d2bbb798864c95bd2ee67c065e7158d2f05f4b4d Mon Sep 17 00:00:00 2001 From: Andrew Dant Date: Sun, 24 Apr 2022 18:31:50 -0400 Subject: [PATCH 6/9] add chuck every tests with generator expression argument --- .../languages/python/chuckEveryArgRed.yml | 27 +++++++++++++++++++ .../languages/python/chuckEveryArgWhale.yml | 27 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/test/suite/fixtures/recorded/languages/python/chuckEveryArgRed.yml create mode 100644 src/test/suite/fixtures/recorded/languages/python/chuckEveryArgWhale.yml diff --git a/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgRed.yml b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgRed.yml new file mode 100644 index 0000000000..37149345c0 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgRed.yml @@ -0,0 +1,27 @@ +languageId: javascript +command: + version: 1 + spokenForm: chuck every arg red + action: remove + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true} + mark: {type: decoratedSymbol, symbolColor: default, character: r} +initialState: + documentContents: "\" \".join(word for word in word_list)" + selections: + - anchor: {line: 0, character: 36} + active: {line: 0, character: 36} + marks: + default.r: + start: {line: 0, character: 9} + end: {line: 0, character: 13} +finalState: + documentContents: "\" \".join()" + selections: + - anchor: {line: 0, character: 10} + active: {line: 0, character: 10} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: r}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true}, isImplicit: false}] diff --git a/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgWhale.yml b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgWhale.yml new file mode 100644 index 0000000000..c45f9793f6 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgWhale.yml @@ -0,0 +1,27 @@ +languageId: javascript +command: + version: 1 + spokenForm: chuck every arg whale + action: remove + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true} + mark: {type: decoratedSymbol, symbolColor: default, character: w} +initialState: + documentContents: "\" \".join((word for word in word_list), another_argument)" + selections: + - anchor: {line: 0, character: 56} + active: {line: 0, character: 56} + marks: + default.w: + start: {line: 0, character: 19} + end: {line: 0, character: 23} +finalState: + documentContents: "\" \".join()" + selections: + - anchor: {line: 0, character: 10} + active: {line: 0, character: 10} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: w}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true}, isImplicit: false}] From 53e22f445a82ee4a4b92149116fdf521d4a736f2 Mon Sep 17 00:00:00 2001 From: Andrew Dant Date: Sun, 24 Apr 2022 18:35:17 -0400 Subject: [PATCH 7/9] removed an unused import --- src/languages/python.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/python.ts b/src/languages/python.ts index 60f8416e8d..406d14dfca 100644 --- a/src/languages/python.ts +++ b/src/languages/python.ts @@ -9,7 +9,7 @@ import { conditionMatcher, matcher, } from "../util/nodeMatchers"; -import { ancestorChainNodeFinder, patternFinder } from "../util/nodeFinders"; +import { patternFinder } from "../util/nodeFinders"; import { NodeMatcherAlternative, ScopeType } from "../typings/Types"; import { childRangeSelector } from "../util/nodeSelectors"; From 1c0afbf228a52cae85547757f10ae251b84411da Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:01:12 +0000 Subject: [PATCH 8/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/languages/python.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/languages/python.ts b/src/languages/python.ts index 406d14dfca..fcec4a3117 100644 --- a/src/languages/python.ts +++ b/src/languages/python.ts @@ -84,10 +84,7 @@ const nodeMatchers: Partial> = { ), argumentOrParameter: cascadingMatcher( argumentMatcher("parameters", "argument_list"), - matcher( - patternFinder("call.generator_expression!"), - childRangeSelector() - ) + matcher(patternFinder("call.generator_expression!"), childRangeSelector()) ), }; From 60ef4b3d569f9759dfbe346db33b74c54d79eb88 Mon Sep 17 00:00:00 2001 From: Andrew Dant Date: Mon, 25 Apr 2022 23:14:10 -0400 Subject: [PATCH 9/9] re-recorded chuck every arg generator expression tests I know it shows in git as a change and a rename, but I did delete the files and record fresh. --- .../languages/python/chuckEveryArgAir.yml | 27 +++++++++++++++++++ .../languages/python/chuckEveryArgRed.yml | 2 +- ...EveryArgWhale.yml => chuckEveryArgSit.yml} | 14 +++++----- 3 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 src/test/suite/fixtures/recorded/languages/python/chuckEveryArgAir.yml rename src/test/suite/fixtures/recorded/languages/python/{chuckEveryArgWhale.yml => chuckEveryArgSit.yml} (79%) diff --git a/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgAir.yml b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgAir.yml new file mode 100644 index 0000000000..7981378ea0 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgAir.yml @@ -0,0 +1,27 @@ +languageId: python +command: + version: 1 + spokenForm: chuck every arg air + action: remove + targets: + - type: primitive + modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true} + mark: {type: decoratedSymbol, symbolColor: default, character: a} +initialState: + documentContents: "\" \".join((word for word in word_list), (name for name in name_list))" + selections: + - anchor: {line: 0, character: 68} + active: {line: 0, character: 68} + marks: + default.a: + start: {line: 0, character: 40} + end: {line: 0, character: 44} +finalState: + documentContents: "\" \".join()" + selections: + - anchor: {line: 0, character: 10} + active: {line: 0, character: 10} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: a}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true}, isImplicit: false}] diff --git a/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgRed.yml b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgRed.yml index 37149345c0..23298759dc 100644 --- a/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgRed.yml +++ b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgRed.yml @@ -1,4 +1,4 @@ -languageId: javascript +languageId: python command: version: 1 spokenForm: chuck every arg red diff --git a/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgWhale.yml b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgSit.yml similarity index 79% rename from src/test/suite/fixtures/recorded/languages/python/chuckEveryArgWhale.yml rename to src/test/suite/fixtures/recorded/languages/python/chuckEveryArgSit.yml index c45f9793f6..1a7429197b 100644 --- a/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgWhale.yml +++ b/src/test/suite/fixtures/recorded/languages/python/chuckEveryArgSit.yml @@ -1,21 +1,21 @@ -languageId: javascript +languageId: python command: version: 1 - spokenForm: chuck every arg whale + spokenForm: chuck every arg sit action: remove targets: - type: primitive modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true} - mark: {type: decoratedSymbol, symbolColor: default, character: w} + mark: {type: decoratedSymbol, symbolColor: default, character: i} initialState: documentContents: "\" \".join((word for word in word_list), another_argument)" selections: - anchor: {line: 0, character: 56} active: {line: 0, character: 56} marks: - default.w: - start: {line: 0, character: 19} - end: {line: 0, character: 23} + default.i: + start: {line: 0, character: 24} + end: {line: 0, character: 26} finalState: documentContents: "\" \".join()" selections: @@ -24,4 +24,4 @@ finalState: thatMark: - anchor: {line: 0, character: 9} active: {line: 0, character: 9} -fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: w}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true}, isImplicit: false}] +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: i}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: argumentOrParameter, includeSiblings: true}, isImplicit: false}]