rbs_rails 0.7.0 → 0.9.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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/.dependabot/config.yml +5 -0
  3. data/.github/workflows/ci.yml +11 -2
  4. data/.gitignore +1 -1
  5. data/CHANGELOG.md +30 -0
  6. data/Gemfile +6 -3
  7. data/Gemfile.lock +179 -0
  8. data/README.md +11 -4
  9. data/Rakefile +4 -2
  10. data/Steepfile +1 -14
  11. data/bin/add-type-params.rb +1 -0
  12. data/bin/setup +1 -0
  13. data/lib/rbs_rails/active_record.rb +135 -18
  14. data/lib/rbs_rails/rake_task.rb +3 -14
  15. data/lib/rbs_rails/version.rb +1 -1
  16. data/rbs_collection.lock.yaml +132 -0
  17. data/rbs_collection.yaml +45 -0
  18. data/rbs_rails.gemspec +2 -2
  19. data/sig/activerecord.rbs +4 -0
  20. data/sig/rbs_rails/active_record.rbs +11 -0
  21. metadata +9 -29
  22. data/assets/sig/action_mailer.rbs +0 -8
  23. data/assets/sig/builtin.rbs +0 -7
  24. data/assets/sig/capybara.rbs +0 -14
  25. data/assets/sig/concurrent.rbs +0 -4
  26. data/assets/sig/erb.rbs +0 -4
  27. data/assets/sig/erubi.rbs +0 -4
  28. data/assets/sig/i18n.rbs +0 -4
  29. data/assets/sig/libxml.rbs +0 -10
  30. data/assets/sig/minitest.rbs +0 -13
  31. data/assets/sig/nokogiri.rbs +0 -8
  32. data/assets/sig/pg.rbs +0 -5
  33. data/assets/sig/que.rbs +0 -4
  34. data/assets/sig/queue_classic.rbs +0 -4
  35. data/assets/sig/racc.rbs +0 -4
  36. data/assets/sig/rack-test.rbs +0 -6
  37. data/assets/sig/rack.rbs +0 -47
  38. data/assets/sig/rails.rbs +0 -10
  39. data/assets/sig/rdoc.rbs +0 -9
  40. data/assets/sig/sidekiq.rbs +0 -4
  41. data/assets/sig/sneakers.rbs +0 -4
  42. data/assets/sig/stdlib.rbs +0 -24
  43. data/assets/sig/sucker_punch.rbs +0 -4
  44. data/assets/sig/thor.rbs +0 -12
  45. data/assets/sig/tzinfo.rbs +0 -4
  46. data/bin/gem_rbs +0 -94
  47. data/bin/rbs +0 -30
