rucoa 0.4.0 → 0.6.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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +12 -2
  5. data/README.md +47 -17
  6. data/data/definitions_ruby_3_1 +0 -0
  7. data/images/diagnostics.gif +0 -0
  8. data/images/document-formatting.gif +0 -0
  9. data/images/document-symbol.gif +0 -0
  10. data/images/selection-ranges.gif +0 -0
  11. data/lib/rucoa/cli.rb +3 -2
  12. data/lib/rucoa/configuration.rb +111 -32
  13. data/lib/rucoa/definition_archiver.rb +29 -0
  14. data/lib/rucoa/definition_builders/rbs_constant_definition_builder.rb +44 -0
  15. data/lib/rucoa/definition_builders/rbs_method_definition_builder.rb +106 -0
  16. data/lib/rucoa/definition_builders/yard_method_definition_builder.rb +218 -0
  17. data/lib/rucoa/definition_builders.rb +9 -0
  18. data/lib/rucoa/definition_store.rb +63 -0
  19. data/lib/rucoa/definitions/base.rb +12 -0
  20. data/lib/rucoa/definitions/constant_definition.rb +51 -0
  21. data/lib/rucoa/definitions/method_definition.rb +126 -0
  22. data/lib/rucoa/definitions/method_parameter_definition.rb +30 -0
  23. data/lib/rucoa/definitions.rb +9 -0
  24. data/lib/rucoa/handlers/base.rb +8 -0
  25. data/lib/rucoa/handlers/exit_handler.rb +11 -0
  26. data/lib/rucoa/handlers/initialize_handler.rb +13 -0
  27. data/lib/rucoa/handlers/initialized_handler.rb +10 -0
  28. data/lib/rucoa/handlers/shutdown_handler.rb +12 -0
  29. data/lib/rucoa/handlers/text_document_completion_handler.rb +216 -0
  30. data/lib/rucoa/handlers/text_document_did_change_handler.rb +1 -20
  31. data/lib/rucoa/handlers/text_document_did_open_handler.rb +11 -4
  32. data/lib/rucoa/handlers/text_document_document_symbol_handler.rb +5 -4
  33. data/lib/rucoa/handlers/text_document_hover_handler.rb +76 -0
  34. data/lib/rucoa/handlers/text_document_range_formatting_handler.rb +1 -1
  35. data/lib/rucoa/handlers/text_document_selection_range_handler.rb +3 -3
  36. data/lib/rucoa/handlers/text_document_signature_help_handler.rb +68 -0
  37. data/lib/rucoa/handlers.rb +5 -0
  38. data/lib/rucoa/node_inspector.rb +111 -0
  39. data/lib/rucoa/nodes/base.rb +30 -0
  40. data/lib/rucoa/nodes/def_node.rb +59 -0
  41. data/lib/rucoa/nodes/lvar_node.rb +25 -0
  42. data/lib/rucoa/nodes/send_node.rb +43 -0
  43. data/lib/rucoa/nodes.rb +1 -0
  44. data/lib/rucoa/parser_builder.rb +1 -0
  45. data/lib/rucoa/position.rb +14 -3
  46. data/lib/rucoa/range.rb +64 -14
  47. data/lib/rucoa/rbs_document_loader.rb +43 -0
  48. data/lib/rucoa/rubocop_autocorrector.rb +1 -1
  49. data/lib/rucoa/rubocop_investigator.rb +1 -1
  50. data/lib/rucoa/server.rb +63 -13
  51. data/lib/rucoa/source.rb +59 -4
  52. data/lib/rucoa/source_store.rb +6 -10
  53. data/lib/rucoa/types/method_type.rb +23 -0
  54. data/lib/rucoa/types.rb +7 -0
  55. data/lib/rucoa/version.rb +1 -1
  56. data/lib/rucoa/yard_glob_document_loader.rb +47 -0
  57. data/lib/rucoa/yard_string_document_loader.rb +70 -0
  58. data/lib/rucoa.rb +9 -0
  59. data/rucoa.gemspec +2 -0
  60. metadata +58 -2
@@ -4,9 +4,68 @@ module Rucoa
4
4
  module Nodes
5
5
  class DefNode < Base
6
6
  # @return [String]
