Skip to content

Commit

Permalink
Fix arr access var extraction
Browse files Browse the repository at this point in the history
  • Loading branch information
RblSb committed Sep 5, 2023
1 parent 9757569 commit 5085a57
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -207,9 +207,18 @@ class ExtractVarFeature implements CodeActionContributor {
if (token.tok == BrClose || token.tok == BkClose) {
token = token.parent ?? return [];
}
// extract full object/array
switch token.tok {
case BrOpen, BkOpen: // extract full object/array
case BrOpen:
return [token, getLastNonCommaToken(token)];
case BkOpen:
final parent = token.parent ?? return [];
final isArrAccess = parent.isCIdent() || parent.matches(BkOpen);
if (!isArrAccess) {
return [token, getLastNonCommaToken(token)];
} else {
token = parent;
}
case _:
}

Expand Down
52 changes: 52 additions & 0 deletions test/codeActions/ExtractVarTest.hx
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,56 @@ class ExtractVarTest extends DisplayTestCase {
applyTextEdit(actions[0].edit);
eq(ctx.result, ctx.doc.content);
}

/**
function main() {
final foo = add({
onComplete: spr{-1-}ite -> {
foo(1, [2]);
}
});
}
---
function main() {
final sprite = sprite -> {
foo(1, [2]);
};
final foo = add({
onComplete: sprite
});
}
**/
function testArrowFunction():Void {
final feature = new ExtractVarFeature(ctx.context);
final actions:Array<CodeAction> = feature.extractVar(ctx.doc, ctx.uri, pos(1).toRange());
applyTextEdit(actions[0].edit);
eq(ctx.result, ctx.doc.content);
}

/**
function main() {
final item1 = tasks[0]{-1-};
final item2 = [1, 2, 3][0]{-2-};
final item3 = call()[0]{-3-};
}
---
function main() {
final arr = tasks[0];
final item1 = arr;
final arr = [1, 2, 3][0];
final item2 = arr;
final arr = call()[0];
final item3 = arr;
}
**/
function testArrayAccess():Void {
final feature = new ExtractVarFeature(ctx.context);
final actions:Array<CodeAction> = feature.extractVar(ctx.doc, ctx.uri, pos(3).toRange());
applyTextEdit(actions[0].edit);
final actions:Array<CodeAction> = feature.extractVar(ctx.doc, ctx.uri, pos(2).toRange());
applyTextEdit(actions[0].edit);
final actions:Array<CodeAction> = feature.extractVar(ctx.doc, ctx.uri, pos(1).toRange());
applyTextEdit(actions[0].edit);
eq(ctx.result, ctx.doc.content);
}
}

0 comments on commit 5085a57

Please sign in to comment.