rucoa 0.3.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +12 -2
- data/README.md +37 -6
- data/data/definitions_ruby_3_1 +0 -0
- data/images/diagnostics.gif +0 -0
- data/images/document-formatting.gif +0 -0
- data/images/document-symbol.gif +0 -0
- data/images/selection-ranges.gif +0 -0
- data/lib/rucoa/configuration.rb +62 -28
- data/lib/rucoa/definition_archiver.rb +29 -0
- data/lib/rucoa/definition_builders/rbs_constant_definition_builder.rb +44 -0
- data/lib/rucoa/definition_builders/rbs_method_definition_builder.rb +106 -0
- data/lib/rucoa/definition_builders/yard_method_definition_builder.rb +218 -0
- data/lib/rucoa/definition_builders.rb +9 -0
- data/lib/rucoa/definition_store.rb +63 -0
- data/lib/rucoa/definitions/base.rb +12 -0
- data/lib/rucoa/definitions/constant_definition.rb +51 -0
- data/lib/rucoa/definitions/method_definition.rb +126 -0
- data/lib/rucoa/definitions/method_parameter_definition.rb +30 -0
- data/lib/rucoa/definitions.rb +9 -0
- data/lib/rucoa/handler_concerns/diagnostics_publishable.rb +140 -0
- data/lib/rucoa/handlers/base.rb +8 -0
- data/lib/rucoa/handlers/exit_handler.rb +11 -0
- data/lib/rucoa/handlers/initialize_handler.rb +7 -0
- data/lib/rucoa/handlers/initialized_handler.rb +10 -0
- data/lib/rucoa/handlers/shutdown_handler.rb +12 -0
- data/lib/rucoa/handlers/text_document_code_action_handler.rb +78 -3
- data/lib/rucoa/handlers/text_document_did_change_handler.rb +1 -20
- data/lib/rucoa/handlers/text_document_did_open_handler.rb +11 -4
- data/lib/rucoa/handlers/text_document_document_symbol_handler.rb +242 -0
- data/lib/rucoa/handlers/text_document_formatting_handler.rb +36 -5
- data/lib/rucoa/handlers/text_document_range_formatting_handler.rb +65 -13
- data/lib/rucoa/handlers/text_document_selection_range_handler.rb +124 -8
- data/lib/rucoa/handlers/text_document_signature_help_handler.rb +68 -0
- data/lib/rucoa/handlers.rb +4 -0
- data/lib/rucoa/node_concerns/name_full_qualifiable.rb +20 -0
- data/lib/rucoa/node_concerns.rb +7 -0
- data/lib/rucoa/node_inspector.rb +111 -0
- data/lib/rucoa/nodes/base.rb +43 -0
- data/lib/rucoa/nodes/casgn_node.rb +14 -0
- data/lib/rucoa/nodes/class_node.rb +8 -0
- data/lib/rucoa/nodes/const_node.rb +12 -0
- data/lib/rucoa/nodes/def_node.rb +71 -0
- data/lib/rucoa/nodes/defs_node.rb +12 -0
- data/lib/rucoa/nodes/lvar_node.rb +25 -0
- data/lib/rucoa/nodes/module_node.rb +21 -0
- data/lib/rucoa/nodes/sclass_node.rb +8 -0
- data/lib/rucoa/nodes/send_node.rb +60 -0
- data/lib/rucoa/nodes/str_node.rb +4 -0
- data/lib/rucoa/nodes/sym_node.rb +12 -0
- data/lib/rucoa/nodes.rb +10 -0
- data/lib/rucoa/parser_builder.rb +20 -10
- data/lib/rucoa/position.rb +2 -2
- data/lib/rucoa/range.rb +64 -14
- data/lib/rucoa/rbs_document_loader.rb +43 -0
- data/lib/rucoa/rubocop_autocorrector.rb +1 -1
- data/lib/rucoa/rubocop_investigator.rb +1 -1
- data/lib/rucoa/server.rb +20 -1
- data/lib/rucoa/source.rb +56 -6
- data/lib/rucoa/source_store.rb +6 -10
- data/lib/rucoa/types/method_type.rb +23 -0
- data/lib/rucoa/types.rb +7 -0
- data/lib/rucoa/version.rb +1 -1
- data/lib/rucoa/yard_glob_document_loader.rb +47 -0
- data/lib/rucoa/yard_string_document_loader.rb +70 -0
- data/lib/rucoa.rb +10 -5
- data/rucoa.gemspec +2 -0
- metadata +68 -7
- data/lib/rucoa/code_action_provider.rb +0 -102
- data/lib/rucoa/diagnostic_provider.rb +0 -143
- data/lib/rucoa/formatting_provider.rb +0 -54
- data/lib/rucoa/range_formatting_provider.rb +0 -67
- data/lib/rucoa/selection_range_provider.rb +0 -99
data/lib/rucoa/server.rb
CHANGED
@@ -4,21 +4,31 @@ module Rucoa
|
|
4
4
|
class Server
|
5
5
|
# @return [Hash{String => Class}]
|
6
6
|
METHOD_TO_HANDLER_MAP = {
|
7
|
+
'exit' => Handlers::ExitHandler,
|
7
8
|
'initialize' => Handlers::InitializeHandler,
|
8
9
|
'initialized' => Handlers::InitializedHandler,
|
10
|
+
'shutdown' => Handlers::ShutdownHandler,
|
9
11
|
'textDocument/codeAction' => Handlers::TextDocumentCodeActionHandler,
|
10
12
|
'textDocument/didChange' => Handlers::TextDocumentDidChangeHandler,
|
11
13
|
'textDocument/didOpen' => Handlers::TextDocumentDidOpenHandler,
|
14
|
+
'textDocument/documentSymbol' => Handlers::TextDocumentDocumentSymbolHandler,
|
12
15
|
'textDocument/formatting' => Handlers::TextDocumentFormattingHandler,
|
13
16
|
'textDocument/rangeFormatting' => Handlers::TextDocumentRangeFormattingHandler,
|
14
17
|
'textDocument/selectionRange' => Handlers::TextDocumentSelectionRangeHandler,
|
18
|
+
'textDocument/signatureHelp' => Handlers::TextDocumentSignatureHelpHandler,
|
15
19
|
'workspace/didChangeConfiguration' => Handlers::WorkspaceDidChangeConfigurationHandler
|
16
20
|
}.freeze
|
17
21
|
private_constant :METHOD_TO_HANDLER_MAP
|
18
22
|
|
23
|
+
# @return [Boolean]
|
24
|
+
attr_accessor :shutting_down
|
25
|
+
|
19
26
|
# @return [Rucoa::Configuration]
|
20
27
|
attr_reader :configuration
|
21
28
|
|
29
|
+
# @return [Rucoa::DefinitionStore]
|
30
|
+
attr_reader :definition_store
|
31
|
+
|
22
32
|
# @return [Rucoa::SourceStore]
|
23
33
|
attr_reader :source_store
|
24
34
|
|
@@ -28,10 +38,14 @@ module Rucoa
|
|
28
38
|
@reader = MessageReader.new(input)
|
29
39
|
@writer = MessageWriter.new(output)
|
30
40
|
|
41
|
+
@client_response_handlers = {}
|
31
42
|
@configuration = Configuration.new
|
32
43
|
@server_request_id = 0
|
33
|
-
@
|
44
|
+
@shutting_down = false
|
34
45
|
@source_store = SourceStore.new
|
46
|
+
|
47
|
+
@definition_store = DefinitionStore.new
|
48
|
+
@definition_store.definitions += DefinitionArchiver.load
|
35
49
|
end
|
36
50
|
|
37
51
|
# @return [void]
|
@@ -41,6 +55,11 @@ module Rucoa
|
|
41
55
|
end
|
42
56
|
end
|
43
57
|
|
58
|
+
# @return [void]
|
59
|
+
def finish
|
60
|
+
exit(0)
|
61
|
+
end
|
62
|
+
|
44
63
|
# @yieldparam response [Hash]
|
45
64
|
# @param message [Hash]
|
46
65
|
# @return [void]
|
data/lib/rucoa/source.rb
CHANGED
@@ -6,13 +6,59 @@ module Rucoa
|
|
6
6
|
attr_reader :content
|
7
7
|
|
8
8
|
# @return [String]
|
9
|
-
attr_reader :
|
9
|
+
attr_reader :uri
|
10
10
|
|
11
11
|
# @param content [String]
|
12
|
-
# @param
|
13
|
-
def initialize(content:,
|
12
|
+
# @param uri [String, nil]
|
13
|
+
def initialize(content:, uri: nil)
|
14
14
|
@content = content
|
15
|
-
@
|
15
|
+
@uri = uri
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [Array<Rucoa::Definition::Base>]
|
19
|
+
# @example returns definitions from given source
|
20
|
+
# content = <<~RUBY
|
21
|
+
# class Foo
|
22
|
+
# def bar
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
# RUBY
|
26
|
+
# source = Rucoa::Source.new(
|
27
|
+
# content: content,
|
28
|
+
# uri: 'file:///path/to/foo.rb'
|
29
|
+
# )
|
30
|
+
# expect(source.definitions).to match(
|
31
|
+
# [
|
32
|
+
# a_kind_of(Rucoa::Definitions::MethodDefinition)
|
33
|
+
# ]
|
34
|
+
# )
|
35
|
+
def definitions
|
36
|
+
@definitions ||= YardStringDocumentLoader.call(
|
37
|
+
content: @content,
|
38
|
+
path: path
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [String, nil]
|
43
|
+
# @example returns path from given VSCode URI
|
44
|
+
# source = Rucoa::Source.new(
|
45
|
+
# content: '',
|
46
|
+
# uri: 'file:///path/to/foo.rb'
|
47
|
+
# )
|
48
|
+
# expect(source.path).to eq('/path/to/foo.rb')
|
49
|
+
# @example returns nil for untitled URI
|
50
|
+
# source = Rucoa::Source.new(
|
51
|
+
# content: '',
|
52
|
+
# uri: 'untitled:Untitled-1'
|
53
|
+
# )
|
54
|
+
# expect(source.path).to be_nil
|
55
|
+
def path
|
56
|
+
return unless @uri
|
57
|
+
|
58
|
+
path = ::URI.parse(@uri).path
|
59
|
+
return unless path
|
60
|
+
|
61
|
+
::CGI.unescape(path)
|
16
62
|
end
|
17
63
|
|
18
64
|
# @param position [Rucoa::Position]
|
@@ -21,15 +67,19 @@ module Rucoa
|
|
21
67
|
root_and_descendant_nodes.reverse.find do |node|
|
22
68
|
node.include_position?(position)
|
23
69
|
end
|
70
|
+
rescue ::Parser::SyntaxError
|
71
|
+
nil
|
24
72
|
end
|
25
73
|
|
26
|
-
private
|
27
|
-
|
28
74
|
# @return [Rucoa::Nodes::Base, nil]
|
29
75
|
def root_node
|
30
76
|
@root_node ||= Parser.call(@content)
|
77
|
+
rescue ::Parser::SyntaxError
|
78
|
+
nil
|
31
79
|
end
|
32
80
|
|
81
|
+
private
|
82
|
+
|
33
83
|
# @return [Array<Rucoa::Nodes::Base>]
|
34
84
|
def root_and_descendant_nodes
|
35
85
|
return [] unless root_node
|
data/lib/rucoa/source_store.rb
CHANGED
@@ -9,22 +9,18 @@ module Rucoa
|
|
9
9
|
@data = {}
|
10
10
|
end
|
11
11
|
|
12
|
+
# @param source [Rucoa::Source]
|
13
|
+
# @return [void]
|
14
|
+
def update(source)
|
15
|
+
@data[source.uri] = source
|
16
|
+
end
|
17
|
+
|
12
18
|
# @param uri [String]
|
13
19
|
# @return [String, nil]
|
14
20
|
def get(uri)
|
15
21
|
@data[uri]
|
16
22
|
end
|
17
23
|
|
18
|
-
# @param uri [String]
|
19
|
-
# @param content [String]
|
20
|
-
# @return [void]
|
21
|
-
def set(uri, content)
|
22
|
-
@data[uri] = Source.new(
|
23
|
-
content: content,
|
24
|
-
path: path_from_uri(uri)
|
25
|
-
)
|
26
|
-
end
|
27
|
-
|
28
24
|
# @yieldparam uri [String]
|
29
25
|
# @return [Enumerable<String>]
|
30
26
|
def each_uri(&block)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rucoa
|
4
|
+
module Types
|
5
|
+
class MethodType
|
6
|
+
# @return [String]
|
7
|
+
attr_reader :parameters_string
|
8
|
+
|
9
|
+
# @return [String]
|
10
|
+
attr_reader :return_type
|
11
|
+
|
12
|
+
# @param parameters_string [String]
|
13
|
+
# @param return_type [String]
|
14
|
+
def initialize(
|
15
|
+
parameters_string:,
|
16
|
+
return_type:
|
17
|
+
)
|
18
|
+
@parameters_string = parameters_string
|
19
|
+
@return_type = return_type
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/rucoa/types.rb
ADDED
data/lib/rucoa/version.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'yard'
|
5
|
+
|
6
|
+
module Rucoa
|
7
|
+
class YardGlobDocumentLoader
|
8
|
+
class << self
|
9
|
+
# @param globs [Array<String>]
|
10
|
+
# @return [Array<Rucoa::Definitions::Base>]
|
11
|
+
def call(globs:)
|
12
|
+
new(
|
13
|
+
globs: globs
|
14
|
+
).call
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param globs [String]
|
19
|
+
def initialize(globs:)
|
20
|
+
@globs = globs
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [Array<Rucoa::Definitions::Base>]
|
24
|
+
def call
|
25
|
+
code_objects.filter_map do |code_object|
|
26
|
+
case code_object
|
27
|
+
when ::YARD::CodeObjects::MethodObject
|
28
|
+
DefinitionBuilders::YardMethodDefinitionBuilder.call(
|
29
|
+
code_object: code_object,
|
30
|
+
path: code_object.file
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# @return [Array<YARD::CodeObjects::Base>]
|
39
|
+
def code_objects
|
40
|
+
::YARD::Logger.instance.enter_level(::Logger::FATAL) do
|
41
|
+
::YARD::Registry.clear
|
42
|
+
::YARD.parse(@globs)
|
43
|
+
::YARD::Registry.all
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'yard'
|
5
|
+
|
6
|
+
module Rucoa
|
7
|
+
class YardStringDocumentLoader
|
8
|
+
class << self
|
9
|
+
# @param content [String]
|
10
|
+
# @return [Array<Rucoa::Definitions::Base>]
|
11
|
+
# @example returns method definitions from Ruby source code
|
12
|
+
# content = <<~RUBY
|
13
|
+
# class Foo
|
14
|
+
# # Return given argument as an Integer.
|
15
|
+
# # @param bar [String]
|
16
|
+
# # @return [Integer]
|
17
|
+
# def foo(bar)
|
18
|
+
# bar.to_i
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
# RUBY
|
22
|
+
# definitions = Rucoa::YardStringDocumentLoader.call(
|
23
|
+
# content: content,
|
24
|
+
# path: '/path/to/foo.rb'
|
25
|
+
# )
|
26
|
+
# expect(definitions.size).to eq(1)
|
27
|
+
# expect(definitions.first.full_qualified_name).to eq('Foo#foo')
|
28
|
+
# expect(definitions.first.source_path).to eq('/path/to/foo.rb')
|
29
|
+
# expect(definitions.first.description).to eq('Return given argument as an Integer.')
|
30
|
+
# expect(definitions.first.return_types).to eq(%w[Integer])
|
31
|
+
def call(content:, path:)
|
32
|
+
new(
|
33
|
+
content: content,
|
34
|
+
path: path
|
35
|
+
).call
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param content [String]
|
40
|
+
# @param path [String]
|
41
|
+
def initialize(content:, path:)
|
42
|
+
@content = content
|
43
|
+
@path = path
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Array<Rucoa::Definitions::Base>]
|
47
|
+
def call
|
48
|
+
code_objects.filter_map do |code_object|
|
49
|
+
case code_object
|
50
|
+
when ::YARD::CodeObjects::MethodObject
|
51
|
+
DefinitionBuilders::YardMethodDefinitionBuilder.call(
|
52
|
+
code_object: code_object,
|
53
|
+
path: @path
|
54
|
+
)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
# @return [Array<YARD::CodeObjects::Base>]
|
62
|
+
def code_objects
|
63
|
+
::YARD::Logger.instance.enter_level(::Logger::FATAL) do
|
64
|
+
::YARD::Registry.clear
|
65
|
+
::YARD.parse_string(@content)
|
66
|
+
::YARD::Registry.all
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/rucoa.rb
CHANGED
@@ -4,26 +4,31 @@ require_relative 'rucoa/version'
|
|
4
4
|
|
5
5
|
module Rucoa
|
6
6
|
autoload :Cli, 'rucoa/cli'
|
7
|
-
autoload :CodeActionProvider, 'rucoa/code_action_provider'
|
8
7
|
autoload :Configuration, 'rucoa/configuration'
|
9
|
-
autoload :
|
8
|
+
autoload :DefinitionArchiver, 'rucoa/definition_archiver'
|
9
|
+
autoload :DefinitionBuilders, 'rucoa/definition_builders'
|
10
|
+
autoload :Definitions, 'rucoa/definitions'
|
11
|
+
autoload :DefinitionStore, 'rucoa/definition_store'
|
10
12
|
autoload :Errors, 'rucoa/errors'
|
11
|
-
autoload :FormattingProvider, 'rucoa/formatting_provider'
|
12
13
|
autoload :HandlerConcerns, 'rucoa/handler_concerns'
|
13
14
|
autoload :Handlers, 'rucoa/handlers'
|
14
15
|
autoload :MessageReader, 'rucoa/message_reader'
|
15
16
|
autoload :MessageWriter, 'rucoa/message_writer'
|
17
|
+
autoload :NodeConcerns, 'rucoa/node_concerns'
|
18
|
+
autoload :NodeInspector, 'rucoa/node_inspector'
|
16
19
|
autoload :Nodes, 'rucoa/nodes'
|
17
20
|
autoload :Parser, 'rucoa/parser'
|
18
21
|
autoload :ParserBuilder, 'rucoa/parser_builder'
|
19
22
|
autoload :Position, 'rucoa/position'
|
20
23
|
autoload :Range, 'rucoa/range'
|
21
|
-
autoload :
|
24
|
+
autoload :RbsDocumentLoader, 'rucoa/rbs_document_loader'
|
22
25
|
autoload :RubocopAutocorrector, 'rucoa/rubocop_autocorrector'
|
23
26
|
autoload :RubocopConfigurationChecker, 'rucoa/rubocop_configuration_checker'
|
24
27
|
autoload :RubocopInvestigator, 'rucoa/rubocop_investigator'
|
25
|
-
autoload :SelectionRangeProvider, 'rucoa/selection_range_provider'
|
26
28
|
autoload :Server, 'rucoa/server'
|
27
29
|
autoload :Source, 'rucoa/source'
|
28
30
|
autoload :SourceStore, 'rucoa/source_store'
|
31
|
+
autoload :Types, 'rucoa/types'
|
32
|
+
autoload :YardGlobDocumentLoader, 'rucoa/yard_glob_document_loader'
|
33
|
+
autoload :YardStringDocumentLoader, 'rucoa/yard_string_document_loader'
|
29
34
|
end
|
data/rucoa.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rucoa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rbs
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rubocop
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,20 @@ dependencies:
|
|
38
52
|
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
description:
|
42
70
|
email:
|
43
71
|
- r7kamura@gmail.com
|
@@ -54,46 +82,79 @@ files:
|
|
54
82
|
- LICENSE.txt
|
55
83
|
- README.md
|
56
84
|
- Rakefile
|
85
|
+
- data/definitions_ruby_3_1
|
57
86
|
- exe/rucoa
|
87
|
+
- images/diagnostics.gif
|
88
|
+
- images/document-formatting.gif
|
89
|
+
- images/document-symbol.gif
|
90
|
+
- images/selection-ranges.gif
|
58
91
|
- lib/rucoa.rb
|
59
92
|
- lib/rucoa/cli.rb
|
60
|
-
- lib/rucoa/code_action_provider.rb
|
61
93
|
- lib/rucoa/configuration.rb
|
62
|
-
- lib/rucoa/
|
94
|
+
- lib/rucoa/definition_archiver.rb
|
95
|
+
- lib/rucoa/definition_builders.rb
|
96
|
+
- lib/rucoa/definition_builders/rbs_constant_definition_builder.rb
|
97
|
+
- lib/rucoa/definition_builders/rbs_method_definition_builder.rb
|
98
|
+
- lib/rucoa/definition_builders/yard_method_definition_builder.rb
|
99
|
+
- lib/rucoa/definition_store.rb
|
100
|
+
- lib/rucoa/definitions.rb
|
101
|
+
- lib/rucoa/definitions/base.rb
|
102
|
+
- lib/rucoa/definitions/constant_definition.rb
|
103
|
+
- lib/rucoa/definitions/method_definition.rb
|
104
|
+
- lib/rucoa/definitions/method_parameter_definition.rb
|
63
105
|
- lib/rucoa/errors.rb
|
64
|
-
- lib/rucoa/formatting_provider.rb
|
65
106
|
- lib/rucoa/handler_concerns.rb
|
66
107
|
- lib/rucoa/handler_concerns/configuration_requestable.rb
|
67
108
|
- lib/rucoa/handler_concerns/diagnostics_publishable.rb
|
68
109
|
- lib/rucoa/handlers.rb
|
69
110
|
- lib/rucoa/handlers/base.rb
|
111
|
+
- lib/rucoa/handlers/exit_handler.rb
|
70
112
|
- lib/rucoa/handlers/initialize_handler.rb
|
71
113
|
- lib/rucoa/handlers/initialized_handler.rb
|
114
|
+
- lib/rucoa/handlers/shutdown_handler.rb
|
72
115
|
- lib/rucoa/handlers/text_document_code_action_handler.rb
|
73
116
|
- lib/rucoa/handlers/text_document_did_change_handler.rb
|
74
117
|
- lib/rucoa/handlers/text_document_did_open_handler.rb
|
118
|
+
- lib/rucoa/handlers/text_document_document_symbol_handler.rb
|
75
119
|
- lib/rucoa/handlers/text_document_formatting_handler.rb
|
76
120
|
- lib/rucoa/handlers/text_document_range_formatting_handler.rb
|
77
121
|
- lib/rucoa/handlers/text_document_selection_range_handler.rb
|
122
|
+
- lib/rucoa/handlers/text_document_signature_help_handler.rb
|
78
123
|
- lib/rucoa/handlers/workspace_did_change_configuration_handler.rb
|
79
124
|
- lib/rucoa/message_reader.rb
|
80
125
|
- lib/rucoa/message_writer.rb
|
126
|
+
- lib/rucoa/node_concerns.rb
|
127
|
+
- lib/rucoa/node_concerns/name_full_qualifiable.rb
|
128
|
+
- lib/rucoa/node_inspector.rb
|
81
129
|
- lib/rucoa/nodes.rb
|
82
130
|
- lib/rucoa/nodes/base.rb
|
131
|
+
- lib/rucoa/nodes/casgn_node.rb
|
132
|
+
- lib/rucoa/nodes/class_node.rb
|
133
|
+
- lib/rucoa/nodes/const_node.rb
|
134
|
+
- lib/rucoa/nodes/def_node.rb
|
135
|
+
- lib/rucoa/nodes/defs_node.rb
|
136
|
+
- lib/rucoa/nodes/lvar_node.rb
|
137
|
+
- lib/rucoa/nodes/module_node.rb
|
138
|
+
- lib/rucoa/nodes/sclass_node.rb
|
139
|
+
- lib/rucoa/nodes/send_node.rb
|
83
140
|
- lib/rucoa/nodes/str_node.rb
|
141
|
+
- lib/rucoa/nodes/sym_node.rb
|
84
142
|
- lib/rucoa/parser.rb
|
85
143
|
- lib/rucoa/parser_builder.rb
|
86
144
|
- lib/rucoa/position.rb
|
87
145
|
- lib/rucoa/range.rb
|
88
|
-
- lib/rucoa/
|
146
|
+
- lib/rucoa/rbs_document_loader.rb
|
89
147
|
- lib/rucoa/rubocop_autocorrector.rb
|
90
148
|
- lib/rucoa/rubocop_configuration_checker.rb
|
91
149
|
- lib/rucoa/rubocop_investigator.rb
|
92
|
-
- lib/rucoa/selection_range_provider.rb
|
93
150
|
- lib/rucoa/server.rb
|
94
151
|
- lib/rucoa/source.rb
|
95
152
|
- lib/rucoa/source_store.rb
|
153
|
+
- lib/rucoa/types.rb
|
154
|
+
- lib/rucoa/types/method_type.rb
|
96
155
|
- lib/rucoa/version.rb
|
156
|
+
- lib/rucoa/yard_glob_document_loader.rb
|
157
|
+
- lib/rucoa/yard_string_document_loader.rb
|
97
158
|
- rucoa.gemspec
|
98
159
|
homepage: https://github.com/r7kamura/rucoa
|
99
160
|
licenses:
|
@@ -1,102 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Rucoa
|
4
|
-
class CodeActionProvider
|
5
|
-
class << self
|
6
|
-
# @param diagnostics [Array<Hash>]
|
7
|
-
# @return [Array<Hash>]
|
8
|
-
def call(diagnostics:)
|
9
|
-
new(diagnostics: diagnostics).call
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
# @param diagnostics [Array<Hash>]
|
14
|
-
def initialize(diagnostics:)
|
15
|
-
@diagnostics = diagnostics
|
16
|
-
end
|
17
|
-
|
18
|
-
# @return [Array<Hash>]
|
19
|
-
def call
|
20
|
-
correctable_diagnostics.map do |diagnostic|
|
21
|
-
DiagnosticToCodeActionMapper.call(diagnostic)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
# @return [Array<Hash>]
|
28
|
-
def correctable_diagnostics
|
29
|
-
@diagnostics.select do |diagnostic|
|
30
|
-
diagnostic.dig('data', 'edits')
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class DiagnosticToCodeActionMapper
|
35
|
-
class << self
|
36
|
-
# @param diagnostic [Hash]
|
37
|
-
# @return [Hash]
|
38
|
-
def call(diagnostic)
|
39
|
-
new(diagnostic).call
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# @param diagnostic [Hash]
|
44
|
-
def initialize(diagnostic)
|
45
|
-
@diagnostic = diagnostic
|
46
|
-
end
|
47
|
-
|
48
|
-
# @return [Hash]
|
49
|
-
def call
|
50
|
-
{
|
51
|
-
diagnostics: diagnostics,
|
52
|
-
edit: edit,
|
53
|
-
isPreferred: preferred?,
|
54
|
-
kind: kind,
|
55
|
-
title: title
|
56
|
-
}
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
# @return [Hash]
|
62
|
-
def edit
|
63
|
-
{
|
64
|
-
documentChanges: [
|
65
|
-
{
|
66
|
-
edits: @diagnostic.dig('data', 'edits'),
|
67
|
-
textDocument: {
|
68
|
-
uri: @diagnostic.dig('data', 'uri'),
|
69
|
-
version: nil
|
70
|
-
}
|
71
|
-
}
|
72
|
-
]
|
73
|
-
}
|
74
|
-
end
|
75
|
-
|
76
|
-
# @return [String]
|
77
|
-
def cop_name
|
78
|
-
@diagnostic.dig('data', 'cop_name')
|
79
|
-
end
|
80
|
-
|
81
|
-
# @return [Array]
|
82
|
-
def diagnostics
|
83
|
-
[@diagnostic]
|
84
|
-
end
|
85
|
-
|
86
|
-
# @return [Boolean]
|
87
|
-
def preferred?
|
88
|
-
true
|
89
|
-
end
|
90
|
-
|
91
|
-
# @return [String]
|
92
|
-
def kind
|
93
|
-
'quickfix'
|
94
|
-
end
|
95
|
-
|
96
|
-
# @return [String]
|
97
|
-
def title
|
98
|
-
"Autocorrect #{cop_name}"
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|