7
+ # @example returns method name
8
+ # node = Rucoa::Source.new(
9
+ # content: <<~RUBY
10
+ # module Foo
11
+ # class Bar
12
+ # def baz
13
+ # end
14
+ # end
15
+ # end
16
+ # RUBY
17
+ # ).node_at(
18
+ # Rucoa::Position.new(
19
+ # column: 4,
20
+ # line: 3
21
+ # )
22
+ # )
23
+ # expect(node.name).to eq('baz')
7
24
  def name
8
25
  children[0].to_s
9
26
  end
27
+
28
+ # @return [String]
29
+ # @example returns full qualified name
30
+ # node = Rucoa::Source.new(
31
+ # content: <<~RUBY
32
+ # module Foo
33
+ # class Bar
34
+ # def baz
35
+ # end
36
+ # end
37
+ # end
38
+ # RUBY
39
+ # ).node_at(
40
+ # Rucoa::Position.new(
41
+ # column: 4,
42
+ # line: 3
43
+ # )
44
+ # )
45
+ # expect(node.full_qualified_name).to eq('Foo::Bar#baz')
46
+ def full_qualified_name
47
+ [
48
+ namespace,
49
+ method_marker,
50
+ name
51
+ ].join
52
+ end
53
+
54
+ private
55
+
56
+ # @return [String]
57
+ def method_marker
58
+ if singleton?
59
+ '.'
60
+ else
61
+ '#'
62
+ end
63
+ end
64
+
65
+ # @return [Boolean]
66
+ def singleton?
67
+ each_ancestor(:sclass).any?
68
+ end
10
69
  end
11
70
  end
12
71
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rucoa
4
+ module Nodes
5
+ class LvarNode < Base
6
+ # @return [String]
7
+ # @example returns local variable name
8
+ # node = Rucoa::Source.new(
9
+ # content: <<~RUBY
10
+ # foo = 1
11
+ # foo
12
+ # RUBY
13
+ # ).node_at(
14
+ # Rucoa::Position.new(
15
+ # column: 2,
16
+ # line: 2
17
+ # )
18
+ # )
19
+ # expect(node.name).to eq('foo')
20
+ def name
21
+ children[0].to_s
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,14 +4,57 @@ module Rucoa
4
4
  module Nodes
5
5
  class SendNode < Base
6
6
  # @return [Array<Rucoa::Nodes::Base>]
7
+ # @example returns arguments
8
+ # node = Rucoa::Parser.call(
9
+ # <<~RUBY
10
+ # foo(bar, baz)
11
+ # RUBY
12
+ # )
13
+ # expect(node.arguments.map(&:name)).to eq(
14
+ # %w[
15
+ # bar
16
+ # baz
17
+ # ]
18
+ # )
7
19
  def arguments
8
20
  children[2..]
9
21
  end
10
22
 
11
23
  # @return [String]
24
+ # @example returns method name
25
+ # node = Rucoa::Parser.call(
26
+ # <<~RUBY
27
+ # foo(bar, baz)
28
+ # RUBY
29
+ # )
30
+ # expect(node.name).to eq('foo')
12
31
  def name
13
32
  children[1].to_s
14
33
  end
34
+
35
+ # @return [Rucoa::Nodes::Base, nil]
36
+ # @example returns nil for receiver-less method call
37
+ # node = Rucoa::Parser.call(
38
+ # <<~RUBY
39
+ # foo(bar, baz)
40
+ # RUBY
41
+ # )
42
+ # expect(node.receiver).to be_nil
43
+ # @example returns receiver
44
+ # node = Rucoa::Source.new(
45
+ # content: <<~RUBY
46
+ # foo.bar
47
+ # RUBY
48
+ # ).node_at(
49
+ # Rucoa::Position.new(
50
+ # column: 4,
51
+ # line: 1
52
+ # )
53
+ # )
54
+ # expect(node.receiver).to be_a(Rucoa::Nodes::SendNode)
55
+ def receiver
56
+ children[0]
57
+ end
15
58
  end
16
59
  end
17
60
  end
data/lib/rucoa/nodes.rb CHANGED
@@ -8,6 +8,7 @@ module Rucoa
8
8
  autoload :ConstNode, 'rucoa/nodes/const_node'
9
9
  autoload :DefNode, 'rucoa/nodes/def_node'
10
10
  autoload :DefsNode, 'rucoa/nodes/defs_node'
11
+ autoload :LvarNode, 'rucoa/nodes/lvar_node'
11
12
  autoload :ModuleNode, 'rucoa/nodes/module_node'
