code: def find_breaking_changes(
      old_schema: GraphQLSchema, new_schema: GraphQLSchema
  ) -> List[BreakingChange]:
      
      return (
          find_removed_types(old_schema, new_schema)
          + find_types_that_changed_kind(old_schema, new_schema)
          + find_fields_that_changed_type_on_object_or_interface_types(
              old_schema, new_schema
          )
          + find_fields_that_changed_type_on_input_object_types(
              old_schema, new_schema
          ).breaking_changes
          + find_types_removed_from_unions(old_schema, new_schema)
          + find_values_removed_from_enums(old_schema, new_schema)
          + find_arg_changes(old_schema, new_schema).breaking_changes
          + find_interfaces_removed_from_object_types(old_schema, new_schema)
          + find_removed_directives(old_schema, new_schema)
          + find_removed_directive_args(old_schema, new_schema)
          + find_added_non_null_directive_args(old_schema, new_schema)
          + find_removed_directive_locations(old_schema, new_schema)
      )
docs: Find breaking changes.
  
      Given two schemas, returns a list containing descriptions of all the types of
      breaking changes covered by the other functions down below.