You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Sublime Text中Ruby正则表达式场景下语法高亮异常问题求助

Sublime Text中Ruby正则表达式场景下语法高亮异常问题求助

我在使用Sublime Text 3(版本3.2.2,Build 3211)自带的Ruby语法高亮时,遇到了正则表达式场景下的高亮异常问题,具体有两个明显的表现:

  • 第一个问题:正则表达式里的字符串插值会被当成注释(#)处理,从插值的位置开始,整行后续的语法高亮全部混乱
  • 第二个问题:在定义string_literal的那一行里,同时出现双引号和单引号的组合时,会从这一行开始一直到文件末尾的语法高亮全部失效,这个问题影响范围更大,情况更严重

附上问题的截图:
Ruby正则语法高亮异常截图

下面是出现问题的示例代码:

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

我一开始以为是自带语法高亮的问题,还尝试安装了专门修复Ruby语法高亮的相关插件,但问题依然存在。

有没有小伙伴遇到过同样的问题?如果有的话,麻烦分享一下解决方法,谢谢啦!

备注:内容来源于stack exchange,提问作者Victor Cordeiro Costa

火山引擎 最新活动