code: def validate_schema(schema: GraphQLSchema) -> List[GraphQLError]:
      
      # First check to ensure the provided value is in fact a GraphQLSchema.
      assert_schema(schema)
  
      # If this Schema has already been validated, return the previous results.
      # noinspection PyProtectedMember
      errors = schema._validation_errors
      if errors is None:
  
          # Validate the schema, producing a list of errors.
          context = SchemaValidationContext(schema)
          context.validate_root_types()
          context.validate_directives()
          context.validate_types()
  
          # Persist the results of validation before returning to ensure validation does
          # not run multiple times for this schema.
          errors = context.errors
          schema._validation_errors = errors
  
      return errors
docs: Validate a GraphQL schema.
  
      Implements the "Type Validation" sub-sections of the specification's "Type System"
      section.
  
      Validation runs synchronously, returning a list of encountered errors, or an empty
      list if no errors were encountered and the Schema is valid.