diff options
| author | mo khan <mo@mokhan.ca> | 2021-05-09 11:35:57 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2021-05-09 11:35:57 -0600 |
| commit | d15aad9f6ad69c4248a70b11a6534c1c841ec6f9 (patch) | |
| tree | 2f2be3d06fdc7c372a7cf912ebe4ca8bad4c9a77 /lib | |
| parent | 9ced66aea783429da573836e294ad9125949bd44 (diff) | |
feat: parse provider name from provider block
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/spandx/terraform/parsers/parse_tree.rb | 59 |
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 |
