Skip to content

Instantly share code, notes, and snippets.

@benolee
Last active April 13, 2023 23:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save benolee/c19d468d230b99490f7d781a2f018017 to your computer and use it in GitHub Desktop.
Save benolee/c19d468d230b99490f7d781a2f018017 to your computer and use it in GitHub Desktop.
arg_scanner gem

terminal 1

$ brew install glib
$ C_INCLUDE_PATH=/usr/local/opt/glib/include/glib-2.0/ gem install arg_scanner
$ mkfifo /tmp/ruby-type-inference-pipe-42
$ arg-scanner --type-tracker --pipe-file-path=/tmp/ruby-type-inference-pipe-42 bundle exec rails console
[1] pry(main)> app.get('/')

terminal 2. sample output. this is prettified and truncated, btw.

$ tail -f /tmp/ruby-type-inference-pipe-42
{
  "method_name": "split",
  "call_info_argc": "-1",
  "args_info": "REQ,String,uri",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/2.5.0/uri/rfc2396_parser.rb",
  "lineno": "121",
  "receiver_name": "URI::RFC2396_Parser",
  "return_type_name": "Array"
}
{
  "method_name": "initialize",
  "call_info_argc": "10",
  "args_info": "REQ,NilClass,scheme;REQ,NilClass,userinfo;REQ,NilClass,host;REQ,NilClass,port;REQ,NilClass,registry;REQ,String,path;REQ,NilClass,opaque;REQ,NilClass,query;REQ,NilClass,fragment;OPT,URI::RFC2396_Parser,parser;OPT,FalseClass,arg_check",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/2.5.0/uri/generic.rb",
  "lineno": "170",
  "receiver_name": "URI::Generic",
  "return_type_name": "NilClass"
}
{
  "method_name": "parse",
  "call_info_argc": "-1",
  "args_info": "REQ,String,uri",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/2.5.0/uri/rfc2396_parser.rb",
  "lineno": "210",
  "receiver_name": "URI::RFC2396_Parser",
  "return_type_name": "URI::Generic"
}
{
  "method_name": "set_port",
  "call_info_argc": "-1",
  "args_info": "REQ,String,v",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/2.5.0/uri/generic.rb",
  "lineno": "701",
  "receiver_name": "URI::Generic",
  "return_type_name": "Integer"
}
...
{
  "method_name": "parse",
  "call_info_argc": "-1",
  "args_info": "REQ,String,uri",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/2.5.0/uri/rfc2396_parser.rb",
  "lineno": "210",
  "receiver_name": "URI::RFC2396_Parser",
  "return_type_name": "URI::HTTP"
}
{
  "method_name": "connect_nonblock",
  "call_info_argc": "1",
  "args_info": "REQ,String,addr",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/2.5.0/socket.rb",
  "lineno": "1212",
  "receiver_name": "Socket",
  "return_type_name": "NilClass"
}
{
  "method_name": "mon_synchronize",
  "call_info_argc": "-1",
  "args_info": "",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/2.5.0/monitor.rb",
  "lineno": "230",
  "receiver_name": "Redis::Connection::TCPSocket",
  "return_type_name": "Redis::Connection::TCPSocket"
}
...
{
  "method_name": "uuid",
  "call_info_argc": "-1",
  "args_info": "",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/2.5.0/securerandom.rb",
  "lineno": "220",
  "receiver_name": "Random::Formatter",
  "return_type_name": "String"
}
{
  "method_name": "[]",
  "call_info_argc": "1",
  "args_info": "REST,Array,args;BLOCK,NilClass,block",
  "visibility": "PUBLIC",
  "path": "/.rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/gems/actionpack-4.2.11.1/lib/action_dispatch/http/response.rb",
  "lineno": "51",
  "receiver_name": "ActionDispatch::Response",
  "return_type_name": "NilClass"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment