Skip to content

Commit 9811d79

Browse files
Support qualified HCL identifiers (#5967)
* Support qualified HCL identifiers * End files with newlines * Use diamond operator in HCLLexer after regenerate * Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Add missing override annotations --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent c430ecf commit 9811d79

15 files changed

+3920
-3052
lines changed

rewrite-hcl/src/main/antlr/HCLParser.g4

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,11 @@ object
8787
;
8888

8989
objectelem
90-
: (Identifier | NULL | LPAREN Identifier RPAREN | QUOTE quotedTemplatePart* QUOTE | expression) (ASSIGN | COLON) expression COMMA?
90+
: (qualifiedIdentifier | NULL | LPAREN qualifiedIdentifier RPAREN | QUOTE quotedTemplatePart* QUOTE | expression) (ASSIGN | COLON) expression COMMA?
91+
;
92+
93+
qualifiedIdentifier
94+
: Identifier (DOT Identifier)*
9195
;
9296

9397
// For Expressions

rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclParserVisitor.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,8 @@ public Hcl visitObjectelem(HCLParser.ObjectelemContext ctx) {
493493
if (ctx.LPAREN() != null) {
494494
parenthesesPrefix = sourceBefore("(");
495495
}
496-
if (ctx.Identifier() != null) {
497-
name = visitIdentifier(ctx.Identifier());
496+
if (ctx.qualifiedIdentifier() != null) {
497+
name = visitQualifiedIdentifier(ctx.qualifiedIdentifier());
498498
} else if (ctx.NULL() != null) {
499499
name = visitIdentifier(ctx.NULL());
500500
} else if (ctx.expression(0) != null) {
@@ -700,6 +700,32 @@ public Hcl visitVariableExpr(HCLParser.VariableExprContext ctx) {
700700
return ident;
701701
}
702702

703+
@Override
704+
public @Nullable Expression visitQualifiedIdentifier(HCLParser.QualifiedIdentifierContext ctx) {
705+
if (ctx == null) {
706+
return null;
707+
}
708+
List<TerminalNode> identifiers = ctx.Identifier();
709+
if (identifiers.size() == 1) {
710+
return visitIdentifier(identifiers.get(0));
711+
}
712+
Expression expr = visitIdentifier(identifiers.get(0));
713+
for (int i = 1; i < identifiers.size(); i++) {
714+
expr = new Hcl.AttributeAccess(
715+
randomId(),
716+
expr.getPrefix(),
717+
Markers.EMPTY,
718+
expr.withPrefix(Space.EMPTY),
719+
new HclLeftPadded<>(
720+
sourceBefore("."),
721+
visitIdentifier(identifiers.get(i)),
722+
Markers.EMPTY
723+
)
724+
);
725+
}
726+
return expr;
727+
}
728+
703729
private String prefix(ParserRuleContext ctx) {
704730
return prefix(ctx.getStart());
705731
}

rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.interp

Lines changed: 2 additions & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)