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
829 830 831 832 833 |
# File 'lib/rbi/parser.rb', line 829 def initialize(content, file:) super @current = T.let(Sig.new, Sig) end |
Instance Attribute Details
#current ⇒ Object (readonly)
: Sig
826 827 828 |
# File 'lib/rbi/parser.rb', line 826 def current @current end |
Instance Method Details
#visit_assoc_node(node) ⇒ Object
: (Prism::AssocNode node) -> void
899 900 901 902 903 904 |
# File 'lib/rbi/parser.rb', line 899 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
837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 |
# File 'lib/rbi/parser.rb', line 837 def visit_call_node(node) case node. when "sig" 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 |