puppet-editor-services 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +510 -0
  3. data/CODEOWNERS +2 -0
  4. data/CODE_OF_CONDUCT.md +46 -0
  5. data/CONTRIBUTING.md +54 -0
  6. data/Gemfile +53 -0
  7. data/LICENSE +201 -0
  8. data/README.md +308 -0
  9. data/Rakefile +185 -0
  10. data/bin/puppet-debugserver +8 -0
  11. data/bin/puppet-languageserver +7 -0
  12. data/bin/puppet-languageserver-sidecar +7 -0
  13. data/lib/dsp/dsp.rb +7 -0
  14. data/lib/dsp/dsp_base.rb +62 -0
  15. data/lib/dsp/dsp_protocol.rb +4619 -0
  16. data/lib/lsp/lsp.rb +10 -0
  17. data/lib/lsp/lsp_base.rb +63 -0
  18. data/lib/lsp/lsp_custom.rb +170 -0
  19. data/lib/lsp/lsp_enums.rb +143 -0
  20. data/lib/lsp/lsp_protocol.rb +2785 -0
  21. data/lib/lsp/lsp_protocol_callhierarchy.proposed.rb +239 -0
  22. data/lib/lsp/lsp_protocol_colorprovider.rb +100 -0
  23. data/lib/lsp/lsp_protocol_configuration.rb +82 -0
  24. data/lib/lsp/lsp_protocol_declaration.rb +73 -0
  25. data/lib/lsp/lsp_protocol_foldingrange.rb +129 -0
  26. data/lib/lsp/lsp_protocol_implementation.rb +75 -0
  27. data/lib/lsp/lsp_protocol_progress.rb +200 -0
  28. data/lib/lsp/lsp_protocol_selectionrange.rb +79 -0
  29. data/lib/lsp/lsp_protocol_sematictokens.proposed.rb +340 -0
  30. data/lib/lsp/lsp_protocol_typedefinition.rb +75 -0
  31. data/lib/lsp/lsp_protocol_workspacefolders.rb +174 -0
  32. data/lib/lsp/lsp_types.rb +1534 -0
  33. data/lib/puppet-debugserver/debug_session/break_points.rb +137 -0
  34. data/lib/puppet-debugserver/debug_session/flow_control.rb +161 -0
  35. data/lib/puppet-debugserver/debug_session/hook_handlers.rb +295 -0
  36. data/lib/puppet-debugserver/debug_session/puppet_session_run_mode.rb +66 -0
  37. data/lib/puppet-debugserver/debug_session/puppet_session_state.rb +122 -0
  38. data/lib/puppet-debugserver/hooks.rb +132 -0
  39. data/lib/puppet-debugserver/message_handler.rb +277 -0
  40. data/lib/puppet-debugserver/puppet_debug_session.rb +541 -0
  41. data/lib/puppet-debugserver/puppet_monkey_patches.rb +118 -0
  42. data/lib/puppet-languageserver/client_session_state.rb +119 -0
  43. data/lib/puppet-languageserver/crash_dump.rb +50 -0
  44. data/lib/puppet-languageserver/epp/validation_provider.rb +34 -0
  45. data/lib/puppet-languageserver/facter_helper.rb +25 -0
  46. data/lib/puppet-languageserver/global_queues/sidecar_queue.rb +205 -0
  47. data/lib/puppet-languageserver/global_queues/single_instance_queue.rb +126 -0
  48. data/lib/puppet-languageserver/global_queues/validation_queue.rb +102 -0
  49. data/lib/puppet-languageserver/global_queues.rb +16 -0
  50. data/lib/puppet-languageserver/manifest/completion_provider.rb +331 -0
  51. data/lib/puppet-languageserver/manifest/definition_provider.rb +99 -0
  52. data/lib/puppet-languageserver/manifest/document_symbol_provider.rb +228 -0
  53. data/lib/puppet-languageserver/manifest/folding_provider.rb +226 -0
  54. data/lib/puppet-languageserver/manifest/format_on_type_provider.rb +143 -0
  55. data/lib/puppet-languageserver/manifest/hover_provider.rb +221 -0
  56. data/lib/puppet-languageserver/manifest/signature_provider.rb +169 -0
  57. data/lib/puppet-languageserver/manifest/validation_provider.rb +127 -0
  58. data/lib/puppet-languageserver/message_handler.rb +462 -0
  59. data/lib/puppet-languageserver/providers.rb +18 -0
  60. data/lib/puppet-languageserver/puppet_helper.rb +108 -0
  61. data/lib/puppet-languageserver/puppet_lexer_helper.rb +55 -0
  62. data/lib/puppet-languageserver/puppet_monkey_patches.rb +39 -0
  63. data/lib/puppet-languageserver/puppet_parser_helper.rb +212 -0
  64. data/lib/puppet-languageserver/puppetfile/validation_provider.rb +185 -0
  65. data/lib/puppet-languageserver/server_capabilities.rb +48 -0
  66. data/lib/puppet-languageserver/session_state/document_store.rb +272 -0
  67. data/lib/puppet-languageserver/session_state/language_client.rb +239 -0
  68. data/lib/puppet-languageserver/session_state/object_cache.rb +162 -0
  69. data/lib/puppet-languageserver/sidecar_protocol.rb +532 -0
  70. data/lib/puppet-languageserver/uri_helper.rb +46 -0
  71. data/lib/puppet-languageserver-sidecar/cache/base.rb +36 -0
  72. data/lib/puppet-languageserver-sidecar/cache/filesystem.rb +111 -0
  73. data/lib/puppet-languageserver-sidecar/cache/null.rb +27 -0
  74. data/lib/puppet-languageserver-sidecar/facter_helper.rb +41 -0
  75. data/lib/puppet-languageserver-sidecar/puppet_environment_monkey_patches.rb +52 -0
  76. data/lib/puppet-languageserver-sidecar/puppet_helper.rb +281 -0
  77. data/lib/puppet-languageserver-sidecar/puppet_modulepath_monkey_patches.rb +146 -0
  78. data/lib/puppet-languageserver-sidecar/puppet_monkey_patches.rb +9 -0
  79. data/lib/puppet-languageserver-sidecar/puppet_parser_helper.rb +77 -0
  80. data/lib/puppet-languageserver-sidecar/puppet_strings_helper.rb +399 -0
  81. data/lib/puppet-languageserver-sidecar/puppet_strings_monkey_patches.rb +16 -0
  82. data/lib/puppet-languageserver-sidecar/sidecar_protocol_extensions.rb +16 -0
  83. data/lib/puppet-languageserver-sidecar/workspace.rb +89 -0
  84. data/lib/puppet_debugserver.rb +164 -0
  85. data/lib/puppet_editor_services/connection/base.rb +62 -0
  86. data/lib/puppet_editor_services/connection/stdio.rb +25 -0
  87. data/lib/puppet_editor_services/connection/tcp.rb +34 -0
  88. data/lib/puppet_editor_services/handler/base.rb +16 -0
  89. data/lib/puppet_editor_services/handler/debug_adapter.rb +63 -0
  90. data/lib/puppet_editor_services/handler/json_rpc.rb +133 -0
  91. data/lib/puppet_editor_services/logging.rb +45 -0
  92. data/lib/puppet_editor_services/protocol/base.rb +27 -0
  93. data/lib/puppet_editor_services/protocol/debug_adapter.rb +135 -0
  94. data/lib/puppet_editor_services/protocol/debug_adapter_messages.rb +171 -0
  95. data/lib/puppet_editor_services/protocol/json_rpc.rb +241 -0
  96. data/lib/puppet_editor_services/protocol/json_rpc_messages.rb +200 -0
  97. data/lib/puppet_editor_services/server/base.rb +42 -0
  98. data/lib/puppet_editor_services/server/stdio.rb +85 -0
  99. data/lib/puppet_editor_services/server/tcp.rb +349 -0
  100. data/lib/puppet_editor_services/server.rb +15 -0
  101. data/lib/puppet_editor_services/version.rb +36 -0
  102. data/lib/puppet_editor_services.rb +8 -0
  103. data/lib/puppet_languageserver.rb +263 -0
  104. data/lib/puppet_languageserver_sidecar.rb +361 -0
  105. data/puppet-debugserver +11 -0
  106. data/puppet-editor-services.gemspec +29 -0
  107. data/puppet-languageserver +15 -0
  108. data/puppet-languageserver-sidecar +14 -0
  109. metadata +240 -0