@@ -0,0 +1,132 @@
1
+ ---
2
+ sources:
3
+ - name: ruby/gem_rbs_collection
4
+ remote: https://github.com/ruby/gem_rbs_collection.git
5
+ revision: main
6
+ repo_dir: gems
7
+ path: ".gem_rbs_collection"
8
+ gems:
9
+ - name: pathname
10
+ version: '0'
11
+ source:
12
+ type: stdlib
13
+ - name: logger
14
+ version: '0'
15
+ source:
16
+ type: stdlib
17
+ - name: mutex_m
18
+ version: '0'
19
+ source:
20
+ type: stdlib
21
+ - name: date
22
+ version: '0'
23
+ source:
24
+ type: stdlib
25
+ - name: monitor
26
+ version: '0'
27
+ source:
28
+ type: stdlib
29
+ - name: singleton
30
+ version: '0'
31
+ source:
32
+ type: stdlib
33
+ - name: tsort
34
+ version: '0'
35
+ source:
36
+ type: stdlib
37
+ - name: time
38
+ version: '0'
39
+ source:
40
+ type: stdlib
41
+ - name: set
42
+ version: '0'
43
+ source:
44
+ type: stdlib
45
+ - name: rack
46
+ version: 2.2.2
47
+ source:
48
+ type: git
49
+ name: ruby/gem_rbs_collection
50
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
51
+ remote: https://github.com/ruby/gem_rbs_collection.git
52
+ repo_dir: gems
53
+ - name: json
54
+ version: '0'
55
+ source:
56
+ type: stdlib
57
+ - name: strscan
58
+ version: '0'
59
+ source:
60
+ type: stdlib
61
+ - name: optparse
62
+ version: '0'
63
+ source:
64
+ type: stdlib
65
+ - name: actionpack
66
+ version: '6.0'
67
+ source:
68
+ type: git
69
+ name: ruby/gem_rbs_collection
70
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
71
+ remote: https://github.com/ruby/gem_rbs_collection.git
72
+ repo_dir: gems
73
+ - name: actionview
74
+ version: '6.0'
75
+ source:
76
+ type: git
77
+ name: ruby/gem_rbs_collection
78
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
79
+ remote: https://github.com/ruby/gem_rbs_collection.git
80
+ repo_dir: gems
81
+ - name: activejob
82
+ version: '6.0'
83
+ source:
84
+ type: git
85
+ name: ruby/gem_rbs_collection
86
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
87
+ remote: https://github.com/ruby/gem_rbs_collection.git
88
+ repo_dir: gems
89
+ - name: activemodel
90
+ version: '6.0'
91
+ source:
92
+ type: git
93
+ name: ruby/gem_rbs_collection
94
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
95
+ remote: https://github.com/ruby/gem_rbs_collection.git
96
+ repo_dir: gems
97
+ - name: activerecord
98
+ version: '6.0'
99
+ source:
100
+ type: git
101
+ name: ruby/gem_rbs_collection
102
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
103
+ remote: https://github.com/ruby/gem_rbs_collection.git
104
+ repo_dir: gems
105
+ - name: activesupport
106
+ version: '6.0'
107
+ source:
108
+ type: git
109
+ name: ruby/gem_rbs_collection
110
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
111
+ remote: https://github.com/ruby/gem_rbs_collection.git
112
+ repo_dir: gems
113
+ - name: parallel
114
+ version: '1.20'
115
+ source:
116
+ type: git
117
+ name: ruby/gem_rbs_collection
118
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
119
+ remote: https://github.com/ruby/gem_rbs_collection.git
120
+ repo_dir: gems
121
+ - name: railties
122
+ version: '6.0'
123
+ source:
124
+ type: git
125
+ name: ruby/gem_rbs_collection
126
+ revision: 51880bed87fbc3dc8076fedb5cf798be05148220
127
+ remote: https://github.com/ruby/gem_rbs_collection.git
128
+ repo_dir: gems
129
+ - name: rbs
130
+ version: 1.6.2
131
+ source:
132
+ type: rubygems
@@ -0,0 +1,45 @@
1
+ # Download sources
2
+ sources:
3
+ - name: ruby/gem_rbs_collection
4
+ remote: https://github.com/ruby/gem_rbs_collection.git
5
+ revision: main
6
+ repo_dir: gems
7
+
8
+ # A directory to install the downloaded RBSs
9
+ path: .gem_rbs_collection
10
+
11
+ gems:
12
+ # stdlibs
13
+ - name: 'pathname'
14
+ - name: 'logger'
15
+ - name: 'mutex_m'
16
+ - name: 'date'
17
+ - name: 'monitor'
18
+ - name: 'singleton'
19
+ - name: 'tsort'
20
+ - name: 'time'
21
+ - name: 'set'
22
+
23
+ # gems
24
+ - name: 'rack'
25
+
26
+ # RBS gem dependencies
27
+ - name: 'json'
28
+ - name: 'strscan'
29
+ - name: 'optparse'
30
+
31
+ # Ignores - Gemfile.lock contains them but their RBSs are unnecessary
32
+ - name: steep
33
+ ignore: true
34
+ - name: nokogiri
35
+ ignore: true
36
+ - name: ast
37
+ ignore: true
38
+ - name: rainbow
39
+ ignore: true
40
+ - name: listen
41
+ ignore: true
42
+
43
+ # ignore RBS Rails itself
44
+ - name: rbs_rails
45
+ ignore: true
data/rbs_rails.gemspec CHANGED
@@ -14,12 +14,12 @@ Gem::Specification.new do |spec|
14
14
 
15
15
  spec.metadata["homepage_uri"] = spec.homepage
16
16
  spec.metadata["source_code_uri"] = spec.homepage
17
- # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
17
+ spec.metadata["changelog_uri"] = "https://github.com/pocke/rbs_rails/blob/master/CHANGELOG.md"
18
18
 
19
19
  # Specify which files should be added to the gem when it is released.
20
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
21
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
22
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|gem_rbs)/}) }
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
23
23
  end
