@@ -68,6 +68,24 @@ module RBS
6868 #
6969 def self.parse_signature : (Buffer | String) -> [Buffer, Array[AST::Directives::t], Array[AST::Declarations::t]]
7070
71+ # Parse a list of type parameters and return it
72+ #
73+ # ```ruby
74+ # RBS::Parser.parse_type_params("") # => nil
75+ # RBS::Parser.parse_type_params("[U, V]") # => `[:U, :V]`
76+ # RBS::Parser.parse_type_params("[in U, V < Integer]") # => `[:U, :V]`
77+ # ```
78+ #
79+ # When `module_type_params` is `false`, an error is raised if `unchecked`, `in` or `out` are used.
80+ #
81+ # ```ruby
82+ # RBS::Parser.parse_type_params("[unchecked U]", module_type_params: false) # => Raises an error
83+ # RBS::Parser.parse_type_params("[out U]", module_type_params: false) # => Raises an error
84+ # RBS::Parser.parse_type_params("[in U]", module_type_params: false) # => Raises an error
85+ # ```
86+ #
87+ def self.parse_type_params : (Buffer | String, ?module_type_params: bool ) -> Array[AST::TypeParam]
88+
7189 # Returns the magic comment from the buffer
7290 #
7391 def self.magic_comment : (Buffer) -> AST::Directives::ResolveTypeNames?
@@ -104,6 +122,8 @@ module RBS
104122
105123 def self._parse_signature : (Buffer, Integer start_pos, Integer end_pos) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
106124
125+ def self._parse_type_params : (Buffer, Integer start_pos, Integer end_pos, bool module_type_params) -> Array[AST::TypeParam]
126+
107127 def self._lex : (Buffer, Integer end_pos) -> Array[[Symbol, Location[untyped , untyped ]]]
108128
109129 def self._parse_inline_leading_annotation : (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> AST::Ruby::Annotations::leading_annotation
0 commit comments