data/Rakefile ADDED
@@ -0,0 +1,185 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ rubocop_available = Gem::Specification::find_all_by_name('rubocop').any?
4
+ require 'rubocop/rake_task' if rubocop_available
5
+
6
+ namespace :test do
7
+ desc 'Run tests with code coverage'
8
+ task :coverage do
9
+ ENV['COVERAGE'] = 'yes'
10
+ Rake::Task['test_languageserver'].execute
11
+ Rake::Task['test_languageserver_sidecar'].execute
12
+ Rake::Task['test_debugserver'].execute
13
+ end
14
+ end
15
+
16
+ desc 'Run rspec tests for the Language Server with coloring.'
17
+ RSpec::Core::RakeTask.new(:test_languageserver) do |t|
18
+ t.rspec_opts = %w[--color --format documentation --default-path spec/languageserver]
19
+ t.pattern = ['spec/languageserver/unit/**/*_spec.rb', 'spec/languageserver/integration/**/*_spec.rb']
20
+ end
21
+
22
+ desc 'Run acceptance tests for the Language Server with coloring.'
23
+ RSpec::Core::RakeTask.new(:acceptance_languageserver) do |t|
24
+ t.rspec_opts = %w[--color --format documentation --default-path spec/languageserver]
25
+ t.pattern = ['spec/languageserver/acceptance/**/*_spec.rb']
26
+ end
27
+
28
+ desc 'Run rspec tests for the Language Server Sidecar with coloring.'
29
+ RSpec::Core::RakeTask.new(:test_languageserver_sidecar) do |t|
30
+ t.rspec_opts = %w[--color --format documentation --default-path spec/languageserver-sidecar]
31
+ t.pattern = 'spec/languageserver-sidecar'
32
+ end
33
+
34
+ desc 'Run rspec tests for the Debug Server with coloring.'
35
+ RSpec::Core::RakeTask.new(:test_debugserver) do |t|
36
+ t.rspec_opts = %w[--color --format documentation --default-path spec/debugserver]
37
+ t.pattern = 'spec/debugserver'
38
+ end
39
+
40
+ if rubocop_available
41
+ desc 'Run RuboCop'
42
+ RuboCop::RakeTask.new(:rubocop) do |task|
43
+ task.options << '--display-cop-names'
44
+ task.options << '--config'
45
+ task.options << '.rubocop.yml'
46
+ end
47
+ end
48
+
49
+ namespace :rubocop do
50
+ desc "Generate the Rubocop Todo file"
51
+ task :generate do
52
+ begin
53
+ sh "rubocop --auto-gen-config"
54
+ rescue => exception
55
+ # Ignore any errors
56
+ end
57
+ end
58
+ end
59
+
60
+ desc "Download and vendor required gems"
61
+ task :gem_revendor do
62
+ require 'fileutils'
63
+
64
+ gem_list = [
65
+ {
66
+ :directory => 'puppet-lint',
67
+ :github_repo => 'https://github.com/puppetlabs/puppet-lint.git',
68
+ :github_ref => 'v4.2.4',
69
+ },
70
+ {
71
+ :directory => 'hiera-eyaml',
72
+ :github_repo => 'https://github.com/voxpupuli/hiera-eyaml',
73
+ :github_ref => 'v2.1.0',
74
+ },
75
+ {
76
+ :directory => 'puppetfile-resolver',
77
+ :github_repo => 'https://github.com/puppetlabs/puppetfile-resolver.git',
78
+ :github_ref => 'v0.6.3',
79
+ },
80
+ {
81
+ :directory => 'molinillo',
82
+ :github_repo => 'https://github.com/CocoaPods/Molinillo.git',
83
+ :github_ref => '0.6.6',
84
+ },
85
+ {
86
+ :directory => 'puppet-strings',
87
+ :github_repo => 'https://github.com/puppetlabs/puppet-strings.git',
88
+ :github_ref => 'v4.1.2',
89
+ },
90
+ {
91
+ :directory => 'yard',
92
+ :github_repo => 'https://github.com/lsegal/yard.git',
93
+ :github_ref => 'v0.9.24',
94
+ },
95
+ ]
96
+
97
+ # Clean out the vendor directory first
98
+ puts "Clearing the vendor directory..."
99
+ vendor_dir = File.join(File.dirname(__FILE__),'vendor')
100
+ gem_list.each do |vendor|
101
+ gem_dir = File.join(vendor_dir,vendor[:directory])
102
+ FileUtils.rm_rf(gem_dir) if Dir.exist?(gem_dir)
103
+ end
104
+ Dir.mkdir(vendor_dir) unless Dir.exist?(vendor_dir)
105
+
106
+ gem_list.each do |vendor|
107
+ puts "Vendoring #{vendor[:directory]}..."
108
+ gem_dir = File.join(vendor_dir,vendor[:directory])
109
+
110
+ sh "git clone #{vendor[:github_repo]} #{gem_dir}"
111
+ Dir.chdir(gem_dir) do
112
+ sh 'git fetch origin'
113
+ sh "git reset --hard #{vendor[:github_ref]}"
114
+ end
115
+
116
+ # Cleanup the gem directory...
117
+ FileUtils.rm_rf(File.join(gem_dir,'.git'))
118
+ FileUtils.rm_rf(File.join(gem_dir,'spec'))
119
+ FileUtils.rm_rf(File.join(gem_dir,'features'))
120
+ FileUtils.rm_rf(File.join(gem_dir,'docs'))
121
+ end
122
+
123
+ # Generate the README
124
+ readme = <<-HEREDOC
125
+ # Vendored Gems
126
+
127
+ The puppet language server is designed to run within the Puppet Agent ruby environment which means no access to Native Extensions or Gem bundling.
128
+
129
+ This means any Gems required outside of Puppet Agent for the language server must be vendored in this directory and the load path modified in the `puppet-languageserver` file.
130
+
131
+ Note - To comply with Licensing, the Gem source should be MIT licensed or even more unrestricted.
132
+
133
+ Note - To improve the packaging size, test files etc. were stripped from the Gems prior to committing.
134
+
135
+ Gem List
136
+ --------
137
+
138
+ HEREDOC
139
+ gem_list.each { |vendor| readme += "* #{vendor[:directory]} (#{vendor[:github_repo]} ref #{vendor[:github_ref]})\n"}
140
+ File.open(File.join(vendor_dir,'README.md'), 'wb') { |file| file.write(readme + "\n") }
141
+ end
142
+
143
+ desc "Create compressed files of the language and debug servers for release"
144
+ task build: [:gem_revendor] do
145
+ require 'fileutils'
146
+ require 'archive/zip'
147
+ require 'zlib'
148
+ require 'minitar'
149
+ require 'digest'
150
+
151
+ project_dir = File.dirname(__FILE__)
152
+ output_dir = File.join(project_dir, 'output')
153
+
154
+ file_list = ['lib', 'vendor', 'puppet-languageserver', 'puppet-debugserver', 'puppet-languageserver-sidecar', 'LICENSE']
155
+ # Remove files in the list that do not exist.
156
+ file_list.reject! { |filepath| !File.exist?(filepath) }
157
+
158
+ puts "Cleaning output directory..."
159
+ FileUtils.rm_rf Dir.glob("#{output_dir}/*") if Dir.exist?(output_dir)
160
+ Dir.mkdir(output_dir) unless Dir.exist?(output_dir)
161
+
162
+ puts "Fetch editor services version..."
163
+ require_relative 'lib/puppet_editor_services/version'
164
+ version = PuppetEditorServices.version
165
+ puts "Editor services is v#{version}"
166
+
167
+ puts "Creating zip file..."
168
+ zip_archive_file = File.join(output_dir,"puppet_editor_services_v#{version}.zip")
169
+ Archive::Zip.archive(zip_archive_file, file_list)
170
+ puts "Created #{zip_archive_file}"
171
+
172
+ puts "Creating tar file..."
173
+ tar_archive_file = File.join(output_dir,"puppet_editor_services_v#{version}.tar.gz")
174
+ Minitar.pack(file_list, Zlib::GzipWriter.new(File.open(tar_archive_file, 'wb')))
175
+ puts "Created #{tar_archive_file}"
176
+
177
+ puts "Creating checksums..."
178
+ [zip_archive_file, tar_archive_file].each do |filepath|
179
+ sha = Digest::SHA256.hexdigest(File.open(filepath, 'rb') { |file| file.read })
180
+ File.open(filepath + '.sha256', 'wb') { |file| file.write(sha) }
181
+ end
182
+ puts "Created checksums"
183
+ end
184
+
185
+ task :default => [:test]
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'puppet_debugserver'
5
+
6
+ PuppetDebugServer.init_puppet(PuppetDebugServer::CommandLineParser.parse(ARGV))
7
+ rpc_thread = PuppetDebugServer.rpc_server_async(PuppetDebugServer::CommandLineParser.parse(ARGV))
8
+ PuppetDebugServer.execute(rpc_thread)
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'puppet_languageserver'
5
+
6
+ PuppetLanguageServer.init_puppet(PuppetLanguageServer::CommandLineParser.parse(ARGV))
7
+ PuppetLanguageServer.rpc_server(PuppetLanguageServer::CommandLineParser.parse(ARGV))
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'puppet_languageserver_sidecar'
5
+
6
+ PuppetLanguageServerSidecar.init_puppet_sidecar(PuppetLanguageServerSidecar::CommandLineParser.parse(ARGV))
7
+ PuppetLanguageServerSidecar.execute_and_output(PuppetLanguageServerSidecar::CommandLineParser.parse(ARGV))
data/lib/dsp/dsp.rb ADDED
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ %w[dsp_base dsp_protocol].each do |lib|
4
+ require "dsp/#{lib}"
5
+ rescue LoadError
6
+ require File.expand_path(File.join(__dir__, lib))
7
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module DSP
6
+ class DSPBase
7
+ def initialize(initial_hash = nil)
8
+ from_h!(initial_hash) unless initial_hash.nil?
9
+ end
10
+
11
+ def to_h
12
+ value = {}
13
+ optional_names = @optional_method_names.nil? ? [] : @optional_method_names
14
+
15
+ instance_method_names.each do |name|
16
+ item_value = send(name)
17
+ if item_value.is_a?(Array)
18
+ # Convert the items in the array .to_h
19
+ item_value = item_value.map { |item| item.to_h }
20
+ elsif !item_value.nil? && item_value.respond_to?(:to_h)
21
+ item_value = item_value.to_h
22
+ end
23
+ value[name.to_s] = item_value unless optional_names.include?(name) && item_value.nil?
24
+ end
25
+
26
+ value
27
+ end
28
+
29
+ def from_h!(value); end
30
+
31
+ def to_json(*options)
32
+ to_h.to_json(options)
33
+ end
34
+
35
+ private
36
+
37
+ def instance_method_names
38
+ method_names = methods - DSP::DSPBase.instance_methods
39
+
40
+ method_names.reject { |name| name.to_s.end_with?('=') }
41
+ end
42
+
43
+ def to_typed_aray(val, expected_type)
44
+ return nil if val.nil?
45
+
46
+ val.map { |item| expected_type.new(item) }
47
+ end
48
+ end
49
+
50
+ def self.create_range(from_line, from_char, to_line, to_char)
51
+ {
52
+ 'start' => {
53
+ 'line' => from_line,
54
+ 'character' => from_char
55
+ },
56
+ 'end' => {
57
+ 'line' => to_line,
58
+ 'character' => to_char
59
+ }
60
+ }
61
+ end
62
+ end