Add .clang-format files and format more files

The .clang-format files tell clang-format to ignore certain directories
(replacing code in lint_clang_format.sh which will be removed).

$ git ls-tree -r master --name-only | grep '\.\(c\|h\|cpp\|gn\|gni\|mm\|m\|py\)$' | xargs ./append-space-to-files
$ git checkout -- generator/templates third_party/khronos/{KHR,vulkan}
$ git cl format --full --python

Followed by manual reformatting of a few things in Python for
readability.

Bug: none
Change-Id: I4c9e472cc9a5cd80c07286e808f4e597cfef5428
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/24785
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index dbcec34..13bfb99 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -16,6 +16,7 @@
 import platform
 import subprocess
 
+
 def _DoClangFormat(input_api, output_api):
     if platform.system() == 'Linux' and platform.architecture()[0] == '64bit':
         clang_format_path = 'buildtools/linux64/clang-format'
@@ -32,9 +33,7 @@
         return []
 
     lint_cmd = [
-        'scripts/lint_clang_format.sh',
-        clang_format_path,
-        upstream_commit
+        'scripts/lint_clang_format.sh', clang_format_path, upstream_commit
     ]
 
     # Call the linting script and forward the output as a notification or as an error
@@ -44,15 +43,20 @@
     except subprocess.CalledProcessError as e:
         return [output_api.PresubmitError(e.output)]
 
+
 def _DoCommonChecks(input_api, output_api):
     results = []
-    results.extend(input_api.canned_checks.CheckChangedLUCIConfigs(input_api, output_api))
-    results.extend(input_api.canned_checks.CheckGNFormatted(input_api, output_api))
+    results.extend(
+        input_api.canned_checks.CheckChangedLUCIConfigs(input_api, output_api))
+    results.extend(
+        input_api.canned_checks.CheckGNFormatted(input_api, output_api))
     results.extend(_DoClangFormat(input_api, output_api))
     return results
 
+
 def CheckChangeOnUpload(input_api, output_api):
     return _DoCommonChecks(input_api, output_api)
 
+
 def CheckChangeOnCommit(input_api, output_api):
     return _DoCommonChecks(input_api, output_api)
diff --git a/generator/BUILD.gn b/generator/BUILD.gn
index 2970e22..acf4873 100644
--- a/generator/BUILD.gn
+++ b/generator/BUILD.gn
@@ -20,14 +20,15 @@
 # files but we can't just put dawn_gen_root because there are more than
 # autogenerated sources there.
 _stale_dirs = [
-    "dawn",
-    "dawn_native",
-    "dawn_wire",
-    "mock",
-    "src"
+  "dawn",
+  "dawn_native",
+  "dawn_wire",
+  "mock",
+  "src",
 ]
 
-_allowed_output_dirs_file = "${dawn_gen_root}/removed_stale_autogen_files.allowed_output_dirs"
+_allowed_output_dirs_file =
+    "${dawn_gen_root}/removed_stale_autogen_files.allowed_output_dirs"
 write_file(_allowed_output_dirs_file, dawn_allowed_gen_output_dirs)
 
 _stale_dirs_file = "${dawn_gen_root}/removed_stale_autogen_files.stale_dirs"
@@ -52,8 +53,11 @@
 
   # Have the "list of file" inputs as a dependency so that the action reruns
   # as soon as they change.
-  inputs = [_allowed_output_dirs_file, _stale_dirs_file]
+  inputs = [
+    _allowed_output_dirs_file,
+    _stale_dirs_file,
+  ]
 
   # Output a stamp file so we don't re-run this action on every build.
-  outputs = [_stamp_file]
+  outputs = [ _stamp_file ]
 }
diff --git a/generator/dawn_json_generator.py b/generator/dawn_json_generator.py
index 119ba6a..b7d9003 100644
--- a/generator/dawn_json_generator.py
+++ b/generator/dawn_json_generator.py
@@ -22,6 +22,7 @@
 # OBJECT MODEL
 ############################################################
 
+
 class Name:
     def __init__(self, name, native=False):
         self.native = native
@@ -44,7 +45,8 @@
         return ''.join(self.chunks)
 
     def camelCase(self):
-        return self.chunks[0] + ''.join([self.CamelChunk(chunk) for chunk in self.chunks[1:]])
+        return self.chunks[0] + ''.join(
+            [self.CamelChunk(chunk) for chunk in self.chunks[1:]])
 
     def CamelCase(self):
         return ''.join([self.CamelChunk(chunk) for chunk in self.chunks])
@@ -63,9 +65,11 @@
             result += chunk.lower()
         return result
 
+
 def concat_names(*names):
     return ' '.join([name.canonical_case() for name in names])
 
+
 class Type:
     def __init__(self, name, json_data, native=False):
         self.json_data = json_data
@@ -74,7 +78,10 @@
         self.category = json_data['category']
         self.javascript = self.json_data.get('javascript', True)
 
+
 EnumValue = namedtuple('EnumValue', ['name', 'value', 'valid', 'jsrepr'])
+
+
 class EnumType(Type):
     def __init__(self, name, json_data):
         Type.__init__(self, name, json_data)
@@ -87,42 +94,55 @@
             if value != lastValue + 1:
                 self.contiguousFromZero = False
             lastValue = value
-            self.values.append(EnumValue(
-                Name(m['name']),
-                value,
-                m.get('valid', True),
-                m.get('jsrepr', None)))
+            self.values.append(
+                EnumValue(Name(m['name']), value, m.get('valid', True),
+                          m.get('jsrepr', None)))
 
         # Assert that all values are unique in enums
         all_values = set()
         for value in self.values:
             if value.value in all_values:
-                raise Exception("Duplicate value {} in enum {}".format(value.value, name))
+                raise Exception("Duplicate value {} in enum {}".format(
+                    value.value, name))
             all_values.add(value.value)
 
+
 BitmaskValue = namedtuple('BitmaskValue', ['name', 'value'])
+
+
 class BitmaskType(Type):
     def __init__(self, name, json_data):
         Type.__init__(self, name, json_data)
-        self.values = [BitmaskValue(Name(m['name']), m['value']) for m in self.json_data['values']]
+        self.values = [
+            BitmaskValue(Name(m['name']), m['value'])
+            for m in self.json_data['values']
+        ]
         self.full_mask = 0
         for value in self.values:
             self.full_mask = self.full_mask | value.value
 
+
 class CallbackType(Type):
     def __init__(self, name, json_data):
         Type.__init__(self, name, json_data)
         self.arguments = []
 
+
 class NativeType(Type):
     def __init__(self, name, json_data):
         Type.__init__(self, name, json_data, native=True)
 
+
 # Methods and structures are both "records", so record members correspond to
 # method arguments or structure members.
 class RecordMember:
