summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2021-05-09 11:35:57 -0600
committermo khan <mo@mokhan.ca>2021-05-09 11:35:57 -0600
commitd15aad9f6ad69c4248a70b11a6534c1c841ec6f9 (patch)
tree2f2be3d06fdc7c372a7cf912ebe4ca8bad4c9a77 /lib
parent9ced66aea783429da573836e294ad9125949bd44 (diff)
feat: parse provider name from provider block
Diffstat (limited to 'lib')
-rw-r--r--lib/spandx/terraform/parsers/parse_tree.rb59
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/spandx/terraform/parsers/parse_tree.rb b/lib/spandx/terraform/parsers/parse_tree.rb
new file mode 100644
index 0000000..646baa5
--- /dev/null
+++ b/lib/spandx/terraform/parsers/parse_tree.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+
+module Spandx
+ module Terraform
+ module Parsers
+ class ParseTree < Parslet::Parser
+ rule :crlf do
+ match('[\r\n]')
+ end
+
+ rule :eol do
+ whitespace? >> crlf.repeat(1)
+ end
+
+ rule :whitespace? do
+ whitespace.maybe
+ end
+
+ rule :whitespace do
+ match('[ ]').repeat
+ end
+
+ rule :anything do
+ match('.').repeat
+ end
+
+ rule :attribute_name do
+ match('[a-z]').repeat
+ end
+
+ rule :assignment do
+ whitespace? >> attribute_name >> whitespace >> str('=') >> whitespace >> str("=") >> whitespace >> match('[0-9A-Za-z.~> ]') >> str('"') >> eol
+ end
+
+ rule :assignments do
+ assignment.repeat
+ end
+
+ rule :block do
+ whitespace >> str("{") >> eol >> assignments >> str("}") >> eol
+ end
+
+ rule :identifier do
+ whitespace >> str('"') >> match('[a-zA-Z./]').repeat.as(:name) >> str('"') >> whitespace
+ end
+
+ rule :provider do
+ (str("provider") >> identifier >> block).as(:provider)
+ end
+
+ rule :providers do
+ provider.repeat
+ end
+
+ root(:providers)
+ end
+ end
+ end
+end