Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[rb] Add all the RBS files to add full rbs support to all selenium rb classes and modules #13234

Merged
merged 82 commits into from Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
0ac1ec9
Add all the RBS files to add full rbs support to all selenium rb clas…
Pexpe Dec 2, 2023
11d7059
Resolve conflicts
Pexpe Dec 2, 2023
5b7dc06
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Dec 2, 2023
212f960
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Dec 4, 2023
e0ef00f
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Dec 4, 2023
c334601
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Dec 11, 2023
a3607d4
Add interface support and fix RBS issues
Pexpe Dec 11, 2023
2441f24
Merge branch 'rb_add_all_rbs_missing_files' of github.com:aguspe/sele…
Pexpe Dec 11, 2023
9d450f2
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Dec 29, 2023
2bf77ff
Fix RBS errors related to type, amount of errors 270
Pexpe Jan 18, 2024
cda39d9
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Jan 18, 2024
227f8c1
Add missing RBS file coverage, reducing errors to 269
Pexpe Jan 23, 2024
4ee2a82
Merge branch 'rb_add_all_rbs_missing_files' of github.com:aguspe/sele…
Pexpe Jan 23, 2024
906d5db
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 1, 2024
751ea21
Reduce errors to 268
Pexpe Feb 5, 2024
06b8c47
Reduce errors to 250
Pexpe Feb 6, 2024
2238506
Reduce errors to 246
Pexpe Feb 7, 2024
d8b2453
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 7, 2024
f58171c
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 8, 2024
a59b32f
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 9, 2024
299b76a
Reduce errors to 240
Pexpe Feb 10, 2024
25b1620
Reduce errors to 224
Pexpe Feb 10, 2024
1e6bbd6
Reduce errors to 211
Pexpe Feb 10, 2024
6dfcac9
Reduce errors to 199
Pexpe Feb 11, 2024
5542a60
Reduce errors to 178
Pexpe Feb 12, 2024
d08cea8
160 issues on 53 files
Pexpe Feb 13, 2024
60747ef
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 13, 2024
be5dce3
125 problems from 48 files left
Pexpe Feb 15, 2024
a2c8b86
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 15, 2024
044c450
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 16, 2024
849506c
119 problems in 47 files
Pexpe Feb 16, 2024
8b1c19b
Merge branch 'rb_add_all_rbs_missing_files' of github.com:aguspe/sele…
Pexpe Feb 16, 2024
b116166
117 problems in 47 files
Pexpe Feb 17, 2024
ebeacee
107 problems in 46 files
Pexpe Feb 18, 2024
7a28da3
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 18, 2024
86d6720
106 problems in 45 files
Pexpe Feb 19, 2024
6a02376
Merge branch 'rb_add_all_rbs_missing_files' of github.com:aguspe/sele…
Pexpe Feb 19, 2024
40ba49f
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 19, 2024
e1dde0b
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 20, 2024
764a8ba
99 problems in 44 files
Pexpe Feb 20, 2024
ff8a5f5
Merge branch 'rb_add_all_rbs_missing_files' of github.com:aguspe/sele…
Pexpe Feb 20, 2024
655491f
95 problems in 43 files
Pexpe Feb 21, 2024
d60d506
92 problems in 42 files
Pexpe Feb 22, 2024
80d02c6
9842 problems in 41 files
Pexpe Feb 22, 2024
55b6cdf
81 problems in 41 files
Pexpe Feb 23, 2024
7895af5
69 problems in 36 files
Pexpe Feb 24, 2024
6515ca5
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 24, 2024
41b23a3
67 problems in 34 files
Pexpe Feb 25, 2024
84198d5
62 problems in 32 files
Pexpe Feb 25, 2024
6d09985
54 problems in 30 files
Pexpe Feb 26, 2024
b5500ec
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Feb 27, 2024
1c91e3e
Expand lists of ignored files
Pexpe Feb 28, 2024
0455024
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 5, 2024
650c0da
15 problems in 8 files
Pexpe Mar 5, 2024
e7fee24
0 errors in 0 files
Pexpe Mar 6, 2024
5808ea7
0 errors in 0 files
Pexpe Mar 6, 2024
ade5f2b
Updated common/driver to not use double splat operator
Pexpe Mar 7, 2024
a7aac09
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 8, 2024
bf32e49
Update types on wait
Pexpe Mar 8, 2024
7f3ffe7
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 9, 2024
c9a0a49
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 10, 2024
b0c4992
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 11, 2024
f9eff15
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 11, 2024
7a439ba
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 13, 2024
60088bb
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 13, 2024
bf8a102
Add driver to ignore files
Pexpe Mar 13, 2024
4c0baa3
Revert "95 problems in 43 files"
Pexpe Mar 13, 2024
b8a9ffb
Merge branch 'rb_add_all_rbs_missing_files' of github.com:aguspe/sele…
Pexpe Mar 13, 2024
7b8f791
Revert changes
Pexpe Mar 13, 2024
6bd47e2
Resto REXML and update ignore
Pexpe Mar 13, 2024
0d6d509
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 14, 2024
226bfad
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 14, 2024
5641be4
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 15, 2024
8013f7a
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 15, 2024
39d7114
Update profile constant
Pexpe Mar 15, 2024
1de4403
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 16, 2024
ac6e539
Remove autogenerated code, remove commments and refactoring
Pexpe Mar 16, 2024
1665876
Remove steep related rubocop errors
Pexpe Mar 17, 2024
15c9d0e
Updated ignore and solved rubocop issues
Pexpe Mar 17, 2024
4c1e63e
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 18, 2024
ac048a5
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 18, 2024
8d76224
Merge branch 'trunk' into rb_add_all_rbs_missing_files
aguspe Mar 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
84 changes: 82 additions & 2 deletions rb/Steepfile
@@ -1,8 +1,88 @@
# frozen_string_literal: true

