Skip to content

Commit 84d5d04

Browse files
committed
Fix corner case for Opcode
1 parent de17ecf commit 84d5d04

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

plugin/core/src/main/java/com/perl5/lang/perl/psi/mixins/PerlNamespaceDefinitionMixin.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,23 @@ public class ExporterInfo implements Processor<PsiElement> {
251251
private final @NotNull List<String> EXPORT_OK = new ArrayList<>();
252252
private final @NotNull Map<String, List<String>> EXPORT_TAGS = Collections.emptyMap();
253253

254+
// Deals with the following cases:
255+
// use subs our @EXPORT_OK = qw( a b c );
256+
public PsiElement findAssignExpr(PsiElement element) {
257+
PsiElement target = element.getFirstChild();
258+
while (target != null && !(target instanceof PsiPerlAssignExpr)) {
259+
target = target.getNextSibling();
260+
}
261+
return target;
262+
}
263+
254264
public void extractExport(PsiElement element, String exportName, List<String> target) {
255-
PsiElement rightSide = element.getFirstChild().getLastChild();
256-
String variableName = element.getFirstChild().getFirstChild().getText();
265+
PsiElement assignExpr = findAssignExpr(element);
266+
PsiElement leftSide = assignExpr.getFirstChild();
267+
PsiElement rightSide = assignExpr.getLastChild();
268+
String variableName = leftSide instanceof PerlVariableDeclarationExpr ?
269+
leftSide.getLastChild().getText() :
270+
leftSide.getText();
257271

258272
// @EXPORT or @{namespace}::EXPORT
259273
// @EXPORT_OK or @{namespace}::EXPORT_OK

plugin/src/test/java/unit/perl/ExporterTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ protected String getBaseDataPath() {
3434
public void testExport() {
3535
doTest("export.pl", "Foo", new String[]{"this", "is", "the", "end"}, new String[]{});
3636
doTest("boolean.pl", "boolean", new String[]{"true", "false", "boolean"}, new String[]{"isTrue", "isFalse", "isBoolean"});
37+
doTest("Opcode.pm", "Opcode", new String[]{}, new String[]{"opset", "opset_to_hex", "opdump"});
3738
}
3839

3940
@Test
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package Opcode 1.64;
2+
3+
use strict;
4+
5+
use Carp;
6+
use Exporter 'import';
7+
use XSLoader;
8+
9+
sub opset (;@);
10+
sub opset_to_hex ($);
11+
sub opdump (;$);
12+
use subs our @EXPORT_OK = qw(
13+
opset opset_to_hex opdump
14+
);

0 commit comments

Comments
 (0)