module TypeProf::LSP - typeprof: Ruby Standard Library Documentation

# module TypeProf::LSP

### Public Class Methods

load_json_with_comments(path, **opts) click to toggle source

    # File typeprof-0.30.1/lib/typeprof/lsp/util.rb, line 2
    def self.load_json_with_comments(path, **opts)
      json = File.read(path)

      state = :normal
      last_comma_index = nil
      trailing_commas = []
      json = json.gsub(%r(\\.|//|/\*|\*/|[",\n/}\]*]|(\s+)|[^\s\\"*/,]+)) do
        case $&
        when "//"
          state = :single_line_comment if state == :normal
        when "\n"
          state = :normal if state == :single_line_comment
          next "\n"
        when "/*"
          state = :multi_line_comment if state == :normal
        when "*/"
          state = :normal if state == :multi_line_comment
          next "  " if state == :normal
        when "\""
          case state
          when :normal
            last_comma_index = nil
            state = :string_literal
          when :string_literal
            state = :normal
          end
        when ","
          last_comma_index = $~.begin(0) if state == :normal
        when "}", "]"
          if state == :normal && last_comma_index
            trailing_commas << last_comma_index
            last_comma_index = nil
          end
        when $1
        else
          last_comma_index = nil if state == :normal
        end
        if state == :normal || state == :string_literal
          $&
        else
          " " * $&.size
        end
      end
      trailing_commas.each do |i|
        json[i] = " "
      end

      JSON.parse(json, **opts)
    end