class RubyLsp::Tapioca::LockfileDiffParser

def extract_gem(line)

def extract_gem(line)
  line.match(DIFF_LINE_PATTERN)[1].strip
end

def initialize(diff_content, direct_dependencies: nil)

def initialize(diff_content, direct_dependencies: nil)
  @diff_content = diff_content.lines
  @current_dependencies = direct_dependencies ||
    Bundler::LockfileParser.new(Bundler.default_lockfile.read).dependencies.keys
  @added_or_modified_gems = parse_added_or_modified_gems
  @removed_gems = parse_removed_gems
end

def parse_added_or_modified_gems

def parse_added_or_modified_gems
  @diff_content
    .filter_map { |line| extract_gem(line) if line.match?(ADDED_LINE_PATTERN) }
    .uniq
end

def parse_removed_gems

def parse_removed_gems
  @diff_content.filter_map do |line|
    next unless line.match?(REMOVED_LINE_PATTERN)
    gem = extract_gem(line)
    next if @current_dependencies.include?(gem)
    gem
  end.uniq
end