sord 0.2.1 → 0.3.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: 3e12cbfdebd498098bf0c5b788427151a4c213f4f8767dc670b5629d104d00f4
4
- data.tar.gz: 4344e6cb822d1ca3c98961948915ee67244c093ab6a1f9f248cdeb51f439dbe2
3
+ metadata.gz: 48989b3587651b3576af45f8ba0664eb5e49696e6c8e9e18deb2bce33d78651e
4
+ data.tar.gz: 2b0f10c99524c00ebe89d76eecab495bd38c55dc5a84a0e707b888030a07caf9
5
5
  SHA512:
6
- metadata.gz: 1ab1acfb5ca6537b46304e2dfb3e57d199668b475ea30d1519c4af19b9d088880d9518f531f9f8355dbdb21aa1774793f56b8665984691fe977aaf9ac2afb575
7
- data.tar.gz: b1db635647176c5771478b8465d127f1f1e15212163490cdf616921c2aced669a2d76d8cad08188ed4e79a76f50b270abf0e2edb3e6c2972bd3aafe11dcd0e7e
6
+ metadata.gz: 6350ec6144be3d60d8056c0d25af71ad17c0960a1931e30cedb12fb1820461ed922fbad188b7ad6f8a3009a804311e6b2f63aae6bd938b7f036cfb00441db9ba
7
+ data.tar.gz: 2fffdecb428ab937948eebefa56aac39da39d4b1972ddc98d8d7d2d4ef37ee3f1fedecaa95146286d53707d8b8ccc16fa30d2aec9dcbe4eeb39369f2b4f4280c
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create an issue to report a bug
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Include the code for your method, class or module definition(s) where Sord is doing something incorrectly.
15
+
16
+ **Expected behavior**
17
+ A clear and concise description of what you expected to happen. It may be useful to write your own expected RBI for your code.
18
+
19
+ **Actual behavior**
20
+ A description of what actually happened. Please post any incorrectly-generated RBI signatures, as well as the command-line output of Sord.
21
+
22
+ **Additional information**
23
+ Add any other information about the problem here.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: enhancement
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Describe the solution you'd like**
14
+ A clear and concise description of what you want to happen.
15
+
16
+ **Describe alternatives you've considered**
17
+ A clear and concise description of any alternative solutions or features you've considered.
18
+
19
+ **Additional context**
20
+ Add any other context about the feature request here.
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ .vscode/
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sord (0.2.0)
4
+ sord (0.2.1)
5
5
  colorize
6
6
  sorbet-runtime
7
7
  yard
data/README.md CHANGED
@@ -99,20 +99,34 @@ class Example::Person
99
99
  end
