ruby_language_server 0.2.5 → 0.2.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d2d06142de7157e3b1dfde9820bfdba546fc85a14a15fecce200a31c34926e4
4
- data.tar.gz: 824942950a83e2fc1b5386ede7291155e3b60f3696914bb471ffb8c52e60345b
3
+ metadata.gz: 285ad2144f635133ae96f19b46a9761a784fff11a58288e6ca260f111fbf60e1
4
+ data.tar.gz: 8627bc9f34ed97b9f86f11e73a90d71fc94f50bb936b2423534cf7e8d70ea293
5
5
  SHA512:
6
- metadata.gz: 0d06a2a79bc69a1300be8b5248c4624553635e0551667fd5c508102b5d605de5631fee20eef769d43ecc009ceec52e793c733fbb8f13b6a1b7a62416456bd876
7
- data.tar.gz: 8eb0deae2c9af024fa891f7e45a7c702a43b3d6861cf3a154ec88c83297e3593676040c39f1369230249235f6ff3bc7e11b00abbd2b655ede3c2cd3a3f44ff7a
6
+ metadata.gz: fafa5f0caa4d1f712e6e0ed8fff4ba02ee47babba1f565151b8fc26905adbb36403cf29979c1a46b7683d828cbc2b1ffa21f7fcbc817b31f4e08673d680eef52
7
+ data.tar.gz: 76d6193d16b82bf7c5830625bf1bbaedec0b6acfc0305a4b413443043fdf5bc88f422c1028b84a12e105e50f3a40da5d7b9e37f4206e17d6e5c52e4146a41532
data/CHANGELOG.txt CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ #### 0.2.8 Sun Jun 2 16:17:04 PDT 2019
4
+
5
+ * #37 - Bundler::LockfileError: You must use Bundler 2 or greater. Thanks to Dmytro Konstantinov for the heads up
6
+
7
+ #### 0.2.7 Sun May 5 15:36:21 PDT 2019
8
+
9
+ * #34 - fix rubocop exclude paths. Thanks to Sebastian Delmont!
10
+
11
+ #### 0.2.6 Wed Feb 6 12:50:52 PST 2019
12
+
13
+ * Fixed a couple of issues with projecy root
14
+ * Main upshot: .rubocop.yml file will be found again
15
+
3
16
  #### 0.2.3 Wed Jan 30 11:46:09 PST 2019
4
17
 
5
18
  * Fixed a few bugs having to do with block variables
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby_language_server (0.2.5)
4
+ ruby_language_server (0.2.8)
5
5
  amatch
6
6
  bundler
7
7
  etc
@@ -17,10 +17,10 @@ GEM
17
17
  mize
18
18
  tins (~> 1.0)
19
19
  ast (2.4.0)
20
- byebug (10.0.2)
20
+ byebug (11.0.1)
21
21
  coderay (1.1.2)
22
22
  etc (1.0.1)
23
- ffi (1.9.25)
23
+ ffi (1.11.1)
24
24
  formatador (0.2.5)
25
25
  fuzzy_match (2.1.0)
26
26
  guard (2.15.0)
@@ -39,8 +39,8 @@ GEM
39
39
  guard-rubocop (1.3.0)
40
40
  guard (~> 2.0)
41
41
  rubocop (~> 0.20)
42
- jaro_winkler (1.5.1)
43
- json (2.1.0)
42
+ jaro_winkler (1.5.2)
43
+ json (2.2.0)
44
44
  listen (3.1.5)
45
45
  rb-fsevent (~> 0.9, >= 0.9.4)
46
46
  rb-inotify (~> 0.9, >= 0.9.7)
@@ -56,42 +56,40 @@ GEM
56
56
  notiffany (0.1.1)
57
57
  nenv (~> 0.1)
58
58
  shellany (~> 0.0)
59
- parallel (1.12.1)
60
- parser (2.5.3.0)
59
+ parallel (1.17.0)
60
+ parser (2.6.3.0)
61
61
  ast (~> 2.4.0)
