rbs_rails 0.7.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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