Index: PRESUBMIT.py |
diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
index 7388cf8b61307a043e8f06ccdf3e164e357f0002..24a50348ec59ae6e0e992f4d5596b4af38bec458 100755 |
--- a/PRESUBMIT.py |
+++ b/PRESUBMIT.py |
@@ -339,6 +339,31 @@ def _CheckUnwantedDependencies(input_api, output_api): |
return results |
+def _CheckJSONParseErrors(input_api, output_api): |
+ """Check that JSON files do not contain syntax errors.""" |
+ |
+ def FilterFile(affected_file): |
+ return input_api.os_path.splitext(affected_file.LocalPath())[1] == '.json' |
+ |
+ def GetJSONParseError(input_api, filename): |
+ try: |
+ contents = input_api.ReadFile(filename) |
+ input_api.json.loads(contents) |
+ except ValueError as e: |
+ return e |
+ return None |
+ |
+ results = [] |
+ for affected_file in input_api.AffectedFiles( |
+ file_filter=FilterFile, include_deletes=False): |
+ parse_error = GetJSONParseError(input_api, |
+ affected_file.AbsoluteLocalPath()) |
+ if parse_error: |
+ results.append(output_api.PresubmitError('%s could not be parsed: %s' % |
+ (affected_file.LocalPath(), parse_error))) |
+ return results |
+ |
+ |
def _RunPythonTests(input_api, output_api): |
def join(*args): |
return input_api.os_path.join(input_api.PresubmitLocalPath(), *args) |
@@ -403,6 +428,7 @@ def _CommonChecks(input_api, output_api): |
'W0232', # Class has no __init__ method |
], |
pylintrc='pylintrc')) |
+ |
# WebRTC can't use the presubmit_canned_checks.PanProjectChecks function since |
# we need to have different license checks in talk/ and webrtc/ directories. |
# Instead, hand-picked checks are included below. |
@@ -423,6 +449,7 @@ def _CommonChecks(input_api, output_api): |
results.extend(_CheckNoFRIEND_TEST(input_api, output_api)) |
results.extend(_CheckGypChanges(input_api, output_api)) |
results.extend(_CheckUnwantedDependencies(input_api, output_api)) |
+ results.extend(_CheckJSONParseErrors(input_api, output_api)) |
results.extend(_RunPythonTests(input_api, output_api)) |
return results |