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