# rubocop:disable Metrics/BlockLength -- Disable due to the steep configuration not matching rubocop expectations
target :lib do
signature 'sig' # Signature directory
signature 'sig', '.gem_rbs_collection/rubyzip' # Signature directory
aguspe marked this conversation as resolved.
Show resolved Hide resolved
check 'lib' # Directory name
# Total amount of errors ignore 66 in 31 files
ignore(
# Ignore line 166 due to UDP RBS issue
'lib/selenium/webdriver/common/platform.rb',
aguspe marked this conversation as resolved.
Show resolved Hide resolved
# Ignore due to webmock gem not having RBS signatures
'lib/selenium/webdriver/remote/http/curb.rb',
# Ignore due to line 71, there is one last error where RBS thinks backtrace is nil
'lib/selenium/webdriver/remote/response.rb',
# Ignore due to Errno::EACCES error
'lib/selenium/webdriver/support/color.rb',
'lib/selenium/webdriver/common/port_prober.rb',
# Ignore due to error overloading
'lib/selenium/webdriver/common/socket_poller.rb',
# Ignore due to Parser on line 611
'lib/selenium/webdriver/remote/bridge.rb',
# Ignore due to error on line 101 with block
'lib/selenium/webdriver/devtools/network_interceptor.rb',
# Ignore due to error on line 21 with overloading issues
'lib/selenium/webdriver/common/virtual_authenticator/credential.rb',
# Ignore due to error with the Zipper RBS
'lib/selenium/webdriver/common/zipper.rb',
# Ignore due to error on line 117 with the debug? method
'lib/selenium/webdriver/common/selenium_manager.rb',
# Ignore due to line 230 with the overloading issues
'lib/selenium/webdriver/common/action_builder.rb',
# Ignore due to CAPABILITIES not able to be found on line 55
'lib/selenium/webdriver/common/options.rb',
# Ignore due to strftime error in RBS on line 188
'lib/selenium/webdriver/common/logger.rb',
# Ignore due to error with Process
'lib/selenium/webdriver/common/child_process.rb',
# Ignore due to Net::HTTP not being found on line 49
'lib/selenium/webdriver/chromium/driver.rb',
# Ignore due to error on line 37 with include?
'lib/selenium/webdriver/support/guards/guard_condition.rb',
# Ignore due to positional argument error on line 69
'lib/selenium/webdriver/common/socket_lock.rb',
# Ignore due to is_a? bot error on line 70
'lib/selenium/webdriver/remote/driver.rb',
# Ignore due to line 118 causing an error with URI & Net::HTTP
'lib/selenium/server.rb',
# Ignore due to overloading issue on line 84
'lib/selenium/webdriver/chromium/features.rb',
# Ignore due to line 59 with the same URI & Net::HTTP issue
'lib/selenium/webdriver/firefox/driver.rb',
# Ignore due to line 27 with overloading issue
'lib/selenium/webdriver/bidi/log/console_log_entry.rb',
# Ignore due to line 89 with overloading issue
'lib/selenium/webdriver.rb',
# Ignore due to line 37 with overloading issue
'lib/selenium/webdriver/common/interactions/wheel_input.rb',
# Cannot override last error on line 71
'lib/selenium/webdriver/common/wait.rb',
# Cannot override params on line 83
'lib/selenium/webdriver/bidi/log_inspector.rb',
# Kwargs issue on line 74
'lib/selenium/webdriver/common/driver.rb',
# issue with the Zipper RBS library on line 54
'lib/selenium/webdriver/firefox/extension.rb',
# Ignored due to return of last match in line 57 and 59
'lib/selenium/webdriver/firefox/profiles_ini.rb',
# Ignored due to error on line 100 of response being nillable
'lib/selenium/webdriver/remote/http/default.rb'
)