12
13
  autoload :SclassNode, 'rucoa/nodes/sclass_node'
13
14
  autoload :SendNode, 'rucoa/nodes/send_node'
@@ -10,6 +10,7 @@ module Rucoa
10
10
  const: Nodes::ConstNode,
11
11
  def: Nodes::DefNode,
12
12
  defs: Nodes::DefsNode,
13
+ lvar: Nodes::LvarNode,
13
14
  module: Nodes::ModuleNode,
14
15
  sclass: Nodes::SclassNode,
15
16
  send: Nodes::SendNode,
@@ -21,7 +21,7 @@ module Rucoa
21
21
  )
22
22
  end
23
23
 
24
- # @param hash [Hash{Symbol => Integer}]
24
+ # @param hash [Hash{String => Integer}]
25
25
  # @return [Rucoa::Position]
26
26
  def from_vscode_position(hash)
27
27
  new(
@@ -44,11 +44,22 @@ module Rucoa
44
44
  @line = line
45
45
  end
46
46
 
47
+ # @param text [String]
48
+ # @return [Integer]
49
+ def to_index_of(text)
50
+ text.each_line.take(@line - 1).sum(&:length) + @column
51
+ end
52
+
53
+ # @return [Rucoa::Range]
54
+ def to_range
55
+ Range.new(self, self)
56
+ end
57
+
47
58
  # @return [Hash]
48
59
  def to_vscode_position
49
60
  {
50
- character: @column,
51
- line: @line - 1
61
+ 'character' => @column,
62
+ 'line' => @line - 1
52
63
  }
53
64
  end
54
65
  end
data/lib/rucoa/range.rb CHANGED
@@ -30,28 +30,85 @@ module Rucoa
30
30
 
31
31
  # @param beginning [Rucoa::Position]
32
32
  # @param ending [Ruoca::Position]
33
- # @param exclude_end [Boolean]
34
- def initialize(beginning, ending, exclude_end: true)
33
+ # @param including_ending [Boolean]
34
+ def initialize(beginning, ending, including_ending: true)
35
35
  @beginning = beginning
36
36
  @ending = ending
37
- @exclude_end = exclude_end
37
+ @including_ending = including_ending
38
38
  end
39
39
 
40
40
  # @param range [Rucoa::Range]
41
41
  # @return [Boolean]
42
- def contains?(range)
43
- copy = with_including_end
44
- copy.include?(range.beginning) && copy.include?(range.ending)
42
+ # @example returns true when the range is contained in self
43
+ # range = Rucoa::Range.new(
44
+ # Rucoa::Position.new(
45
+ # column: 0,
46
+ # line: 0
47
+ # ),
48
+ # Rucoa::Position.new(
49
+ # column: 0,
50
+ # line: 2
51
+ # )
52
+ # )
53
+ # expect(range).to contain(
54
+ # Rucoa::Range.new(
55
+ # Rucoa::Position.new(
56
+ # column: 0,
57
+ # line: 0
58
+ # ),
59
+ # Rucoa::Position.new(
60
+ # column: 0,
61
+ # line: 0
62
+ # )
63
+ # )
64
+ # )
65
+ def contain?(range)
66
+ include?(range.beginning) && include?(range.ending)
45
67
  end
46
68
 
47
69
  # @param position [Rucoa::Position]
48
70
  # @return [Boolean]
71
+ # @example returns true when the position is included in self
72
+ # range = Rucoa::Range.new(
73
+ # Rucoa::Position.new(
74
+ # column: 0,
75
+ # line: 0
76
+ # ),
77
+ # Rucoa::Position.new(
78
+ # column: 0,
79
+ # line: 2
80
+ # )
81
+ # )
82
+ # expect(range).to include(
83
+ # Rucoa::Position.new(
84
+ # column: 0,
85
+ # line: 0
86
+ # )
87
+ # )
88
+ # expect(range).to include(
89
+ # Rucoa::Position.new(
90
+ # column: 0,
91
+ # line: 1
92
+ # )
93
+ # )
94
+ # expect(range).to include(
95
+ # Rucoa::Position.new(
96
+ # column: 0,
97
+ # line: 2
98
+ # )
99
+ # )
100
+ # expect(range).not_to include(
101
+ # Rucoa::Position.new(
102
+ # column: 0,
103
+ # line: 3
104
+ # )
105
+ # )
49
106
  def include?(position)
50
107
  return false if position.line > @ending.line
51
108
  return false if position.line < @beginning.line
52
109
  return false if position.column < @beginning.column
53
110
  return false if position.column > @ending.column
54
- return false if position.column == @ending.column && @exclude_end
111
+ return false if position.column == @ending.column && !@including_ending
55
112
 
56
113
  true
57
114
  end
@@ -63,12 +120,5 @@ module Rucoa
63
120
  start: @beginning.to_vscode_position
64
121
  }
