We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Change `make_executable_schema` API to accept multiple bindables args
Currently, the second argument to `make_executable_schema` is list of `SchemaBindlables` or single bindable:

```python
# Single bindable:
schema = make_executable_schema(type_defs, query_type, debug=True)

# Multiple bindables:
schema = make_executable_schema(type_defs, [query_type, mutation_type], debug=True)
```

Looking at Ariadne uses in the wild, a pattern is starting to emerge where developers create dedicated modules/packages in their project for `scalars`, `mutations` or `types`, that use their `__init__.py`'s to gather all bindables into single lists:

```
from .scalars import scalars
from .types import types
from .mutations import mutations
```

Those are then combined into single list and passed to `make_executable_schema`:

```
schema = make_executable_schema(type_defs, scalars + types + mutations, debug=True)
```

This looks ugly, but things get uglier when there's bindable involved:

```
schema = make_executable_schema(type_defs, scalars + types + mutations + [fallback_resolvers], debug=True)
```

We can simplify this by changing bindables to `*bindables`:

```
schema = make_executable_schema(type_defs, scalars, types, mutations, fallback_resolvers, debug=True)
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `ariadne/executable_schema.py`
Content:
```
1 from typing import Dict, List, Type, Union
2 
3 from graphql import (
4     DocumentNode,
5     GraphQLSchema,
6     assert_valid_schema,
7     build_ast_schema,
8     extend_schema,
9     parse,
10     validate_schema,
11 )
12 
13 from .enums import set_default_enum_values_on_schema
14 from .schema_visitor import SchemaDirectiveVisitor
15 from .types import SchemaBindable
16 
17 
18 def make_executable_schema(
19     type_defs: Union[str, List[str]],
20     bindables: Union[SchemaBindable, List[SchemaBindable], None] = None,
21     *,
22     directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,
23 ) -> GraphQLSchema:
24     if isinstance(type_defs, list):
25         type_defs = join_type_defs(type_defs)
26 
27     ast_document = parse(type_defs)
28     schema = build_and_extend_schema(ast_document)
29     validate_schema(schema)
30 
31     if isinstance(bindables, list):
32         for obj in bindables:
33             obj.bind_to_schema(schema)
34     elif bindables:
35         bindables.bind_to_schema(schema)
36 
37     set_default_enum_values_on_schema(schema)
38 
39     if directives:
40         SchemaDirectiveVisitor.visit_schema_directives(schema, directives)
41 
42     assert_valid_schema(schema)
43 
44     return schema
45 
46 
47 def join_type_defs(type_defs: List[str]) -> str:
48     return "\n\n".join(t.strip() for t in type_defs)
49 
50 
51 def build_and_extend_schema(ast: DocumentNode) -> GraphQLSchema:
52     schema = build_ast_schema(ast)
53     extension_ast = extract_extensions(ast)
54 
55     if extension_ast.definitions:
56         schema = extend_schema(schema, extension_ast)
57 
58     return schema
59 
60 
61 EXTENSION_KINDS = [
62     "scalar_type_extension",
63     "object_type_extension",
64     "interface_type_extension",
65     "union_type_extension",
66     "enum_type_extension",
67     "input_object_type_extension",
68 ]
69 
70 
71 def extract_extensions(ast: DocumentNode) -> DocumentNode:
72     extensions = [node for node in ast.definitions if node.kind in EXTENSION_KINDS]
73     return DocumentNode(definitions=extensions)
74
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/ariadne/executable_schema.py b/ariadne/executable_schema.py
--- a/ariadne/executable_schema.py
+++ b/ariadne/executable_schema.py
@@ -17,8 +17,7 @@
 
 def make_executable_schema(
     type_defs: Union[str, List[str]],
-    bindables: Union[SchemaBindable, List[SchemaBindable], None] = None,
-    *,
+    *bindables: Union[SchemaBindable, List[SchemaBindable]],
     directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,
 ) -> GraphQLSchema:
     if isinstance(type_defs, list):