library 'forwardable' # Standard libraries
# Standard libraries used in the project
library(
'base64',
'date',
'erb',
'find',
'forwardable',
'ipaddr',
'net-http',
'openssl',
'tmpdir',
'securerandom',
'uri',
'zlib'
)
end
# rubocop:enable Metrics/BlockLength
11 changes: 6 additions & 5 deletions rb/lib/selenium/devtools/support/cdp_client_generator.rb
Expand Up @@ -26,8 +26,9 @@ module DevTools
module Support
class CDPClientGenerator
# Input JSON files are generated from PDL tasks.
DOMAIN_TEMPLATE_PATH = File.expand_path('cdp/domain.rb.erb', __dir__)
LOADER_TEMPLATE_PATH = File.expand_path('cdp/loader.rb.erb', __dir__)
DIR = __dir__ || ''
aguspe marked this conversation as resolved.
Show resolved Hide resolved
DOMAIN_TEMPLATE_PATH = File.expand_path('cdp/domain.rb.erb', DIR)
LOADER_TEMPLATE_PATH = File.expand_path('cdp/loader.rb.erb', DIR)

RESERVED_KEYWORDS = %w[end].freeze

Expand All @@ -39,9 +40,9 @@ def call(output_dir:, version:, **opts)
@version = version

browser_protocol_path = opts.delete(:browser_protocol_path) do
File.expand_path('cdp/browser_protocol.json', __dir__)
File.expand_path('cdp/browser_protocol.json', DIR)
end
js_protocol_path = opts.delete(:js_protocol_path) { File.expand_path('cdp/js_protocol.json', __dir__) }
js_protocol_path = opts.delete(:js_protocol_path) { File.expand_path('cdp/js_protocol.json', DIR) }

raise ArgumentError, "Invalid arguments: #{opts.keys}" unless opts.empty?

Expand Down Expand Up @@ -103,7 +104,7 @@ def process_loader(domains)
Selenium::DevTools::Support::CDPClientGenerator.new.call(
browser_protocol_path: browser_protocol_path,
js_protocol_path: js_protocol_path,
output_dir: loader_path.sub(/\.rb$/, ''),
output_dir: loader_path&.sub(/\.rb$/, ''),
loader_path: loader_path,
version: version
)
Expand Down
2 changes: 1 addition & 1 deletion rb/lib/selenium/webdriver.rb
Expand Up @@ -49,7 +49,7 @@ module WebDriver
# @api private

def self.root
@root ||= File.expand_path('..', __dir__)
@root ||= File.expand_path('..', __dir__.to_s)
end

