Module: PuppetLanguageServer::CrashDump

Defined in:
lib/puppet-languageserver/crash_dump.rb

Class Method Summary collapse

Class Method Details

.default_crash_fileObject



5
6
7
# File 'lib/puppet-languageserver/crash_dump.rb', line 5

def self.default_crash_file
  File.join(Dir.tmpdir, 'puppet_language_server_crash.txt')
end

.write_crash_file(err, session_state, filename = nil, additional = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/puppet-languageserver/crash_dump.rb', line 9

def self.write_crash_file(err, session_state, filename = nil, additional = {})
  # Create the crash text

  puppet_version         = Puppet.version rescue 'Unknown' # rubocop:disable Style/RescueModifier
  facter_version         = Facter.version rescue 'Unknown' # rubocop:disable Style/RescueModifier
  languageserver_version = PuppetLanguageServer.version rescue 'Unknown' # rubocop:disable Style/RescueModifier

  crashtext = <<~TEXT
    Puppet Language Server Crash File
    -=--=--=--=--=--=--=--=--=--=--=-
    #{DateTime.now.strftime('%a %b %e %Y %H:%M:%S %Z')}
    Puppet Version #{puppet_version}
    Facter Version #{facter_version}
    Ruby Version #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}
    Language Server Version #{languageserver_version}

    Error: #{err}

    Backtrace
    ---------
    #{err.backtrace.join("\n")}

  TEXT
  # Append the documents in the cache
  session_state.documents.document_uris.each do |uri|
    crashtext += "Document - #{uri}\n---\n#{session_state.documents.document_content(uri)}\n\n"
  end
  # Append additional objects from the crash
  additional.each do |k, v|
    crashtext += "#{k}\n---\n#{v}\n\n"
  end

  crash_file = filename.nil? ? default_crash_file : filename
  File.binwrite(crash_file, crashtext)
rescue # rubocop:disable Style/RescueStandardError
  # Swallow all errors.  Errors in the error handler should not
  # terminate the application
end