Sha256: 2e72aa04ff4a4fd714e08452f2d92e3732829c3da27dd26fd063c46ff4a146dc

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

# typed: strict
# frozen_string_literal: true

module RubyLsp
  module DependencyDetector
    class << self
      extend T::Sig

      sig { returns(String) }
      def detected_formatter
        # NOTE: Intentionally no $ at end, since we want to match rubocop-shopify, etc.
        if direct_dependency?(/^rubocop/)
          "rubocop"
        elsif direct_dependency?(/^syntax_tree$/)
          "syntax_tree"
        else
          "none"
        end
      end

      sig { returns(String) }
      def detected_test_library
        # A Rails app may have a dependency on minitest, but we would instead want to use the Rails test runner provided
        # by ruby-lsp-rails.
        if direct_dependency?(/^rails$/)
          "rails"
        # NOTE: Intentionally ends with $ to avoid mis-matching minitest-reporters, etc. in a Rails app.
        elsif direct_dependency?(/^minitest$/)
          "minitest"
        elsif direct_dependency?(/^test-unit/)
          "test-unit"
        elsif direct_dependency?(/^rspec/)
          "rspec"
        else
          "unknown"
        end
      end

      sig { returns(T::Boolean) }
      def typechecker?
        direct_dependency?(/^sorbet/) || direct_dependency?(/^sorbet-static-and-runtime/)
      end

      sig { params(gem_pattern: Regexp).returns(T::Boolean) }
      def direct_dependency?(gem_pattern)
        Bundler.with_original_env { Bundler.default_gemfile } &&
          Bundler.locked_gems.dependencies.keys.grep(gem_pattern).any?
      rescue Bundler::GemfileNotFound
        false
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruby-lsp-0.8.1 lib/ruby_lsp/requests/support/dependency_detector.rb