summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2021-05-09 12:26:39 -0600
committermo khan <mo@mokhan.ca>2021-05-09 12:26:39 -0600
commit8e6945c1c3b54554bbaf56ce4b6c84fe6d7edcf1 (patch)
tree3aecad24655334d6dbc8c7ec14cfcaf3a5b41021 /lib
parentd15aad9f6ad69c4248a70b11a6534c1c841ec6f9 (diff)
feat: flush out terraform lockfile parser
Diffstat (limited to 'lib')
-rw-r--r--lib/spandx/terraform/parsers/lock_file.rb5
-rw-r--r--lib/spandx/terraform/parsers/parse_tree.rb54
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