使用正则表达式时,Ruby 语法突出显示无法正常工作。
这里似乎发生了多个问题。
#
),并弄乱了从该行的该点开始的整个语法突出显示。"
行中 '
和 string_literal
的组合从该点开始一直到文件末尾都很混乱。哪个更严重。class Tokenizer
def initialize(expression)
@expression = expression
end
TOKEN_REGEX = /
(?<whitespace>\s+) |
(?<parenthesis>[\(\)]) |
(?<comparison_operator>#{ComparisonNode::OPERATORS.map { |op| Regexp.escape(op) }.join('|')}) |
(?<logical_operator>\b(?:#{LogicalNode::OPERATORS.join('|')})\b) |
(?<boolean_literal>\b(?:#{ValueNode::BOOLEAN_LITERALS.join('|')})\b) |
(?<number_literal>\d+) |
(?<string_literal>"[^"]*"|'[^']*') |
(?<identifier>[a-z_][a-z0-9_\.]*) |
(?<unknown>.)
/ix.freeze
def tokenize
tokens = []
@expression.scan(TOKEN_REGEX) do
match_data = Regexp.last_match
if match_data[:whitespace]
next
elsif match_data[:parenthesis]
tokens << Token.new(:parenthesis, match_data[0])
elsif match_data[:comparison_operator]
tokens << Token.new(ComparisonNode::TYPE, match_data[0])
elsif match_data[:logical_operator]
tokens << Token.new(LogicalNode::TYPE, match_data[0].upcase)
elsif match_data[:boolean_literal]
tokens << Token.new(:literal, match_data[0].downcase)
elsif match_data[:number_literal]
tokens << Token.new(:literal, match_data[0])
elsif match_data[:string_literal]
value = match_data[0][1...-1] # Remove surrounding quotes
tokens << Token.new(:literal, value)
elsif match_data[:identifier]
tokens << Token.new(FieldNode::TYPE, match_data[0])
else
raise "Unexpected character: #{match_data[0]}"
end
end
tokens
end
end
最初,这种情况发生在 Sublime Text 3(版本 3.2.2,Build 3211)的内置 ruby 语法高亮中。我尝试安装 ruby 语法突出显示尝试解决此问题的特定软件包,例如 Sublime Better Ruby,但没有成功。
有人有同样的问题吗?如果是这样,你是如何解决的? 谢谢!
Sublime text Ruby 语法期望多行正则表达式使用
%r
语法。
仅当前导正斜杠和尾随正斜杠位于同一行时,使用
/ /
才能正确工作。
知道这一点,您可以将代码更改为:
TOKEN_REGEX = %r{
(?<whitespace>\s+) |
(?<parenthesis>[\(\)]) |
(?<comparison_operator>#{ComparisonNode::OPERATORS.map { |op| Regexp.escape(op) }.join('|')}) |
(?<logical_operator>\b(?:#{LogicalNode::OPERATORS.join('|')})\b) |
(?<boolean_literal>\b(?:#{ValueNode::BOOLEAN_LITERALS.join('|')})\b) |
(?<number_literal>\d+) |
(?<string_literal>"[^"]*"|'[^']*') |
(?<identifier>[a-z_][a-z0-9_\.]*) |
(?<unknown>.)
}ix.freeze
语法突出显示按预期工作