65
122
  end
66
-
67
- private
68
-
69
- # @return [Rucoa::Range]
70
- def with_including_end
71
- self.class.new(@beginning, @ending, exclude_end: false)
72
- end
73
123
  end
74
124
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rbs'
4
+
5
+ module Rucoa
6
+ class RbsDocumentLoader
7
+ class << self
8
+ def call
9
+ new.call
10
+ end
11
+ end
12
+
13
+ # @return [Array<Rucoa::Definitions::Base>]
14
+ def call
15
+ declarations.flat_map do |declaration|
16
+ case declaration
17
+ when ::RBS::AST::Declarations::Constant
18
+ [
19
+ DefinitionBuilders::RbsConstantDefinitionBuilder.call(declaration: declaration)
20
+ ]
21
+ when ::RBS::AST::Declarations::Class, ::RBS::AST::Declarations::Module
22
+ declaration.members.grep(::RBS::AST::Members::MethodDefinition).map do |method_definition|
23
+ DefinitionBuilders::RbsMethodDefinitionBuilder.call(
24
+ declaration: declaration,
25
+ method_definition: method_definition
26
+ )
27
+ end
28
+ else
29
+ []
30
+ end
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ # @return [Array<RBS::AST::Declarations::Base>]
37
+ def declarations
38
+ ::RBS::Environment.from_loader(
39
+ ::RBS::EnvironmentLoader.new
40
+ ).resolve_type_names.declarations
41
+ end
42
+ end
43
+ end
@@ -31,7 +31,7 @@ module Rucoa
31
31
  # @return [String]
32
32
  def call
33
33
  @options[:stdin] = @source.content
34
- run([@source.path])
34
+ run([@source.path || 'untitled'])
35
35
  @options[:stdin]
36
36
  end
37
37
  end
@@ -31,7 +31,7 @@ module Rucoa
31
31
  # @return [Array<RuboCop::Cop::Offense>]
32
32
  def call
33
33
  @options[:stdin] = @source.content
34
- run([@source.path])
34
+ run([@source.path || 'untitled'])
35
35
  @offenses
36
36
  end
37
37
 
data/lib/rucoa/server.rb CHANGED
@@ -1,47 +1,83 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'logger'
4
+ require 'stringio'
5
+
3
6
  module Rucoa
4
7
  class Server
5
8
  # @return [Hash{String => Class}]
6
9
  METHOD_TO_HANDLER_MAP = {
10
+ 'exit' => Handlers::ExitHandler,
7
11
  'initialize' => Handlers::InitializeHandler,
8
12
  'initialized' => Handlers::InitializedHandler,
13
+ 'shutdown' => Handlers::ShutdownHandler,
9
14
  'textDocument/codeAction' => Handlers::TextDocumentCodeActionHandler,
15
+ 'textDocument/completion' => Handlers::TextDocumentCompletionHandler,
10
16
  'textDocument/didChange' => Handlers::TextDocumentDidChangeHandler,
11
17
  'textDocument/didOpen' => Handlers::TextDocumentDidOpenHandler,
12
18
  'textDocument/documentSymbol' => Handlers::TextDocumentDocumentSymbolHandler,
13
19
  'textDocument/formatting' => Handlers::TextDocumentFormattingHandler,
20
+ 'textDocument/hover' => Handlers::TextDocumentHoverHandler,
14
21
  'textDocument/rangeFormatting' => Handlers::TextDocumentRangeFormattingHandler,
15
22
  'textDocument/selectionRange' => Handlers::TextDocumentSelectionRangeHandler,
23
+ 'textDocument/signatureHelp' => Handlers::TextDocumentSignatureHelpHandler,
16
24
  'workspace/didChangeConfiguration' => Handlers::WorkspaceDidChangeConfigurationHandler
17
25
  }.freeze
18
26
  private_constant :METHOD_TO_HANDLER_MAP
19
27
 
