使用正则表达式时,ruby 语法高亮无法正常工作。
- 这是 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 (Version 3.2.2, Build 3211) 内置 ruby 语法高亮中发生的。我尝试安装 ruby 语法高亮特定软件包来修复此问题,例如Sublime Better Ruby,但没有成功。
有人遇到同样的问题吗?如果有,您是如何解决的?谢谢!