62
- powerpack (0.1.2)
63
62
  protocol (1.0.1)
64
63
  ruby_parser (~> 3.0)
65
64
  pry (0.12.2)
66
65
  coderay (~> 1.1.0)
67
66
  method_source (~> 0.9.0)
68
- pry-byebug (3.6.0)
69
- byebug (~> 10.0)
67
+ pry-byebug (3.7.0)
68
+ byebug (~> 11.0)
70
69
  pry (~> 0.10)
71
70
  rainbow (3.0.0)
72
71
  rake (12.3.2)
73
72
  rb-fsevent (0.10.3)
74
73
  rb-inotify (0.10.0)
75
74
  ffi (~> 1.0)
76
- rubocop (0.61.1)
75
+ rubocop (0.71.0)
77
76
  jaro_winkler (~> 1.5.1)
78
77
  parallel (~> 1.10)
79
- parser (>= 2.5, != 2.5.1.1)
80
- powerpack (~> 0.1)
78
+ parser (>= 2.6)
81
79
  rainbow (>= 2.2.2, < 4.0)
82
80
  ruby-progressbar (~> 1.7)
83
- unicode-display_width (~> 1.4.0)
84
- rubocop-rspec (1.32.0)
81
+ unicode-display_width (>= 1.4.0, < 1.7)
82
+ rubocop-rspec (1.33.0)
85
83
  rubocop (>= 0.60.0)
86
- ruby-progressbar (1.10.0)
84
+ ruby-progressbar (1.10.1)
87
85
  ruby_dep (1.5.0)
88
- ruby_parser (3.12.0)
86
+ ruby_parser (3.13.1)
89
87
  sexp_processor (~> 4.9)
90
- sexp_processor (4.11.0)
88
+ sexp_processor (4.12.0)
91
89
  shellany (0.0.1)
92
90
  thor (0.20.3)
93
- tins (1.20.2)
94
- unicode-display_width (1.4.1)
91
+ tins (1.20.3)
92
+ unicode-display_width (1.6.0)
95
93
 
96
94
  PLATFORMS
97
95
  ruby
@@ -108,4 +106,4 @@ DEPENDENCIES
108
106
  ruby_language_server!
109
107
 
110
108
  BUNDLED WITH
111
- 1.17.3
109
+ 2.0.1
data/Guardfile CHANGED
@@ -17,20 +17,22 @@
17
17
  #
18
18
  # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
19
19
 
20
- guard :minitest, all_after_pass: true do
21
- # with Minitest::Unit
22
- # watch(%r{^test/(.*)\/?test_(.*)\.rb$})
23
- # watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
24
- # watch(%r{^test/test_helper\.rb$}) { 'test' }
20
+ group :red_green_refactor, halt_on_fail: true do
21
+ guard :minitest, all_after_pass: true do
22
+ # with Minitest::Unit
23
+ # watch(%r{^test/(.*)\/?test_(.*)\.rb$})
24
+ # watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
25
+ # watch(%r{^test/test_helper\.rb$}) { 'test' }
25
26
 
26
- # with Minitest::Spec
27
- watch(%r{^spec/**/(.*)_spec\.rb$})
28
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
29
- watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
30
- end
27
+ # with Minitest::Spec
28
+ watch(%r{^spec/**/(.*)_spec\.rb$})
29
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
30
+ watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
31
+ end
31
32
 
32
- guard :rubocop, cli: [] do
33
- watch('.rubocop_ruby_language_parser.yml')
34
- watch(/.+\.rb$/)
35
- watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) }
33
+ guard :rubocop, cli: [] do
34
+ watch('.rubocop_ruby_language_parser.yml')
35
+ watch(/.+\.rb$/)
36
+ watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) }
37
+ end
36
38
  end
