class Solargraph::Shell
def config(directory = '.')
def config(directory = '.') File.open(File.join(directory, '.solargraph.yml'), 'w') do |file| file.puts "include:", " - ./**/*.rb", "exclude:", " - spec/**/*" end STDOUT.puts "Configuration file initialized." end
def prepare
def prepare cache_dir = File.join(Dir.home, '.solargraph', 'cache') version_dir = File.join(cache_dir, '2.0.0') unless File.exist?(version_dir) or options[:force] FileUtils.mkdir_p cache_dir puts 'Downloading 2.0.0...' Net::HTTP.start(options[:host]) do |http| resp = http.get("/2.0.0.tar.gz") open(File.join(cache_dir, '2.0.0.tar.gz'), "wb") do |file| file.write(resp.body) end puts 'Uncompressing archives...' FileUtils.rm_rf version_dir if File.exist?(version_dir) tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(File.join(cache_dir, '2.0.0.tar.gz'))) tar_extract.rewind tar_extract.each do |entry| if entry.directory? FileUtils.mkdir_p File.join(cache_dir, entry.full_name) else FileUtils.mkdir_p File.join(cache_dir, File.dirname(entry.full_name)) File.open(File.join(cache_dir, entry.full_name), 'wb') do |f| f << entry.read end end end tar_extract.close FileUtils.rm File.join(cache_dir, '2.0.0.tar.gz') puts 'Done.' end end end
def server
def server Solargraph::Server.set :port, options[:port] Solargraph::Server.set :views, options[:views] unless options[:views].nil? Solargraph::Server.set :public_folder, options[:files] unless options[:files].nil? Solargraph::Server.run! end
def suggest(*filenames)
def suggest(*filenames) # HACK: The ARGV array needs to be manipulated for ARGF.read to work ARGV.clear ARGV.concat filenames text = ARGF.read filename = options[:filename] || filenames[0] begin code_map = CodeMap.new(code: text, filename: filename) offset = code_map.get_offset(options[:line], options[:column]) sugg = code_map.suggest_at(offset, with_snippets: true, filtered: true) result = { "status" => "ok", "suggestions" => sugg }.to_json STDOUT.puts result rescue Exception => e STDERR.puts e STDERR.puts e.backtrace.join("\n") result = { "status" => "err", "message" => e.message + "\n" + e.backtrace.join("\n") }.to_json STDOUT.puts result end end