24
24
  spec.bindir = "exe"
25
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -0,0 +1,4 @@
1
+ # TODO: Define it in gem_rbs_collection repository
2
+ class ActiveRecord::Base
3
+ def self.primary_key: () -> String
4
+ end
@@ -1,5 +1,6 @@
1
1
  module RbsRails::ActiveRecord
2
2
  def self.class_to_rbs: (untyped klass, ?dependencies: Array[String]) -> untyped
3
+ def self.generatable?: (untyped klass) -> boolish
3
4
  end
4
5
 
5
6
  class RbsRails::ActiveRecord::Generator
@@ -11,6 +12,10 @@ class RbsRails::ActiveRecord::Generator
11
12
 
12
13
  def klass_decl: () -> String
13
14
 
15
+ def pk_type: () -> String
16
+
17
+ def generated_relation_methods_decl: () -> String
18
+
14
19
  def relation_decl: () -> String
15
20
 
16
21
  def collection_proxy_decl: () -> String
@@ -27,6 +32,12 @@ class RbsRails::ActiveRecord::Generator
27
32
 
28
33
  def belongs_to: () -> String
29
34
 
35
+ def delegated_type_scope: (singleton: bool) -> String
36
+
37
+ def delegated_type_instance: () -> String
38
+
39
+ def delegated_type_definitions: () -> Array[{ role: Symbol, types: Array[String] }]?
40
+
30
41
  def enum_instance_methods: () -> String
31
42
 
32
43
  def enum_scope_methods: (singleton: untyped `singleton`) -> String
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masataka Pocke Kuwabara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-28 00:00:00.000000000 Z
11
+ date: 2021-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -45,44 +45,20 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - ".dependabot/config.yml"
48
49
  - ".github/workflows/ci.yml"
49
50
  - ".gitignore"
50
51
  - ".gitmodules"
51
52
  - CHANGELOG.md
52
53
  - Gemfile
54
+ - Gemfile.lock
53
55
  - LICENSE
54
56
  - README.md
55
57
  - Rakefile
56
58
  - Steepfile
57
- - assets/sig/action_mailer.rbs
58
- - assets/sig/builtin.rbs
59
- - assets/sig/capybara.rbs
60
- - assets/sig/concurrent.rbs
61
- - assets/sig/erb.rbs
62
- - assets/sig/erubi.rbs
63
- - assets/sig/i18n.rbs
64
- - assets/sig/libxml.rbs
65
- - assets/sig/minitest.rbs
66
- - assets/sig/nokogiri.rbs
67
- - assets/sig/pg.rbs
68
- - assets/sig/que.rbs
69
- - assets/sig/queue_classic.rbs
70
- - assets/sig/racc.rbs
71
- - assets/sig/rack-test.rbs
72
- - assets/sig/rack.rbs
73
- - assets/sig/rails.rbs
74
- - assets/sig/rdoc.rbs
75
- - assets/sig/sidekiq.rbs
76
- - assets/sig/sneakers.rbs
77
- - assets/sig/stdlib.rbs
78
- - assets/sig/sucker_punch.rbs
79
- - assets/sig/thor.rbs
80
- - assets/sig/tzinfo.rbs
81
59
  - bin/add-type-params.rb
82
60
  - bin/console
83
- - bin/gem_rbs
84
61
  - bin/postprocess.rb
85
- - bin/rbs
86
62
  - bin/rbs-prototype-rb.rb
87
63
  - bin/setup
88
64
  - bin/to-ascii.rb
@@ -93,7 +69,10 @@ files:
93
69
  - lib/rbs_rails/rake_task.rb
94
70
  - lib/rbs_rails/util.rb
95
71
  - lib/rbs_rails/version.rb
72
+ - rbs_collection.lock.yaml
73
+ - rbs_collection.yaml
96
74
  - rbs_rails.gemspec
75
+ - sig/activerecord.rbs
97
76
  - sig/fileutils.rbs
98
77
  - sig/parser.rbs
99
78
  - sig/rake.rbs
@@ -110,6 +89,7 @@ licenses:
110
89
  metadata:
111
90
  homepage_uri: https://github.com/pocke/rbs_rails
112
91
  source_code_uri: https://github.com/pocke/rbs_rails
92
+ changelog_uri: https://github.com/pocke/rbs_rails/blob/master/CHANGELOG.md
113
93
  post_install_message:
