Skip to content

Commit

Permalink
Added additional assignment operator for c style languages (#662)
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreasArvidsson committed May 1, 2022
1 parent e4a3b9c commit 39f91b7
Show file tree
Hide file tree
Showing 10 changed files with 598 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/languages/cpp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ const nodeMatchers: Partial<Record<ScopeType, NodeMatcherAlternative>> = {
"assignment_expression[right]",
"optional_parameter_declaration[default_value]",
],
["=", ":"]
[":", "=", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", "<<=", ">>="]
),
collectionItem: argumentMatcher("initializer_list"),
argumentOrParameter: argumentMatcher("parameter_list", "argument_list"),
Expand Down
12 changes: 8 additions & 4 deletions src/languages/csharp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
cascadingMatcher,
chainedMatcher,
createPatternMatchers,
leadingMatcher,
matcher,
trailingMatcher,
typeMatcher,
Expand Down Expand Up @@ -175,10 +176,13 @@ const getMapMatchers = {
typedNodeFinder("assignment_expression"),
(node: SyntaxNode) => node.childForFieldName("left"),
]),
value: [
"variable_declaration?.variable_declarator[1][0]!",
"assignment_expression[right]",
],
value: leadingMatcher(
[
"variable_declaration?.variable_declarator[1][0]!",
"assignment_expression[right]",
],
["assignment_operator"]
),
list: cascadingMatcher(
chainedMatcher([
typedNodeFinder(...LIST_TYPES_WITH_INITIALIZERS_AS_CHILDREN),
Expand Down
2 changes: 1 addition & 1 deletion src/languages/java.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ const nodeMatchers: Partial<Record<ScopeType, NodeMatcherAlternative>> = {
],
value: leadingMatcher(
["*[declarator][value]", "assignment_expression[right]", "*[value]"],
["="]
["=", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", "<<=", ">>="]
),
condition: conditionMatcher("*[condition]"),
collectionItem: argumentMatcher("array_initializer"),
Expand Down
17 changes: 16 additions & 1 deletion src/languages/python.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,22 @@ const nodeMatchers: Partial<Record<ScopeType, NodeMatcherAlternative>> = {
value: cascadingMatcher(
leadingMatcher(
["assignment[right]", "augmented_assignment[right]", "~subscript[value]"],
["=", ":"]
[
":",
"=",
"+=",
"-=",
"*=",
"/=",
"%=",
"//=",
"**=",
"&=",
"|=",
"^=",
"<<=",
">>=",
]
),
patternMatcher("return_statement.~return!")
),
Expand Down
16 changes: 15 additions & 1 deletion src/languages/typescript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,21 @@ function valueMatcher() {
return matcher(
(node: SyntaxNode) =>
node.type === "jsx_attribute" ? node.lastChild : pFinder(node),
selectWithLeadingDelimiter("=", ":")
selectWithLeadingDelimiter(
":",
"=",
"+=",
"-=",
"*=",
"/=",
"%=",
"**=",
"&=",
"|=",
"^=",
"<<=",
">>="
)
);
}

Expand Down
105 changes: 105 additions & 0 deletions src/test/suite/fixtures/recorded/languages/cpp/chuckValue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
languageId: cpp
command:
version: 1
spokenForm: chuck value
action: remove
targets:
- type: primitive
modifier: {type: containingScope, scopeType: value, includeSiblings: false}
initialState:
documentContents: |-
a = 1;
a += 1;
a -= 1;
a *= 1;
a /= 1;
a %= 1;
a &= 1;
a |= 1;
a ^= 1;
a <<= 1;
a >>= 1;
selections:
- anchor: {line: 0, character: 4}
active: {line: 0, character: 5}
- anchor: {line: 1, character: 5}
active: {line: 1, character: 6}
- anchor: {line: 2, character: 5}
active: {line: 2, character: 6}
- anchor: {line: 3, character: 5}
active: {line: 3, character: 6}
- anchor: {line: 4, character: 5}
active: {line: 4, character: 6}
- anchor: {line: 5, character: 5}
active: {line: 5, character: 6}
- anchor: {line: 6, character: 5}
active: {line: 6, character: 6}
- anchor: {line: 7, character: 5}
active: {line: 7, character: 6}
- anchor: {line: 8, character: 5}
active: {line: 8, character: 6}
- anchor: {line: 9, character: 6}
active: {line: 9, character: 7}
- anchor: {line: 10, character: 6}
active: {line: 10, character: 7}
marks: {}
finalState:
documentContents: |-
a;
a;
a;
a;
a;
a;
a;
a;
a;
a;
a;
selections:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
- anchor: {line: 1, character: 1}
active: {line: 1, character: 1}
- anchor: {line: 2, character: 1}
active: {line: 2, character: 1}
- anchor: {line: 3, character: 1}
active: {line: 3, character: 1}
- anchor: {line: 4, character: 1}
active: {line: 4, character: 1}
- anchor: {line: 5, character: 1}
active: {line: 5, character: 1}
- anchor: {line: 6, character: 1}
active: {line: 6, character: 1}
- anchor: {line: 7, character: 1}
active: {line: 7, character: 1}
- anchor: {line: 8, character: 1}
active: {line: 8, character: 1}
- anchor: {line: 9, character: 1}
active: {line: 9, character: 1}
- anchor: {line: 10, character: 1}
active: {line: 10, character: 1}
thatMark:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
- anchor: {line: 1, character: 1}
active: {line: 1, character: 1}
- anchor: {line: 2, character: 1}
active: {line: 2, character: 1}
- anchor: {line: 3, character: 1}
active: {line: 3, character: 1}
- anchor: {line: 4, character: 1}
active: {line: 4, character: 1}
- anchor: {line: 5, character: 1}
active: {line: 5, character: 1}
- anchor: {line: 6, character: 1}
active: {line: 6, character: 1}
- anchor: {line: 7, character: 1}
active: {line: 7, character: 1}
- anchor: {line: 8, character: 1}
active: {line: 8, character: 1}
- anchor: {line: 9, character: 1}
active: {line: 9, character: 1}
- anchor: {line: 10, character: 1}
active: {line: 10, character: 1}
fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: value, includeSiblings: false}, isImplicit: false}]
105 changes: 105 additions & 0 deletions src/test/suite/fixtures/recorded/languages/csharp/chuckValue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
languageId: csharp
command:
version: 1
spokenForm: chuck value
action: remove
targets:
- type: primitive
modifier: {type: containingScope, scopeType: value, includeSiblings: false}
initialState:
documentContents: |-
a = 1;
a += 1;
a -= 1;
a *= 1;
a /= 1;
a %= 1;
a &= 1;
a |= 1;
a ^= 1;
a <<= 1;
a >>= 1;
selections:
- anchor: {line: 0, character: 4}
active: {line: 0, character: 5}
- anchor: {line: 1, character: 5}
active: {line: 1, character: 6}
- anchor: {line: 2, character: 5}
active: {line: 2, character: 6}
- anchor: {line: 3, character: 5}
active: {line: 3, character: 6}
- anchor: {line: 4, character: 5}
active: {line: 4, character: 6}
- anchor: {line: 5, character: 5}
active: {line: 5, character: 6}
- anchor: {line: 6, character: 5}
active: {line: 6, character: 6}
- anchor: {line: 7, character: 5}
active: {line: 7, character: 6}
- anchor: {line: 8, character: 5}
active: {line: 8, character: 6}
- anchor: {line: 9, character: 6}
active: {line: 9, character: 7}
- anchor: {line: 10, character: 6}
active: {line: 10, character: 7}
marks: {}
finalState:
documentContents: |-
a;
a;
a;
a;
a;
a;
a;
a;
a;
a;
a;
selections:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
- anchor: {line: 1, character: 1}
active: {line: 1, character: 1}
- anchor: {line: 2, character: 1}
active: {line: 2, character: 1}
- anchor: {line: 3, character: 1}
active: {line: 3, character: 1}
- anchor: {line: 4, character: 1}
active: {line: 4, character: 1}
- anchor: {line: 5, character: 1}
active: {line: 5, character: 1}
- anchor: {line: 6, character: 1}
active: {line: 6, character: 1}
- anchor: {line: 7, character: 1}
active: {line: 7, character: 1}
- anchor: {line: 8, character: 1}
active: {line: 8, character: 1}
- anchor: {line: 9, character: 1}
active: {line: 9, character: 1}
- anchor: {line: 10, character: 1}
active: {line: 10, character: 1}
thatMark:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
- anchor: {line: 1, character: 1}
active: {line: 1, character: 1}
- anchor: {line: 2, character: 1}
active: {line: 2, character: 1}
- anchor: {line: 3, character: 1}
active: {line: 3, character: 1}
- anchor: {line: 4, character: 1}
active: {line: 4, character: 1}
- anchor: {line: 5, character: 1}
active: {line: 5, character: 1}
- anchor: {line: 6, character: 1}
active: {line: 6, character: 1}
- anchor: {line: 7, character: 1}
active: {line: 7, character: 1}
- anchor: {line: 8, character: 1}
active: {line: 8, character: 1}
- anchor: {line: 9, character: 1}
active: {line: 9, character: 1}
- anchor: {line: 10, character: 1}
active: {line: 10, character: 1}
fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: value, includeSiblings: false}, isImplicit: false}]
Loading

0 comments on commit 39f91b7

Please sign in to comment.