зеркало из https://github.com/github/ruby.git
105 строки
2.0 KiB
Ruby
105 строки
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "bundler/setup"
|
|
require "syntax_suggest/api"
|
|
|
|
require "benchmark"
|
|
require "tempfile"
|
|
|
|
RSpec.configure do |config|
|
|
# Enable flags like --only-failures and --next-failure
|
|
config.example_status_persistence_file_path = ".rspec_status"
|
|
|
|
# Disable RSpec exposing methods globally on `Module` and `main`
|
|
config.disable_monkey_patching!
|
|
|
|
config.expect_with :rspec do |c|
|
|
c.syntax = :expect
|
|
end
|
|
|
|
if config.color_mode == :automatic
|
|
if config.color_enabled? && ((ENV["TERM"] == "dumb") || ENV["NO_COLOR"]&.slice(0))
|
|
config.color_mode = :off
|
|
end
|
|
end
|
|
end
|
|
|
|
# Used for debugging modifications to
|
|
# display output
|
|
def debug_display(output)
|
|
return unless ENV["DEBUG_DISPLAY"]
|
|
puts
|
|
puts output
|
|
puts
|
|
end
|
|
|
|
def spec_dir
|
|
Pathname(__dir__)
|
|
end
|
|
|
|
def lib_dir
|
|
if ruby_core?
|
|
root_dir.join("../lib")
|
|
else
|
|
root_dir.join("lib")
|
|
end
|
|
end
|
|
|
|
def root_dir
|
|
spec_dir.join("..")
|
|
end
|
|
|
|
def fixtures_dir
|
|
spec_dir.join("fixtures")
|
|
end
|
|
|
|
def ruby_core?
|
|
!root_dir.join("syntax_suggest.gemspec").exist?
|
|
end
|
|
|
|
def code_line_array(source)
|
|
SyntaxSuggest::CleanDocument.new(source: source).call.lines
|
|
end
|
|
|
|
autoload :RubyProf, "ruby-prof"
|
|
|
|
def debug_perf
|
|
raise "No block given" unless block_given?
|
|
|
|
if ENV["DEBUG_PERF"]
|
|
out = nil
|
|
result = RubyProf.profile do
|
|
out = yield
|
|
end
|
|
|
|
dir = SyntaxSuggest.record_dir("tmp")
|
|
printer = RubyProf::MultiPrinter.new(result, [:flat, :graph, :graph_html, :tree, :call_tree, :stack, :dot])
|
|
printer.print(path: dir, profile: "profile")
|
|
|
|
out
|
|
else
|
|
yield
|
|
end
|
|
end
|
|
|
|
def run!(cmd, raise_on_nonzero_exit: true)
|
|
out = `#{cmd} 2>&1`
|
|
raise "Command: #{cmd} failed: #{out}" if !$?.success? && raise_on_nonzero_exit
|
|
out
|
|
end
|
|
|
|
# Allows us to write cleaner tests since <<~EOM block quotes
|
|
# strip off all leading indentation and we need it to be preserved
|
|
# sometimes.
|
|
class String
|
|
def indent(number)
|
|
lines.map do |line|
|
|
if line.chomp.empty?
|
|
line
|
|
else
|
|
" " * number + line
|
|
end
|
|
end.join
|
|
end
|
|
end
|