data/Makefile CHANGED
@@ -5,7 +5,7 @@ build:
5
5
  docker build -t $(PROJECT_NAME) .
6
6
 
7
7
  guard: build
8
- docker run -it $(LOCAL_LINK) $(PROJECT_NAME) sh -c 'bundle && guard'
8
+ docker run -it $(LOCAL_LINK) $(PROJECT_NAME) bundle exec guard
9
9
 
10
10
  continuous_development: build
11
11
  echo "You are going to want to set the ide-ruby 'Image Name' to local_ruby_language_server"
@@ -20,7 +20,7 @@ console: build
20
20
  docker run -it $(LOCAL_LINK) $(PROJECT_NAME) bin/console
21
21
 
22
22
  test: build
23
- docker run -it $(LOCAL_LINK) $(PROJECT_NAME) rake test && rubocop -c .rubocop_ruby_language_parser.yml
23
+ docker run -it $(LOCAL_LINK) $(PROJECT_NAME) rake test && rubocop
24
24
 
25
25
  shell: build
26
26
  docker run -it $(LOCAL_LINK) $(PROJECT_NAME) sh
data/README.md CHANGED
@@ -52,4 +52,5 @@ Write tests and guard will run them. Make changes and reload the window. Test
52
52
 
53
53
  # Contributors
54
54
 
55
+ * [Sebastian Delmont](sd@notso.net)
55
56
  * *Your name here!*
@@ -8,7 +8,7 @@ module RubyLanguageServer
8
8
  class CodeFile
9
9
  attr_reader :uri
10
10
  attr_reader :text
11
- attr_reader :lint_found
11
+ attr_accessor :diagnostics
12
12
 
13
13
  def initialize(uri, text)
14
14
  RubyLanguageServer.logger.debug("CodeFile initialize #{uri}")
@@ -106,12 +106,6 @@ module RubyLanguageServer
106
106
  @tags
107
107
  end
108
108
 
109
- def diagnostics
110
- # Maybe we should be sharing this GoodCop across instances
111
- @good_cop ||= GoodCop.new
112
- @good_cop.diagnostics(@text, @uri)
113
- end
114
-
115
109
  def root_scope
116
110
  # RubyLanguageServer.logger.error("Asking about root_scope with #{text}")
117
111
  if @refresh_root_scope
@@ -4,17 +4,13 @@ require 'rubocop'
4
4
 
5
5
  module RubyLanguageServer
6
6
  class GoodCop < RuboCop::Runner
7
- CONFIG_PATH = '/project/.rubocop.yml'
8
- FALLBACK_PATH = '/app/.rubocop.yml'
9
-
10
7
  def initialize
11
8
  @initialization_error = nil
12
9
  config_store = RuboCop::ConfigStore.new
13
-
14
10
  config_store.options_config = config_path
15
11
  super({}, config_store)
16
- rescue Exception => exception
17
- RubyLanguageServer.logger.error(exception)
12
+ rescue Exception => e
13
+ RubyLanguageServer.logger.error(e)
18
14
  @initialization_error = "There was an issue loading the rubocop configuration file: #{exception}. Maybe you need to add some additional gems to the ide-ruby settings?"
19
15
  end
20
16
 
@@ -100,9 +96,13 @@ module RubyLanguageServer
100
96
  private
101
97
 
102
98
  def offenses(text, filename)
103
- processed_source = RuboCop::ProcessedSource.new(text, 2.4, filename)
104
- offenses = inspect_file(processed_source)
105
- offenses.compact.flatten
99
+ if excluded_file?(filename)
100
+ []
101
+ else
102
+ processed_source = RuboCop::ProcessedSource.new(text, 2.4, filename)
103
+ offenses = inspect_file(processed_source)
104
+ offenses.compact.flatten
105
+ end
106
106
  end
107
107
 
108
108
  def initialization_offenses
@@ -123,8 +123,14 @@ module RubyLanguageServer
123
123
  pathname = Pathname.new(my_path)