100
100
  ```
101
101
 
102
+ ## Things to be aware of
103
+
104
+ The general rule of thumb for type conversions is:
105
+
106
+ - If Sord understands the YARD type, then it is converted into the Sorbet type.
107
+ - If the YARD type is missing, Sord fills in `T.untyped`.
108
+ - If the YARD type can't be understood, Sord creates an undefined Ruby constant
109
+ with a similar name to the unknown YARD type. For example, the obviously
110
+ invalid YARD type `A%B` will become a constant called `SORD_ERROR_AB`.
111
+ You should search through your resulting RBI to find and fix and
112
+ `SORD_ERROR`s.
113
+
102
114
  ## Things to work on
103
115
 
116
+ - No support whatsoever for blocks (they appear to cause syntax errors in RBI
117
+ currently)
104
118
  - I'm not 100% sure how this handles undocumented methods and classes.
105
119
  - More inference systems would be nice.
106
120
  - This won't generate type parameter definitions for things which mix-in
107
121
  `Enumerable`.
108
122
  - Module scoping is an issue - if `Example::Person` is replaced with `Person`
109
123
  in the YARD comments in the above example, Sorbet won't be able to resolve
110
- it.
124
+ it. _This can be solved by making definitions syntactically heirarchical._
111
125
  - Tests!!
112
126
 
113
127
  ## Contributing
114
128
 
115
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/sord. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
129
+ Bug reports and pull requests are welcome on GitHub at https://github.com/AaronC81/sord. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
116
130
 
117
131
  ## License
118
132
 
@@ -120,4 +134,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
120
134
 
121
135
  ## Code of Conduct
122
136
 
123
- Everyone interacting in the Sord project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/sord/blob/master/CODE_OF_CONDUCT.md).
137
+ Everyone interacting in the Sord project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/AaronC81/sord/blob/master/CODE_OF_CONDUCT.md).
@@ -59,7 +59,17 @@ module Sord
59
59
  count_object
60
60
 
61
61
  parameter_list = meth.parameters.map do |name, default|
62
- "#{name}#{default && " = #{default}"}"
62
+ # Handle these three main cases:
63
+ # - def method(param) or def method(param:)
64
+ # - def method(param: 'default')
65
+ # - def method(param = 'default')
66
+ if default.nil?
67
+ "#{name}"
68
+ elsif !default.nil? && name.end_with?(':')
69
+ "#{name} #{default}"
70
+ else
71
+ "#{name} = #{default}"
72
+ end
63
73
  end.join(", ")
64
74
 
65
75
  # This is better than iterating over YARD's "@param" tags directly
@@ -88,9 +98,13 @@ module Sord
88
98
  getter.tags('return').flat_map(&:types), meth)
89
99
 
90
100
  Logging.infer("inferred type of parameter #{name.inspect} as #{inferred_type} using getter's return type", meth)
101
+ # Get rid of : on keyword arguments.
102
+ name = name.chop if name.end_with?(':')
91
103
  "#{name}: #{inferred_type}"
92
104
  else
93
105
  Logging.omit("no YARD type given for #{name.inspect}, using T.untyped", meth)
106
+ # Get rid of : on keyword arguments.
107
+ name = name.chop if name.end_with?(':')
94
108
  "#{name}: T.untyped"
95
109
  end
96
110
  end.join(", ")
@@ -106,9 +120,10 @@ module Sord
106
120
 
107
121
  prefix = meth.scope == :class ? 'self.' : ''
108
122
 
109
- rbi_contents << " sig { params(#{sig_params_list}).#{returns} }"
123
+ sig = sig_params_list.empty? ? " sig { #{returns} }" : " sig { params(#{sig_params_list}).#{returns} }"
124
+ rbi_contents << sig
110
125
 
111
- rbi_contents << " def #{prefix}#{meth.name}(#{parameter_list}) end"
126
+ rbi_contents << " def #{prefix}#{meth.name}(#{parameter_list}); end"
112
127
  end
113
128
  end
114
129
 
@@ -154,4 +169,4 @@ module Sord
154
169
  end
155
170
  end
156
171
  end
157
- end
172
+ end
@@ -58,16 +58,22 @@ module Sord
58
58
  # will lead to less informative log messages.
59
59
  def self.yard_to_sorbet(yard, item=nil)
60
60
  case yard
61
- when nil
61
+ when nil # Type not specified
62
62
  "T.untyped"
63
- when "bool", "Bool", "boolean", "Boolean", ["true", "false"], ["false", "true"]
63
+ when "bool", "Bool", "boolean", "Boolean", "true", "false"
64
64
  "T::Boolean"
65
+ when 'self'
66
+ item.parent.path
65
67
  when Array
66
68
  # If there's only one element, unwrap it, otherwise allow for a
67
69
  # selection of any of the types
68
- yard.length == 1 \
69
- ? yard_to_sorbet(yard.first, item)
70
- : "T.any(#{yard.map { |x| yard_to_sorbet(x, item) }.join(', ')})"
70
+ types = yard
71
+ .reject { |x| x == 'nil' }
72
+ .map { |x| yard_to_sorbet(x, item) }
73
+ .uniq
74
+ result = types.length == 1 ? types.first : "T.any(#{types.join(', ')})"
75
+ result = "T.nilable(#{result})" if yard.include?('nil')
76
+ result
71
77
  when /^#{SIMPLE_TYPE_REGEX}$/
72
78
  # If this doesn't begin with an uppercase letter, warn
73
79
  if /^[_a-z]/ === yard
data/lib/sord/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # typed: strong
2
2
  module Sord
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Christiansen
@@ -130,6 +130,8 @@ executables:
130
130
  extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
134
+ - ".github/ISSUE_TEMPLATE/feature-request.md"
133
135
  - ".gitignore"
134
136
  - ".rspec"
135
137
  - CODE_OF_CONDUCT.md