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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +510 -0
- data/CODEOWNERS +2 -0
- data/CODE_OF_CONDUCT.md +46 -0
- data/CONTRIBUTING.md +54 -0
- data/Gemfile +53 -0
- data/LICENSE +201 -0
- data/README.md +308 -0
- data/Rakefile +185 -0
- data/bin/puppet-debugserver +8 -0
- data/bin/puppet-languageserver +7 -0
- data/bin/puppet-languageserver-sidecar +7 -0
- data/lib/dsp/dsp.rb +7 -0
- data/lib/dsp/dsp_base.rb +62 -0
- data/lib/dsp/dsp_protocol.rb +4619 -0
- data/lib/lsp/lsp.rb +10 -0
- data/lib/lsp/lsp_base.rb +63 -0
- data/lib/lsp/lsp_custom.rb +170 -0
- data/lib/lsp/lsp_enums.rb +143 -0
- data/lib/lsp/lsp_protocol.rb +2785 -0
- data/lib/lsp/lsp_protocol_callhierarchy.proposed.rb +239 -0
- data/lib/lsp/lsp_protocol_colorprovider.rb +100 -0
- data/lib/lsp/lsp_protocol_configuration.rb +82 -0
- data/lib/lsp/lsp_protocol_declaration.rb +73 -0
- data/lib/lsp/lsp_protocol_foldingrange.rb +129 -0
- data/lib/lsp/lsp_protocol_implementation.rb +75 -0
- data/lib/lsp/lsp_protocol_progress.rb +200 -0
- data/lib/lsp/lsp_protocol_selectionrange.rb +79 -0
- data/lib/lsp/lsp_protocol_sematictokens.proposed.rb +340 -0
- data/lib/lsp/lsp_protocol_typedefinition.rb +75 -0
- data/lib/lsp/lsp_protocol_workspacefolders.rb +174 -0
- data/lib/lsp/lsp_types.rb +1534 -0
- data/lib/puppet-debugserver/debug_session/break_points.rb +137 -0
- data/lib/puppet-debugserver/debug_session/flow_control.rb +161 -0
- data/lib/puppet-debugserver/debug_session/hook_handlers.rb +295 -0
- data/lib/puppet-debugserver/debug_session/puppet_session_run_mode.rb +66 -0
- data/lib/puppet-debugserver/debug_session/puppet_session_state.rb +122 -0
- data/lib/puppet-debugserver/hooks.rb +132 -0
- data/lib/puppet-debugserver/message_handler.rb +277 -0
- data/lib/puppet-debugserver/puppet_debug_session.rb +541 -0
- data/lib/puppet-debugserver/puppet_monkey_patches.rb +118 -0
- data/lib/puppet-languageserver/client_session_state.rb +119 -0
- data/lib/puppet-languageserver/crash_dump.rb +50 -0
- data/lib/puppet-languageserver/epp/validation_provider.rb +34 -0
- data/lib/puppet-languageserver/facter_helper.rb +25 -0
- data/lib/puppet-languageserver/global_queues/sidecar_queue.rb +205 -0
- data/lib/puppet-languageserver/global_queues/single_instance_queue.rb +126 -0
- data/lib/puppet-languageserver/global_queues/validation_queue.rb +102 -0
- data/lib/puppet-languageserver/global_queues.rb +16 -0
- data/lib/puppet-languageserver/manifest/completion_provider.rb +331 -0
- data/lib/puppet-languageserver/manifest/definition_provider.rb +99 -0
- data/lib/puppet-languageserver/manifest/document_symbol_provider.rb +228 -0
- data/lib/puppet-languageserver/manifest/folding_provider.rb +226 -0
- data/lib/puppet-languageserver/manifest/format_on_type_provider.rb +143 -0
- data/lib/puppet-languageserver/manifest/hover_provider.rb +221 -0
- data/lib/puppet-languageserver/manifest/signature_provider.rb +169 -0
- data/lib/puppet-languageserver/manifest/validation_provider.rb +127 -0
- data/lib/puppet-languageserver/message_handler.rb +462 -0
- data/lib/puppet-languageserver/providers.rb +18 -0
- data/lib/puppet-languageserver/puppet_helper.rb +108 -0
- data/lib/puppet-languageserver/puppet_lexer_helper.rb +55 -0
- data/lib/puppet-languageserver/puppet_monkey_patches.rb +39 -0
- data/lib/puppet-languageserver/puppet_parser_helper.rb +212 -0
- data/lib/puppet-languageserver/puppetfile/validation_provider.rb +185 -0
- data/lib/puppet-languageserver/server_capabilities.rb +48 -0
- data/lib/puppet-languageserver/session_state/document_store.rb +272 -0
- data/lib/puppet-languageserver/session_state/language_client.rb +239 -0
- data/lib/puppet-languageserver/session_state/object_cache.rb +162 -0
- data/lib/puppet-languageserver/sidecar_protocol.rb +532 -0
- data/lib/puppet-languageserver/uri_helper.rb +46 -0
- data/lib/puppet-languageserver-sidecar/cache/base.rb +36 -0
- data/lib/puppet-languageserver-sidecar/cache/filesystem.rb +111 -0
- data/lib/puppet-languageserver-sidecar/cache/null.rb +27 -0
- data/lib/puppet-languageserver-sidecar/facter_helper.rb +41 -0
- data/lib/puppet-languageserver-sidecar/puppet_environment_monkey_patches.rb +52 -0
- data/lib/puppet-languageserver-sidecar/puppet_helper.rb +281 -0
- data/lib/puppet-languageserver-sidecar/puppet_modulepath_monkey_patches.rb +146 -0
- data/lib/puppet-languageserver-sidecar/puppet_monkey_patches.rb +9 -0
- data/lib/puppet-languageserver-sidecar/puppet_parser_helper.rb +77 -0
- data/lib/puppet-languageserver-sidecar/puppet_strings_helper.rb +399 -0
- data/lib/puppet-languageserver-sidecar/puppet_strings_monkey_patches.rb +16 -0
- data/lib/puppet-languageserver-sidecar/sidecar_protocol_extensions.rb +16 -0
- data/lib/puppet-languageserver-sidecar/workspace.rb +89 -0
- data/lib/puppet_debugserver.rb +164 -0
- data/lib/puppet_editor_services/connection/base.rb +62 -0
- data/lib/puppet_editor_services/connection/stdio.rb +25 -0
- data/lib/puppet_editor_services/connection/tcp.rb +34 -0
- data/lib/puppet_editor_services/handler/base.rb +16 -0
- data/lib/puppet_editor_services/handler/debug_adapter.rb +63 -0
- data/lib/puppet_editor_services/handler/json_rpc.rb +133 -0
- data/lib/puppet_editor_services/logging.rb +45 -0
- data/lib/puppet_editor_services/protocol/base.rb +27 -0
- data/lib/puppet_editor_services/protocol/debug_adapter.rb +135 -0
- data/lib/puppet_editor_services/protocol/debug_adapter_messages.rb +171 -0
- data/lib/puppet_editor_services/protocol/json_rpc.rb +241 -0
- data/lib/puppet_editor_services/protocol/json_rpc_messages.rb +200 -0
- data/lib/puppet_editor_services/server/base.rb +42 -0
- data/lib/puppet_editor_services/server/stdio.rb +85 -0
- data/lib/puppet_editor_services/server/tcp.rb +349 -0
- data/lib/puppet_editor_services/server.rb +15 -0
- data/lib/puppet_editor_services/version.rb +36 -0
- data/lib/puppet_editor_services.rb +8 -0
- data/lib/puppet_languageserver.rb +263 -0
- data/lib/puppet_languageserver_sidecar.rb +361 -0
- data/puppet-debugserver +11 -0
- data/puppet-editor-services.gemspec +29 -0
- data/puppet-languageserver +15 -0
- data/puppet-languageserver-sidecar +14 -0
- 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_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
data/lib/dsp/dsp_base.rb
ADDED
|
@@ -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
|