-    def __init__(self, name, typ, annotation, optional=False,
-                 is_return_value=False, default_value=None,
+    def __init__(self,
+                 name,
+                 typ,
+                 annotation,
+                 optional=False,
+                 is_return_value=False,
+                 default_value=None,
                  skip_serialize=False):
         self.name = name
         self.type = typ
@@ -138,13 +158,17 @@
         assert self.type.dict_name == "ObjectHandle"
         self.handle_type = handle_type
 
+
 Method = namedtuple('Method', ['name', 'return_type', 'arguments'])
+
+
 class ObjectType(Type):
     def __init__(self, name, json_data):
         Type.__init__(self, name, json_data)
         self.methods = []
         self.built_type = None
 
+
 class Record:
     def __init__(self, name):
         self.name = Name(name)
@@ -160,12 +184,15 @@
             else:
                 return False
 
-        self.may_have_dawn_object = any(may_have_dawn_object(member) for member in self.members)
+        self.may_have_dawn_object = any(
+            may_have_dawn_object(member) for member in self.members)
 
-        # set may_have_dawn_object to true if the type is chained or extensible. Chained structs
-        # may contain a Dawn object.
+        # Set may_have_dawn_object to true if the type is chained or
+        # extensible. Chained structs may contain a Dawn object.
         if isinstance(self, StructureType):
-            self.may_have_dawn_object = self.may_have_dawn_object or self.chained or self.extensible
+            self.may_have_dawn_object = (self.may_have_dawn_object
+                                         or self.chained or self.extensible)
+
 
 class StructureType(Record, Type):
     def __init__(self, name, json_data):
@@ -173,9 +200,11 @@
         Type.__init__(self, name, json_data)
         self.chained = json_data.get("chained", False)
         self.extensible = json_data.get("extensible", False)
-        # Chained structs inherit from wgpu::ChainedStruct which has nextInChain so setting
-        # both extensible and chained would result in two nextInChain members.
-        assert(not (self.extensible and self.chained))
+        # Chained structs inherit from wgpu::ChainedStruct, which has
+        # nextInChain, so setting both extensible and chained would result in
+        # two nextInChain members.
+        assert not (self.extensible and self.chained)
+
 
 class Command(Record):
     def __init__(self, name, members=None):
@@ -184,11 +213,13 @@
         self.derived_object = None
         self.derived_method = None
 
+
 def linked_record_members(json_data, types):
     members = []
     members_by_name = {}
     for m in json_data:
-        member = RecordMember(Name(m['name']), types[m['type']],
+        member = RecordMember(Name(m['name']),
+                              types[m['type']],
                               m.get('annotation', 'value'),
                               optional=m.get('optional', False),
                               is_return_value=m.get('is_return_value', False),
@@ -207,7 +238,7 @@
                     member.length = "constant"
                     member.constant_length = 1
                 else:
-                    assert(False)
+                    assert False
             elif m['length'] == 'strlen':
                 member.length = 'strlen'
             else:
@@ -215,31 +246,42 @@
 
     return members
 
+
 ############################################################
 # PARSE
 ############################################################
 
+
 def link_object(obj, types):
     def make_method(json_data):
         arguments = linked_record_members(json_data.get('args', []), types)
-        return Method(Name(json_data['name']), types[json_data.get('returns', 'void')], arguments)
+        return Method(Name(json_data['name']),
+                      types[json_data.get('returns', 'void')], arguments)
 
     obj.methods = [make_method(m) for m in obj.json_data.get('methods', [])]
     obj.methods.sort(key=lambda method: method.name.canonical_case())
 
+
 def link_structure(struct, types):
     struct.members = linked_record_members(struct.json_data['members'], types)
 
-def link_callback(callback, types):
-    callback.arguments = linked_record_members(callback.json_data['args'], types)
 
-# Sort structures so that if struct A has struct B as a member, then B is listed before A
-# This is a form of topological sort where we try to keep the order reasonably similar to the
-# original order (though th sort isn't technically stable).
-# It works by computing for each struct type what is the depth of its DAG of dependents, then
-# resorting based on that depth using Python's stable sort. This makes a toposort because if
-# A depends on B then its depth will be bigger than B's. It is also nice because all nodes
-# with the same depth are kept in the input order.
+def link_callback(callback, types):
+    callback.arguments = linked_record_members(callback.json_data['args'],
+                                               types)
+
+
+# Sort structures so that if struct A has struct B as a member, then B is
+# listed before A.
+#
+# This is a form of topological sort where we try to keep the order reasonably
+# similar to the original order (though the sort isn't technically stable).
+#
+# It works by computing for each struct type what is the depth of its DAG of
+# dependents, then resorting based on that depth using Python's stable sort.
+# This makes a toposort because if A depends on B then its depth will be bigger
+# than B's. It is also nice because all nodes with the same depth are kept in
+# the input order.
 def topo_sort_structure(structs):
     for struct in structs:
         struct.visited = False
@@ -252,7 +294,8 @@
         max_dependent_depth = 0
         for member in struct.members:
             if member.type.category == 'structure':
-                max_dependent_depth = max(max_dependent_depth, compute_depth(member.type) + 1)
+                max_dependent_depth = max(max_dependent_depth,
+                                          compute_depth(member.type) + 1)
 
         struct.subdag_depth = max_dependent_depth
         struct.visited = True
@@ -269,6 +312,7 @@
 
     return result
 
+
 def parse_json(json):
     category_to_parser = {
         'bitmask': BitmaskType,
@@ -303,22 +347,22 @@
         link_callback(callback, types)
 
     for category in by_category.keys():
-        by_category[category] = sorted(by_category[category], key=lambda typ: typ.name.canonical_case())
+        by_category[category] = sorted(
+            by_category[category], key=lambda typ: typ.name.canonical_case())
 
     by_category['structure'] = topo_sort_structure(by_category['structure'])
 
     for struct in by_category['structure']:
         struct.update_metadata()
 
-    return {
-        'types': types,
-        'by_category': by_category
-    }
+    return {'types': types, 'by_category': by_category}
+
 
 ############################################################
 # WIRE STUFF
 ############################################################
 
+
 # Create wire commands from api methods
 def compute_wire_params(api_params, wire_json):
     wire_params = api_params.copy()
@@ -327,7 +371,8 @@
     commands = []
     return_commands = []
 
-    wire_json['special items']['client_handwritten_commands'] += wire_json['special items']['client_side_commands']
+    wire_json['special items']['client_handwritten_commands'] += wire_json[
+        'special items']['client_side_commands']
 
     # Generate commands from object methods
     for api_object in wire_params['by_category']['object']:
@@ -335,21 +380,33 @@
             command_name = concat_names(api_object.name, method.name)
             command_suffix = Name(command_name).CamelCase()
 
-            # Only object return values or void are supported. Other methods must be handwritten.
-            if method.return_type.category != 'object' and method.return_type.name.canonical_case() != 'void':
-                assert(command_suffix in wire_json['special items']['client_handwritten_commands'])
+            # Only object return values or void are supported.
+            # Other methods must be handwritten.
+            is_object = method.return_type.category == 'object'
+            is_void = method.return_type.name.canonical_case() == 'void'
+            if not (is_object or is_void):
+                assert command_suffix in (
+                    wire_json['special items']['client_handwritten_commands'])
                 continue
 
-            if command_suffix in wire_json['special items']['client_side_commands']:
+            if command_suffix in (
+                    wire_json['special items']['client_side_commands']):
                 continue
 
             # Create object method commands by prepending "self"
-            members = [RecordMember(Name('self'), types[api_object.dict_name], 'value')]
+            members = [
+                RecordMember(Name('self'), types[api_object.dict_name],
+                             'value')
+            ]
             members += method.arguments
 
-            # Client->Server commands that return an object return the result object handle
+            # Client->Server commands that return an object return the
+            # result object handle
             if method.return_type.category == 'object':
-                result = RecordMember(Name('result'), types['ObjectHandle'], 'value', is_return_value=True)
+                result = RecordMember(Name('result'),
+                                      types['ObjectHandle'],
+                                      'value',
+                                      is_return_value=True)
                 result.set_handle_type(method.return_type)
                 members.append(result)
 
@@ -362,7 +419,8 @@
         commands.append(Command(name, linked_record_members(json_data, types)))
 
     for (name, json_data) in wire_json['return commands'].items():
-        return_commands.append(Command(name, linked_record_members(json_data, types)))
+        return_commands.append(
+            Command(name, linked_record_members(json_data, types)))
 
     wire_params['cmd_records'] = {
         'command': commands,
@@ -378,12 +436,16 @@
 
     return wire_params
 
+
 #############################################################
 # Generator
 #############################################################
 
+
 def as_varName(*names):
-    return names[0].camelCase() + ''.join([name.CamelCase() for name in names[1:]])
+    return names[0].camelCase() + ''.join(
+        [name.CamelCase() for name in names[1:]])
+
 
 def as_cType(name):
     if name.native:
@@ -391,27 +453,32 @@
     else:
         return 'WGPU' + name.CamelCase()
 
+
 def as_cTypeDawn(name):
     if name.native:
         return name.concatcase()
     else:
         return 'Dawn' + name.CamelCase()
 
+
 def as_cTypeEnumSpecialCase(typ):
     if typ.category == 'bitmask':
         return as_cType(typ.name) + 'Flags'
     return as_cType(typ.name)
 
+
 def as_cppType(name):
     if name.native:
         return name.concatcase()
     else:
         return name.CamelCase()
 
+
 def as_jsEnumValue(value):
     if value.jsrepr: return value.jsrepr
     return "'" + value.name.js_enum_case() + "'"
 
+
 def convert_cType_to_cppType(typ, annotation, arg, indent=0):
     if typ.category == 'native':
         return arg
@@ -422,18 +489,20 @@
             converted_members = [
                 convert_cType_to_cppType(
                     member.type, member.annotation,
-                    '{}.{}'.format(arg, as_varName(member.name)),
-                    indent + 1)
-                for member in typ.members]
+                    '{}.{}'.format(arg, as_varName(member.name)), indent + 1)
+                for member in typ.members
+            ]
 
-            converted_members = [(' ' * 4) + m for m in converted_members ]
+            converted_members = [(' ' * 4) + m for m in converted_members]
             converted_members = ',\n'.join(converted_members)
 
             return as_cppType(typ.name) + ' {\n' + converted_members + '\n}'
         else:
             return 'static_cast<{}>({})'.format(as_cppType(typ.name), arg)
     else:
-        return 'reinterpret_cast<{} {}>({})'.format(as_cppType(typ.name), annotation, arg)
+        return 'reinterpret_cast<{} {}>({})'.format(as_cppType(typ.name),
+                                                    annotation, arg)
+
 
 def decorate(name, typ, arg):
     if arg.annotation == 'value':
@@ -445,46 +514,57 @@
     elif arg.annotation == 'const*const*':
         return 'const ' + typ + '* const * ' + name
     else:
-        assert(False)
+        assert False
+
 
 def annotated(typ, arg):
     name = as_varName(arg.name)
     return decorate(name, typ, arg)
 
+
 def as_cEnum(type_name, value_name):
-    assert(not type_name.native and not value_name.native)
+    assert not type_name.native and not value_name.native
     return 'WGPU' + type_name.CamelCase() + '_' + value_name.CamelCase()
 
+
 def as_cEnumDawn(type_name, value_name):
-    assert(not type_name.native and not value_name.native)
-    return 'DAWN' + '_' + type_name.SNAKE_CASE() + '_' + value_name.SNAKE_CASE()
+    assert not type_name.native and not value_name.native
+    return ('DAWN' + '_' + type_name.SNAKE_CASE() + '_' +
+            value_name.SNAKE_CASE())
+
 
 def as_cppEnum(value_name):
-    assert(not value_name.native)
+    assert not value_name.native
     if value_name.concatcase()[0].isdigit():
         return "e" + value_name.CamelCase()
     return value_name.CamelCase()
 
+
 def as_cMethod(type_name, method_name):
-    assert(not type_name.native and not method_name.native)
+    assert not type_name.native and not method_name.native
     return 'wgpu' + type_name.CamelCase() + method_name.CamelCase()
 
+
 def as_cMethodDawn(type_name, method_name):
-    assert(not type_name.native and not method_name.native)
+    assert not type_name.native and not method_name.native
     return 'dawn' + type_name.CamelCase() + method_name.CamelCase()
 
+
 def as_MethodSuffix(type_name, method_name):
-    assert(not type_name.native and not method_name.native)
+    assert not type_name.native and not method_name.native
     return type_name.CamelCase() + method_name.CamelCase()
 
+
 def as_cProc(type_name, method_name):
-    assert(not type_name.native and not method_name.native)
+    assert not type_name.native and not method_name.native
     return 'WGPU' + 'Proc' + type_name.CamelCase() + method_name.CamelCase()
 
+
 def as_cProcDawn(type_name, method_name):
-    assert(not type_name.native and not method_name.native)
+    assert not type_name.native and not method_name.native
     return 'Dawn' + 'Proc' + type_name.CamelCase() + method_name.CamelCase()
 
+
 def as_frontendType(typ):
     if typ.category == 'object':
         return typ.name.CamelCase() + 'Base*'
@@ -495,6 +575,7 @@
     else:
         return as_cType(typ.name)
 
+
 def as_wireType(typ):
     if typ.category == 'object':
         return typ.name.CamelCase() + '*'
@@ -503,31 +584,50 @@
     else:
         return as_cppType(typ.name)
 
+
 def c_methods(types, typ):
     return typ.methods + [
         Method(Name('reference'), types['void'], []),
         Method(Name('release'), types['void'], []),
     ]
 
+
 def get_c_methods_sorted_by_name(api_params):
     unsorted = [(as_MethodSuffix(typ.name, method.name), typ, method) \
             for typ in api_params['by_category']['object'] \
             for method in c_methods(api_params['types'], typ) ]
     return [(typ, method) for (_, typ, method) in sorted(unsorted)]
 
+
 def has_callback_arguments(method):
     return any(arg.type.category == 'callback' for arg in method.arguments)
 
+
 class MultiGeneratorFromDawnJSON(Generator):
     def get_description(self):
         return 'Generates code for various target from Dawn.json.'
 
     def add_commandline_arguments(self, parser):
-        allowed_targets = ['dawn_headers', 'dawncpp_headers', 'dawncpp', 'dawn_proc', 'mock_webgpu', 'dawn_wire', "dawn_native_utils"]
+        allowed_targets = [
+            'dawn_headers', 'dawncpp_headers', 'dawncpp', 'dawn_proc',
+            'mock_webgpu', 'dawn_wire', "dawn_native_utils"
+        ]
 
-        parser.add_argument('--dawn-json', required=True, type=str, help ='The DAWN JSON definition to use.')
-        parser.add_argument('--wire-json', default=None, type=str, help='The DAWN WIRE JSON definition to use.')
-        parser.add_argument('--targets', required=True, type=str, help='Comma-separated subset of targets to output. Available targets: ' + ', '.join(allowed_targets))
+        parser.add_argument('--dawn-json',
+                            required=True,
+                            type=str,
+                            help='The DAWN JSON definition to use.')
+        parser.add_argument('--wire-json',
+                            default=None,
+                            type=str,
+                            help='The DAWN WIRE JSON definition to use.')
+        parser.add_argument(
+            '--targets',
+            required=True,
+            type=str,
+            help=
+            'Comma-separated subset of targets to output. Available targets: '
+            + ', '.join(allowed_targets))
 
     def get_file_renders(self, args):
         with open(args.dawn_json) as f:
@@ -543,9 +643,10 @@
 
         base_params = {
             'Name': lambda name: Name(name),
-
-            'as_annotated_cType': lambda arg: annotated(as_cTypeEnumSpecialCase(arg.type), arg),
-            'as_annotated_cppType': lambda arg: annotated(as_cppType(arg.type.name), arg),
+            'as_annotated_cType': \
+                lambda arg: annotated(as_cTypeEnumSpecialCase(arg.type), arg),
+            'as_annotated_cppType': \
+                lambda arg: annotated(as_cppType(arg.type.name), arg),
             'as_cEnum': as_cEnum,
             'as_cEnumDawn': as_cEnumDawn,
             'as_cppEnum': as_cppEnum,
@@ -562,78 +663,145 @@
             'as_varName': as_varName,
             'decorate': decorate,
             'c_methods': lambda typ: c_methods(api_params['types'], typ),
-            'c_methods_sorted_by_name': get_c_methods_sorted_by_name(api_params),
+            'c_methods_sorted_by_name': \
+                get_c_methods_sorted_by_name(api_params),
         }
 
         renders = []
 
         if 'dawn_headers' in targets:
-            renders.append(FileRender('webgpu.h', 'src/include/dawn/webgpu.h', [base_params, api_params]))
-            renders.append(FileRender('dawn_proc_table.h', 'src/include/dawn/dawn_proc_table.h', [base_params, api_params]))
+            renders.append(
+                FileRender('webgpu.h', 'src/include/dawn/webgpu.h',
+                           [base_params, api_params]))
+            renders.append(
+                FileRender('dawn_proc_table.h',
+                           'src/include/dawn/dawn_proc_table.h',
+                           [base_params, api_params]))
 
         if 'dawncpp_headers' in targets:
-            renders.append(FileRender('webgpu_cpp.h', 'src/include/dawn/webgpu_cpp.h', [base_params, api_params]))
+            renders.append(
+                FileRender('webgpu_cpp.h', 'src/include/dawn/webgpu_cpp.h',
+                           [base_params, api_params]))
 
         if 'dawn_proc' in targets:
-            renders.append(FileRender('dawn_proc.c', 'src/dawn/dawn_proc.c', [base_params, api_params]))
+            renders.append(
+                FileRender('dawn_proc.c', 'src/dawn/dawn_proc.c',
+                           [base_params, api_params]))
 
         if 'dawncpp' in targets:
-            renders.append(FileRender('webgpu_cpp.cpp', 'src/dawn/webgpu_cpp.cpp', [base_params, api_params]))
+            renders.append(
+                FileRender('webgpu_cpp.cpp', 'src/dawn/webgpu_cpp.cpp',
+                           [base_params, api_params]))
 
         if 'emscripten_bits' in targets:
-            renders.append(FileRender('webgpu_struct_info.json', 'src/dawn/webgpu_struct_info.json', [base_params, api_params]))
-            renders.append(FileRender('library_webgpu_enum_tables.js', 'src/dawn/library_webgpu_enum_tables.js', [base_params, api_params]))
+            renders.append(
+                FileRender('webgpu_struct_info.json',
+                           'src/dawn/webgpu_struct_info.json',
+                           [base_params, api_params]))
+            renders.append(
+                FileRender('library_webgpu_enum_tables.js',
+                           'src/dawn/library_webgpu_enum_tables.js',
+                           [base_params, api_params]))
 
         if 'mock_webgpu' in targets:
             mock_params = [
-                base_params,
-                api_params,
-                {
+                base_params, api_params, {
                     'has_callback_arguments': has_callback_arguments
                 }
             ]
-            renders.append(FileRender('mock_webgpu.h', 'src/dawn/mock_webgpu.h', mock_params))
-            renders.append(FileRender('mock_webgpu.cpp', 'src/dawn/mock_webgpu.cpp', mock_params))
+            renders.append(
+                FileRender('mock_webgpu.h', 'src/dawn/mock_webgpu.h',
+                           mock_params))
+            renders.append(
+                FileRender('mock_webgpu.cpp', 'src/dawn/mock_webgpu.cpp',
+                           mock_params))
 
         if 'dawn_native_utils' in targets:
             frontend_params = [
                 base_params,
                 api_params,
                 {
-                    'as_frontendType': lambda typ: as_frontendType(typ), # TODO as_frontendType and friends take a Type and not a Name :(
-                    'as_annotated_frontendType': lambda arg: annotated(as_frontendType(arg.type), arg)
+                    # TODO: as_frontendType and co. take a Type, not a Name :(
+                    'as_frontendType': lambda typ: as_frontendType(typ),
+                    'as_annotated_frontendType': \
+                        lambda arg: annotated(as_frontendType(arg.type), arg),
                 }
             ]
 
-            renders.append(FileRender('dawn_native/ValidationUtils.h', 'src/dawn_native/ValidationUtils_autogen.h', frontend_params))
-            renders.append(FileRender('dawn_native/ValidationUtils.cpp', 'src/dawn_native/ValidationUtils_autogen.cpp', frontend_params))
-            renders.append(FileRender('dawn_native/wgpu_structs.h', 'src/dawn_native/wgpu_structs_autogen.h', frontend_params))
-            renders.append(FileRender('dawn_native/wgpu_structs.cpp', 'src/dawn_native/wgpu_structs_autogen.cpp', frontend_params))
-            renders.append(FileRender('dawn_native/ProcTable.cpp', 'src/dawn_native/ProcTable.cpp', frontend_params))
+            renders.append(
+                FileRender('dawn_native/ValidationUtils.h',
+                           'src/dawn_native/ValidationUtils_autogen.h',
+                           frontend_params))
+            renders.append(
+                FileRender('dawn_native/ValidationUtils.cpp',
+                           'src/dawn_native/ValidationUtils_autogen.cpp',
+                           frontend_params))
+            renders.append(
+                FileRender('dawn_native/wgpu_structs.h',
+                           'src/dawn_native/wgpu_structs_autogen.h',
+                           frontend_params))
+            renders.append(
+                FileRender('dawn_native/wgpu_structs.cpp',
+                           'src/dawn_native/wgpu_structs_autogen.cpp',
+                           frontend_params))
+            renders.append(
+                FileRender('dawn_native/ProcTable.cpp',
+                           'src/dawn_native/ProcTable.cpp', frontend_params))
 
         if 'dawn_wire' in targets:
             additional_params = compute_wire_params(api_params, wire_json)
 
             wire_params = [
-                base_params,
-                api_params,
-                {
+                base_params, api_params, {
                     'as_wireType': as_wireType,
-                    'as_annotated_wireType': lambda arg: annotated(as_wireType(arg.type), arg),
-                },
-                additional_params
+                    'as_annotated_wireType': \
+                        lambda arg: annotated(as_wireType(arg.type), arg),
+                }, additional_params
             ]
-            renders.append(FileRender('dawn_wire/WireCmd.h', 'src/dawn_wire/WireCmd_autogen.h', wire_params))
-            renders.append(FileRender('dawn_wire/WireCmd.cpp', 'src/dawn_wire/WireCmd_autogen.cpp', wire_params))
-            renders.append(FileRender('dawn_wire/client/ApiObjects.h', 'src/dawn_wire/client/ApiObjects_autogen.h', wire_params))
-            renders.append(FileRender('dawn_wire/client/ApiProcs.cpp', 'src/dawn_wire/client/ApiProcs_autogen.cpp', wire_params))
-            renders.append(FileRender('dawn_wire/client/ClientBase.h', 'src/dawn_wire/client/ClientBase_autogen.h', wire_params))
-            renders.append(FileRender('dawn_wire/client/ClientHandlers.cpp', 'src/dawn_wire/client/ClientHandlers_autogen.cpp', wire_params))
-            renders.append(FileRender('dawn_wire/client/ClientPrototypes.inc', 'src/dawn_wire/client/ClientPrototypes_autogen.inc', wire_params))
-            renders.append(FileRender('dawn_wire/server/ServerBase.h', 'src/dawn_wire/server/ServerBase_autogen.h', wire_params))
-            renders.append(FileRender('dawn_wire/server/ServerDoers.cpp', 'src/dawn_wire/server/ServerDoers_autogen.cpp', wire_params))
-            renders.append(FileRender('dawn_wire/server/ServerHandlers.cpp', 'src/dawn_wire/server/ServerHandlers_autogen.cpp', wire_params))
-            renders.append(FileRender('dawn_wire/server/ServerPrototypes.inc', 'src/dawn_wire/server/ServerPrototypes_autogen.inc', wire_params))
+            renders.append(
+                FileRender('dawn_wire/WireCmd.h',
+                           'src/dawn_wire/WireCmd_autogen.h', wire_params))
+            renders.append(
+                FileRender('dawn_wire/WireCmd.cpp',
+                           'src/dawn_wire/WireCmd_autogen.cpp', wire_params))
+            renders.append(
+                FileRender('dawn_wire/client/ApiObjects.h',
+                           'src/dawn_wire/client/ApiObjects_autogen.h',
+                           wire_params))
+            renders.append(
+                FileRender('dawn_wire/client/ApiProcs.cpp',
+                           'src/dawn_wire/client/ApiProcs_autogen.cpp',
+                           wire_params))
+            renders.append(
+                FileRender('dawn_wire/client/ClientBase.h',
+                           'src/dawn_wire/client/ClientBase_autogen.h',
+                           wire_params))
+            renders.append(
+                FileRender('dawn_wire/client/ClientHandlers.cpp',
+                           'src/dawn_wire/client/ClientHandlers_autogen.cpp',
+                           wire_params))
+            renders.append(
+                FileRender(
+                    'dawn_wire/client/ClientPrototypes.inc',
+                    'src/dawn_wire/client/ClientPrototypes_autogen.inc',
+                    wire_params))
+            renders.append(
+                FileRender('dawn_wire/server/ServerBase.h',
+                           'src/dawn_wire/server/ServerBase_autogen.h',
+                           wire_params))
+            renders.append(
+                FileRender('dawn_wire/server/ServerDoers.cpp',
+                           'src/dawn_wire/server/ServerDoers_autogen.cpp',
+                           wire_params))
+            renders.append(
+                FileRender('dawn_wire/server/ServerHandlers.cpp',
+                           'src/dawn_wire/server/ServerHandlers_autogen.cpp',
+                           wire_params))
+            renders.append(
+                FileRender(
+                    'dawn_wire/server/ServerPrototypes.inc',
+                    'src/dawn_wire/server/ServerPrototypes_autogen.inc',
+                    wire_params))
 
         return renders
 
@@ -643,5 +811,6 @@
             deps += [os.path.abspath(args.wire_json)]
         return deps
 
+
 if __name__ == '__main__':
     sys.exit(run_generator(MultiGeneratorFromDawnJSON()))
diff --git a/generator/generator_lib.gni b/generator/generator_lib.gni
index 36ac72f..8b9e04c 100644
--- a/generator/generator_lib.gni
+++ b/generator/generator_lib.gni
@@ -135,9 +135,7 @@
   # outputs are what's expected and write a depfile for Ninja.
   action(_json_tarball_target) {
     script = invoker.script
-    outputs = [
-      _json_tarball,
-    ]
+    outputs = [ _json_tarball ]
     depfile = _json_tarball_depfile
     args = _generator_args
     if (defined(invoker.deps)) {
@@ -153,12 +151,8 @@
       rebase_path(_gen_dir, root_build_dir),
     ]
 
-    deps = [
-      ":${_json_tarball_target}",
-    ]
-    inputs = [
-      _json_tarball,
-    ]
+    deps = [ ":${_json_tarball_target}" ]
+    inputs = [ _json_tarball ]
 
     # The expected output list is relative to the gen_dir but action
     # target outputs are from the root dir so we need to rebase them.
diff --git a/generator/generator_lib.py b/generator/generator_lib.py
index 8deec5d..5e3734d 100644
--- a/generator/generator_lib.py
+++ b/generator/generator_lib.py
@@ -12,7 +12,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """Module to create generators that render multiple Jinja2 templates for GN.
 
 A helper module that can be used to create generator scripts (clients)
@@ -54,6 +53,7 @@
 #
 FileRender = namedtuple('FileRender', ['template', 'output', 'params_dicts'])
 
+
 # The interface that must be implemented by generators.
 class Generator:
     def get_description(self):
@@ -72,6 +72,7 @@
         """Return a list of extra input dependencies."""
         return []
 
+
 # Allow custom Jinja2 installation path through an additional python
 # path from the arguments if present. This isn't done through the regular
 # argparse because PreprocessingLoader uses jinja2 in the global scope before
@@ -92,6 +93,7 @@
 
 import jinja2
 
+
 # A custom Jinja2 template loader that removes the extra indentation
 # of the template blocks so that the output is correctly indented
 class _PreprocessingLoader(jinja2.BaseLoader):
@@ -113,18 +115,21 @@
     def preprocess(self, source):
         lines = source.split('\n')
 
-        # Compute the current indentation level of the template blocks and remove their indentation
+        # Compute the current indentation level of the template blocks and
+        # remove their indentation
         result = []
         indentation_level = 0
 
-        # Filter lines that are pure comments. line_comment_prefix is not enough because it removes
-        # the comment but doesn't completely remove the line, resulting in more verbose output.
+        # Filter lines that are pure comments. line_comment_prefix is not
+        # enough because it removes the comment but doesn't completely remove
+        # the line, resulting in more verbose output.
         lines = filter(lambda line: not line.strip().startswith('//*'), lines)
 
         # Remove indentation templates have for the Jinja control flow.
         for line in lines:
-            # The capture in the regex adds one element per block start or end so we divide by two
-            # there is also an extra line chunk corresponding to the line end, so we substract it.
+            # The capture in the regex adds one element per block start or end,
+            # so we divide by two. There is also an extra line chunk
+            # corresponding to the line end, so we subtract it.
             numends = (len(self.blockend.split(line)) - 1) // 2
             indentation_level -= numends
 
@@ -142,14 +147,19 @@
             elif line.startswith('\t'):
                 line = line[1:]
             else:
-                assert(line.strip() == '')
+                assert line.strip() == ''
         return line
 
+
 _FileOutput = namedtuple('FileOutput', ['name', 'content'])
 
+
 def _do_renders(renders, template_dir):
     loader = _PreprocessingLoader(template_dir)
-    env = jinja2.Environment(loader=loader, lstrip_blocks=True, trim_blocks=True, line_comment_prefix='//*')
+    env = jinja2.Environment(loader=loader,
+                             lstrip_blocks=True,
+                             trim_blocks=True,
+                             line_comment_prefix='//*')
 
     def do_assert(expr):
         assert expr
@@ -177,16 +187,17 @@
 
     return outputs
 
+
 # Compute the list of imported, non-system Python modules.
 # It assumes that any path outside of the root directory is system.
-def _compute_python_dependencies(root_dir = None):
+def _compute_python_dependencies(root_dir=None):
     if not root_dir:
         # Assume this script is under generator/ by default.
         root_dir = os.path.join(os.path.dirname(__file__), os.pardir)
     root_dir = os.path.abspath(root_dir)
 
     module_paths = (module.__file__ for module in sys.modules.values()
-                                    if module and hasattr(module, '__file__'))
+                    if module and hasattr(module, '__file__'))
 
     paths = set()
     for path in module_paths:
@@ -203,37 +214,85 @@
 
     return paths
 
+
 def run_generator(generator):
     parser = argparse.ArgumentParser(
-        description = generator.get_description(),
-        formatter_class = argparse.ArgumentDefaultsHelpFormatter,
+        description=generator.get_description(),
+        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
     )
 
-    generator.add_commandline_arguments(parser);
-    parser.add_argument('--template-dir', default='templates', type=str, help='Directory with template files.')
-    parser.add_argument(kJinja2Path, default=None, type=str, help='Additional python path to set before loading Jinja2')
-    parser.add_argument('--output-json-tarball', default=None, type=str, help='Name of the "JSON tarball" to create (tar is too annoying to use in python).')
-    parser.add_argument('--depfile', default=None, type=str, help='Name of the Ninja depfile to create for the JSON tarball')
-    parser.add_argument('--expected-outputs-file', default=None, type=str, help="File to compare outputs with and fail if it doesn't match")
-    parser.add_argument('--root-dir', default=None, type=str, help='Optional source root directory for Python dependency computations')
-    parser.add_argument('--allowed-output-dirs-file', default=None, type=str, help="File containing a list of allowed directories where files can be output.")
-    parser.add_argument('--print-cmake-dependencies', default=False, action="store_true", help="Prints a semi-colon separated list of dependencies to stdout and exits.")
-    parser.add_argument('--print-cmake-outputs', default=False, action="store_true", help="Prints a semi-colon separated list of outputs to stdout and exits.")
-    parser.add_argument('--output-dir', default=None, type=str, help='Directory where to output generate files.')
+    generator.add_commandline_arguments(parser)
+    parser.add_argument('--template-dir',
+                        default='templates',
+                        type=str,
+                        help='Directory with template files.')
+    parser.add_argument(
+        kJinja2Path,
+        default=None,
+        type=str,
+        help='Additional python path to set before loading Jinja2')
+    parser.add_argument(
+        '--output-json-tarball',
+        default=None,
+        type=str,
+        help=('Name of the "JSON tarball" to create (tar is too annoying '
+              'to use in python).'))
+    parser.add_argument(
+        '--depfile',
+        default=None,
+        type=str,
+        help='Name of the Ninja depfile to create for the JSON tarball')
+    parser.add_argument(
+        '--expected-outputs-file',
+        default=None,
+        type=str,
+        help="File to compare outputs with and fail if it doesn't match")
+    parser.add_argument(
+        '--root-dir',
+        default=None,
+        type=str,
+        help=('Optional source root directory for Python dependency '
+              'computations'))
+    parser.add_argument(
+        '--allowed-output-dirs-file',
+        default=None,
+        type=str,
+        help=("File containing a list of allowed directories where files "
+              "can be output."))
+    parser.add_argument(
+        '--print-cmake-dependencies',
+        default=False,
+        action="store_true",
+        help=("Prints a semi-colon separated list of dependencies to "
+              "stdout and exits."))
+    parser.add_argument(
+        '--print-cmake-outputs',
+        default=False,
+        action="store_true",
+        help=("Prints a semi-colon separated list of outputs to "
+              "stdout and exits."))
+    parser.add_argument('--output-dir',
+                        default=None,
+                        type=str,
+                        help='Directory where to output generate files.')
 
     args = parser.parse_args()
 
-    renders = generator.get_file_renders(args);
+    renders = generator.get_file_renders(args)
 
     # Output a list of all dependencies for CMake or the tarball for GN/Ninja.
     if args.depfile != None or args.print_cmake_dependencies:
         dependencies = generator.get_dependencies(args)
-        dependencies += [args.template_dir + os.path.sep + render.template for render in renders]
+        dependencies += [
+            args.template_dir + os.path.sep + render.template
+            for render in renders
+        ]
         dependencies += _compute_python_dependencies(args.root_dir)
 
         if args.depfile != None:
             with open(args.depfile, 'w') as f:
-                f.write(args.output_json_tarball + ": " + " ".join(dependencies))
+                f.write(args.output_json_tarball + ": " +
+                        " ".join(dependencies))
 
         if args.print_cmake_dependencies:
             sys.stdout.write(";".join(dependencies))
@@ -248,33 +307,42 @@
         actual = {render.output for render in renders}
 
         if actual != expected:
-            print("Wrong expected outputs, caller expected:\n    " + repr(sorted(expected)))
+            print("Wrong expected outputs, caller expected:\n    " +
+                  repr(sorted(expected)))
             print("Actual output:\n    " + repr(sorted(actual)))
             return 1
 
     # Print the list of all the outputs for cmake.
     if args.print_cmake_outputs:
-        sys.stdout.write(";".join([os.path.join(args.output_dir, render.output) for render in renders]))
+        sys.stdout.write(";".join([
+            os.path.join(args.output_dir, render.output) for render in renders
+        ]))
         return 0
 
     outputs = _do_renders(renders, args.template_dir)
 
-    # The caller wants to assert that the outputs are only in specific directories.
+    # The caller wants to assert that the outputs are only in specific
+    # directories.
     if args.allowed_output_dirs_file != None:
         with open(args.allowed_output_dirs_file) as f:
             allowed_dirs = set([line.strip() for line in f.readlines()])
 
         for directory in allowed_dirs:
             if not directory.endswith('/'):
-                print('Allowed directory entry "{}" doesn\'t end with /'.format(directory))
+                print('Allowed directory entry "{}" doesn\'t '
+                      'end with /'.format(directory))
                 return 1
 
         def check_in_subdirectory(path, directory):
-            return path.startswith(directory) and not '/' in path[len(directory):]
+            return path.startswith(
+                directory) and not '/' in path[len(directory):]
 
         for render in renders:
-            if not any(check_in_subdirectory(render.output, directory) for directory in allowed_dirs):
-                print('Output file "{}" is not in the allowed directory list below:'.format(render.output))
+            if not any(
+                    check_in_subdirectory(render.output, directory)
+                    for directory in allowed_dirs):
+                print('Output file "{}" is not in the allowed directory '
+                      'list below:'.format(render.output))
                 for directory in sorted(allowed_dirs):
                     print('    "{}"'.format(directory))
                 return 1
diff --git a/generator/opengl_loader_generator.py b/generator/opengl_loader_generator.py
index 47721e2..e080c4e 100644
--- a/generator/opengl_loader_generator.py
+++ b/generator/opengl_loader_generator.py
@@ -19,9 +19,10 @@
 
 from generator_lib import Generator, run_generator, FileRender
 
+
 class ProcName:
     def __init__(self, gl_name, proc_name=None):
-        assert(gl_name.startswith('gl'))
+        assert gl_name.startswith('gl')
         if proc_name == None:
             proc_name = gl_name[2:]
 
@@ -40,7 +41,10 @@
     def __repr__(self):
         return 'Proc("{}", "{}")'.format(self.gl_name, self.proc_name)
 
+
 ProcParam = namedtuple('ProcParam', ['name', 'type'])
+
+
 class Proc:
     def __init__(self, element):
         # Type declaration for return values and arguments all have the same
@@ -72,7 +76,9 @@
 
         self.params = []
         for param in element.findall('./param'):
-            self.params.append(ProcParam(param.find('name').text, parse_type_declaration(param)))
+            self.params.append(
+                ProcParam(
+                    param.find('name').text, parse_type_declaration(param)))
 
         self.gl_name = proto.find('name').text
         self.alias = None
@@ -83,7 +89,7 @@
         return self.gl_name
 
     def ProcName(self):
-        assert(self.gl_name.startswith('gl'))
+        assert self.gl_name.startswith('gl')
         return self.gl_name[2:]
 
     def PFNGLPROCNAME(self):
@@ -92,11 +98,14 @@
     def __repr__(self):
         return 'Proc("{}")'.format(self.gl_name)
 
+
 EnumDefine = namedtuple('EnumDefine', ['name', 'value'])
 Version = namedtuple('Version', ['major', 'minor'])
 VersionBlock = namedtuple('VersionBlock', ['version', 'procs', 'enums'])
 HeaderBlock = namedtuple('HeaderBlock', ['description', 'procs', 'enums'])
-ExtensionBlock = namedtuple('ExtensionBlock', ['extension', 'procs', 'enums', 'supported_specs'])
+ExtensionBlock = namedtuple('ExtensionBlock',
+                            ['extension', 'procs', 'enums', 'supported_specs'])
+
 
 def parse_version(version):
     return Version(*map(int, version.split('.')))
@@ -107,7 +116,7 @@
     all_procs = {}
     for command in root.findall('''commands[@namespace='GL']/command'''):
         proc = Proc(command)
-        assert(proc.gl_name not in all_procs)
+        assert proc.gl_name not in all_procs
         all_procs[proc.gl_name] = proc
 
     all_enums = {}
@@ -117,7 +126,7 @@
         if enum_name == 'GL_ACTIVE_PROGRAM_EXT':
             continue
 
-        assert(enum_name not in all_enums)
+        assert enum_name not in all_enums
         all_enums[enum_name] = EnumDefine(enum_name, enum.attrib['value'])
 
     # Get the list of all Desktop OpenGL function removed by the Core Profile.
@@ -126,13 +135,13 @@
         core_removed_procs.add(proc.attrib['name'])
 
     # Get list of enums and procs per OpenGL ES/Desktop OpenGL version
-    def parse_version_blocks(api, removed_procs = set()):
+    def parse_version_blocks(api, removed_procs=set()):
         blocks = []
         for section in root.findall('''feature[@api='{}']'''.format(api)):
             section_procs = []
             for command in section.findall('./require/command'):
                 proc_name = command.attrib['name']
-                assert(all_procs[proc_name].alias == None)
+                assert all_procs[proc_name].alias == None
                 if proc_name not in removed_procs:
                     section_procs.append(all_procs[proc_name])
 
@@ -140,7 +149,9 @@
             for enum in section.findall('./require/enum'):
                 section_enums.append(all_enums[enum.attrib['name']])
 
-            blocks.append(VersionBlock(parse_version(section.attrib['number']), section_procs, section_enums))
+            blocks.append(
+                VersionBlock(parse_version(section.attrib['number']),
+                             section_procs, section_enums))
 
         return blocks
 
@@ -148,12 +159,13 @@
     desktop_gl_blocks = parse_version_blocks('gl', core_removed_procs)
 
     def parse_extension_block(extension):
-        section = root.find('''extensions/extension[@name='{}']'''.format(extension))
+        section = root.find(
+            '''extensions/extension[@name='{}']'''.format(extension))
         supported_specs = section.attrib['supported'].split('|')
         section_procs = []
         for command in section.findall('./require/command'):
             proc_name = command.attrib['name']
-            assert(all_procs[proc_name].alias == None)
+            assert all_procs[proc_name].alias == None
             if proc_name not in removed_procs:
                 section_procs.append(all_procs[proc_name])
 
@@ -161,10 +173,11 @@
         for enum in section.findall('./require/enum'):
             section_enums.append(all_enums[enum.attrib['name']])
 
-        return ExtensionBlock(extension, section_procs, section_enums, supported_specs)
+        return ExtensionBlock(extension, section_procs, section_enums,
+                              supported_specs)
 
-    extension_desktop_gl_blocks = [];
-    extension_gles_blocks = [];
+    extension_desktop_gl_blocks = []
+    extension_gles_blocks = []
     for extension in supported_extensions:
         extension_block = parse_extension_block(extension)
         if 'gl' in extension_block.supported_specs:
@@ -176,6 +189,7 @@
     already_added_header_procs = set()
     already_added_header_enums = set()
     header_blocks = []
+
     def add_header_block(description, block):
         block_procs = []
         for proc in block.procs:
@@ -190,13 +204,18 @@
                 block_enums.append(enum)
 
         if len(block_procs) > 0 or len(block_enums) > 0:
-            header_blocks.append(HeaderBlock(description, block_procs, block_enums))
+            header_blocks.append(
+                HeaderBlock(description, block_procs, block_enums))
 
     for block in gles_blocks:
-        add_header_block('OpenGL ES {}.{}'.format(block.version.major, block.version.minor), block)
+        add_header_block(
+            'OpenGL ES {}.{}'.format(block.version.major, block.version.minor),
+            block)
 
     for block in desktop_gl_blocks:
-        add_header_block('Desktop OpenGL {}.{}'.format(block.version.major, block.version.minor), block)
+        add_header_block(
+            'Desktop OpenGL {}.{}'.format(block.version.major,
+                                          block.version.minor), block)
 
     for block in extension_desktop_gl_blocks:
         add_header_block(block.extension, block)
@@ -212,30 +231,50 @@
         'header_blocks': header_blocks,
     }
 
+
 class OpenGLLoaderGenerator(Generator):
     def get_description(self):
         return 'Generates code to load OpenGL function pointers'
 
     def add_commandline_arguments(self, parser):
-        parser.add_argument('--gl-xml', required=True, type=str, help='The Khronos gl.xml to use.')
-        parser.add_argument('--supported-extensions', required=True, type=str, help ='The JSON file that defines the OpenGL and GLES extensions to use.')
+        parser.add_argument('--gl-xml',
+                            required=True,
+                            type=str,
+                            help='The Khronos gl.xml to use.')
+        parser.add_argument(
+            '--supported-extensions',
+            required=True,
+            type=str,
+            help=
+            'The JSON file that defines the OpenGL and GLES extensions to use.'
+        )
 
     def get_file_renders(self, args):
         supported_extensions = []
         with open(args.supported_extensions) as f:
             supported_extensions_json = json.loads(f.read())
-            supported_extensions = supported_extensions_json['supported_extensions']
+            supported_extensions = supported_extensions_json[
+                'supported_extensions']
 
-        params = compute_params(etree.parse(args.gl_xml).getroot(), supported_extensions)
+        params = compute_params(
+            etree.parse(args.gl_xml).getroot(), supported_extensions)
 
         return [
-            FileRender('opengl/OpenGLFunctionsBase.cpp', 'src/dawn_native/opengl/OpenGLFunctionsBase_autogen.cpp', [params]),
-            FileRender('opengl/OpenGLFunctionsBase.h', 'src/dawn_native/opengl/OpenGLFunctionsBase_autogen.h', [params]),
-            FileRender('opengl/opengl_platform.h', 'src/dawn_native/opengl/opengl_platform_autogen.h', [params]),
+            FileRender(
+                'opengl/OpenGLFunctionsBase.cpp',
+                'src/dawn_native/opengl/OpenGLFunctionsBase_autogen.cpp',
+                [params]),
+            FileRender('opengl/OpenGLFunctionsBase.h',
+                       'src/dawn_native/opengl/OpenGLFunctionsBase_autogen.h',
+                       [params]),
+            FileRender('opengl/opengl_platform.h',
+                       'src/dawn_native/opengl/opengl_platform_autogen.h',
+                       [params]),
         ]
 
     def get_dependencies(self, args):
         return [os.path.abspath(args.gl_xml)]
 
+
 if __name__ == '__main__':
     sys.exit(run_generator(OpenGLLoaderGenerator()))
diff --git a/generator/remove_files.py b/generator/remove_files.py
index 0b8b521..6ddf463 100644
--- a/generator/remove_files.py
+++ b/generator/remove_files.py
@@ -15,11 +15,15 @@
 
 import argparse, glob, os, sys
 
+
 def check_in_subdirectory(path, directory):
     return path.startswith(directory) and not '/' in path[len(directory):]
 
+
 def check_is_allowed(path, allowed_dirs):
-    return any(check_in_subdirectory(path, directory) for directory in allowed_dirs)
+    return any(
+        check_in_subdirectory(path, directory) for directory in allowed_dirs)
+
 
 def get_all_files_in_dir(find_directory):
     result = []
@@ -27,15 +31,28 @@
         result += [os.path.join(directory, filename) for filename in files]
     return result
 
+
 def run():
     # Parse command line arguments
     parser = argparse.ArgumentParser(
-        description = "Removes stale autogenerated files from gen/ directories."
+        description="Removes stale autogenerated files from gen/ directories.")
+    parser.add_argument(
+        '--root-dir',
+        type=str,
+        help='The root directory, all other paths in files are relative to it.'
     )
-    parser.add_argument('--root-dir', type=str, help='The root directory, all other paths in files are relative to it.')
-    parser.add_argument('--allowed-output-dirs-file', type=str, help='The file containing a list of allowed directories')
-    parser.add_argument('--stale-dirs-file', type=str, help='The file containing a list of directories to check for stale files')
-    parser.add_argument('--stamp', type=str, help='A stamp written once this script completes')
+    parser.add_argument(
+        '--allowed-output-dirs-file',
+        type=str,
+        help='The file containing a list of allowed directories')
+    parser.add_argument(
+        '--stale-dirs-file',
+        type=str,
+        help=
+        'The file containing a list of directories to check for stale files')
+    parser.add_argument('--stamp',
+                        type=str,
+                        help='A stamp written once this script completes')
     args = parser.parse_args()
 
     root_dir = args.root_dir
@@ -43,11 +60,13 @@
 
     # Load the list of allowed and stale directories
     with open(args.allowed_output_dirs_file) as f:
-        allowed_dirs = set([os.path.join(root_dir, line.strip()) for line in f.readlines()])
+        allowed_dirs = set(
+            [os.path.join(root_dir, line.strip()) for line in f.readlines()])
 
     for directory in allowed_dirs:
         if not directory.endswith('/'):
-            print('Allowed directory entry "{}" doesn\'t end with /'.format(directory))
+            print('Allowed directory entry "{}" doesn\'t end with /'.format(
+                directory))
             return 1
 
     with open(args.stale_dirs_file) as f:
@@ -67,5 +86,6 @@
 
     return 0
 
+
 if __name__ == "__main__":
     sys.exit(run())
diff --git a/generator/templates/.clang-format b/generator/templates/.clang-format
new file mode 100644
index 0000000..9d15924
--- /dev/null
+++ b/generator/templates/.clang-format
@@ -0,0 +1,2 @@
+DisableFormat: true
+SortIncludes: false
diff --git a/infra/config/PRESUBMIT.py b/infra/config/PRESUBMIT.py
index 8f08f24..de9b7eb 100644
--- a/infra/config/PRESUBMIT.py
+++ b/infra/config/PRESUBMIT.py
@@ -14,8 +14,10 @@
 
 
 def CheckChangeOnUpload(input_api, output_api):
-    return input_api.canned_checks.CheckChangedLUCIConfigs(input_api, output_api)
+    return input_api.canned_checks.CheckChangedLUCIConfigs(
+        input_api, output_api)
 
 
 def CheckChangeOnCommit(input_api, output_api):
-    return input_api.canned_checks.CheckChangedLUCIConfigs(input_api, output_api)
+    return input_api.canned_checks.CheckChangedLUCIConfigs(
+        input_api, output_api)
diff --git a/scripts/perf_test_runner.py b/scripts/perf_test_runner.py
index c4cc55c..157d449 100755
--- a/scripts/perf_test_runner.py
+++ b/scripts/perf_test_runner.py
@@ -22,7 +22,8 @@
 import os
 import re
 
-base_path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))
+base_path = os.path.abspath(
+    os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))
 
 # Look for a [Rr]elease build.
 perftests_paths = glob.glob('out/*elease*')
@@ -35,6 +36,7 @@
 
 scores = []
 
+
 def mean(data):
     """Return the sample arithmetic mean of data."""
     n = len(data)
@@ -102,6 +104,7 @@
 print('Using test executable: ' + perftests_path)
 print('Test name: ' + test_name)
 
+
 def get_results(metric, extra_args=[]):
     process = subprocess.Popen(
         [perftests_path, '--gtest_filter=' + test_name] + extra_args,
@@ -139,11 +142,14 @@
 
         if (len(scores) > 1):
             sys.stdout.write(", mean: %.2f" % mean(scores))
-            sys.stdout.write(", variation: %.2f%%" % (coefficient_of_variation(scores) * 100.0))
+            sys.stdout.write(", variation: %.2f%%" %
+                             (coefficient_of_variation(scores) * 100.0))
 
         if (len(scores) > 7):
             truncation_n = len(scores) >> 3
-            sys.stdout.write(", truncated mean: %.2f" % truncated_mean(scores, truncation_n))
-            sys.stdout.write(", variation: %.2f%%" % (truncated_cov(scores, truncation_n) * 100.0))
+            sys.stdout.write(", truncated mean: %.2f" %
+                             truncated_mean(scores, truncation_n))
+            sys.stdout.write(", variation: %.2f%%" %
+                             (truncated_cov(scores, truncation_n) * 100.0))
 
         print("")
diff --git a/third_party/.clang-format b/third_party/.clang-format
new file mode 100644
index 0000000..9d15924
--- /dev/null
+++ b/third_party/.clang-format
@@ -0,0 +1,2 @@
+DisableFormat: true
+SortIncludes: false
diff --git a/third_party/khronos/BUILD.gn b/third_party/khronos/BUILD.gn
index 52ce94b..f9e6df2 100644
--- a/third_party/khronos/BUILD.gn
+++ b/third_party/khronos/BUILD.gn
@@ -41,9 +41,7 @@
 }
 
 source_set("khronos_platform") {
-  sources = [
-    "KHR/khrplatform.h",
-  ]
+  sources = [ "KHR/khrplatform.h" ]
 
   public_configs = [ ":khronos_headers_public" ]
 }