orthoses 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64cbbb058a7d4dc7c5f6f0d8cc66a23a1b2026253ad20add3cc63777a1c42227
4
- data.tar.gz: 15742e8389d7fc4e129bca6ab48203f13dad5b2338eff73a2b4c530ba239d327
3
+ metadata.gz: c2fbbb509545bf6efd770838fff4ac02168f0352f0f2e2561ed927eb3479a4bb
4
+ data.tar.gz: 259b1cf53cc3b2ea17ec3d6088260131ccd9d8562ec002b0d515cb817b96d228
5
5
  SHA512:
6
- metadata.gz: 276874fcb60ce45b3b2ffe3388e963b596f65a466c4f36f5b3986b561f756f721d797e8217a27b6a292f988343fe8f4209886b876ba03e4512466b51903e4996
7
- data.tar.gz: 73b2a614b599980d20d2d0334d87f4f508b163beff9a766979d67f39f49213a634c9e907725efd1f7a51e1552b5db90e80f3d766bba024ff050d50c5d5522b5c
6
+ metadata.gz: 50aceef69e828e6fbd90cbb23813bd66676b399d4a5551728eebf9ae8c24544aeda11c7d57810826575c53b215da541d232eb5a8ecb26fb9cf2d5a99822c7a91
7
+ data.tar.gz: 36972f90ecdf75efa516c2fb576ea616f2b949a5930463f01ff9046335ae6571d7e98f9c33593bee21397cd29754da4abdfea038c956eaaa74d92deded56ba71
data/README.md CHANGED
@@ -31,7 +31,7 @@ Orthoses::Builder.new do
31
31
  %r{app/models}.match?(path)
32
32
  }
33
33
  use YourCustom::Middleware
34
- use Orthoses::IncludeExtendPrepend
34
+ use Orthoses::Mixin
35
35
  use Orthoses::Constant
36
36
  use Orthoses::Walk,
37
37
  root: "Foo"
@@ -48,7 +48,7 @@ end.call
48
48
  Add constant signature to class/module.
49
49
  Signatures are predicted from constant values.
50
50
 
51
- ### Orthoses::IncludeExtendPrepend
51
+ ### Orthoses::Mixin
52
52
 
53
53
  Add module include/extend/prepend definition.
54
54
  It use `Module#{includeed,extended,prepended}` for capture.
@@ -5,7 +5,7 @@ module Orthoses
5
5
  # Builder.new do
6
6
  # use Orthoses::CreateFileByName
7
7
  # use Orthoses::Constant
8
- # use Orthoses::IncludeExtendPrepend
8
+ # use Orthoses::Mixin
9
9
  # use Orthoses::Walk,
10
10
  # root: "Foo"
11
11
  # run ->() { require 'foo' }
@@ -0,0 +1,46 @@
1
+ module Orthoses
2
+ class Content
3
+ # Check and drop duplication method, const etc...
4
+ class DuplicationChecker
5
+ def initialize(decl)
6
+ @decl = decl
7
+ @uniq_map = {}
8
+ end
9
+
10
+ def <<(member)
11
+ key = member_key(member)
12
+ if @uniq_map.key?(key)
13
+ Orthoses.logger.warn("#{@decl.name}::#{member_to_s(member)} was droped since duplication")
14
+ else
15
+ @uniq_map[key] = member
16
+ end
17
+ end
18
+
19
+ def uniq_members
20
+ @uniq_map.values
21
+ end
22
+
23
+ private
24
+
25
+ def member_to_s(member)
26
+ out = StringIO.new
27
+ RBS::Writer.new(out: out).write_member(member)
28
+ out.string.chomp
29
+ end
30
+
31
+ def member_key(member)
32
+ case member
33
+ when RBS::AST::Members::MethodDefinition
34
+ # member.types.hash is different
35
+ [member.class, member.name, member.kind]
36
+ when RBS::AST::Members::LocationOnly
37
+ [member.class]
38
+ when RBS::AST::Members::Alias
39
+ [member.class, member.new_name, member.old_name, member.kind]
40
+ else
41
+ [member.class, member.name]
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'orthoses/content/duplication_checker'
4
+
3
5
  module Orthoses
4
6
  # Common interface for output.
5
7
  # Orthoses::Content expect to use result of middleware.
@@ -94,19 +96,18 @@ module Orthoses
94
96
  out = StringIO.new
95
97
  writer = RBS::Writer.new(out: out)
96
98
  decls = RBS::Parser.parse_signature(buffer).map do |parsed_decl|