28
+ # @return [Boolean]
29
+ attr_accessor :shutting_down
30
+
20
31
  # @return [Rucoa::Configuration]
21
32
  attr_reader :configuration
22
33
 
34
+ # @return [Rucoa::DefinitionStore]
35
+ attr_reader :definition_store
36
+
23
37
  # @return [Rucoa::SourceStore]
24
38
  attr_reader :source_store
25
39
 
26
- # @param input [IO]
27
- # @param output [IO]
28
- def initialize(input:, output:)
29
- @reader = MessageReader.new(input)
30
- @writer = MessageWriter.new(output)
40
+ # @param io_log [IO]
41
+ # @param io_in [IO]
42
+ # @param io_out [IO]
43
+ def initialize(
44
+ io_log: ::StringIO.new,
45
+ io_in: ::StringIO.new,
46
+ io_out: ::StringIO.new
47
+ )
48
+ @logger = ::Logger.new(io_log)
49
+ @logger.level = ::Logger::DEBUG
50
+ @reader = MessageReader.new(io_in)
51
+ @writer = MessageWriter.new(io_out)
31
52
 
53
+ @client_response_handlers = {}
32
54
  @configuration = Configuration.new
33
55
  @server_request_id = 0
34
- @client_response_handlers = {}
56
+ @shutting_down = false
35
57
  @source_store = SourceStore.new
58
+
59
+ @definition_store = DefinitionStore.new
60
+ @definition_store.definitions += DefinitionArchiver.load
36
61
  end
37
62
 
38
63
  # @return [void]
39
64
  def start
40
- @reader.read do |request|
41
- handle(request)
65
+ @reader.read do |message|
66
+ debug do
67
+ {
68
+ kind: :read,
69
+ message: message
70
+ }
71
+ end
72
+ handle(message)
42
73
  end
43
74
  end
44
75
 
76
+ # @return [void]
77
+ def finish
78
+ exit(0)
79
+ end
80
+
45
81
  # @yieldparam response [Hash]
46
82
  # @param message [Hash]
47
83
  # @return [void]
@@ -73,6 +109,11 @@ module Rucoa
73
109
  end
74
110
  end
75
111
 
112
+ # @yieldparam log [String]
113
+ def debug(&block)
114
+ @logger.debug(&block) if configuration.enables_debug?
115
+ end
116
+
76
117
  # @param request [Hash]
77
118
  # @return [void]
78
119
  def handle_client_request(request)
@@ -97,11 +138,14 @@ module Rucoa
97
138
  # @param message [Hash]
98
139
  # @return [void]
99
140
  def write_server_request(message, &block)
100
- @writer.write(
101
- message.merge(
102
- id: @server_request_id
103
- )
104
- )
141
+ message = message.merge('id' => @server_request_id)
142
+ debug do
143
+ {
144
+ kind: :write,
145
+ message: message
146
+ }
147
+ end
148
+ @writer.write(message)
105
149
  @client_response_handlers[@server_request_id] = block
106
150
  @server_request_id += 1
107
151
  end
@@ -109,6 +153,12 @@ module Rucoa
109
153
  # @param message [Hash]
110
154
  # @return [void]
111
155
  def write_server_response(message)
156
+ debug do
157
+ {
158
+ kind: :write,
159
+ message: message
160
+ }
161
+ end
112
162
  @writer.write(message)
113
163
  end
114
164
  end
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 :path
9
+ attr_reader :uri
10
10
 
11
11
  # @param content [String]
12
- # @param path [String, nil]
13
- def initialize(content:, path: nil)
12
+ # @param uri [String, nil]
13
+ def initialize(content:, uri: nil)
14
14
  @content = content
15
- @path = path
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,11 +67,20 @@ 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
74
  # @return [Rucoa::Nodes::Base, nil]
27
75
  def root_node
28
76
  @root_node ||= Parser.call(@content)
77
+ rescue ::Parser::SyntaxError
78
+ nil
79
+ end
80
+
81
+ # @return [Boolean]
82
+ def syntax_error?
83
+ root_node.nil?
29
84
  end
30
85
 
31
86
  private
@@ -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
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rucoa
4
+ module Types
5
+ autoload :MethodType, 'rucoa/types/method_type'
6
+ end
7
+ end
data/lib/rucoa/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rucoa
4
- VERSION = '0.4.0'
4
+ VERSION = '0.6.0'
5
5
  end