#
Expand Down
2 changes: 1 addition & 1 deletion rb/lib/selenium/webdriver/common/driver.rb
Expand Up @@ -292,7 +292,7 @@ def [](sel)
end

def browser
bridge&.browser
bridge.browser
end

def capabilities
Expand Down
2 changes: 1 addition & 1 deletion rb/lib/selenium/webdriver/common/manager.rb
Expand Up @@ -56,7 +56,7 @@ def add_cookie(opts = {})
opts[:httpOnly] = http_only if http_only

obj = opts.delete(:expires)
opts[:expiry] = seconds_from(obj).to_i if obj
opts[:expiry] = seconds_from(obj).to_int if obj
aguspe marked this conversation as resolved.
Show resolved Hide resolved

@bridge.add_cookie opts
end
Expand Down
2 changes: 1 addition & 1 deletion rb/lib/selenium/webdriver/common/options.rb
Expand Up @@ -177,7 +177,7 @@ def convert_json_key(key, camelize: true)
end

def camel_case(str)
str.gsub(/_([a-z])/) { Regexp.last_match(1).upcase }
str.gsub(/_([a-z])/) { Regexp.last_match(1)&.upcase }
end
end # Options
end # WebDriver
Expand Down
2 changes: 1 addition & 1 deletion rb/lib/selenium/webdriver/common/service.rb
Expand Up @@ -88,7 +88,7 @@ def initialize(path: nil, port: nil, log: nil, args: nil)

def launch
@executable_path ||= begin
default_options = WebDriver.const_get("#{self.class.name.split('::')[2]}::Options").new
default_options = WebDriver.const_get("#{self.class.name&.split('::')&.[](2)}::Options").new
DriverFinder.path(default_options, self.class)
end
ServiceManager.new(self).tap(&:start)
Expand Down
2 changes: 1 addition & 1 deletion rb/lib/selenium/webdriver/common/socket_poller.rb
Expand Up @@ -78,7 +78,7 @@ def listening?
def listening?
addr = Socket.getaddrinfo(@host, @port, Socket::AF_INET, Socket::SOCK_STREAM)
sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
sockaddr = Socket.pack_sockaddr_in(@port, addr[0][3])
sockaddr = Socket.pack_sockaddr_in(@port, addr[0][3].to_s)

begin
sock.connect_nonblock sockaddr
Expand Down
16 changes: 11 additions & 5 deletions rb/lib/selenium/webdriver/firefox/profile.rb
Expand Up @@ -24,6 +24,10 @@ class Profile
include ProfileHelper

VALID_PREFERENCE_TYPES = [TrueClass, FalseClass, Integer, Float, String].freeze
WEBDRIVER_PREFS = {
port: 'webdriver_firefox_port',
log_file: 'webdriver.log.file'
}.freeze

DEFAULT_PREFERENCES = {
'browser.newtabpage.enabled' => false,
Expand All @@ -35,8 +39,8 @@ class Profile

LOCK_FILES = %w[.parentlock parent.lock lock].freeze

attr_reader :name, :log_file
attr_writer :secure_ssl, :load_no_focus_lib
attr_reader :name, :log_file
attr_writer :secure_ssl, :load_no_focus_lib

class << self
def ini
Expand Down Expand Up @@ -206,8 +210,8 @@ def read_user_prefs(path)
File.read(path).split("\n").each do |line|
next unless line =~ /user_pref\("([^"]+)"\s*,\s*(.+?)\);/

key = Regexp.last_match(1).strip
value = Regexp.last_match(2).strip
key = Regexp.last_match(1)&.strip
value = Regexp.last_match(2)&.strip

# wrap the value in an array to make it a valid JSON string.
prefs[key] = JSON.parse("[#{value}]").first
Expand All @@ -223,7 +227,9 @@ def write_prefs(prefs, path)
end
end
end
end # Profile
end