124
124
  my_directory = pathname.dirname
125
125
  fallback_pathname = my_directory + '../resources/fallback_rubocop.yml'
126
- possible_config_paths = [RubyLanguageServer::ProjectManager.root_path + '/.rubocop.yml', fallback_pathname.to_s]
126
+ project_path = RubyLanguageServer::ProjectManager.root_path + '.rubocop.yml'
127
+ possible_config_paths = [project_path, fallback_pathname.to_s]
127
128
  possible_config_paths.detect { |path| File.exist?(path) }
128
129
  end
130
+
131
+ def excluded_file?(filename)
132
+ file_config = @config_store.for(filename)
133
+ file_config.file_to_exclude?(filename)
134
+ end
129
135
  end
130
136
  end
@@ -74,8 +74,8 @@ module RubyLanguageServer
74
74
  while content.length < length + 2
75
75
  begin
76
76
  content += get_content(length + 2, io) # Why + 2? CRLF?
77
- rescue Exception => exception
78
- RubyLanguageServer.logger.error exception
77
+ rescue Exception => e
78
+ RubyLanguageServer.logger.error e
79
79
  # We have almost certainly been disconnected from the server
80
80
  exit!(1)
81
81
  end
@@ -20,13 +20,33 @@ module RubyLanguageServer
20
20
  end
21
21
 
22
22
  def root_path
23
- @_root_path
23
+ # I'm torn about this. Should this be set in the Server? Or is this right.
24
+ # Rather than worry too much, I'll just do this here and change it later if it feels wrong.
25
+ path = ENV['RUBY_LANGUAGE_SERVER_PROJECT_ROOT'] || @_root_path
26
+ return path if path.nil?
27
+
28
+ path.end_with?(File::SEPARATOR) ? path : "#{path}#{File::SEPARATOR}"
29
+ end
30
+
31
+ def root_uri=(uri)
32
+ ROOT_PATH_MUTEX.synchronize do
33
+ if uri
34
+ uri = "#{uri}/" unless uri.end_with?('/')
35
+ @_root_uri = uri
36
+ end
37
+ end
38
+ end
39
+
40
+ def root_uri
41
+ @_root_uri || "file://#{root_path}"
24
42
  end
25
43
  end
26
44
 
27
- def initialize(path)
45
+ def initialize(path, uri = nil)
28
46
  # Should probably lock for read, but I'm feeling crazy!
29
47
  self.class.root_path = path if self.class.root_path.nil?
48
+ self.class.root_uri = uri if uri
49
+
30
50
  @root_uri = "file://#{path}"
31
51
  # This is {uri: code_file} where content stuff is like
32
52
  @uri_code_file_hash = {}
@@ -54,12 +74,6 @@ module RubyLanguageServer
54
74
  code_file&.text || ''
55
75
  end
56
76
 
57
- def code_file_for_uri(uri, text = nil)
58
- code_file = @uri_code_file_hash[uri]
59
- code_file = @uri_code_file_hash[uri] = CodeFile.new(uri, text) if code_file.nil?
60
- code_file
61
- end
62
-
63
77
  def tags_for_uri(uri)
64
78
  code_file = code_file_for_uri(uri)
65
79
  return {} if code_file.nil?
@@ -170,28 +184,37 @@ module RubyLanguageServer
170
184
  # }
171
185
 
172
186
  def scan_all_project_files
173
- project_ruby_files = Dir.glob('/project/**/*.rb')
174
- RubyLanguageServer.logger.debug("scan_all_project_files: #{project_ruby_files * ','}")
187
+ project_ruby_files = Dir.glob("#{self.class.root_path}**/*.rb")
175
188
  Thread.new do
176
189
  project_ruby_files.each do |container_path|
177
190
  text = File.read(container_path)
178
- relative_path = container_path.delete_prefix('/project/')
191
+ relative_path = container_path.delete_prefix(self.class.root_path)
179
192
  host_uri = @root_uri + relative_path
