This is an automated email from the ASF dual-hosted git repository. lkishalmi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push: new 8c75f2df42 HCL added Scoped Function name support (Terraform 1.8) 8c75f2df42 is described below commit 8c75f2df4215223866aceb88fe9981c5c2ac8e81 Author: Laszlo Kishalmi <laszlo.kisha...@gmail.com> AuthorDate: Sun Apr 14 19:50:16 2024 -0700 HCL added Scoped Function name support (Terraform 1.8) --- .../netbeans/modules/languages/hcl/HCLTokenId.java | 1 + .../modules/languages/hcl/ast/HCLElementFactory.java | 8 ++++++++ .../languages/hcl/ast/HCLExpressionFactory.java | 19 +++++++++++++------ .../modules/languages/hcl/ast/HCLIdentifier.java | 2 ++ .../languages/hcl/grammar/g4/HCLExpressionParser.g4 | 10 ++++++++-- .../modules/languages/hcl/grammar/g4/HCLLexer.g4 | 9 +++++++-- 6 files changed, 39 insertions(+), 10 deletions(-) diff --git a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/HCLTokenId.java b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/HCLTokenId.java index f214a20c06..afd23ae588 100644 --- a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/HCLTokenId.java +++ b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/HCLTokenId.java @@ -56,6 +56,7 @@ public enum HCLTokenId implements TokenId { INTERPOLATION_START("${", "separator"), INTERPOLATION_END("}", "separator"), RARROW("=>", "separator"), + SCOPE("::", "separator"), TEMPLATE_START("%{", "separator"), TEMPLATE_END("}", "separator"), diff --git a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLElementFactory.java b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLElementFactory.java index 3b84857a1f..03058ff880 100644 --- a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLElementFactory.java +++ b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLElementFactory.java @@ -23,6 +23,7 @@ import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.TerminalNode; import org.netbeans.modules.languages.hcl.grammar.HCLLexer; +import org.netbeans.modules.languages.hcl.grammar.HCLParser; /** * @@ -41,6 +42,13 @@ public sealed abstract class HCLElementFactory permits HCLBlockFactory, HCLExpre return tn != null ? id(tn.getSymbol()) : null; } + protected final HCLIdentifier id(HCLParser.ScopedIdContext ctx) { + HCLIdentifier parent = ctx.target != null + ? id(ctx.target) + : id(ctx.scopedId()); + return created(new HCLIdentifier.ScopedId(parent, ctx.ref.getText()), ctx); + } + protected final HCLIdentifier id(Token t) { return (t != null) && (t.getType() == HCLLexer.IDENTIFIER) ? created(new HCLIdentifier.SimpleId(t.getText()), t) : null; } diff --git a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLExpressionFactory.java b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLExpressionFactory.java index 455ae4806b..cca7c87026 100644 --- a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLExpressionFactory.java +++ b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLExpressionFactory.java @@ -27,6 +27,7 @@ import java.util.function.Consumer; import org.antlr.v4.runtime.NoViableAltException; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.runtime.tree.TerminalNode; import org.netbeans.modules.languages.hcl.grammar.HCLLexer; import static org.netbeans.modules.languages.hcl.grammar.HCLLexer.*; import org.netbeans.modules.languages.hcl.grammar.HCLParser; @@ -175,16 +176,22 @@ public final class HCLExpressionFactory extends HCLElementFactory { if (ctx == null) { return null; } - List<HCLExpression> args = Collections.emptyList(); + if (ctx.exception != null) { + return null; + } + List<HCLExpression> args = List.of(); boolean expand = false; if (ctx.arguments() != null) { - args = new ArrayList<>(ctx.arguments().expression().size()); - for (HCLParser.ExpressionContext ectx : ctx.arguments().expression()) { - args.add(expr(ectx)); - } + args = ctx.arguments().expression().stream() + .map(this::expr) + .toList(); expand = ctx.arguments().ELLIPSIS() != null; } - return created(new HCLFunction(id(ctx.IDENTIFIER()), args, expand), ctx); + HCLIdentifier name = ctx.IDENTIFIER() != null + ? id(ctx.IDENTIFIER()) + : id(ctx.scopedId()); + + return created(new HCLFunction(name, args, expand), ctx); } private static HCLArithmeticOperation.Operator binOp(int tokenType) { diff --git a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLIdentifier.java b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLIdentifier.java index 1dd48e8ad5..ad25ab30e0 100644 --- a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLIdentifier.java +++ b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/ast/HCLIdentifier.java @@ -36,4 +36,6 @@ public sealed interface HCLIdentifier extends HCLElement { public record SimpleId(String id) implements HCLIdentifier {} public record StringId(String id) implements HCLIdentifier {} + + public record ScopedId(HCLIdentifier parent, String id) implements HCLIdentifier {} } diff --git a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/grammar/g4/HCLExpressionParser.g4 b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/grammar/g4/HCLExpressionParser.g4 index aa5bd8e6f1..4297ffd4c0 100644 --- a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/grammar/g4/HCLExpressionParser.g4 +++ b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/grammar/g4/HCLExpressionParser.g4 @@ -128,13 +128,19 @@ heredoc : HEREDOC_START heredocTemplate HEREDOC_END ; +// This is not part of the HCL spec, though used in Terraform 1.8 for function calls +scopedId + : target=IDENTIFIER SCOPE ref=IDENTIFIER + | scopedId SCOPE ref=IDENTIFIER + ; + variableExpr : IDENTIFIER ; functionCall - : IDENTIFIER LPAREN arguments RPAREN - | IDENTIFIER LPAREN RPAREN + : (IDENTIFIER|scopedId) LPAREN arguments RPAREN + | (IDENTIFIER|scopedId) LPAREN RPAREN ; arguments diff --git a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/grammar/g4/HCLLexer.g4 b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/grammar/g4/HCLLexer.g4 index dad41f9550..b5a70f0f65 100644 --- a/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/grammar/g4/HCLLexer.g4 +++ b/ide/languages.hcl/src/org/netbeans/modules/languages/hcl/grammar/g4/HCLLexer.g4 @@ -86,6 +86,11 @@ QUESTION : Question ; +// Used from Terraform 1.8 in provider exported function names +SCOPE + : Colon Colon + ; + COLON : Colon ; @@ -123,8 +128,8 @@ ELLIPSIS ; LEGACY_INDEX - : Dot DecDigit+ - ; + : Dot DecDigit+ + ; DOT : Dot --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists