solargraph 0.43.3 → 0.44.0
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/solargraph/language_server/host.rb +8 -4
- data/lib/solargraph/language_server/message/initialize.rb +7 -0
- data/lib/solargraph/language_server/message/initialized.rb +1 -0
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -0
- data/lib/solargraph/language_server/message/text_document.rb +18 -18
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +1 -0
- data/lib/solargraph/language_server/message.rb +2 -1
- data/lib/solargraph/library.rb +22 -20
- data/lib/solargraph/parser/legacy/node_methods.rb +7 -0
- data/lib/solargraph/parser/rubyvm/node_methods.rb +23 -14
- data/lib/solargraph/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0827e2be47eea923c2f61688ce4e97efa11d3d801f094ffb8a6cdb73a7fb52b3'
|
4
|
+
data.tar.gz: dcbad1eaa64acab63ccc511a93c0e1370fc469815e2e67735fc79c2f4dc08038
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa050d901186e2385685d2aab7934f611517d68b549f4cb064ab7c3524f99e890488675a06483c2b1f2e2cafc0417a3367972a1ea8b6c6614a3465e867313b03
|
7
|
+
data.tar.gz: 4b12d6b0f65f53afd0ccbbdfc84a9fe8159f2f3a4bb3c625a84f1a9ee80be53f8c8b1d1ecfbae9bcf01ceff691388af5d0cef7271bb5470730fc4aa7a2471df9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.44.0 - September 27, 2021
|
2
|
+
- Allow opening parenthesis, space, and comma when using Diff::LCS (#465)
|
3
|
+
- Support textDocument/documentHighlight
|
4
|
+
- Library#references_from performs shallow matches
|
5
|
+
|
1
6
|
## 0.43.3 - September 25, 2021
|
2
7
|
- Avoid Dir.chdir in Bundler processes (#481)
|
3
8
|
- Check stdlib for gems with empty yardocs
|
@@ -18,7 +18,6 @@ module Solargraph
|
|
18
18
|
autoload :Dispatch, 'solargraph/language_server/host/dispatch'
|
19
19
|
autoload :MessageWorker, 'solargraph/language_server/host/message_worker'
|
20
20
|
|
21
|
-
|
22
21
|
include UriHelpers
|
23
22
|
include Logging
|
24
23
|
include Dispatch
|
@@ -543,10 +542,11 @@ module Solargraph
|
|
543
542
|
# @param line [Integer]
|
544
543
|
# @param column [Integer]
|
545
544
|
# @param strip [Boolean] Strip special characters from variable names
|
545
|
+
# @param only [Boolean] If true, search current file only
|
546
546
|
# @return [Array<Solargraph::Range>]
|
547
|
-
def references_from uri, line, column, strip: true
|
547
|
+
def references_from uri, line, column, strip: true, only: false
|
548
548
|
library = library_for(uri)
|
549
|
-
library.references_from(uri_to_file(uri), line, column, strip: strip)
|
549
|
+
library.references_from(uri_to_file(uri), line, column, strip: strip, only: only)
|
550
550
|
end
|
551
551
|
|
552
552
|
# @param query [String]
|
@@ -632,6 +632,7 @@ module Solargraph
|
|
632
632
|
'diagnostics' => false,
|
633
633
|
'formatting' => false,
|
634
634
|
'folding' => true,
|
635
|
+
'highlights' => true,
|
635
636
|
'logLevel' => 'warn'
|
636
637
|
}
|
637
638
|
end
|
@@ -716,7 +717,7 @@ module Solargraph
|
|
716
717
|
return change if diffs.length.zero? || diffs.length > 1 || diffs.first.length > 1
|
717
718
|
# @type [Diff::LCS::Change]
|
718
719
|
diff = diffs.first.first
|
719
|
-
return change unless diff.adding? && ['.', ':'].include?(diff.element)
|
720
|
+
return change unless diff.adding? && ['.', ':', '(', ',', ' '].include?(diff.element)
|
720
721
|
position = Solargraph::Position.from_offset(source.code, diff.position)
|
721
722
|
{
|
722
723
|
'range' => {
|
@@ -784,6 +785,9 @@ module Solargraph
|
|
784
785
|
},
|
785
786
|
'textDocument/codeAction' => {
|
786
787
|
codeActionProvider: true
|
788
|
+
},
|
789
|
+
'textDocument/documentHighlight' => {
|
790
|
+
documentHighlightProvider: true
|
787
791
|
}
|
788
792
|
}
|
789
793
|
end
|
@@ -36,6 +36,7 @@ module Solargraph
|
|
36
36
|
result[:capabilities].merge! static_references unless dynamic_registration_for?('textDocument', 'references')
|
37
37
|
result[:capabilities].merge! static_workspace_symbols unless dynamic_registration_for?('workspace', 'symbol')
|
38
38
|
result[:capabilities].merge! static_folding_range unless dynamic_registration_for?('textDocument', 'foldingRange')
|
39
|
+
result[:capabilities].merge! static_highlights unless dynamic_registration_for?('textDocument', 'documentHighlight')
|
39
40
|
# @todo Temporarily disabled
|
40
41
|
# result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
|
41
42
|
set_result result
|
@@ -138,6 +139,12 @@ module Solargraph
|
|
138
139
|
}
|
139
140
|
end
|
140
141
|
|
142
|
+
def static_highlights
|
143
|
+
{
|
144
|
+
documentHighlightProvider: true
|
145
|
+
}
|
146
|
+
end
|
147
|
+
|
141
148
|
# @param section [String]
|
142
149
|
# @param capability [String]
|
143
150
|
# @return [Boolean]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph::LanguageServer::Message::TextDocument
|
4
|
+
class DocumentHighlight < Base
|
5
|
+
def process
|
6
|
+
locs = host.references_from(params['textDocument']['uri'], params['position']['line'], params['position']['character'], strip: true, only: true)
|
7
|
+
result = locs.map do |loc|
|
8
|
+
{
|
9
|
+
range: loc.range.to_hash,
|
10
|
+
kind: 1
|
11
|
+
}
|
12
|
+
end
|
13
|
+
set_result result
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -4,24 +4,24 @@ module Solargraph
|
|
4
4
|
module LanguageServer
|
5
5
|
module Message
|
6
6
|
module TextDocument
|
7
|
-
autoload :Base,
|
8
|
-
autoload :Completion,
|
9
|
-
autoload :DidOpen,
|
10
|
-
autoload :DidChange,
|
11
|
-
autoload :DidClose,
|
12
|
-
autoload :DidSave,
|
13
|
-
autoload :Hover,
|
14
|
-
autoload :SignatureHelp,
|
15
|
-
autoload :DiagnosticsQueue,
|
16
|
-
autoload :OnTypeFormatting,
|
17
|
-
autoload :Definition,
|
18
|
-
autoload :DocumentSymbol,
|
19
|
-
autoload :Formatting,
|
20
|
-
autoload :References,
|
21
|
-
autoload :Rename,
|
22
|
-
autoload :PrepareRename,
|
23
|
-
autoload :FoldingRange,
|
24
|
-
autoload :
|
7
|
+
autoload :Base, 'solargraph/language_server/message/text_document/base'
|
8
|
+
autoload :Completion, 'solargraph/language_server/message/text_document/completion'
|
9
|
+
autoload :DidOpen, 'solargraph/language_server/message/text_document/did_open'
|
10
|
+
autoload :DidChange, 'solargraph/language_server/message/text_document/did_change'
|
11
|
+
autoload :DidClose, 'solargraph/language_server/message/text_document/did_close'
|
12
|
+
autoload :DidSave, 'solargraph/language_server/message/text_document/did_save'
|
13
|
+
autoload :Hover, 'solargraph/language_server/message/text_document/hover'
|
14
|
+
autoload :SignatureHelp, 'solargraph/language_server/message/text_document/signature_help'
|
15
|
+
autoload :DiagnosticsQueue, 'solargraph/language_server/message/text_document/diagnostics_queue'
|
16
|
+
autoload :OnTypeFormatting, 'solargraph/language_server/message/text_document/on_type_formatting'
|
17
|
+
autoload :Definition, 'solargraph/language_server/message/text_document/definition'
|
18
|
+
autoload :DocumentSymbol, 'solargraph/language_server/message/text_document/document_symbol'
|
19
|
+
autoload :Formatting, 'solargraph/language_server/message/text_document/formatting'
|
20
|
+
autoload :References, 'solargraph/language_server/message/text_document/references'
|
21
|
+
autoload :Rename, 'solargraph/language_server/message/text_document/rename'
|
22
|
+
autoload :PrepareRename, 'solargraph/language_server/message/text_document/prepare_rename'
|
23
|
+
autoload :FoldingRange, 'solargraph/language_server/message/text_document/folding_range'
|
24
|
+
autoload :DocumentHighlight, 'solargraph/language_server/message/text_document/document_highlight'
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -22,6 +22,7 @@ module Solargraph::LanguageServer::Message::Workspace
|
|
22
22
|
(host.options['definitions'] ? y : n).push('textDocument/definition')
|
23
23
|
(host.options['references'] ? y : n).push('textDocument/references')
|
24
24
|
(host.options['folding'] ? y : n).push('textDocument/folding')
|
25
|
+
(host.options['highlights'] ? y : n).push('textDocument/documentHighlight')
|
25
26
|
host.register_capabilities y
|
26
27
|
host.unregister_capabilities n
|
27
28
|
end
|
@@ -73,7 +73,8 @@ module Solargraph
|
|
73
73
|
register 'textDocument/rename', TextDocument::Rename
|
74
74
|
register 'textDocument/prepareRename', TextDocument::PrepareRename
|
75
75
|
register 'textDocument/foldingRange', TextDocument::FoldingRange
|
76
|
-
register 'textDocument/codeAction', TextDocument::CodeAction
|
76
|
+
# register 'textDocument/codeAction', TextDocument::CodeAction
|
77
|
+
register 'textDocument/documentHighlight', TextDocument::DocumentHighlight
|
77
78
|
register 'workspace/didChangeWatchedFiles', Workspace::DidChangeWatchedFiles
|
78
79
|
register 'workspace/didChangeConfiguration', Workspace::DidChangeConfiguration
|
79
80
|
register 'workspace/didChangeWorkspaceFolders', Workspace::DidChangeWorkspaceFolders
|
data/lib/solargraph/library.rb
CHANGED
@@ -216,33 +216,35 @@ module Solargraph
|
|
216
216
|
# @param line [Integer]
|
217
217
|
# @param column [Integer]
|
218
218
|
# @param strip [Boolean] Strip special characters from variable names
|
219
|
+
# @param only [Boolean] Search for references in the current file only
|
219
220
|
# @return [Array<Solargraph::Range>]
|
220
221
|
# @todo Take a Location instead of filename/line/column
|
221
|
-
def references_from filename, line, column, strip: false
|
222
|
+
def references_from filename, line, column, strip: false, only: false
|
222
223
|
cursor = api_map.cursor_at(filename, Position.new(line, column))
|
223
224
|
clip = api_map.clip(cursor)
|
224
|
-
|
225
|
-
return []
|
225
|
+
pin = clip.define.first
|
226
|
+
return [] unless pin
|
226
227
|
result = []
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
228
|
+
files = if only
|
229
|
+
[api_map.source_map(filename)]
|
230
|
+
else
|
231
|
+
(workspace.sources + (@current ? [@current] : []))
|
232
|
+
end
|
233
|
+
files.uniq(&:filename).each do |source|
|
234
|
+
found = source.references(pin.name)
|
235
|
+
found.select! do |loc|
|
236
|
+
referenced = definitions_at(loc.filename, loc.range.ending.line, loc.range.ending.character).first
|
237
|
+
referenced && referenced.path == pin.path
|
238
|
+
end
|
239
|
+
# HACK: for language clients that exclude special characters from the start of variable names
|
240
|
+
if strip && match = cursor.word.match(/^[^a-z0-9_]+/i)
|
241
|
+
found.map! do |loc|
|
242
|
+
Solargraph::Location.new(loc.filename, Solargraph::Range.from_to(loc.range.start.line, loc.range.start.column + match[0].length, loc.range.ending.line, loc.range.ending.column))
|
241
243
|
end
|
242
|
-
result.concat(found.sort do |a, b|
|
243
|
-
a.range.start.line <=> b.range.start.line
|
244
|
-
end)
|
245
244
|
end
|
245
|
+
result.concat(found.sort do |a, b|
|
246
|
+
a.range.start.line <=> b.range.start.line
|
247
|
+
end)
|
246
248
|
end
|
247
249
|
result.uniq
|
248
250
|
end
|
@@ -178,6 +178,7 @@ module Solargraph
|
|
178
178
|
|
179
179
|
# @param cursor [Solargraph::Source::Cursor]
|
180
180
|
def find_recipient_node cursor
|
181
|
+
return repaired_find_recipient_node(cursor) if cursor.source.repaired? && cursor.source.code[cursor.offset - 1] == '('
|
181
182
|
source = cursor.source
|
182
183
|
position = cursor.position
|
183
184
|
offset = cursor.offset
|
@@ -210,6 +211,12 @@ module Solargraph
|
|
210
211
|
nil
|
211
212
|
end
|
212
213
|
|
214
|
+
def repaired_find_recipient_node cursor
|
215
|
+
cursor = cursor.source.cursor_at([cursor.position.line, cursor.position.column - 1])
|
216
|
+
node = cursor.source.tree_at(cursor.position.line, cursor.position.column).first
|
217
|
+
return node if node && node.type == :send
|
218
|
+
end
|
219
|
+
|
213
220
|
module DeepInference
|
214
221
|
class << self
|
215
222
|
CONDITIONAL = [:if, :unless]
|
@@ -141,36 +141,45 @@ module Solargraph
|
|
141
141
|
class << self
|
142
142
|
protected
|
143
143
|
|
144
|
+
# @param cursor [Source::Cursor]
|
145
|
+
# @return [RubyVM::AbstractSyntaxTree::Node, nil]
|
144
146
|
def synchronized_find_recipient_node cursor
|
147
|
+
cursor = maybe_adjust_cursor(cursor)
|
145
148
|
source = cursor.source
|
146
149
|
position = cursor.position
|
147
150
|
offset = cursor.offset
|
148
151
|
tree = source.tree_at(position.line, position.column)
|
149
|
-
|
152
|
+
.select { |n| [:FCALL, :VCALL, :CALL].include?(n.type) }
|
153
|
+
unless source.repaired?
|
154
|
+
tree.shift while tree.first && !source.code_for(tree.first).strip.end_with?(')')
|
155
|
+
end
|
156
|
+
return tree.first if source.repaired? || source.code[0..offset-1] =~ /\(\s*$/
|
150
157
|
tree.each do |node|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
rng = Solargraph::Range.new(rng.start, position)
|
158
|
-
end
|
159
|
-
return node if rng.contain?(position)
|
160
|
-
elsif source.code[0..offset-1] =~ /\(\s*$/
|
161
|
-
break unless source.code_for(node).strip.end_with?(')')
|
162
|
-
return node
|
158
|
+
args = node.children.find { |c| Parser.is_ast_node?(c) && [:ARRAY, :ZARRAY, :LIST].include?(c.type) }
|
159
|
+
if args
|
160
|
+
match = source.code[0..offset-1].match(/,[^\)]*\z/)
|
161
|
+
rng = Solargraph::Range.from_node(args)
|
162
|
+
if match
|
163
|
+
rng = Solargraph::Range.new(rng.start, position)
|
163
164
|
end
|
165
|
+
return node if rng.contain?(position)
|
164
166
|
end
|
165
167
|
end
|
166
168
|
nil
|
167
169
|
end
|
168
170
|
|
171
|
+
# @param cursor [Source::Cursor]
|
172
|
+
# @return [Source::Cursor]
|
173
|
+
def maybe_adjust_cursor cursor
|
174
|
+
return cursor unless (cursor.source.repaired? && cursor.source.code[cursor.offset - 1] == '(') || [',', ' '].include?(cursor.source.code[cursor.offset - 1])
|
175
|
+
cursor.source.cursor_at([cursor.position.line, cursor.position.column - 1])
|
176
|
+
end
|
177
|
+
|
169
178
|
def unsynchronized_find_recipient_node cursor
|
170
179
|
source = cursor.source
|
171
180
|
position = cursor.position
|
172
181
|
offset = cursor.offset
|
173
|
-
if source.code[0..offset-1] =~ /\([A-Zaz0-9_\s]*\z$/
|
182
|
+
if source.code[0..offset-1] =~ /\([A-Zaz0-9_\s]*\z$/
|
174
183
|
tree = source.tree_at(position.line, position.column - 1)
|
175
184
|
if tree.first && [:FCALL, :VCALL, :CALL].include?(tree.first.type)
|
176
185
|
return tree.first
|
data/lib/solargraph/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solargraph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.44.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backport
|
@@ -381,6 +381,7 @@ files:
|
|
381
381
|
- lib/solargraph/language_server/message/text_document/did_close.rb
|
382
382
|
- lib/solargraph/language_server/message/text_document/did_open.rb
|
383
383
|
- lib/solargraph/language_server/message/text_document/did_save.rb
|
384
|
+
- lib/solargraph/language_server/message/text_document/document_highlight.rb
|
384
385
|
- lib/solargraph/language_server/message/text_document/document_symbol.rb
|
385
386
|
- lib/solargraph/language_server/message/text_document/folding_range.rb
|
386
387
|
- lib/solargraph/language_server/message/text_document/formatting.rb
|