114
94
  rdoc_options: []
115
95
  require_paths:
@@ -125,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
105
  - !ruby/object:Gem::Version
126
106
  version: '0'
127
107
  requirements: []
128
- rubygems_version: 3.1.4
108
+ rubygems_version: 3.3.0.dev
129
109
  signing_key:
130
110
  specification_version: 4
131
111
  summary: A RBS files generator for Rails application
@@ -1,8 +0,0 @@
1
- module ActionMailer
2
- class Base
3
- # TODO
4
- # extend ActionView::Layouts::ClassMethods
5
-
6
- def self.default: (?Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
7
- end
8
- end
@@ -1,7 +0,0 @@
1
- class Monitor
2
- end
3
- class MonitorMixin
4
- end
5
-
6
- module Singleton
7
- end
@@ -1,14 +0,0 @@
1
- module Capybara
2
- module DSL
3
- end
4
-
5
- module Minitest
6
- module Assertions
7
- end
8
- end
9
-
10
- module Poltergeist
11
- class Driver
12
- end
13
- end
14
- end
@@ -1,4 +0,0 @@
1
- module Concurrent
2
- class Map
3
- end
4
- end
data/assets/sig/erb.rbs DELETED
@@ -1,4 +0,0 @@
1
- class ERB
2
- class Compiler
3
- end
4
- end
data/assets/sig/erubi.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Erubi
2
- class Engine
3
- end
4
- end
data/assets/sig/i18n.rbs DELETED
@@ -1,4 +0,0 @@
1
- module I18n
2
- class Config
3
- end
4
- end
@@ -1,10 +0,0 @@
1
- # is it correct?
2
-
3
- module LibXML
4
- end
5
- module LibXML::XML
6
- end
7
- module LibXML::XML::SaxParser
8
- end
9
- module LibXML::XML::SaxParser::Callbacks
10
- end
@@ -1,13 +0,0 @@
1
- module Minitest
2
- class Test
3
- end
4
-
5
- class SummaryReporter
6
- end
7
-
8
- class StatisticsReporter
9
- end
10
-
11
- module Assertions
12
- end
13
- end
@@ -1,8 +0,0 @@
1
- module Nokogiri
2
- end
3
- module Nokogiri::XML
4
- end
5
- module Nokogiri::XML::SAX
6
- end
7
- class Nokogiri::XML::SAX::Document
8
- end
data/assets/sig/pg.rbs DELETED
@@ -1,5 +0,0 @@
1
- module PG
2
- class Connection
3
- def async_exec: (*untyped) -> untyped
4
- end
5
- end
data/assets/sig/que.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Que
2
- class Job
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- class QC
2
- class Queue
3
- end
4
- end
data/assets/sig/racc.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Racc
2
- class Parser
3
- end
4
- end
@@ -1,6 +0,0 @@
1
- module Rack
2
- module Test
3
- class UploadedFile
4
- end
5
- end
6
- end
data/assets/sig/rack.rbs DELETED
@@ -1,47 +0,0 @@
1
- module Rack
2
- class Server
3
- end
4
-
5
- class Response
6
- module Helpers
7
- def location: () -> untyped
8
- end
9
- end
10
-
11
- class Request
12
- module Helpers
13
- end
14
-
15
- module Env
16
- end
17
- end
18
-
19
- module Session
20
- module Abstract
21
- class SessionHash
22
- end
23
-
24
- class PersistedSecure
25
- class SecureSessionHash
26
- end
27
- end
28
-
29
- class Persisted
30
- end
31
- end
32
-
33
- class SessionId
34
- end
35
-
36
- class Dalli
37
- end
38
- end
39
-
40
- module Cache
41
- class MetaStore
42
- end
43
-
44
- class EntityStore
45
- end
46
- end
47
- end
data/assets/sig/rails.rbs DELETED
@@ -1,10 +0,0 @@
1
- module Rails
2
- def self.env: () -> ActiveSupport::StringInquirer | ...
3
-
4
- module Dom
5
- module Testing
6
- module Assertions
7
- end
8
- end
9
- end
10
- end
data/assets/sig/rdoc.rbs DELETED
@@ -1,9 +0,0 @@
1
- module RDoc
2
- module Generator
3
- class SDoc
4
- end
5
- end
6
-
7
- class Task
8
- end
9
- end
@@ -1,4 +0,0 @@
1
- module Sidekiq
2
- module Worker
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module Sneakers
2
- module Worker
3
- end
4
- end
@@ -1,24 +0,0 @@
1
- module DRb
2
- end
3
-
4
- module DRb::DRbUndumped
5
- end
6
-
7
- module TSort
8
- end
9
-
10
- class SimpleDelegator
11
- end
12
-
13
- module Gem
14
- class Version
15
- end
16
- end
17
-
18
- module OpenSSL
19
- class Cipher
20
- end
21
- end
22
-
23
- module FileUtils
24
- end
@@ -1,4 +0,0 @@
1
- module SuckerPunch
2
- module Job
3
- end
4
- end
data/assets/sig/thor.rbs DELETED
@@ -1,12 +0,0 @@
1
- class Thor
2
- class Group
3
- end
4
-
5
- module Actions
6
- class CreateFile
7
- end
8
- end
9
-
10
- class Error
11
- end
12
- end
@@ -1,4 +0,0 @@
1
- module TZInfo
2
- class Timezone
3
- end
4
- end
data/bin/gem_rbs DELETED
@@ -1,94 +0,0 @@
1
- #!ruby
2
-
3
- require 'net/http'
4
- require 'json'
5
- require 'securerandom'
6
- require 'pathname'
7
-
8
- TOKEN = ENV.fetch('GITHUB_ACCESS_TOKEN')
9
- VERSION = "6.0.3.2"
10
-
11
- def req(query)
12
- http = Net::HTTP.new("api.github.com", 443)
13
- http.use_ssl = true
14
- header = {
15
- "Authorization" => "Bearer #{TOKEN}",
16
- 'Content-Type' => 'application/json',
17
- 'User-Agent' => 'gem_rbs client',
18
- }
19
- resp = http.request_post('/graphql', JSON.generate(query), header)
20
- JSON.parse(resp.body, symbolize_names: true).tap do |content|
21
- raise content[:errors].inspect if content[:errors]
22
- end
23
- end
24
-
25
- class QueryBuilder
26
- attr_reader :variables
27
-
28
- def initialize
29
- @queries = []
30
- @variables = {}
31
- end
32
-
33
- def add(query, variables)
34
- query = query.dup
35
- variables = variables.transform_keys do |key|
36
- next key unless @variables.key?(key)
37
-
38
- new_key = key + '_' + SecureRandom.hex(8)
39
- query.gsub!(key, new_key)
40
- new_key
41
- end
42
-
43
- @queries << query
44
- @variables.merge!(variables)
45
- end
46
-
47
- def query
48
- # TODO: variable type
49
- "query(#{variables.keys.map { |v| "$#{v}: String!" }.join(',')}) { #{@queries.join("\n")} }"
50
- end
51
- end
52
-
53
- gems = %w[activesupport actionpack activejob activemodel actionview activerecord railties]
54
-
55
- builder = QueryBuilder.new
56
- gems.each do |gem|
57
- path = "main:gems/#{gem}/#{VERSION}"
58
- builder.add(<<~GRAPHQL, { 'path' => path })
59
- #{gem}:repository(owner: "ruby", name: "gem_rbs") {
60
- object(expression: $path) {
61
- ... on Tree {
62
- entries {
63
- name
64
- object {
65
- ... on Blob {
66
- isTruncated
67
- text
68
- }
69
- }
70
- }
71
- }
72
- }
73
- }
74
- GRAPHQL
75
- end
76
-
77
- resp = req(query: builder.query, variables: builder.variables)
78
-
79
- resp[:data].each do |gem_name, gem_value|
80
- gem_value.dig(:object, :entries).each do |entry|
81
- fname = entry[:name]
82
- if fname.end_with?('.rbs')
83
- content =
84
- if entry.dig(:object, :isTruncated)
85
- `curl -H 'Accept: application/vnd.github.v3.raw' -H Authorization: token #{TOKEN} https://api.github.com/repos/ruby/gem_rbs/contents/gems/#{gem_name}/#{VERSION}/#{fname}`
86
- else
87
- entry.dig(:object, :text)
88
- end
89
- dir = Pathname("gem_rbs/gems/#{gem_name}/#{VERSION}")
90
- dir.mkpath
91
- dir.join(fname).write(content)
92
- end
93
- end
94
- end