lib/rouge/lexers/rego.rb in rouge-3.20.0 vs lib/rouge/lexers/rego.rb in rouge-3.21.0

- old
+ new

@@ -7,39 +7,54 @@ title "Rego" desc "The Rego open-policy-agent (OPA) policy language (openpolicyagent.org)" tag 'rego' filenames '*.rego' + def self.constants + @constants ||= Set.new %w( + true false null + ) + end + + def self.operators + @operators ||= Set.new %w( + as default else import not package some with + ) + end + state :basic do rule %r/\s+/, Text rule %r/#.*/, Comment::Single - + rule %r/[\[\](){}|.,;!]/, Punctuation - + rule %r/"[^"]*"/, Str::Double - + rule %r/-?\d+\.\d+([eE][+-]?\d+)?/, Num::Float rule %r/-?\d+([eE][+-]?\d+)?/, Num rule %r/\\u[0-9a-fA-F]{4}/, Num::Hex rule %r/\\["\/bfnrt]/, Str::Escape end - - state :atoms do - rule %r/(true|false|null)/, Keyword::Constant - rule %r/[[:word:]]*/, Str::Symbol - end - + state :operators do rule %r/(=|!=|>=|<=|>|<|\+|-|\*|%|\/|\||&|:=)/, Operator - rule %r/(default|not|package|import|as|with|else|some)/, Operator rule %r/[\/:?@^~]+/, Operator end - + state :root do mixin :basic mixin :operators - mixin :atoms + + rule %r/[[:word:]]+/ do |m| + if self.class.constants.include? m[0] + token Keyword::Constant + elsif self.class.operators.include? m[0] + token Operator::Word + else + token Name + end + end end end end end