@@ -28,11 +27,12 @@
     schema = build_and_extend_schema(ast_document)
     validate_schema(schema)
 
-    if isinstance(bindables, list):
-        for obj in bindables:
-            obj.bind_to_schema(schema)
-    elif bindables:
-        bindables.bind_to_schema(schema)
+    for bindable in bindables:
+        if isinstance(bindable, list):
+            for obj in bindable:
+                obj.bind_to_schema(schema)
+        else:
+            bindable.bind_to_schema(schema)
 
     set_default_enum_values_on_schema(schema)

{"golden_diff": "diff --git a/ariadne/executable_schema.py b/ariadne/executable_schema.py\n--- a/ariadne/executable_schema.py\n+++ b/ariadne/executable_schema.py\n@@ -17,8 +17,7 @@\n \n def make_executable_schema(\n     type_defs: Union[str, List[str]],\n-    bindables: Union[SchemaBindable, List[SchemaBindable], None] = None,\n-    *,\n+    *bindables: Union[SchemaBindable, List[SchemaBindable]],\n     directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,\n ) -> GraphQLSchema:\n     if isinstance(type_defs, list):\n@@ -28,11 +27,12 @@\n     schema = build_and_extend_schema(ast_document)\n     validate_schema(schema)\n \n-    if isinstance(bindables, list):\n-        for obj in bindables:\n-            obj.bind_to_schema(schema)\n-    elif bindables:\n-        bindables.bind_to_schema(schema)\n+    for bindable in bindables:\n+        if isinstance(bindable, list):\n+            for obj in bindable:\n+                obj.bind_to_schema(schema)\n+        else:\n+            bindable.bind_to_schema(schema)\n \n     set_default_enum_values_on_schema(schema)\n", "issue": "Change `make_executable_schema` API to accept multiple bindables args\nCurrently, the second argument to `make_executable_schema` is list of `SchemaBindlables` or single bindable:\r\n\r\n```python\r\n# Single bindable:\r\nschema = make_executable_schema(type_defs, query_type, debug=True)\r\n\r\n# Multiple bindables:\r\nschema = make_executable_schema(type_defs, [query_type, mutation_type], debug=True)\r\n```\r\n\r\nLooking at Ariadne uses in the wild, a pattern is starting to emerge where developers create dedicated modules/packages in their project for `scalars`, `mutations` or `types`, that use their `__init__.py`'s to gather all bindables into single lists:\r\n\r\n```\r\nfrom .scalars import scalars\r\nfrom .types import types\r\nfrom .mutations import mutations\r\n```\r\n\r\nThose are then combined into single list and passed to `make_executable_schema`:\r\n\r\n```\r\nschema = make_executable_schema(type_defs, scalars + types + mutations, debug=True)\r\n```\r\n\r\nThis looks ugly, but things get uglier when there's bindable involved:\r\n\r\n```\r\nschema = make_executable_schema(type_defs, scalars + types + mutations + [fallback_resolvers], debug=True)\r\n```\r\n\r\nWe can simplify this by changing bindables to `*bindables`:\r\n\r\n```\r\nschema = make_executable_schema(type_defs, scalars, types, mutations, fallback_resolvers, debug=True)\r\n```\n", "before_files": [{"content": "from typing import Dict, List, Type, Union\n\nfrom graphql import (\n    DocumentNode,\n    GraphQLSchema,\n    assert_valid_schema,\n    build_ast_schema,\n    extend_schema,\n    parse,\n    validate_schema,\n)\n\nfrom .enums import set_default_enum_values_on_schema\nfrom .schema_visitor import SchemaDirectiveVisitor\nfrom .types import SchemaBindable\n\n\ndef make_executable_schema(\n    type_defs: Union[str, List[str]],\n    bindables: Union[SchemaBindable, List[SchemaBindable], None] = None,\n    *,\n    directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,\n) -> GraphQLSchema:\n    if isinstance(type_defs, list):\n        type_defs = join_type_defs(type_defs)\n\n    ast_document = parse(type_defs)\n    schema = build_and_extend_schema(ast_document)\n    validate_schema(schema)\n\n    if isinstance(bindables, list):\n        for obj in bindables:\n            obj.bind_to_schema(schema)\n    elif bindables:\n        bindables.bind_to_schema(schema)\n\n    set_default_enum_values_on_schema(schema)\n\n    if directives:\n        SchemaDirectiveVisitor.visit_schema_directives(schema, directives)\n\n    assert_valid_schema(schema)\n\n    return schema\n\n\ndef join_type_defs(type_defs: List[str]) -> str:\n    return \"\\n\\n\".join(t.strip() for t in type_defs)\n\n\ndef build_and_extend_schema(ast: DocumentNode) -> GraphQLSchema:\n    schema = build_ast_schema(ast)\n    extension_ast = extract_extensions(ast)\n\n    if extension_ast.definitions:\n        schema = extend_schema(schema, extension_ast)\n\n    return schema\n\n\nEXTENSION_KINDS = [\n    \"scalar_type_extension\",\n    \"object_type_extension\",\n    \"interface_type_extension\",\n    \"union_type_extension\",\n    \"enum_type_extension\",\n    \"input_object_type_extension\",\n]\n\n\ndef extract_extensions(ast: DocumentNode) -> DocumentNode:\n    extensions = [node for node in ast.definitions if node.kind in EXTENSION_KINDS]\n    return DocumentNode(definitions=extensions)\n", "path": "ariadne/executable_schema.py"}], "after_files": [{"content": "from typing import Dict, List, Type, Union\n\nfrom graphql import (\n    DocumentNode,\n    GraphQLSchema,\n    assert_valid_schema,\n    build_ast_schema,\n    extend_schema,\n    parse,\n    validate_schema,\n)\n\nfrom .enums import set_default_enum_values_on_schema\nfrom .schema_visitor import SchemaDirectiveVisitor\nfrom .types import SchemaBindable\n\n\ndef make_executable_schema(\n    type_defs: Union[str, List[str]],\n    *bindables: Union[SchemaBindable, List[SchemaBindable]],\n    directives: Dict[str, Type[SchemaDirectiveVisitor]] = None,\n) -> GraphQLSchema:\n    if isinstance(type_defs, list):\n        type_defs = join_type_defs(type_defs)\n\n    ast_document = parse(type_defs)\n    schema = build_and_extend_schema(ast_document)\n    validate_schema(schema)\n\n    for bindable in bindables:\n        if isinstance(bindable, list):\n            for obj in bindable:\n                obj.bind_to_schema(schema)\n        else:\n            bindable.bind_to_schema(schema)\n\n    set_default_enum_values_on_schema(schema)\n\n    if directives:\n        SchemaDirectiveVisitor.visit_schema_directives(schema, directives)\n\n    assert_valid_schema(schema)\n\n    return schema\n\n\ndef join_type_defs(type_defs: List[str]) -> str:\n    return \"\\n\\n\".join(t.strip() for t in type_defs)\n\n\ndef build_and_extend_schema(ast: DocumentNode) -> GraphQLSchema:\n    schema = build_ast_schema(ast)\n    extension_ast = extract_extensions(ast)\n\n    if extension_ast.definitions:\n        schema = extend_schema(schema, extension_ast)\n\n    return schema\n\n\nEXTENSION_KINDS = [\n    \"scalar_type_extension\",\n    \"object_type_extension\",\n    \"interface_type_extension\",\n    \"union_type_extension\",\n    \"enum_type_extension\",\n    \"input_object_type_extension\",\n]\n\n\ndef extract_extensions(ast: DocumentNode) -> DocumentNode:\n    extensions = [node for node in ast.definitions if node.kind in EXTENSION_KINDS]\n    return DocumentNode(definitions=extensions)\n", "path": "ariadne/executable_schema.py"}]}