class RuboCop::Cop::Sorbet::ForbidTStruct
def on_class(node)
def on_class(node) return unless t_struct?(node.parent_class) add_offense(node, message: MSG_STRUCT) do |corrector| walker = TStructWalker.new walker.walk(node.body) range = range_between(node.identifier.source_range.end_pos, node.parent_class.source_range.end_pos) corrector.remove(range) next if node.single_line? unless walker.has_extend_t_sig indent = offset(node) corrector.insert_after(node.identifier, "\n#{indent} extend T::Sig\n") end first_prop = walker.props.first walker.props.each do |prop| node = prop.node indent = offset(node) line_range = range_by_whole_lines(prop.node.source_range) new_line = prop != first_prop && !previous_line_blank?(node) trailing_comments = processed_source.each_comment_in_lines(line_range.line..line_range.line) corrector.replace( line_range, "#{new_line ? "\n" : ""}" \ "#{trailing_comments.map { |comment| "#{indent}#{comment.text}\n" }.join}" \ "#{indent}#{prop.attr_sig}\n#{indent}#{prop.attr_accessor}", ) end last_prop = walker.props.last if last_prop indent = offset(last_prop.node) line_range = range_by_whole_lines(last_prop.node.source_range, include_final_newline: true) corrector.insert_after(line_range, initialize_method(indent, walker.props)) end end end