97
- before_members = parsed_decl.members.dup
98
- parsed_decl.members.uniq! { |m| [m.class, m.respond_to?(:name) ? m.name : nil] }
99
- (before_members - parsed_decl.members).each do |droped_member|
100
- Orthoses.logger.warn("#{parsed_decl.name}::#{droped_member.name.to_s}: #{droped_member.to_s} was droped since duplication")
99
+ parsed_decl.tap do |decl|
100
+ duplicate_checker = DuplicationChecker.new(decl)
101
+ decl.members.each do |member|
102
+ duplicate_checker << member
103
+ end
104
+ decl.members.replace(duplicate_checker.uniq_members)
101
105
  end
102
- parsed_decl
103
106
  end
104
107
  writer.write(decls)
105
108
  out.string
106
109
  rescue RBS::ParsingError
107
- puts "```rbs"
108
- puts rbs
109
- puts "```"
110
+ Orthoses.logger.error "```rbs\n#{rbs}```"
110
111
  raise
111
112
  end
112
113
  end
@@ -29,17 +29,23 @@ module Orthoses
29
29
  next unless subclass_name
30
30
  delegate_to_class_name = Utils.module_name(delegate_to_class)
31
31
  next unless delegate_to_class_name
32
- store[subclass_name].header = "class #{subclass_name} < #{delegate_to_class_name}"
32
+ next unless store[subclass_name].header.nil?
33
+
34
+ header = "class #{subclass_name} < ::#{delegate_to_class_name}#{temporary_type_params(delegate_to_class_name)}"
35
+ store[subclass_name].header = header
33
36
  end
34
37
  end
35
38
  store
36
39
  end
37
40
 
38
- def from_DelegateClass?(klass)
39
- klass.name.nil? &&
40
- klass.superclass == Delegator &&
41
- klass.instance_methods.include?(:__setobj__) &&
42
- klass.instance_method(:__setobj__).source_location.first.end_with?("delegate.rb")
41
+ def temporary_type_params(name)
42
+ Utils.known_type_params(name)&.then do |params|
43
+ if params.empty?
44
+ nil
45
+ else
46
+ "[#{params.map { :untyped }.join(', ')}]"
47
+ end
48
+ end
43
49
  end
44
50
  end
45
51
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orthoses
4
- class IncludeExtendPrepend
4
+ class Mixin
5
5
  def initialize(loader, if: nil)
6
6
  @loader = loader
7
7
  @if = binding.local_variable_get(:if)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orthoses
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/orthoses.rb CHANGED
@@ -10,7 +10,7 @@ require_relative 'orthoses/content'
10
10
  require_relative 'orthoses/create_file_by_name'
11
11
  require_relative 'orthoses/delegate_class'
12
12
  require_relative 'orthoses/filter'
13
- require_relative 'orthoses/include_extend_prepend'
13
+ require_relative 'orthoses/mixin'
14
14
  require_relative 'orthoses/load_rbs'
15
15
  require_relative 'orthoses/object_space_all'
16
16
  require_relative 'orthoses/pp'
@@ -0,0 +1,4 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::Content::DuplicationChecker
4
+ end
@@ -1,4 +1,4 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
- class Orthoses::IncludeExtendPrepend
3
+ class Orthoses::Mixin
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orthoses
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-08 00:00:00.000000000 Z
11
+ date: 2022-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -40,11 +40,12 @@ files:
40
40
  - lib/orthoses/call_tracer.rb
41
41
  - lib/orthoses/constant.rb
42
42
  - lib/orthoses/content.rb
43
+ - lib/orthoses/content/duplication_checker.rb
43
44
  - lib/orthoses/create_file_by_name.rb
44
45
  - lib/orthoses/delegate_class.rb
45
46
  - lib/orthoses/filter.rb
46
- - lib/orthoses/include_extend_prepend.rb
47
47
  - lib/orthoses/load_rbs.rb
48
+ - lib/orthoses/mixin.rb
48
49
  - lib/orthoses/object_space_all.rb
49
50
  - lib/orthoses/pp.rb
50
51
  - lib/orthoses/store.rb
@@ -62,11 +63,12 @@ files:
62
63
  - sig/orthoses/const_load_error.rbs
63
64
  - sig/orthoses/constant.rbs
64
65
  - sig/orthoses/content.rbs
66
+ - sig/orthoses/content/duplication_checker.rbs
65
67
  - sig/orthoses/create_file_by_name.rbs
66
68
  - sig/orthoses/delegate_class.rbs
67
69
  - sig/orthoses/filter.rbs
68
- - sig/orthoses/include_extend_prepend.rbs
69
70
  - sig/orthoses/load_rbs.rbs
71
+ - sig/orthoses/mixin.rbs
70
72
  - sig/orthoses/name_space_error.rbs
71
73
  - sig/orthoses/object_space_all.rbs
72
74
  - sig/orthoses/pp.rbs