# Profile
end # Firefox
end # WebDriver
end # Selenium
2 changes: 1 addition & 1 deletion rb/lib/selenium/webdriver/firefox/profiles_ini.rb
Expand Up @@ -52,7 +52,7 @@ def parse
when /^\[Profile/
name, path = nil if path_for(name, is_relative, path)
when /^Name=(.+)$/
name = Regexp.last_match(1).strip
name = Regexp.last_match(1)&.strip
when /^IsRelative=(.+)$/
is_relative = Regexp.last_match(1).strip == '1'
when /^Path=(.+)$/
Expand Down
2 changes: 1 addition & 1 deletion rb/lib/selenium/webdriver/remote/capabilities.rb
Expand Up @@ -99,7 +99,7 @@ def json_create(data)
end

def camel_case(str_or_sym)
str_or_sym.to_s.gsub(/_([a-z])/) { Regexp.last_match(1).upcase }
str_or_sym.to_s.gsub(/_([a-z])/) { Regexp.last_match(1)&.upcase }
end

private
Expand Down
82 changes: 70 additions & 12 deletions rb/rbs_collection.lock.yaml
@@ -1,28 +1,42 @@
---
sources:
- type: git
name: ruby/gem_rbs_collection
revision: 8149bc3fc0f720d935dc0592dc8886e03052f65f
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
path: ".gem_rbs_collection"
gems:
- name: addressable
version: '2.8'
source:
type: git
name: ruby/gem_rbs_collection
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: ast
version: '2.4'
source:
type: git
name: ruby/gem_rbs_collection
revision: 8149bc3fc0f720d935dc0592dc8886e03052f65f
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: base64
- name: bigdecimal
version: '0'
source:
type: stdlib
- name: cgi
version: '0'
source:
type: stdlib
- name: fileutils
version: '0'
source:
type: stdlib
- name: hashdiff
version: '1.1'
source:
type: git
name: ruby/gem_rbs_collection
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: json
version: '0'
source:
Expand All @@ -44,23 +58,67 @@ gems:
source:
type: git
name: ruby/gem_rbs_collection
revision: 8149bc3fc0f720d935dc0592dc8886e03052f65f
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: parser
version: '3.2'
source:
type: git
name: ruby/gem_rbs_collection
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: rack
version: '2.2'
source:
type: git
name: ruby/gem_rbs_collection
revision: 8149bc3fc0f720d935dc0592dc8886e03052f65f
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: rainbow
version: '3.0'
source:
type: git
name: ruby/gem_rbs_collection
revision: 8149bc3fc0f720d935dc0592dc8886e03052f65f
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: rake
version: '13.0'
source:
type: git
name: ruby/gem_rbs_collection
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: regexp_parser
version: '2.8'
source:
type: git
name: ruby/gem_rbs_collection
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: ripper
version: '0'
source:
type: stdlib
- name: rubocop
version: '1.57'
source:
type: git
name: ruby/gem_rbs_collection
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: rubocop-ast
version: '1.30'
source:
type: git
name: ruby/gem_rbs_collection
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
- name: tempfile
Expand All @@ -76,7 +134,7 @@ gems:
source:
type: git
name: ruby/gem_rbs_collection
revision: 8149bc3fc0f720d935dc0592dc8886e03052f65f
revision: 01361bb0fd6e2f3e2da2b11a733ffc938b9047c4
remote: https://github.com/ruby/gem_rbs_collection.git
repo_dir: gems
gemfile_lock_path: Gemfile.lock
3 changes: 3 additions & 0 deletions rb/sig/gems/open3/open3.rbs
@@ -0,0 +1,3 @@
module Open3
aguspe marked this conversation as resolved.
Show resolved Hide resolved
def self.capture3: (*untyped) -> untyped
end
7 changes: 7 additions & 0 deletions rb/sig/gems/rexml/document.rbs
@@ -0,0 +1,7 @@
module REXML
class Document
def initialize: (untyped element) -> void

def root: () -> untyped
end
end
5 changes: 5 additions & 0 deletions rb/sig/gems/rexml/xpath.rbs
@@ -0,0 +1,5 @@
module REXML
class XPath
def self.first: (untyped element, untyped path) -> untyped
end
end
7 changes: 7 additions & 0 deletions rb/sig/gems/websocket/handshake.rbs
@@ -0,0 +1,7 @@
module WebSocket
module Handshake
class Client
def initialize: (untyped) -> void
end
end
end