180
193
  update_document_content(host_uri, text)
181
194
  end
182
195
  end
183
196
  end
184
197
 
198
+ # returns diagnostic info (if possible)
185
199
  def update_document_content(uri, text)
186
200
  @update_mutext.synchronize do
187
201
  RubyLanguageServer.logger.debug("update_document_content: #{uri}")
188
202
  # RubyLanguageServer.logger.error("@root_path: #{@root_path}")
189
- code_file = code_file_for_uri(uri, text)
203
+ code_file = code_file_for_uri(uri)
204
+ return code_file.diagnostics if code_file.text == text
205
+
190
206
  code_file.text = text
191
- diagnostics_ready? ? code_file.diagnostics : []
207
+ diagnostics_ready? ? updated_diagnostics_for_codefile(code_file) : []
192
208
  end
193
209
  end
194
210
 
211
+ def updated_diagnostics_for_codefile(code_file)
212
+ # Maybe we should be sharing this GoodCop across instances
213
+ @good_cop ||= GoodCop.new
214
+ project_relative_filename = filename_relative_to_project(code_file.uri)
215
+ code_file.diagnostics = @good_cop.diagnostics(code_file.text, project_relative_filename)
216
+ end
217
+
195
218
  # Returns the context of what is being typed in the given line
196
219
  def context_at_location(uri, position)
197
220
  code_file = code_file_for_uri(uri)
@@ -240,5 +263,17 @@ module RubyLanguageServer
240
263
  end
241
264
  return_array
242
265
  end
266
+
267
+ private
268
+
269
+ def code_file_for_uri(uri)
270
+ code_file = @uri_code_file_hash[uri]
271
+ code_file = @uri_code_file_hash[uri] = CodeFile.new(uri, nil) if code_file.nil?
272
+ code_file
273
+ end
274
+
275
+ def filename_relative_to_project(filename)
276
+ filename.gsub(self.class.root_uri, self.class.root_path)
277
+ end
243
278
  end
244
279
  end
@@ -345,8 +345,8 @@ module RubyLanguageServer
345
345
  text ||= '' # empty is the same as nil - but it doesn't crash
346
346
  begin
347
347
  sexp = self.class.sexp(text)
348
- rescue TypeError => exception
349
- RubyLanguageServer.logger.error("Exception in sexp: #{exception} for text: #{text}")
348
+ rescue TypeError => e
349
+ RubyLanguageServer.logger.error("Exception in sexp: #{e} for text: #{text}")
350
350
  end
351
351
  processor = SEXPProcessor.new(sexp, text.split("\n").length)
352
352
  @root_scope = processor.root_scope
@@ -10,7 +10,8 @@ module RubyLanguageServer
10
10
  def on_initialize(params)
11
11
  RubyLanguageServer.logger.info("on_initialize: #{params}")
12
12
  root_path = params['rootPath']
13
- @project_manager = ProjectManager.new(root_path)
13
+ root_uri = params['rootUri']
14
+ @project_manager = ProjectManager.new(root_path, root_uri)
14
15
  gem_string = ENV.fetch('ADDITIONAL_GEMS') {}
15
16
  gem_array = (gem_string.split(',').compact.map(&:strip).reject { |string| string == '' } if gem_string && !gem_string.empty?)
16
17
  @project_manager.install_additional_gems(gem_array)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyLanguageServer
4
- VERSION = '0.2.5'
4
+ VERSION = '0.2.8'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_language_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kurt Werle
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-01 00:00:00.000000000 Z
11
+ date: 2019-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -287,7 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
287
287
  - !ruby/object:Gem::Version
288
288
  version: '0'
289
289
  requirements: []
290
- rubygems_version: 3.0.1
290
+ rubygems_version: 3.0.3
291
291
  signing_key:
292
292
  specification_version: 4
293
293
  summary: Provide a language server implementation for ruby in ruby.