diff options
| author | mo khan <mo@mokhan.ca> | 2021-05-09 12:26:39 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2021-05-09 12:26:39 -0600 |
| commit | 8e6945c1c3b54554bbaf56ce4b6c84fe6d7edcf1 (patch) | |
| tree | 3aecad24655334d6dbc8c7ec14cfcaf3a5b41021 /lib | |
| parent | d15aad9f6ad69c4248a70b11a6534c1c841ec6f9 (diff) | |
feat: flush out terraform lockfile parser
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/spandx/terraform/parsers/lock_file.rb | 5 | ||||
| -rw-r--r-- | lib/spandx/terraform/parsers/parse_tree.rb | 54 |
2 files changed, 37 insertions, 22 deletions
diff --git a/lib/spandx/terraform/parsers/lock_file.rb b/lib/spandx/terraform/parsers/lock_file.rb index 0e04f39..ee6dcea 100644 --- a/lib/spandx/terraform/parsers/lock_file.rb +++ b/lib/spandx/terraform/parsers/lock_file.rb @@ -4,10 +4,9 @@ module Spandx module Terraform module Parsers class LockFile - def initialize - end + def initialize; end - def parse(path) + def parse(_path) [] end end diff --git a/lib/spandx/terraform/parsers/parse_tree.rb b/lib/spandx/terraform/parsers/parse_tree.rb index 646baa5..ec21c9b 100644 --- a/lib/spandx/terraform/parsers/parse_tree.rb +++ b/lib/spandx/terraform/parsers/parse_tree.rb @@ -4,48 +4,64 @@ module Spandx module Terraform module Parsers class ParseTree < Parslet::Parser - rule :crlf do - match('[\r\n]') - end + rule(:anything) { match('.').repeat } + rule(:alpha) { match['a-zA-Z'] } + rule(:assign) { str('=') } + rule(:crlf) { match('[\r\n]') } + rule(:digit) { match('\d') } + rule(:dot) { str('.') } + rule(:eol) { whitespace? >> crlf.repeat } + rule(:lcurly) { str('{') } + rule(:number) { digit.repeat } + rule(:quote) { str('"') } + rule(:rcurly) { str('}') } + rule(:space) { match('\s') } + rule(:pre_release) { hyphen >> (alpha | digit).repeat } + rule(:pre_release?) { pre_release.maybe } + rule(:version) { number >> dot >> number >> dot >> number >> pre_release? } + rule(:whitespace) { space.repeat } + rule(:whitespace?) { whitespace.maybe } + rule(:hyphen) { str('-') } - rule :eol do - whitespace? >> crlf.repeat(1) + rule :attribute_name do + alpha.repeat end - rule :whitespace? do - whitespace.maybe + rule :assignment do + whitespace? >> attribute_name >> whitespace >> assign >> whitespace >> assign >> whitespace >> match('[0-9A-Za-z.~> ]') >> quote >> eol end - rule :whitespace do - match('[ ]').repeat + rule :value do + match('[0-9A-Za-z.~> ]') end - rule :anything do - match('.').repeat + rule :version_assignment do + whitespace? >> str('version') >> whitespace >> assign >> whitespace >> quote >> version.as(:version) >> quote end - rule :attribute_name do - match('[a-z]').repeat + rule :constraints do + anything end - rule :assignment do - whitespace? >> attribute_name >> whitespace >> str('=') >> whitespace >> str("=") >> whitespace >> match('[0-9A-Za-z.~> ]') >> str('"') >> eol + rule :hashes do + anything end rule :assignments do - assignment.repeat + # (version_assignment | constraints | hashes).repeat + version_assignment >> eol end rule :block do - whitespace >> str("{") >> eol >> assignments >> str("}") >> eol + whitespace >> lcurly >> eol >> assignments >> rcurly >> eol end rule :identifier do - whitespace >> str('"') >> match('[a-zA-Z./]').repeat.as(:name) >> str('"') >> whitespace + whitespace >> quote >> match('[a-zA-Z./]').repeat.as(:name) >> quote >> whitespace end rule :provider do - (str("provider") >> identifier >> block).as(:provider) + (str('provider') >> identifier >> block).as(:provider) end rule :providers do |
