Class: RBI::Parser::SigBuilder
- Defined in:
- lib/rbi/parser.rb
Instance Attribute Summary collapse
-
#current ⇒ Object
readonly
: Sig.
Instance Method Summary collapse
-
#initialize(content, file:) ⇒ SigBuilder
constructor
: (String content, file: String) -> void.
-
#visit_assoc_node(node) ⇒ Object
: (Prism::AssocNode node) -> void.
-
#visit_call_node(node) ⇒ Object
: (Prism::CallNode node) -> void.
Constructor Details
#initialize(content, file:) ⇒ SigBuilder
: (String content, file: String) -> void
920 921 922 923 924 |
# File 'lib/rbi/parser.rb', line 920 def initialize(content, file:) super @current = Sig.new #: Sig end |
Instance Attribute Details
#current ⇒ Object (readonly)
: Sig
917 918 919 |
# File 'lib/rbi/parser.rb', line 917 def current @current end |
Instance Method Details
#visit_assoc_node(node) ⇒ Object
: (Prism::AssocNode node) -> void
992 993 994 995 996 997 |
# File 'lib/rbi/parser.rb', line 992 def visit_assoc_node(node) @current.params << SigParam.new( node_string!(node.key).delete_suffix(":"), node_string!(node.value), ) end |
#visit_call_node(node) ⇒ Object
: (Prism::CallNode node) -> void
928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 |
# File 'lib/rbi/parser.rb', line 928 def visit_call_node(node) case node. when "sig" @current.without_runtime = t_sig_without_runtime?(node.receiver) args = node.arguments if args.is_a?(Prism::ArgumentsNode) args.arguments.each do |arg| @current.is_final = node_string(arg) == ":final" end end when "abstract" @current.is_abstract = true when "checked" args = node.arguments if args.is_a?(Prism::ArgumentsNode) arg = node_string(args.arguments.first) @current.checked = arg&.delete_prefix(":")&.to_sym end when "override" @current.is_override = true args = node.arguments&.arguments keywords_hash = args &.grep(Prism::KeywordHashNode) &.first allow_incompatible_override = keywords_hash &.elements &.any? do |assoc| assoc.is_a?(Prism::AssocNode) && node_string(assoc.key) == "allow_incompatible:" && node_string(assoc.value) == "true" end @current.allow_incompatible_override = !!allow_incompatible_override when "overridable" @current.is_overridable = true when "params" visit(node.arguments) when "returns" args = node.arguments if args.is_a?(Prism::ArgumentsNode) first = args.arguments.first @current.return_type = node_string!(first) if first end when "type_parameters" args = node.arguments if args.is_a?(Prism::ArgumentsNode) args.arguments.each do |arg| @current.type_params << node_string!(arg).delete_prefix(":") end end when "void" @current.return_type = "void" end visit(node.receiver) visit(node.block) end |